Is necessary to clean the triangles before recomputation?

Hi gays,

I'm trying to upgrade OCCT to version 6.5.4 for my software, but I found that all CAD operations take 10x longer time than version 6.5.1.

Compares the changes between version 6.5.1 and version 6.5.4, I found that triangles of the shape will be clean before the re-computation of shape triangulation.

Industry geometries are usually not fine for triangulation, I think that user is unable to wait for such a long time.

Following lines please found the changes:

- OCCT 6.5.1: Prs3d_ShadedShape::Add

Standard_Real aDeflection = GetDeflection(aShape, aDrawer);
//using of plugin
BRepMesh_PDiscretRoot pAlgo;
pAlgo=BRepMesh_DiscretFactory::Get().Discret(aShape,
aDeflection,
aDrawer->HLRAngle());
if (pAlgo)
pAlgo->Perform();

- OCCT 6.5.4:

Standard_Real aDeflection = GetDeflection (theShape, theDrawer);

// Check if it is possible to avoid unnecessary recomputation
// of shape triangulation
if (!BRepTools::Triangulation (theShape, aDeflection))
{
BRepTools::Clean (theShape);

// retrieve meshing tool from Factory
Handle(BRepMesh_DiscretRoot) aMeshAlgo = BRepMesh_DiscretFactory::Get().Discret (theShape,
aDeflection,
theDrawer->HLRAngle());
if (!aMeshAlgo.IsNull())
aMeshAlgo->Perform();
}

Pawel's picture

Hello heyuqi,

I can confirm the problem.

I guess the triangulation is also performed many times on the same shape because the criteria cannot be fulfilled for some shapes (but they get triangulated every time the method is called). See the issue:

http://tracker.dev.opencascade.org/view.php?id=23200

As a workaround I have commented out the offending code portion and have to make sure the shape triangulation is made before it gets visualized.

Pawel

heyuqi's picture

Hello Pawel,

Thanks for your reply!

I will try to apply changes from your branches and found out which improvements will work.