Reading Render Meshes
If you are developing software to read .3dm files, you might find that the software only seems to read NURBS data; but render meshes are ignored. We do provide methods for third-party developers to read render meshes from .3dm files.
An object’s render meshes are stored on that object. For example, the render meshes for ON_Brep
and ON_Extrusion
objects are stored on that object. The developer can obtain an object’s render meshes from a Brep by calling ON_Brep::GetMesh
and from an Extrusion by calling ON_MeshCache::Mesh
.
If you are referencing the Example_read
sample included with the openNURBS toolkit, then after the 3DM file has been read, you can obtain the render meshes from the ONX_Model
object as follows:
ONX_Model model = ... ONX_ModelComponentIterator it(model, ON_ModelComponent::Type::ModelGeometry); const ON_ModelComponent* model_component = nullptr; for (model_component = it.FirstComponent(); nullptr != model_component; model_component = it.NextComponent()) { const ON_ModelGeometryComponent* model_geometry = ON_ModelGeometryComponent::Cast(model_component); if (nullptr != model_geometry) { // Test for mesh object const ON_Mesh* mesh = ON_Mesh::Cast(model_geometry->Geometry(nullptr)); if (nullptr != mesh) { // TODO: do something with ON_Mesh object... continue; } // Test for Brep object const ON_Brep* brep = ON_Brep::Cast(model_geometry->Geometry(nullptr)); if (nullptr != brep) { ON_SimpleArray<const ON_Mesh*> meshes(brep->m_F.Count()); const int mesh_count = brep->GetMesh(ON::render_mesh, meshes); if (mesh_count > 0) { // TODO: do something with array of ON_Mesh objects... } continue; } // Test for extrusion object const ON_Extrusion* extrusion = ON_Extrusion::Cast(model_geometry->Geometry(nullptr)); if (nullptr != extrusion) { const ON_Mesh* mesh = extrusion->m_mesh_cache.Mesh(ON::render_mesh); if (nullptr != mesh) { // TODO: do something with ON_Mesh object... } continue; } } }