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

Search the Forums
See All Topics
Open CASCADEShowroomGet it!Developer CornerSupport and ProductsAbout us
Technical overview
Areas of use
Advantages
FAQ
Screenshots
Shape factory
Shape gallery
Demonstrations
What's new
System requirements
Download Center
Public license
Documentation
Getting started
Forums
Open Source community
Training and e-learning
A-la Carte Support
Value-added software
Complementary Components
Customer Corner
Company Profile
Marketing Materials
Contact Us
News
Home / Developer Corner / Forums / Usage issues / StlMesh_MeshExplorer slow destructor?

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
  • New features to enhance the development process
  • Open CASCADE Technology 6.7.1 is available for download!
  • Open CASCADE Technology 6.7.0 is available for download!

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