diff --git a/src/SketchFeature.cpp b/src/SketchFeature.cpp index fc46cf0..d85b627 100644 --- a/src/SketchFeature.cpp +++ b/src/SketchFeature.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include @@ -53,6 +54,13 @@ void SketchFeature::buildShape() QList lineEdges; QList 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(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()); } diff --git a/src/ViewportWidget.cpp b/src/ViewportWidget.cpp index 510d64a..47761ab 100644 --- a/src/ViewportWidget.cpp +++ b/src/ViewportWidget.cpp @@ -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);