Back to the Home Page.
This page lists the revision history for GeomSS.
Table of Contents
Alpha 0.8.3
Date: May 1, 2024
This update fixes a bug that could occur with extracting derivatives or normal vectors from a LoftedSurface.
* Fixed a bug that caused an exception to be thrown when calculating 2nd order or higher derivatives on surfaces with constant slope.
* Fixed a float comparison for equality error in NURBS curves.
* Added a removeApproxDuplicates() method to PointString.
* Updated to latest version of JSR275 that adds some new unit types.
Alpha 0.8.2
Date: January 1, 2024
This is a minor update that fixes compatibility with recent OS versions.
* Modified to remove the seriously out of date MRJAdapter and Bare Bones Browser Launcher libraries and replaced them with the now standard java.awt.Desktop class.
* Modified MacOS application bundle to work better on modern versions of MacOS.
* The MacOS version has a Java 11 compatible JRE bundled with the application (you do not need to have Java installed to run this version).
* Replaced some deprecated methods.
Alpha 0.8.1
Date: June 4, 2023
This is a minor update that fixes compatibility with recent OS versions.
* Updated JOGL to version 2.4.0 which fixes problems running on recent OS versions (such as MacOS Ventura).
* Updated Java3D to version 1.7.0.
* Updated unit package to add unit abbreviation for "degC".
Alpha 0.8.00
Date: January 6, 2022
This is a minor update that adds some minor new capabilities, some new demonstration scripts, and fixes a few bugs.
* Added a new demo script that will write out an airfoil in OpenVSP format.
* Added a new demo script that demonstrates how to create a single-slotted fowler flap from an existing wing airfoil section.
* Added documentation of the mapping between IGES entity types and GeomSS entity types.
* Added a new example script that shows how to properly create a random rotation/orientation.
* Updated underlying unit package to recognize additional unit abbreviations. New abbreviations include: "nd" for non-dimensional, "hr" and "hrs" for hour, and "kft" for kilo-feet.
Alpha 0.7.00
Date: October 9, 2020
This is a minor update that adds a few new features and fixes a few bugs.
- Added a new geometry reader that can read in ASCII Tecplot triangle files into a list of triangles.
- Added ability to create a parameter from a string representation of the number and its units; e.g.: a = newParameter("10 ft").
- Added an initial ability to create an unstructured grid on a planar region bounded by a string of points (still not completely working).
- Added a "normal2D()" function that returns the in-plane normal vector to an input 2D vector.
- Added a series of methods that test the PointString:
** isDegenerate() -- Collapsed to a point.
** isLine() -- All the points along a line.
** isPlanar() -- All the points lie in a single plane.
- Improved error checking in CST curves.
- Improved the robustness of the LineSegment.intersect() method.
- Modified CurveUtils.arcLengthParameterize() to be more robust.
- Fixed a bug with an underlying library (MRJAdapter) that wasn't compatible with recent versions of Java (Java 15 in particular).
- Fixed bugs in the GGP format geometry reader.
- Corrected an error that could occur if the user creates a Plane (intended to be immutable) using a mutable GeomVector object to define the normal vector.
- Fixed a bug that could cause transformed versions of geometry objects to loose track of the user data associated with the child objects.
Alpha 0.6.01
Date: November 8, 2017
This release fixes a serious bug that could make it impossible to draw some surfaces.
Alpha 0.6.00
Date: October 29, 2017
This is a minor update that fixes a couple of bugs and adds a few new features.
- Added a "glob" command that matches file patterns in a way similar to the Python glob.glob() function.
- Added normSq() and distanceSq() methods to all GeomPoint objects.
- Added a new version of the newTFISurface() command that takes an unordered list of 4 boundary curves (and assumes the 1st one to be the s=0 curve).
- Modified GeomUtil to:
- Added a method that detects corners in a a list of 2D points which represent a planar curve.
- Added methods for computing the ordered points that represent the convex hull of a collection of unordered 2D points.
- Added averagePoints() methods that average the points in an array or list of points.
- Made some surface intersections more robust.
- Modified AbstractCurve to:
- Improved the performance of the getClosest() and pointAtArcLength() methods.
- Rewrote gridToTolerance() algorithm to return fewer points in many common (but not all) situations while still meeting the general contract. In curves with a lot of knots, a coarse tolerance will now return a lot fewer gridded points than before. Also, the gridded points will now generally have better parametric spacing.
- Modified AbstractSurface.gridToTolerance() to do a better job of minimizing the number of points required to meet the requested tolerance similar to what was done for AbstractCurve.gridToTolerance().
- Fixed a bug in CurveFactory.parameterizationCheck() where the wrong tolerance was being used to test for something being approx. equal to zero.
- Modified PointArray to:
- Add a getColumn() method that returns the specified column of points from the array as a new PointString.
- Fixed an inconsistency where "thinRows()" and "thinColumns()" as well as "enrichRows()" and "enrichColumns()" were each swapped (columns and rows were confused).
- Modified Parameter class to be compatible with (not clash with) the jscience 4.3's Amount class.
- Improved some of the airfoil analysis scripts provided with the Sample Geometry.
- Modified crvTest.bsh and surfaceTst.bsh to use "assert" type tests in most cases instead of just printing to the terminal.
Alpha 0.5.03
Date: January 31, 2017
This is a minor update that fixes a couple of bugs.
- Fixed a bug in the surfaceTest.bsh script.
- Fixed a bug that could prevent triangles from being drawn.
Alpha 0.5.02
Date: October 30, 2016
This is a minor update to fix a few bugs that have cropped up and add a couple of minor features.
- Modified "plotXY()" command to accept lists of any Number type (not just Double).
- Added a "fitPlane" command that will fit a plane to a list of points in a least-squared orthogonal error sense.
- Added a set of "rangeList" commands for creating an returning lists of integers that range between input values (somewhat similar to the Python "range" command, but as a List).
- Added the ability to serialize a CircleInfo record to XML. This allows it to be saved in an XGSS file.
- Fixed a bug in Vector.toDimension() that could cause a NullPointerException to be thrown under certain circumstances.
- Fixed a bug that could cause a NullPointerException to be thrown when drawing GeomNote objects contained in GeometryList objects.
- Fixed a bug where the "list()" command could sometimes throw an exception.
- Fixed a bug that caused Plane objects retrieved from XML to loose the reference points they were saved with.
- Modified IGES reader to respect the Plane reference points when reading in planes from a file. Previously, the reference point would be ignored in favor of the "D" coefficient (which is somewhat, but not completely redundant).
Alpha 0.5.01
Date: August 27, 2016
This is a minor update to fix a few bugs that have cropped up.
- Fixed a bug that caused the fitting of surfaces to arrays with a collapsed edge to sometimes result in bad parametric spacing.
- Fixed a problem that could cause the CurveUtils. arcLengthParameterize() method to take an unreasonably long time to complete.
- Fixed a bug in CurveUtils. thinKnotsToTolerance() that caused it to remove far to many knots resulting in curves that did not meet the tolerance requirement.
- Greatly improved the performance of the commonly used 'GeometryList.containsGeomety()' method dramatically.
Alpha 0.5.00
Date: July 24, 2016
This is a fairly significant update that adds a number of new methods, commands, and a new curve type. This update also fixes a number of bugs.
- Added initial support for Class-Shape-Transform (CST) type curves including some examples of how they are used.
- Added methods for extracting the transformation matrix from the GTransform object.
- Added an enumeration of grid spacing type constants that can be used to provide the desired spacing values directly: e.g.: GridSpacing.COS.spacing(10); returns 10 values spaced between 0 and 1 inclusive using a cosine distribution.
- Added multi-processing to the STA, BUT and WAT commands when they are provided lists of objects to intersect. On multiprocessor machines, this results in a significant speedup in these commands.
- Added the OBL command. This is similar to STA, BUT & WAT, but allows the user to specify an arbitrary (oblique) cutting plane.
- Added a "getEdges()" command for returning the 4 boundaries of a Surface or PointArray.
- Added a "joinArrays()" command that joins together two adjacent arrays along a common edge.
- Modified digitize() command to optionally take an existing list of subrange points on the curve or surface (for editing).
- Added some new example scripts for working with airfoils (getAirfoilMaxThickness.bsh, getTEThicknessPoints.bsh, scaleAirfoil.bsh and setAirfoilTE.bsh).
- Updated to Apache Commons to version 3.5
- Changed the program's null philosophy. Previously, many methods silently ignored null inputs. Now nulls are generally considered an error and an exception is thrown unless otherwise stated in the documentation. This may require users to modify existing scripts.
- Made curve-plane intersections more robust.
- Made the IGES reader more robust.
- Fixed a bug that caused a null pointer exception to be thrown incorrectly in TFISurface.
- Fixed a bug where a list containing a LoftedSurface would not draw correctly.
- Fixed a bug where the wrong vector type was used internal to doing curve-surface intersections.
- Fixed a bug in the "intersect" command where the wrong Ldir type was being used.
- Fixed a bug in the example "getAirfoilParams.bsh" script that caused the twist angle to always be zero.
- Updated to make use of some of the new features in Java 1.8.
- Program now requires Java 1.8 or later.
Alpha 0.4.00
Date: October 24, 2015
This update primarily adds support for creating simple 2D X-Y type plots and fixes a few bugs.
- Added a basic ability to create 2D XY type plots using the "plotXY()" command. The returned PlotXYWindow object and it's chart can be heavily customized and then displayed.
- Added a new version of "GeomUtil.linePlaneIntersect()" that takes a tolerance on the intersection in the inputs.
- Added an "immutable()" method to NurbsCurves that will always return a BasicNurbsCurve (essentially the same behavior as "copyToReal()").
- Fixed a bug that caused GeomVector objects to loose their origin point when retrieved from an XGSS file (or any XML serialization).
- Fixed bugs in the calculation of the bounding box points for a LinearComboCurve.
- Fixed a bug in SubrangeCurve where user data was not being copied correctly.
- Picked up a new version of JOGL (2.3.2) which fixed a display problem that could sometimes happen when drawing arrays.
- Fixed a long-standing bug that caused the items under the "Windows" menu to get out of synch with the list of open windows.
Alpha 0.3.00
Date: September 13, 2015
This update adds support for a linear combination curve and fixes a number of bugs.
- Added support for a LinearComboCurve which is a weighted linear combination of a list of curves.
- Added a “digitize” command that allows the user to interactively digitize points off of a Curve or Surface.
- Added a method to PointString that returns the average of all the points in the string.
- Added a method to PointString that returns a new string of points sorted in the particular physical dimension requested.
- Fixed a bug in LoftedSurface that prevented reading it in from an XGSS file.
- Fixed a bug that could cause line-surface intersections to fail in many instances where they should work.
- Fixed bugs that could allow incorrect item types and dimensions to be inserted into geometry lists.
- Fixed bugs that could cause geometry written to BDS, STL and TRI files to be output in inconsistent dimensions.
Alpha 0.2.00
Date: September 6, 2015
This update adds support for triangles as a first-class geometry object.
- Added support for triangles as an elemental type in GeomSS. There are new Triangle classes and a TriangleList to represent a collection of triangles.
- PointArray objects can now be triangulated and converted into a TriangleList.
- Added the ability to read/write some triangle file formats including binary STL, and Cart3D ASCII TRI.
- Added support for approximating general super-ellipses with dissimilar exponents. The program could already exactly produce super-ellipses with like exponents on each term.
- Changed GeomReader objects to accept whatever the geometry units are when writing geometry to non-unit aware file formats (rather than converting the geometry to a default set of units as was done before). This allows the user much more control (and was what was originally intended).
- Updated to JOGL version 2.3.1 and Java3D version 1.6.0-pre12.
- Fixed a few obscure bugs.
- Improved the API documentation in many places.
- Rewrote the “buildWing.bsh” example script to demonstrate more features including writing an STL file.
Alpha 0.1.06
Date: November 12, 2014
This update is primarily a bug fix release.
- Corrected an error in the WAT, BUT and STA commands where they would sometimes return lists of lists of intersections rather than just lists of intersections (per their documentation).
- Fixed a series of bugs where the GUI could hang under certain circumstances.
- Changed the default DEGREE_ANGLE symbol to "deg" and added "lbm" and "lbs" as aliases for POUND.
- Updated to the latest versions of JOGL (2.2) and Java3D (1.6.0 pre 11).
- Modified to use AppBuilder to create the MacOS X executable and fixed an error in the Solaris executable (error in the build script that copied in the wrong native code for JOGL).
- Added a version of the setDrawTolerance() command that automatically sets a tolerance that is appropriate for a specified geometry element that is going to be drawn.
- Added a new version of the newTranslation() command that uses the elements of a GeomPoint as offsets for the translation.
Alpha 0.1.05
Date: April 6, 2014
This update is primarily a bug fix release.
- Added new variations on "newParameter" that take strings (CharSequence actually) for the value and the units.
- Modified the line-surface intersector to be more robust and to not return duplicate points.
- GridSpacing.tanh() will now throw an exception if an illegal combination of number of grid points combined with end spacings are input.
- Corrected an error that caused the repeated drawing of objects to fail under certain circumstances.
- Fixed a problem where images were not getting captured properly for saving or printing under certain circumstances.
- Fixed the centerAndZoom() feature to work properly when only points are drawn.
- Modified to write out geometry files in the proper format no matter the user's locale. Most of the supported file formats are required to be in ASCII with U.S. number formatting rules.
Alpha 0.1.04
Date: March 16, 2014
This update is primarily a bug fix release.
- Added initial support for reading/writing NASA GridTool restart files (http://geolab.larc.nasa.gov/GridTool/). I had to reverse engineer the format, so there are likely major issues at this time.
- Added an additional newFillet() method that takes two line curves, a radius, and a tolerance.
- Added isApproxEqual() methods that determine if a GeomPoint or GeomVector have coordinate values that are approximately equivalent to either machine epsilon or the specified tolerance.
- Updated to the latest version of BeanShell2.
- Made LoftedSurface a proper List object since it is really a list of defining section curves and corrected errors with how indexing was handled if the user inputs a negative index.
- Added a class to geomss.ui that allows you to easily dump a LogContext to the BeanShell terminal.
- Added a unit test suite for Curves: CurveTestSuite.
- Added BeanShell commands, "runTestSuite()", "runRegressions()", and "runBenchmarks()" that execute the suite of unit tests that are being built up for the GeomSS library (currently, the tests are limited to curves).
- Completely rewrote GeomUtil.threePointCircle() to use a new algorithm that is significantly more robust. The previous algorithm would fail for 2D points specified in a clockwise direction as well as for nD curves where the 2nd point is greater than the circle radius away from the 1st or last points.
- Replaced some of the GeomSS BeanShell commands with native Java commands in order to use variable length argument lists. This is essentially invisible to the user other than the additional variable length argument list capability on some built-in commands.
- Corrected a unit error that could occur under certain circumstances in GeomUtil. lineLineIntersect().
- Fixed a bug that caused objects redrawn with different draw tolerances to have their original copies incorrectly erased.
- Fixed a bug that caused surfaces to be drawn incorrectly when some of the surface properties were changed such as alpha, or shininess.
- Corrected a bug in getCurvature() that would return a negative value for curvature for certain 2D curves.
- Corrected problems with some classes missing "equals()" and "hashCode()" methods.
- Corrected a typo that prevented list() from working on Subrange geometry.
- Fixed a bug in "CurveFactory.createBlend()" that caused an exception to be thrown incorrectly if unitFlag is false and tanlen of <= 0 is input.
Alpha 0.1.03
Date: February 22, 2014
This update is primarily a bug fix release.
- Improved the robustness of Curve.getClosestPoint(), Curve-Surface intersection, Plane-Surface and Surface-Surface intersection.
- Greatly improved the performance of the closest point and Surface-Surface interjector.
- Rewrote Point and Vector classes to improve performance. Rewrote MutablePoint and MutableVector to eliminate large amounts of duplicated code.
- Modified Curve.guessGrid2TolPoints() to handle the case of a 1D curve.
- Replaced the JScience matrix solver with Apache Commons Math matrix solver. The JScience solver was using to much memory and was slower.
- Improved internationalization support by using MessageFormat for compound messages rather than a custom solution.
- Corrected errors with intersecting degenerate curves with other curves, planes or surfaces.
- Corrected errors in many of the equals() and hashCode() methods.
Alpha 0.1.02
Date: February 11, 2014
This update adds a number of new capabilities including: screen picking, and text notes/labels.
- Added a "pick" command where the user can select geometry from whatever is currently drawn by control-clicking or control-dragging a selection rectangle. The user is then presented with a list of geometry that was selected and given the opportunity to filter out unwanted items.
- Added an "orientArrays" command that allows the user to interactively orient the points in a list of arrays.
- Added an "orientSurfaces" command that allows the user to interactively orient the parameterization on a list of surfaces.
- Added support for text notes/labels that are displayed on the screen at a fixed size in font points and are always oriented face-on to the user but are associated with a point in the model. These can be created with the "newNote" command.
- Added support for notes/labels that are represented by a fixed size and orientation in the model space. These notes can be created with the "newModelNote" command.
- Added new "drawAxes" variants that will draw axes on Curve, PointArray and PointString objects.
- Added a new "drawLabels" command that draws labels next to any objects in a list that have names or variables associated with them.
- Modified the "drawTriad", and "drawAxes" commands to also draw labels next to the axes.
- Greatly improved the performance of Curve.getArcLength(), Surface.getArea(), Surface.getVolume() and Curve.getEnclosedArea() for most cases.
- Fixed a problem were the Open dialog could fail to open on some Linux systems.
- Corrected a bug in "toDimension()" for transformed objects. Transformed objects may only be 3D.
Alpha 0.1.01
Date: January 12, 2014
This update is primarily a bug fix release.
- Fixed a bug that could cause some objects not to render properly.
- Fixed some roundoff errors that made IGES import/exports unreliable in some instances.
- Fixed a bug that could cause curve on surface entities to not write out to IGES correctly.
- Changed the tolerance used to convert parametric curves (that define SubrangeCurves) to NURBS curves when writing to an IGES file.
Alpha 0.1.0
Date: January 2, 2014
This update includes a fairly major refactoring of the core GeomSS geometry library and a small increase in performance. WARNING: Some public interfaces have been changed. Changes include:
- Made the following core geometry elements immutable: Point, Vector, ControlPoint, ControlPointNet, KnotVector, BasicNurbsCurve, BasicNurbsSurface, LineSeg and Plane. This eliminates the need for defensive copying of these objects and allows for some optimizations. Many methods have been modified to return these immutable objects rather than more generic abstract versions in an attempt to generally prefer immutability.
- Added some new mutable versions of some now immutable core geometry elements: MutablePoint and MutableVector.
- Added ability to write IGES Type 102 Composite Curve, Type 142 Curve on Surface and Type 144 Trimmed Surface entities.
- Updated to the latest version of Java3D (1.6.0-pre8) and JOGL (2.1.2).
- Changed Point.valueOf(GeomVector) and MutablePoint.valueOf(GoemVector) to stick with what the documentation says (and always has). Only the components of the vector are now turned into a point, not the end-point of the vector (origin + vector components). This change in behavior may require changes in user's code.
- Corrected a large number of bugs and issues with inconsistent behavior.
Alpha 0.0.20
Date: November 27, 2013
This update is primarily a bug fix release. Changes include:
- Added "getLimitPoint" method to all GeomElement objects. This method finds the accurate limiting point in the specified coordinate direction.
- Added a "newRotation" command that takes three Euler angles as doubles in degrees.
- Added a "grid" command for a curve that takes a grid rule and a number of equally spaced points.
- Added a "newUnitVector" command that takes 3 parameter objects.
- Improved the robustness of Plane-Surface and Surface-Surface intersections. Can now handle intersections that pass through a collapsed surface edge. Surface-Surface intersections still have a ways to go.
- Improved performance of "isDegenerate()" method for surfaces.
- Fixed a bug in the BSH command "intersect" for intersecting a line segment with a curve.
- Fixed a bug that prevented the VECCGeomReader from reading GEO files created by HEAT-TK.
- Corrected "copyToReal()" to correctly remove subranges and transformations on the control points for the curve or surface.
- Corrected errors with the calculation of curve enclosed areas.
Alpha 0.0.19
Date: July 14, 2013
This update adds a new native file format for GeomSS and fixes another raft of bugs. Changes include:
- Added a new "native" XML based file format for GeomSS, XGSS, that can fully save and restore all geometry elements as well as certain other objects.
- Added "save" and "open" BeanShell scripts that save and read back in all the geometry and non-geometry variables found in the BeanShell console global workspace.
- Modified File menu so that "Save..." and "Open..." save and restore the console workspace and a new item "Import..." is used to read in other geometry files (the previous function of "Open...").
- All geometry objects can now be easily serialized to XML (as was always intended, just never completely implemented until now).
- Added the ability to calculate the signed area of the region enclosed or subtended by a planar curve or list of co-planar curves.
- Added a constructor for a circle where the xhat and yhat directions are specified.
- Improved the robustness of Plane-Surface and Surface-Surface intersections, but more work is required (these intersectors are not hard to break).
- Added new STA, BUT, and WAT commands that make planar station (constant X), buttock line (constant Y), and water line (constant Z) cuts through curves or surfaces.
- Further improved the IGES reader to better read Curve-On-Surface (Type 142) entities as well as better handling of writing geometry that is other than 3D (it is converted to 3D by dropping additional dimensions or padding with zero if less than 3D).
- Corrected a bug that prevented "unset()" from working in some instances.
- Corrected a bug that would cause the 3D view to blank when the mouse button was released after a rotation on the Windows platform.
- Corrected a number of potential bugs with the bundled BeanShell command files. Local variables must be explicitly declared or they could overwrite a global variable with the same name.
- Picked up the new Open Source Java3D 1.6.0 pre 7 (https://github.com/hharrison) and bundled Java3D with the application (a separation installation of Java3D is no longer required!).
Alpha 0.0.18
Date: April 21, 2013
This update adds new surface types and a significant improvement to the IGES reader. Changes include:
- Added a new TFISurface type that represents a bilinearly blended trans-finite interpolated from boundary curves surface or Coon's Patch.
- Added a new SubrangeSurface type that represents a surface that is mapped onto another surface. This can be used to form trimmed surfaces from boundary curves on another surface.
- Added a method to CurveUtils that creates a NurbsCurve that is approximately the same as the input NurbsCurve but with an arc-length parametric spacing.
- Added the ability to merge another knot vector with the existing knot vector in a NURBS surface.
- Added a method to CurveFactory that creates a NURBS representation of a 1st quadrant super-elliptical arc with the same exponent on both axes.
- Major improvements to the IGES reader including:
- Added reading in of IGES Type 112 Parametric Spline curves (converted to NURBS curves).
- Modified to convert Type 102 Composite Curve entities into a single NurbsCurve element with the original segments stored in the curve's user data as "IGES_102_CCSegs".
- When reading a file, any IGES parameters are now stored in the "user data" of each returned geometry element.
- Added ability to read Type 106, Form 3 and 13 (3D points with associated vectors returned in a list: GeomList<geomvector>).</geomvector>
- Added ability to write a Type 106, Form 13 from a list of GeomVector objects (GeomList<geomvector>)</geomvector>
- Added ability to read a Type 118 Ruled Surface (both forms) and return it as a LoftedSurface
- Added ability to read a Type 120 Surface of Revolution returning it as a NurbsSurface
- Added ability to read a Type 142 Curve on Surface returning it as either a single SubrangeCurve or a list of SubrangeCurves (if the IGES curve entity is a Composite Curve).
- Added ability to read a Type 144 Trimmed Surface. This reader attempts to convert such surfaces into a SubrangeSurface if possible (it is not always possible), otherwise, it is returned as the underlying surface with separate SubrangeCurves for the boundaries.
- Corrected the IGESGrain user data property to be a Parameter<length> object rather than a double without units.</length>
- Fixed numerous bugs.
Alpha 0.0.17
Date: March 9, 2013
This update adds significant new geometry intersection capabilities to the GeomSS geometry kernel. Changes include:
- Added the ability to find Surface-Surface intersection curves.
- Added the ability to find Surface-Infinite Plane intersections returning a list of intersection curves.
- Added the ability to find Curve-Curve intersection points.
- Added the ability to find Curve-Surface intersection points.
- Added "isPlanar" and "isDegenerate" methods to all surfaces.
- Made the geomss.geom.Vector object mutable just like the geomss.geom.Point object.
- Added a method to GeomUtil that tests if a plane intersects an axis aligned bounding box.
- Added a method to GeomUtil that tests for an intersection between a line and a quadrilateral panel or facet.
- Added a method to GeomUtil for intersecting an infinite plane with a quadrilateral panel.
- Added a method to GeomUtil for intersecting a line-segment with a triangle.
- Added a method to GeomUtil that finds the intersection between two planes.
- Added the ability to create a transform that rotates from one vector direction directly to another.
- Vastly improved the performance of SubrangeCurve.getBoundsMin() and SubrangeCurve.getBoundsMax().
- Fixed numerous bugs.
Alpha 0.0.16
Date: October 7, 2012
This update adds some minor new features but is primarily a bug fix release. Changes include:
- Fixed a bug with connecting a list of curves that contain control point weights other than 1.0.
- Fixed a bug with calculating the tangency point on a curve from another point.
- Corrected a round-off error that could occur when creating a revolved surface.
- Modified SurfaceFactory.fitPoints() to work properly with an input array that has a collapsed edge.
- Added GeomSS commands to easily create an arbitrary rotation (with axis-angle, or Euler angles, or Quaternions).
- Added a "geomss.ui.Colors" class that contains a larger selection of pre-defined color constants than what is found in java.awt.Colors.
- Added a "drawMultiColored" GeomSS command that will draw a list of geometry elements with each element drawn a different color.
- Added a "getTotalTransformation()" method that returns the total transformation that results from a chain of GeomTransform objects nested one inside the other.
- Added the ability to find the closest point between a surface and a plane.
- Added a method that will return the limit point, in the given coordinate direction, on a surface.
- Added an "isValid" method that determines if a particular geometry element is numerically valid and doesn't contain NaN or Inf values.
- Modified to no longer automatically draw a geometry after loading it by choosing "Open..." from the file menu.
Alpha 0.0.15
Date: April 13, 2012
This update primarily fixes a few bugs.
- Added a GeomSS command that will convert a transform about the origin to a transform about the specified point.
- Added SurfaceFactory.createSkinnedSurface() that will fit a surface through a series of defining section curves.
- Corrected a bug that caused an exception to be thrown when drawing lists containing empty lists.
- Corrected a round-off error that could occur under certain circumstances in the "splitAt" method.
- Improved performance and reduced memory footprint of the IGES reader.
- Corrected an error that could occur under certain circumstances when converting a LoftedSurface to a NurbsSurface with LoftedSurface.toNurbs().
Alpha 0.0.14
Date: January 29, 2012
This update primarily adds more Curve functionality and fixes a few bugs.
- Added methods for determining if a curve is degenerate, is a straight line, is planar or is a circular arc.
- Added the ability to generate a circular fillet curve between two planar line segments.
- Added the ability to calculate the surface area of a PointArray object (made up of triangular panels between points in the array).
- Added a dedicated LineSegment Curve type that represents a straight line segment between two points. This is often more efficient to evaluate than the NURBS equivalent. Replaced the "newLine" BeanShell command with "newLingSeg" that returns a LineSegment object rather than a NurbsCurve. Added support for LineSegment objects in the IGES reader/writer.
- Added a "toNurbs" method to all Curve and Surface objects that converts whatever their curve or surface type is to an equivalent NURBS curve or surface to within the specified tolerance (often an exact conversion is possible).
- NurbsCurve now has a method that will merge an input knot vector with the curve's own knot vector and return a new NurbsCurve with the merged knot vector.
- Fixed a bug that prevented reading in IGES entity 128 (Rational B-Spline Surfaces) and made the reading of IGES global sections more robust.
- Fixed a bug with the calculation of the S-derivatives in a LoftedSurface. This resulted in incorrect surface normals, surface areas, and enclosed volumes.
- Made minor performance improvements to Curve and Surface implementations.
Alpha 0.0.13
Date: November 19, 2011
This is primarily a bug fix update.
- Fixed a bug that prevented the File/Open..., File/Source/Run from Script..., and File/Change Working Directory... commands from working on the MS Windows platform.
- Made reading of IGES files more robust to non-standard formats.
- Added support for reading IGES Entity 102 (Composite Curves).
- Corrected an error in calculating a circular arc from three points with dimensions > 2.
- Upgraded to BeanShell2 Version 2.2b0 (SVN Revision 100). See BeanShell2 for more information: http://code.google.com/p/beanshell2/
Alpha 0.0.12
Date: November 6, 2011
This is primarily an update to Curve functionality.
- Added ability to intersect an infinite line or a line segment and an arbitrary curve returning all the intersection points.
- Added method for finding the intersection between an infinite line (ray) and a plane.
- Added "getClosest()" point between a curve and a plane.
- Added "getLimitPoint()" which returns the most extreme point (minimum or maximum) in the specified coordinate direction on a curve.
- Added the ability to erase specific items that have been drawn in the 3D view (rather than just erasing everything).
- Added ability to change the line widths used when rendering lines.
- Added BeanShell script that draws a representation of the parameter axes for a surface.
- Added a BeanShell method that draws a semi-transparent bounding box around any geometry element.
- Added "toDimension()" method to all GeomElement objects.
- Corrected an error with saving geometry files from the GUI.
- Fixed numerous smaller bugs.
Alpha 0.0.11
Date: August 20, 2011
This is primarily an update to Curve functionality.
- Added the ability to extract a point on a curve a a specified arc-length.
- Added the ability to enrich a PointString or PointArray. This means an additional point is added in between each of the existing points.
- Added a "gridToTolerance()" method to Surface objects that will select points on the surface that result in straight line segments between the points that are within a specified tolerance of the original surface. Also added a "grid2Tol()" BeanShell method that calls through to this new method.
- Added the ability to calculate the variation of curvature (rate of change of curvature or VOC) on a curve.
- Added the ability to create a circular arc from two end points and a tangent vector at the 1st end point.
- Added the ability to fit a curve to a set of points and tangent vectors at each point.
- Added the ability to create a cubic curve that has the specified end-points and tangent vectors at the end points.
- Added the ability to create a curve that blends together or spans the gap between, two existing curve ends, matching the end points and tangent vectors on each curve.
- Added the ability to create a fillet curve between two other curves which can be a circular arc, conic section, or cubic spline.
- Added ability to change the dimension of a GeomPlane object.
- Exposed a tolerance input on many Curve and Surface calculations that return only approximate results. The tolerance was previously hard-coded at 1e-9, but now it can be selected by the user depending on the problem being solved.
- Reversed the surface normal direction for rendered arrays. This makes the rendered array orientation consistent with how surfaces are rendered.
- CurveUtils.connectCurves() can now handle curves of different degrees and dimensions.
- Corrected a spelling error in the Curve interface: "getPrincipleNormal" was changed to "getPrincipalNormal".
- Improved robustness of curve arc-length calculations.
- Corrected problems with the lighting of mirrored surfaces and arrays.
- Improved support for inconsistent dimensions in Curve.intersect().
Alpha 0.0.10
Date: July 10, 2011
This update improves curve and surface functionality and fixes a number of bugs. Changes in this update include:
- Added the ability to approximate a string or array of noisy data with a NURBS curve or surface in a least-squares sense. Added "approxPoints" BeanShell command to support this feature.
- Added a "gridToTolerance" method to Curve objects (and a BeanShell "grid2Tol" method) that will select points on the curve that result in straight line segments between the points where the mid-points are within a specified tolerance of the original curve.
- Added methods to get the closest points between curves and surfaces.
- Added a "boundsOverlap" method to GeomUtil that indicates if the bounding boxes of two geometry elements overlap or not.
- Modified rendering of surfaces and point arrays to allow proper lighting the "back sides" of the surface.
- Improved the rendering of surfaces to eliminate seams in closed surfaces among other issues with lighting.
- Improved the calculation of surface normals in the presence of surfaces with collapsed edges.
- Modified licensing terms to be fully LGPL (the only GPL code library used has been replaced).
Alpha 0.0.9
Date: May 14, 2011
This update adds some new user interface features and improves the performance and accuracy of key operations.
- Added the ability to source a script from the File menu.
- Added the ability to set the various color and shininess attributes of surfaces and point-arrays.
- Added the ability to set the transparency of surfaces and point-arrays.
- Fixed an error in the calculation of getBoundsMin() and getBoundsMax() that occurred if the list contained elements with different physical dimensions.
- Performance improvements and bug fixes in the calculation of derivatives along a NURBS curve and on a NURBS surface.
Alpha 0.0.8
Date: April 2, 2011
This update fixes some user interface issues only.
- Corrected a long-standing error with zooming which caused the geometry to not be displayed in some circumstances. The zoom method has been changed from moving the camera closer or farther away from the model to leaving the camera fixed and scaling the model up or down in the virtual world with a uniform scaling factor.
- Added the ability to display the geometry with a perspective transformation (default) or parallel (isometric) projection transformation.
- Fixed a bug that prevented opening of files when all windows were closed on MacOS X.
Alpha 0.0.7
Date: September 30, 2010
This update primarily improves NURBS curve and surface support and fixes bugs.
* Added the ability to reverse the parametric direction of a curve and to reverse either of the parametric directions of a surface.
- Added the ability to transpose the parametric directions of a surface.
- Added the ability to elevate the degree of a NURBS curve or surface.
- Added the ability to split a curve into two curves at an arbitrary parametric position.
- Added the ability to split a surface into two surfaces at an arbitrary S or T parametric position.
- Added the ability to thin out every other point in a string or every other column or row in an array of points.
- Made the closest point algorithms for curves and surfaces more robust.
- Modified "decomposeToBezier" methods to return actual curve and surface representations of the segments/patches (rather than lists of control points only).
- Fixed a bug that caused some geometry readers/writers to not close their output streams.
- Corrected errors with NurbsSurface.getS0Curve(), getS1Curve(), getT0Curve(), and getT1Curve().
Alpha 0.0.6
Date: September 8, 2010
This update primarily adds the ability to read/write Initial Graphics Exchange Specification (IGES) files (to a limited extent), run the program form a command line in batch mode, and numerous bug fixes and small enhancements.
- Added the ability to read the following entities from an IGES file: 100 (circular arc), 104 (conic arc), 106-1 (list of 2D points), 106-2 (list of 3D points), 106-11 (linear string of 2D points), 106-12 (linear string of 3D points), 106-63 (planar segmented curve), 108-0 (unbounded plane), 110 (line), 116 (point), 124 (transformation), 126 (NURBS curve), 128 (NURBS surface), and 402-15 (ordered associativity/group).
- Added the ability to write some GeomSS geometry types to an IGES file including: PointList (106-12), GeomPlane (108-0), GeomPoint (116), NurbsCurve (126) and NurbsSurface (128) and GeomList (402-15). Transformations are not yet supported explicitly in writing the exchange file, but currently the geometry is transformed before being written out.
- Redesigned the interfaces and methods for reading/writing geometry files to be more general.
- Added new command options for creating points, and the various geometry lists.
- Added a method that will return the length of a PointString where "length" is defined as the sum of the distances between each consecutive point in the string.
- Modified CurveFactory as follows:
- Added a method for creating a degenerate point curve. This is a curve that is defined only at a single point (it has zero length).
- Added a method for creating an elliptical arc segment.
- Added a method for creating a parabolic arc segment.
- Reversed the parametric direction of all circular/elliptical arcs so that they are counterclockwise when viewed looking down the normal vector (consistent with the right hand rule). This change will break existing scripts that use circular or elliptical arcs created using CurveFactory.
- Updated to BeanShell2 Revision 39 which fixes a number of bugs.
- Added the ability to run GeomSS from the command line in a "batch" mode that runs the specified script without bringing up the interactive GUI.
Alpha 0.0.5
Date: August 14, 2010
This update primarily fixes bugs and adds a few new methods for working with NURBS curves and surfaces. Changes include the following:
- Added methods for inserting one or many new knots into the knot vector(s) of existing curves (surfaces).
- Added methods for attempting to remove knots from a curve or surface maintaining the curve or surface shape to within a certain tolerance.
- Added methods for easily extracting the S & T curves that correspond to the columns & rows of the surface's control point network.
- Added methods that decompose a NurbsCurve (or NurbsSurface) into Bézier curve segments (or surface patches). GeomSS doesn't support dedicated Bézier curve or surface objects, so these methods return lists of lists of control points or control point networks.
- Added variants of the draw() command that will draw control points and any List containing geometry objects (or containing other Lists containing geometry, etc).
- Added a command for creating a 1-degree straight line NurbsCurve between any two points (in any dimension).
- KnotVectors are now immutable.
- Corrected an error in "copyToReal()" that prevented it from working with geometry lists and LoftedSurfaces.
- Corrected an error in GeomVector's calculation of getBoundsMin() and getBoundsMax().
- Fixed a bug with the LoftedSurface, BasicNurbsCurve, and BasicNurbsSurface copy() methods.
- Corrected an error that occurred when a curve is created with points of different units.
- Improved the defensiveness of some objects (copies are made of input objects and copies of internal objects are output).
- Fixed some misc. bugs that cropped up in testing.
Alpha 0.0.4
Date: July 18, 2010
This update primarily improves support for finding closest and farthest points on a curve or surface to/from a target point.
- Added the ability to find the closest and farthest point on a surface to a specified point or array (list of lists) of points.
- Added methods for finding the closest/farthest point on a curve for each point in a list of points.
- Added methods for finding closest and farthest points on a curve or surface that are near the specified parametric position (allowing the user to identify the particular local minima to be returned).
- Corrected errors in the calculation of curve arc length, surface area and surface enclosed volume that greatly increased the accuracy of these methods.
- Improved type safety of the various geometry lists (so that you can't add a PointArray to a PointString for instance).
Alpha 0.0.3
Date: July 5, 2010
This update primarily adds additional support for NURBS surfaces. Changes include:
- Added a "newLoftedSurface" command.
- Added support for creating NURBS surfaces of revolution, spheres and toruses.
- Added methods to return the boundary curves of a surface in the native format of that surface (such as a NURBS curve from a NURBS surface).
- Added the ability to extract a grid of subrange points from a surface.
- Removed tolerance from calculation of arc-length, surface area and surface enclosed volume.
- Curve & surface derivatives are now returned as GeomVector objects rather than GeomPoint objects.
- Improved getClosestPoint and getFarthestPoint algorithms for curves.
- Added ability to draw ControlPointNet objects with the draw() command.
- Fixed a bug with changing the working directory on the Windows platform.
- Corrected a bug with newUnitVector(x,y) that prevented it from working.
- Fixed a bug with the Point.set() methods that caused unit errors.
- Improved BeanShell script documentation for standard set of GeomSS commands.
Alpha 0.0.2
Date: June 27, 2010
Added much more support for NURBS surfaces and fixed a few bugs. Changes include:
- Added support for Lofted Surfaces (surfaces made from a list of defining curves).
- Added calculation of surface normal vector, tangent plane, mean curvature, Gaussian curvature, twist vector, surface area and enclosed volume.
- Greatly improved unit support for parametric objects (curves & surfaces).
- Corrected an error that caused an invalid error message to be displayed when Java3D 1.5+ could not be found.
- Newly drawn objects now honor the previously set mirroring and render type settings. CenterAndZoom now honors the mirroring setting.
- Fixed a bug with the calculation of derivatives on a SubrangeCurve.
- Corrected an error in ControlPointNet.to() method.
Alpha 0.0.1
Date: June 20, 2010
This is an initial public prototype version of GeomSS. It is intended for experimenting with the geometry and parameter libraries and for getting some very early feedback on the direction that the project is going. This release is not intended for "production" use.