Open CASCADE, the 3D modelling kernel
3D modeling & numerical simulation

Search the Forums
See All Topics
 

StlMesh_MeshExplorer slow destructor?

StlMesh_MeshExplorer slow destructor?
spam killer 2013/02/12 14:10
Hi,

I have a STL file with 379836 triangles. I use "StlMesh_MeshExplorer" to iterate through the triangles. When my StlMesh_MeshExplorer leaves the scope it takes ~1-2 Minutes until the debugger returns and moves on. Why takes the destructor of "StlMesh_MeshExplorer" so long?

Here is my sample code:

---snip---
const Handle_StlMesh_Mesh & aStlMesh = _Mesh;
Standard_Integer NumberDomains = aStlMesh->NbDomains();
Standard_Real x1, x2, x3, y1, y2, y3, z1, z2, z3,xn,yn,zn;               
{
     StlMesh_MeshExplorer aMExp(aStlMesh);
     for(int i=1; i<=NumberDomains; i++)
     {
          for(aMExp.InitTriangle(i); aMExp.MoreTriangle(); aMExp.NextTriangle())
          {
               aMExp.TriangleVertices(x1,y1,z1,x2,y2,z2,x3,y3,z3);
               aMExp.TriangleOrientation(xn,yn,zn);
          }
     }
}
---snap---

I am using oce-0.11 (based on OCCT 6.5.4)

SK
jelle 2013/02/12 16:29
StlMesh is suboptimal if you just want to render some mesh.
It converts the mesh to BRep, which is why its *so* slow...
Take a look at this thread
      http://www.opencascade.org/org/forum/thread_15132/?forum=3
And the XSDRAWSTL* classes...

In my experience you'll be able to load / render an order of magnitude faster, so worth to take a look into this matter

-jelle
spam killer 2013/02/12 17:13
I enumerate the vertices in order to calculate the gravity center an some other data. No need to render anything. The solution I have found is to completly set StlMesh_MeshExplorer aside:

---snip---
int domainCount = aStlMesh->NbDomains();
for(int domainIndex = 1; domainIndex <= domainCount; domainIndex++)
{
     int triangleCount = aStlMesh->NbTriangles(domainIndex);
     const StlMesh_SequenceOfMeshTriangle & triangles = aStlMesh->Triangles(domainIndex);
     const TColgp_SequenceOfXYZ & vertices = aStlMesh->Vertices(domainIndex);
     for (int triangleIndex = 1; triangleIndex <= triangleCount; triangleIndex++)
     {
          const Handle_StlMesh_MeshTriangle & triangle = triangles.Value(triangleIndex);
          int v1, v2, v3;
          triangle->GetVertexAndOrientation(v1, v2, v3, xn, yn, zn);
          const gp_XYZ & p1 = vertices.Value(v1);
          const gp_XYZ & p2 = vertices.Value(v2);
          const gp_XYZ & p3 = vertices.Value(v3);
          
          // and so on...
     }
}
---snap---

SK
 
 
Latest news
  • Open CASCADE Technology 6.8.0 is available for download!
  • New features to enhance the development process
  • Open CASCADE Technology 6.7.1 is available for download!

  • © OPEN CASCADE 2000 - 2014  |  Search  |  Contacts   |  Site map