fix: Prevent crash from failed sketch geometry creation
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -54,7 +54,10 @@ void SketchFeature::buildShape()
|
|||||||
|
|
||||||
for (SketchObject* obj : m_objects) {
|
for (SketchObject* obj : m_objects) {
|
||||||
if (auto line = dynamic_cast<SketchLine*>(obj)) {
|
if (auto line = dynamic_cast<SketchLine*>(obj)) {
|
||||||
lineEdges.append(BRepBuilderAPI_MakeEdge(line->startPoint(), line->endPoint()).Edge());
|
BRepBuilderAPI_MakeEdge makeEdge(line->startPoint(), line->endPoint());
|
||||||
|
if (makeEdge.IsDone()) {
|
||||||
|
lineEdges.append(makeEdge.Edge());
|
||||||
|
}
|
||||||
} else if (auto rect = dynamic_cast<SketchRectangle*>(obj)) {
|
} else if (auto rect = dynamic_cast<SketchRectangle*>(obj)) {
|
||||||
const gp_Pnt& c1 = rect->corner1();
|
const gp_Pnt& c1 = rect->corner1();
|
||||||
const gp_Pnt& c2 = rect->corner2();
|
const gp_Pnt& c2 = rect->corner2();
|
||||||
@@ -71,15 +74,17 @@ void SketchFeature::buildShape()
|
|||||||
other_corner2.SetCoord(c1.X(), c2.Y(), c1.Z());
|
other_corner2.SetCoord(c1.X(), c2.Y(), c1.Z());
|
||||||
}
|
}
|
||||||
|
|
||||||
TopoDS_Edge e1 = BRepBuilderAPI_MakeEdge(c1, other_corner1).Edge();
|
BRepBuilderAPI_MakeEdge me1(c1, other_corner1);
|
||||||
TopoDS_Edge e2 = BRepBuilderAPI_MakeEdge(other_corner1, c2).Edge();
|
BRepBuilderAPI_MakeEdge me2(other_corner1, c2);
|
||||||
TopoDS_Edge e3 = BRepBuilderAPI_MakeEdge(c2, other_corner2).Edge();
|
BRepBuilderAPI_MakeEdge me3(c2, other_corner2);
|
||||||
TopoDS_Edge e4 = BRepBuilderAPI_MakeEdge(other_corner2, c1).Edge();
|
BRepBuilderAPI_MakeEdge me4(other_corner2, c1);
|
||||||
BRepBuilderAPI_MakeWire wireBuilder(e1, e2, e3, e4);
|
if (me1.IsDone() && me2.IsDone() && me3.IsDone() && me4.IsDone()) {
|
||||||
if (wireBuilder.IsDone()) {
|
BRepBuilderAPI_MakeWire wireBuilder(me1.Edge(), me2.Edge(), me3.Edge(), me4.Edge());
|
||||||
BRepBuilderAPI_MakeFace faceBuilder(wireBuilder.Wire());
|
if (wireBuilder.IsDone()) {
|
||||||
if (faceBuilder.IsDone()) {
|
BRepBuilderAPI_MakeFace faceBuilder(wireBuilder.Wire());
|
||||||
faces.append(faceBuilder.Face());
|
if (faceBuilder.IsDone()) {
|
||||||
|
faces.append(faceBuilder.Face());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (auto circle = dynamic_cast<SketchCircle*>(obj)) {
|
} else if (auto circle = dynamic_cast<SketchCircle*>(obj)) {
|
||||||
@@ -93,12 +98,15 @@ void SketchFeature::buildShape()
|
|||||||
}
|
}
|
||||||
gp_Ax2 axis(center, normal);
|
gp_Ax2 axis(center, normal);
|
||||||
gp_Circ circ(axis, radius);
|
gp_Circ circ(axis, radius);
|
||||||
TopoDS_Edge edge = BRepBuilderAPI_MakeEdge(circ).Edge();
|
BRepBuilderAPI_MakeEdge makeEdge(circ);
|
||||||
BRepBuilderAPI_MakeWire wireBuilder(edge);
|
if (makeEdge.IsDone()) {
|
||||||
if(wireBuilder.IsDone()) {
|
TopoDS_Edge edge = makeEdge.Edge();
|
||||||
BRepBuilderAPI_MakeFace faceBuilder(wireBuilder.Wire());
|
BRepBuilderAPI_MakeWire wireBuilder(edge);
|
||||||
if (faceBuilder.IsDone()) {
|
if(wireBuilder.IsDone()) {
|
||||||
faces.append(faceBuilder.Face());
|
BRepBuilderAPI_MakeFace faceBuilder(wireBuilder.Wire());
|
||||||
|
if (faceBuilder.IsDone()) {
|
||||||
|
faces.append(faceBuilder.Face());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user