Updating to Version 20
Your v19 code should work without change with v20, except as noted below. As always, header files have changed so you must completely recompile all code with the new headers.
The v20 release now uses the IFC 4x3 ADD1 schema. IFC 4x3 removed
the following "standard case" subtypes, so code that used them should
be changed to use the supertype. IfcWallStandardCase
is
still present.
IfcBeamStandardCase -> IfcBeam IfcColumnStandardCase -> IfcColumn IfcDoorStandardCase -> IfcDoor IfcMemberStandardCase -> IfcMember IfcOpeningStandardCase -> IfcOpening IfcPlateStandardCase -> IfcPlate IfcSlabElementedCase -> IfcSlab IfcSlabStandardCase -> IfcSlab IfcWallElementedCase -> IfcWall IfcWindowStandardCase -> IfcWindow
The IfcDoorStyle
, IfcProxy
,
and IfcWindowStyle
classes were also removed by IFC4x3,
but we have retained them for compatibility with previous
editions.
The IFC mesher in v20 now calculates meshes for boolean results and products with voids. Boolean results and clipping results just representation items so they are handled the same as all other kinds of geometry.
Voids are defined by the product structure rather than within a
representation, so you may need to adjust your code if you are just
iterating over representation items.
Calling ifcx_mesh_make_all()
calculates everything, including voids. There is also a new overload
of ifcx_mesh_make() that
takes an IfcProduct
and calculates the meshes and voids
for the items associated with the product.
We have added new ifcx_asm functions which simplify working with the spatial structure of IFC files, and tracking the aggregates and contains relations, voids relations, and global xforms.
Updating to Version 19
The v19 release adds support for IFC bspline surfaces, other advanced geometry, and now builds meshes in the background using multiple threads for speed. API has been simplified, and can control when the background work must be completed. Class and function names have changed to accommodate things beyond meshing. Link libraries have changed slightly, as described in the setup notes, for new math utilities.
Functions start with ifcx_
with sub-names that group
functions by subject matter: meshes (ifcx_mesh_*
), styles
(ifcx_style_*
), transforms (ifcx_xform_*
),
and so on. Classes now start with Ifcx
to more clearly
distinguish from IFC data. The RoseMeshFacetSet has been
renamed RoseMesh and a subtype
called IfcxMesh is used, with extra
functions to return the IFC source objects for faces and edges.
It is now easy to generate meshes for everything, and the mesher uses multiple threads to produce results faster. The "get_shell_item" functions are no longer needed because ifcx_mesh_make() works on all supported types.
// OLD CODE loop over all renderable things { // call ifcmesh_make_shell on each item, possibly // looping over subitems with ifcmesh_get_shell_items } // NEW CODE ifcx_mesh_make_all(design); // does all in parallel loop over all renderable things { // call ifcx_mesh_find to get mesh if one exists }
Individual changes are listed below:
Old Definition | New Definition | Notes |
---|---|---|
#include <ifcmesh.h> |
#include <ifcx.h> |
|
RoseMeshFacetSet | RoseMesh | Functions return IfcxMesh subclass. |
rose_mesh_bounds() | RoseMesh::applyMeshBounds() or RoseMesh::applyFacetBounds() |
Clear box before calling. |
rose_mesh_update_bounds() | Same as above | Do not clear box before calling |
rose_mesh_get_color() | RoseMesh::getFaceColor() or RoseMeshFace::getColor() |
Integrated value into face. |
rose_mesh_set_color() | RoseMesh::setFaceColor() or RoseMeshFace::setColor() |
Integrated value into face. |
ifcmesh_can_facet_item() | ifcx_mesh_can_make() | Boolean, no longer a code |
ifcmesh_facet_item() | ifcx_mesh_make() | |
ifcmesh_find_face() | IfcxMesh::getFaceIndexFromIfc() | Returns index, call getFace() or other function with the result |
ifcmesh_find_shell() | ifcx_mesh_find() | |
ifcmesh_get_ifc_face() | IfcxMesh::getIfcFace() | |
ifcmesh_get_shell_item() | N/A | No longer needed |
ifcmesh_get_shell_items() | N/A | No longer needed |
ifcmesh_get_style() | ifcx_style_get_list() | |
ifcmesh_get_surface_color() | ifcx_style_get_color() | |
ifcmesh_make_shell() | ifcx_mesh_make() | Reverse argument order |
ifcmesh_put_ifc_face() | RoseMeshFace::setObject() | Done automatically by mesh creation. |
ifcmesh_resolve_styles() | ifcx_style_tag() |