TechDraw: fix crash in area dim for face with nested voids (#28097)

This commit is contained in:
WandererFan
2026-03-10 22:57:59 -05:00
committed by GitHub
parent 451072f0d7
commit 065315d7a4
4 changed files with 86 additions and 21 deletions
+6 -2
View File
@@ -1353,6 +1353,10 @@ areaPoint DrawViewDimension::getAreaParameters(ReferenceVector references)
areaPoint pts;
App::DocumentObject* refObject = references.front().getObject();
if (!refObject) {
throw Base::RuntimeError("Area dimension has no reference object");
}
if (refObject->isDerivedFrom<DrawViewPart>() && !references[0].getSubName().empty()) {
// this is a 2d object (a DVP + subelements)
TechDraw::FacePtr face = getViewPart()->getFace(references[0].getSubName());
@@ -1363,8 +1367,8 @@ areaPoint DrawViewDimension::getAreaParameters(ReferenceVector references)
}
auto dvp = static_cast<DrawViewPart*>(refObject);
auto filteredFaces = GeometryUtils::findHolesInFace(dvp, references.front().getSubName());
auto perforatedFace = GeometryUtils::makePerforatedFace(face, filteredFaces);
std::vector<FacePtr> holesInFace = GeometryUtils::findHolesInFace(dvp, references.front().getSubName());
TopoDS_Face perforatedFace = GeometryUtils::makePerforatedFace(face, holesInFace);
// these areas are scaled because the source geometry is scaled, but it makes no sense to
// report a scaled area.