
Thu, 09/08/2022 - 18:35
Forums:
Hi,
I have a body and an aligned point cloud. I need to color every points. I used BRepExtrema_DistShapeShape class but distance calculation of 225k points took lots of time. Is there any other option to calculate?
Thank you.
Code:
Handle(Graphic3d_ArrayOfPoints) points = aisPC->GetPoints();
Handle(Graphic3d_ArrayOfPoints) distPoints = new Graphic3d_ArrayOfPoints(points->VertexNumber(), Graphic3d_ArrayFlags_VertexColor);
for (Standard_Integer i = 1; i <= points->VertexNumber(); i++)
{
gp_Pnt point = points->Vertice(i);
BRep_Builder aBuilder;
TopoDS_Vertex aVertex;
aBuilder.MakeVertex(aVertex, point, Precision::Confusion());
TopExp_Explorer anEdgeExplorer(m_shapes[0], TopAbs_FACE);
anEdgeExplorer.More();
TopoDS_Shape shape = anEdgeExplorer.Current();
BRepExtrema_DistShapeShape dist(aVertex, shape);
Standard_Real value = dist.Value();
while (anEdgeExplorer.More())
{
TopoDS_Shape shapeFace = anEdgeExplorer.Current();
BRepExtrema_DistShapeShape fDist(aVertex, shapeFace);
if (fDist.Value() < value)
value = fDist.Value();
anEdgeExplorer.Next();
}
if (value < 1)
{
distPoints->AddVertex(points->Vertice(i), Quantity_NOC_GREEN);
}
else
{
distPoints->AddVertex(points->Vertice(i), Quantity_NOC_RED);
}
}
Fri, 09/09/2022 - 10:39
Normally, such task is done not via expensive extrema between topological shapes, but by computing distance/projection between triangulation and points.
Mon, 09/12/2022 - 13:21
Thank you Kirill.