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:
2026-02-18 12:23:29 -07:00
parent 3444e9e183
commit 1be782b88d

View File

@@ -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);
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";
if (faceMaker.IsDone()) {
TopExp_Explorer explorer(faceMaker.Shape(), TopAbs_FACE);
int facesAdded = 0;
for (; explorer.More(); explorer.Next()) {
faces.append(TopoDS::Face(explorer.Current()));
facesAdded++;
}
qDebug() << "buildShape: added" << facesAdded << "face(s) using MakeFilling";
} else {
qDebug() << "buildShape: MakeFilling failed";
}
}