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:
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user