diff --git a/src/Mod/Part/App/AppPart.cpp b/src/Mod/Part/App/AppPart.cpp index 7cdf562ca..e6a6749cd 100644 --- a/src/Mod/Part/App/AppPart.cpp +++ b/src/Mod/Part/App/AppPart.cpp @@ -156,6 +156,7 @@ void PartExport initPart() Part::CurveNet ::init(); Part::Polygon ::init(); Part::Circle ::init(); + Part::Vertex ::init(); Part::Ellipsoid ::init(); Part::Plane ::init(); Part::Sphere ::init(); diff --git a/src/Mod/Part/App/PrimitiveFeature.cpp b/src/Mod/Part/App/PrimitiveFeature.cpp index e958ec30e..30fe04ba3 100644 --- a/src/Mod/Part/App/PrimitiveFeature.cpp +++ b/src/Mod/Part/App/PrimitiveFeature.cpp @@ -33,6 +33,7 @@ # include # include # include +# include # include # include # include @@ -49,7 +50,9 @@ # include # include # include +# include # include +# include #endif @@ -106,6 +109,58 @@ void Primitive::onChanged(const App::Property* prop) Part::Feature::onChanged(prop); } +PROPERTY_SOURCE(Part::Vertex, Part::Primitive) + +Vertex::Vertex() +{ + ADD_PROPERTY(X,(0.0f)); + ADD_PROPERTY(Y,(0.0f)); + ADD_PROPERTY(Z,(0.0f)); +} + +Vertex::~Vertex() +{ +} + +short Vertex::mustExecute() const +{ + if (X.isTouched() || + Y.isTouched() || + Z.isTouched()) + return 1; + return Part::Feature::mustExecute(); +} + +App::DocumentObjectExecReturn *Vertex::execute(void) +{ + gp_Pnt point; + point.SetX(this->X.getValue()); + point.SetY(this->Y.getValue()); + point.SetZ(this->Z.getValue()); + + BRepBuilderAPI_MakeVertex MakeVertex(point); + const TopoDS_Vertex& vertex = MakeVertex.Vertex(); + this->Shape.setValue(vertex); + + return App::DocumentObject::StdReturn; +} + + +void Vertex::onChanged(const App::Property* prop) +{ + if (!isRestoring()) { + if (prop == &X || prop == &Y || prop == &Z){ + try { + App::DocumentObjectExecReturn *ret = recompute(); + delete ret; + } + catch (...) { + } + } + } + Part::Feature::onChanged(prop); +} + PROPERTY_SOURCE(Part::Plane, Part::Primitive) Plane::Plane() diff --git a/src/Mod/Part/App/PrimitiveFeature.h b/src/Mod/Part/App/PrimitiveFeature.h index b53157d80..7d70f1052 100644 --- a/src/Mod/Part/App/PrimitiveFeature.h +++ b/src/Mod/Part/App/PrimitiveFeature.h @@ -49,6 +49,27 @@ protected: void onChanged (const App::Property* prop); }; +class PartExport Vertex : public Part::Primitive +{ + PROPERTY_HEADER(Part::Vertex); + +public: + Vertex(); + virtual ~Vertex(); + + App::PropertyFloat X; + App::PropertyFloat Y; + App::PropertyFloat Z; + + /** @name methods override feature */ + //@{ + /// recalculate the Feature + App::DocumentObjectExecReturn *execute(void); + short mustExecute() const; + void onChanged(const App::Property*); + //@} +}; + class PartExport Plane : public Primitive { PROPERTY_HEADER(Part::Plane); diff --git a/src/Mod/Part/Gui/DlgPrimitives.cpp b/src/Mod/Part/Gui/DlgPrimitives.cpp index befa5c169..aac97e74f 100644 --- a/src/Mod/Part/Gui/DlgPrimitives.cpp +++ b/src/Mod/Part/Gui/DlgPrimitives.cpp @@ -104,6 +104,13 @@ DlgPrimitives::DlgPrimitives(QWidget* parent, Qt::WFlags fl) ui.helixRadius->setMaximum(INT_MAX); // circle ui.circleRadius->setMaximum(INT_MAX); + // vertex + ui.VertexXAxisValue->setMaximum(INT_MAX); + ui.VertexYAxisValue->setMaximum(INT_MAX); + ui.VertexZAxisValue->setMaximum(INT_MAX); + ui.VertexXAxisValue->setMinimum(-INT_MAX); + ui.VertexYAxisValue->setMinimum(-INT_MAX); + ui.VertexZAxisValue->setMinimum(-INT_MAX); } /* @@ -365,8 +372,21 @@ void DlgPrimitives::accept() .arg(ui.circleAngle1->value(),0,'f',2) .arg(this->toPlacement()); } + else if (ui.comboBox1->currentIndex() == 10) { // vertex + name = QString::fromAscii(doc->getUniqueObjectName("Vertex").c_str()); + cmd = QString::fromAscii( + "App.ActiveDocument.addObject(\"Part::Vertex\",\"%1\")\n" + "App.ActiveDocument.%1.X=%2\n" + "App.ActiveDocument.%1.Y=%3\n" + "App.ActiveDocument.%1.Z=%4\n" + "App.ActiveDocument.%1.Placement=%5\n") + .arg(name) + .arg(ui.VertexXAxisValue->value(),0,'f',2) + .arg(ui.VertexYAxisValue->value(),0,'f',2) + .arg(ui.VertexZAxisValue->value(),0,'f',2) + .arg(this->toPlacement()); + } - // Execute the Python block QString prim = tr("Create %1").arg(ui.comboBox1->currentText()); Gui::Application::Instance->activeDocument()->openCommand(prim.toUtf8()); diff --git a/src/Mod/Part/Gui/DlgPrimitives.ui b/src/Mod/Part/Gui/DlgPrimitives.ui index 8044c5d06..1a92f2582 100644 --- a/src/Mod/Part/Gui/DlgPrimitives.ui +++ b/src/Mod/Part/Gui/DlgPrimitives.ui @@ -107,7 +107,7 @@ 0 - + 9 @@ -177,7 +177,7 @@ - + 9 @@ -267,7 +267,7 @@ - + 9 @@ -374,7 +374,7 @@ - + 9 @@ -498,7 +498,7 @@ - + 9 @@ -637,7 +637,7 @@ - + 9 @@ -790,7 +790,7 @@ - + 9 @@ -946,7 +946,7 @@ - + @@ -1078,7 +1078,7 @@ - + 9 @@ -1185,7 +1185,7 @@ - + @@ -1269,6 +1269,59 @@ + + + + + 10 + 10 + 201 + 76 + + + + + + + + + + + + + + + + X Axis Value: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Y Axis Value: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Z Axis Value: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + @@ -1339,6 +1392,11 @@ Circle + + + Vertex + + @@ -1366,21 +1424,21 @@ - + Z: - + X: - + Direction: @@ -1397,7 +1455,7 @@ - + Y: