How to get minimal XYZ of all shapes

I 've red STEP file to TopTools_HSequenceOfShape. And now I want to get minimum vertex of all shapes in this file. How to fo it?

I tried to do next:

 

auto curCorner = aSeqOfShape->Value(1);

TopExp_Explorer mfExpl(curCorner, TopAbs_FACE);

TopExp_Explorer mwExpl(curCorner, TopAbs_EDGE);

 

const TopoDS_Vertex &minVertex = TopoDS::Vertex(mwExpl.Current());

gp_Pnt minVertexPos = BRep_Tool::Pnt(minVertex);

 

for (TopExp_Explorer fExpl(curCorner, TopAbs_FACE); fExpl.More(); fExpl.Next())

{

const TopoDS_Face &curFace = TopoDS::Face(fExpl.Current());

 

for (TopExp_Explorer wExpl(curFace, TopAbs_EDGE); wExpl.More(); wExpl.Next())

{

const TopoDS_Vertex &curVertex = TopoDS::Vertex(wExpl.Current());

const gp_Pnt curVertexPos = BRep_Tool::Pnt(curVertex);

if ((curVertexPos.X() <= minVertexPos.X()) && (curVertexPos.Y() <= minVertexPos.Y()) && (curVertexPos.Z() <= minVertexPos.Z()) ) {

minVertexPos = curVertexPos;

}

}

}

 

 

for (int i = 2; i <= aSeqOfShape->Length(); i++)

{

auto aShape = aSeqOfShape->Value(i);

 

m_pcoloredshapeList->Add(Quantity_NOC_YELLOW, aSeqOfShape->Value(i));

        m_pcoloredshapeList->Display(myAISContext);

 

for (TopExp_Explorer fExpl(aShape, TopAbs_FACE); fExpl.More(); fExpl.Next())

{

const TopoDS_Face &curFace = TopoDS::Face(fExpl.Current());

 

for (TopExp_Explorer wExpl(curFace, TopAbs_WIRE); wExpl.More(); wExpl.Next())

{

 

const TopoDS_Vertex &curVertex = TopoDS::Vertex(wExpl.Current());

const gp_Pnt curVertexPos = BRep_Tool::Pnt(curVertex);

if (curVertexPos.X() <= minVertexPos.X() && curVertexPos.Y() <= minVertexPos.Y() && curVertexPos.Z() <= minVertexPos.Z()) {

minVertexPos = curVertexPos;

}

}

}

}

 

LeftDownCornerPos = minVertexPos;

 

But I got error in line

const TopoDS_Vertex &minVertex = TopoDS::Vertex(mwExpl.Current());

Error is StandardType mismatch: TopoDS::Vertex

Hugues Delorme's picture

Hello,

You are trying to get a vertex out of the current item of a TopExp_Explorer while you asked it to iterate on edges or faces.

Instead ask the TopExp_Explorer object to iterate on vertices :

for (TopExp_Explorer expl(shape, TopAbs_VERTEX); expl.More(); expl.Next()) {
        auto vertex = TopoDS::Vertex(expl.Current());
        // ...
}

a.kliuchnikova_144191's picture

Thank you! It works!