Updating to Version 19
Recent IFC geometry is now using trimmed bspline surfaces and other boundary rep data that used to only be found in STEP geometry. In the v19 release, we restructured the IFC faceting libraries to move code shared with the STEP Faceter into the ROSE Math library. Some class and function names have moved but this will bring faster improvements across all of the libraries, while maintaining solid reliability.
The most visible change is that RoseMeshFacetSet has been renamed RoseMesh. There have been some changes to the list of libraries that you need to link in to accommodate some new math utilities. See the Setup Notes for the new link details.
We have added a set of worker functions that distribute faceting to a series of background threads and associate the builder and result with the IFC object. Replacing ifcmesh_make_shell() with calls to the worker functions should give you much faster results. See the demonstration programs for examples.
// PREVIOUSLY loop over all renderable things { // call ifcmesh_make_shell on each item } // NOW ifcmesh_worker_render_design(design); // does all in parallel rose_mesh_worker_wait_all(); loop over all renderable things { // call ifcmesh_find_shell to get shell if one exists }
The worker functions can be used in other ways. For example, you could start rendering for all shells with the render design function, and then loop over the geometry, finding an IFCMeshBuilder with ifcmesh_worker_find_builder() and wait for that individual mesh to be completed.
You no longer need to treat certain items specially and can treat ifcmesh_can_facet_item() as a simple boolean value. In particular, shell-based surface models and face-based surface models can be faceted directly into a single mesh rather than needing recursive handling with ifcmesh_get_shell_items() into many meshes.
// PREVIOUSLY if (ifcmesh_can_facet_item(repitem) == 2) { // call ifcmesh_get_shell_items(repitem) to get list // call render or make shell on each item in the list } // NOW if (ifcmesh_can_facet_item(repitem)) { // call render or make shell on item }