Wed, 01/09/2019 - 16:12
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
Wed, 01/09/2019 - 16:59
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());
// ...
}
Wed, 01/09/2019 - 19:06
Thank you! It works!