fix: Generate faces for sketch objects and fix tool preview state

Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
2026-02-18 12:00:28 -07:00
parent a7ad78e103
commit fa6e4662a6
2 changed files with 11 additions and 2 deletions

View File

@@ -14,6 +14,7 @@
#include <gp_Ax2.hxx>
#include <TopExp_Explorer.hxx>
#include <ShapeAnalysis_FreeBounds.hxx>
#include <gp_Pln.hxx>
#include <QJsonArray>
@@ -53,6 +54,13 @@ void SketchFeature::buildShape()
QList<TopoDS_Edge> lineEdges;
QList<TopoDS_Face> faces;
gp_Pln sketchPlane;
switch (m_plane) {
case SketchPlane::XY: sketchPlane = gp_Pln(gp::Origin(), gp::DY()); break;
case SketchPlane::XZ: sketchPlane = gp_Pln(gp::Origin(), gp::DZ()); break;
case SketchPlane::YZ: sketchPlane = gp_Pln(gp::Origin(), gp::DX()); break;
}
for (SketchObject* obj : m_objects) {
if (auto line = dynamic_cast<SketchLine*>(obj)) {
BRepBuilderAPI_MakeEdge makeEdge(line->startPoint(), line->endPoint());
@@ -82,7 +90,7 @@ void SketchFeature::buildShape()
if (me1.IsDone() && me2.IsDone() && me3.IsDone() && me4.IsDone()) {
BRepBuilderAPI_MakeWire wireBuilder(me1.Edge(), me2.Edge(), me3.Edge(), me4.Edge());
if (wireBuilder.IsDone()) {
BRepBuilderAPI_MakeFace faceBuilder(wireBuilder.Wire());
BRepBuilderAPI_MakeFace faceBuilder(sketchPlane, wireBuilder.Wire());
if (faceBuilder.IsDone()) {
faces.append(faceBuilder.Face());
}
@@ -127,7 +135,7 @@ void SketchFeature::buildShape()
TopExp_Explorer explorer(closedWires, TopAbs_WIRE);
for (; explorer.More(); explorer.Next()) {
TopoDS_Wire wire = TopoDS::Wire(explorer.Current());
BRepBuilderAPI_MakeFace faceBuilder(wire);
BRepBuilderAPI_MakeFace faceBuilder(sketchPlane, wire);
if (faceBuilder.IsDone()) {
faces.append(faceBuilder.Face());
}

View File

@@ -730,6 +730,7 @@ void ViewportWidget::drawSketch(const SketchFeature* sketch)
m_litShaderProgram->setAttributeBuffer(1, GL_FLOAT, 3 * sizeof(GLfloat), 3, 6 * sizeof(GLfloat));
glDrawArrays(GL_TRIANGLES, 0, faceData.size() / 6);
m_litShaderProgram->disableAttributeArray(1);
m_shaderProgram->bind(); // rebind simple shader for subsequent draws
}
glEnable(GL_CULL_FACE);