fix: Improve face creation from edges using BRepOffsetAPI_MakeFilling
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
#include <TopExp_Explorer.hxx>
|
||||
#include <ShapeAnalysis_FreeBounds.hxx>
|
||||
#include <gp_Pln.hxx>
|
||||
#include <BRepOffsetAPI_MakeFilling.hxx>
|
||||
#include <GeomAbs_Shape.hxx>
|
||||
|
||||
#include <QJsonArray>
|
||||
#include <QDebug>
|
||||
@@ -124,30 +126,23 @@ void SketchFeature::buildShape()
|
||||
|
||||
if (!lineEdges.isEmpty()) {
|
||||
qDebug() << "buildShape: processing" << lineEdges.size() << "line edges";
|
||||
TopoDS_Compound compound;
|
||||
BRep_Builder builder;
|
||||
builder.MakeCompound(compound);
|
||||
for (const auto& edge : lineEdges) {
|
||||
builder.Add(compound, edge);
|
||||
|
||||
BRepOffsetAPI_MakeFilling faceMaker;
|
||||
for (const TopoDS_Edge& edge : lineEdges) {
|
||||
faceMaker.Add(edge, GeomAbs_C0);
|
||||
}
|
||||
faceMaker.Build();
|
||||
|
||||
ShapeAnalysis_FreeBounds freeBounds(compound, 1e-6, Standard_True);
|
||||
TopoDS_Compound closedWires = freeBounds.GetClosedWires();
|
||||
|
||||
if (closedWires.IsNull()) {
|
||||
qDebug() << "buildShape: no closed wires found";
|
||||
}
|
||||
|
||||
TopExp_Explorer explorer(closedWires, TopAbs_WIRE);
|
||||
if (faceMaker.IsDone()) {
|
||||
TopExp_Explorer explorer(faceMaker.Shape(), TopAbs_FACE);
|
||||
int facesAdded = 0;
|
||||
for (; explorer.More(); explorer.Next()) {
|
||||
TopoDS_Wire wire = TopoDS::Wire(explorer.Current());
|
||||
BRepBuilderAPI_MakeFace faceBuilder(wire);
|
||||
if (faceBuilder.IsDone()) {
|
||||
faces.append(faceBuilder.Face());
|
||||
qDebug() << "buildShape: face created from wire";
|
||||
} else {
|
||||
qDebug() << "buildShape: face creation from wire FAILED";
|
||||
faces.append(TopoDS::Face(explorer.Current()));
|
||||
facesAdded++;
|
||||
}
|
||||
qDebug() << "buildShape: added" << facesAdded << "face(s) using MakeFilling";
|
||||
} else {
|
||||
qDebug() << "buildShape: MakeFilling failed";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user