Revamped the style computation for display lists to handle the
cascade of overrides correctly through the seven layers of possible
settings. Retired getItem*Style() and applySubpartStyle() member
functions. Added rose_dpystyle_get_*() functions in their place.
Changes in release 20.2 (2024-07-10)
Version 20 Service Pack One release.
Added mass density (mass/volume) and area density (mass/area)
measure types, units, and conversions. Added kg per cubic meter,
gram per cubic centimeter, ounce and pound per cubic inch, and pound
per cubic foot. Area density units are the same except for square
instead of cubic length.
Now using the official rad/sr short names for radian and steradian.
Added RoseUnit definitions and conversions for mass units, mg, gram,
kg, tonne (metric ton), oz, pound, ton, and long ton.
Added kilonewton to RoseUnit force definitions.
Added single core unit and RoseMeasureType definitions for all
remaining SI quantities: ampere/current, becquerel/radioactivity,
candela/luminous intensity, coulomb/charge farad/capacitance
gray/absorbed dose, henry/inductance, joule/energy, lumen/luminous
flux, lux/illuminance, mole/amount of substance, ohm/resistance,
siemens/conductance, sievert/equivalent dose, tesla/magnetic flux
density, volt/voltage, weber/magnetic flux,
Add style for curve width on mesh trim curves, and general curves.
Added curve_width property in RoseDypStyle.
Added width property on RoseCurCurve
Added EdgeWidth propert in RoseMesh
Check for null scale value passed to rose_vec_scale()
Changes in release 20.1 (2023-08-10)
Internal mesh improvements for handling large numbers of faces.
Changes in release 20.0 (2023-03-10)
Version 20 release.
Add get/setOrigin() to mesh with values for body and computed,
extend the find functions to look for an origin or an effective mesh
which prioritizes computed, body, then other.
Add hooks and logic to start precursor jobs and meshes when a given
mesh job is started.
Added rose_color functions for converting between RGB and HSV
Copy origin in rose_xform_normalize() when not normalizing in place.
Additional input checks on xform and vec functions.
No more public members on RoseDisplayList.
Changes in release 19.2 (2022-02-23)
Fixed crash when unable to compute normal on a very small face.
Added checks in faceting code to fix crash on repeated points
(this occurrs in IFC poly loop instance.)
Changes in release 19.1 (2022-02-01)
Version 19 Service Pack One release.
RoseDisplayList changes to support exploded view.
Moved XML support functions to another library (rosexml/p28lib)
Added slicing APIs: rose_slice_place, rose_slice_plane_2d,
rose_slice_get_loops_isects, rose_slice_fill_loops. These functions
are used to slice a mesh, and get and fill the intersection loops.
Fixed bug in faceting code where a surface is bounded by a complex
trimmed spline curve. This occasionally occurrs in STEP data, and
was resulting in some quasi-periodic surfaces (screws) not faceting
property.
Fixed bug in NURBS curve solving code where the solution was not a
global minimum, but rather a local minimum.
Fixed bug in facet code where the additional facetsd outside the
bounding curve were being generated, due to surface patch corner
appearing very close to the bounding curve.
Fixed bug in boolean that detected a false positive for an
impossible case, thus causing the operation to fail.
Added overload copyFlags() method to RoseDisplayList and
RoseGraphicStyles, which takes a value flag. This allows those
methods to invert the value of a flag while copying it.
Fixed bug in boolean code where edges were incorrectly getting merged.
Changes in release 19.0 (2021-07-19)
Version 19 release.
Renamed rose_xform_scale() to rose_xform_compose_scale(), because it
is actually building a scale matrix and composing it to apply the
scaling to both direction and origin.. Kept a temporary #define for
the old name. Added rose_xform_scale_dirs() which applies a scaling
factor to the direction portion of the matrix, which is how scaling
normally works in GL et al.
Renamed unit functions using the same grouping pattern that we are
now using for the STEP and IFC extensions. Defines are in place for
the old names, disable by defining ROSEMATH_NO_DEPRECATED_NAMES
Renamed RoseMeshFacetSet to RoseMesh and added many definitions from
the STEP and IFC meshers to share algorithms across the packages.
This includes the RoseSurface and RoseSurfaceSolver classes, and the
rose_mesh_worker functions.
Added general get object functions to RoseMesh and RoseMeshBuilder
for tracking a mesh back to its source data. These return a general
RoseObject pointer. Subtypes may provide functions that return more
specific subclasses.
getObject()
getRepObject()
getFaceObject (unsigned idx)
getEdgeObject (unsigned idx)
Changes in release 18.1 (2019-10-28)
Version 18 Service Pack One release.
Added AMF and 3MF export functions for meshes.
rose_mesh_amf_save()
rose_mesh_3mf_save()
Changes in release 18.0 (2018-10-01)
Version 18 release.
Check if the given axis and reference direction vectors are
co-aligned in a call to rose_xform_put_dirs() and if they are,
generate a reference dir as if it were omitted.
Pass through original value on unit conversion if either the
starting or ending unit is declared as roseunit_as_is. Previously,
we only checked ending unit.
Added functions to project a point to a plane.
rose_pt_nearest_on_plane()
rose_pt_nearest_on_plane_uv()
Added functions for use with Euler angles and rotations.
rose_xform_compose_rotation()
rose_xform_get_euler_angles()
rose_xform_put_euler_angles()
Disable XML entity expansion when reading XML mesh data to avoid
billion laughs attack.
Changes in release 17.1 (2017-12-29)
Added RoseDelaunay2D::getPointCount() method.
Updated RoseMeshFacetSet::getTriangleNormal to return a zero vector on
degenerate triangles and tweaked tolerance for degenerate values.
Speed improvement to vector normalize.
Changes in release 17.0 (2017-04-07)
Update for major revision.
Updated RoseMeshTopology to allow partial shells to be processed.
(Useful for finding the boundaries of a set of facets.)
Added RoseMeshXMLOpts to the XML writer API.
Added bulletproofing against NULL values to topology handling code.
Updated delaunay functionality to specify two types of edges:
border and internal. This is needed when refaceting triangles.
Updated delaunay code to be more more robust numerically when computing
the intersection of two small line segments by scaling the direction
vector rather than using the existing values
Update RoseMeshFacet::getFacetNormal to not crash when the facet index
is ROSE_MESH_NULL_IDX
Fixed bugs in rose_mesh_topology: grow vertex list when calling
setFirstVertexFacet.
Update growFacetList to take a size parameter, rather than the max
facet to take (== sz+1).
Updated RoseDelaunay2D::insertPoint to return ROSE_NOTFOUND when any of the
points in the list could not be inserted.
Added RoseReal2DArray and RoseReal3DArray to handle lists of points
and directions.
Added cartesian transformation operator initialization logic and
non-uniform scaling operations.
Bounding box classes for 3D and 2D regions. Added bounds
computation for lists of points, facets and entire meshes.
Added rose_pt_midpoint(), centerpt() for the bounding boxes, and
meshing XML output.
Added 2D Delaunay triangularization helper class.
Changes in release 16.0 (2015-06-02)
Matrix math, cross/dot products, etc for points, directions, and
coordinate system transforms.
Unit enums and value conversion.
Initial version, collecting math code scattered across stix,
stixmesh, stixsim, and ifc libraries. Bringing everything into one
place, documenting, and making sure everything is properly tested.