Skip to content

Commit

Permalink
Add Part_RegularPolygon,
Browse files Browse the repository at this point in the history
regular polygon edge in Part workbench "create primitives",

Add icons Part_Polygon and Part_Spline
  • Loading branch information
jmaustpc authored and yorikvanhavre committed Nov 14, 2013
1 parent babcf2f commit 0656735
Show file tree
Hide file tree
Showing 12 changed files with 774 additions and 47 deletions.
1 change: 1 addition & 0 deletions src/Mod/Part/App/AppPart.cpp
Expand Up @@ -194,6 +194,7 @@ void PartExport initPart()
Part::Sphere ::init();
Part::Cylinder ::init();
Part::Prism ::init();
Part::RegularPolygon ::init();
Part::Cone ::init();
Part::Torus ::init();
Part::Helix ::init();
Expand Down
59 changes: 59 additions & 0 deletions src/Mod/Part/App/PrimitiveFeature.cpp
Expand Up @@ -523,6 +523,65 @@ App::DocumentObjectExecReturn *Prism::execute(void)
return App::DocumentObject::StdReturn;
}

App::PropertyIntegerConstraint::Constraints RegularPolygon::numberOfSides = {3,INT_MAX,1};

PROPERTY_SOURCE(Part::RegularPolygon, Part::Primitive)

RegularPolygon::RegularPolygon(void)
{
ADD_PROPERTY_TYPE(NumberOfSides,(6.0),"RegularPolygon",App::Prop_None,"The number of sides of the regular polygon");
ADD_PROPERTY_TYPE(Radius,(2.0),"RegularPolygon",App::Prop_None,"The inscribed radius of the regular polygon");
// ADD_PROPERTY_TYPE(Height,(10.0f),"RegularPolygon",App::Prop_None,"The height of the regular polygon");
NumberOfSides.setConstraints(&numberOfSides);
}

short RegularPolygon::mustExecute() const
{
if (NumberOfSides.isTouched())
return 1;
if (Radius.isTouched())
return 1;
// if (Height.isTouched())
// return 1;
return Primitive::mustExecute();
}

App::DocumentObjectExecReturn *RegularPolygon::execute(void)
{
// Build a regular polygon
if (NumberOfSides.getValue() < 3)
return new App::DocumentObjectExecReturn("Less than the minimum 3 sides is invalid");
if (Radius.getValue() < Precision::Confusion())
return new App::DocumentObjectExecReturn("Radius of prism too small");
// if (Height.getValue() < Precision::Confusion())
// return new App::DocumentObjectExecReturn("Height of prism too small");
try {
long nodes = NumberOfSides.getValue();

Base::Matrix4D mat;
mat.rotZ(Base::toRadians(360.0/nodes));

// create polygon
BRepBuilderAPI_MakePolygon mkPoly;
Base::Vector3d v(Radius.getValue(),0,0);
for (long i=0; i<nodes; i++) {
mkPoly.Add(gp_Pnt(v.x,v.y,v.z));
v = mat * v;
}
mkPoly.Add(gp_Pnt(v.x,v.y,v.z));
// BRepBuilderAPI_MakeFace mkFace(mkPoly.Wire());
// BRepPrimAPI_MakePrism mkPrism(mkFace.Face(), gp_Vec(0,0,Height.getValue()));
this->Shape.setValue(mkPoly.Shape());
}
catch (Standard_Failure) {
Handle_Standard_Failure e = Standard_Failure::Caught();
return new App::DocumentObjectExecReturn(e->GetMessageString());
}

return App::DocumentObject::StdReturn;
}


PROPERTY_SOURCE(Part::Cone, Part::Primitive)

Cone::Cone(void)
Expand Down
25 changes: 25 additions & 0 deletions src/Mod/Part/App/PrimitiveFeature.h
Expand Up @@ -220,6 +220,31 @@ class PartExport Prism : public Primitive
static App::PropertyIntegerConstraint::Constraints polygonRange;
};

class PartExport RegularPolygon : public Primitive
{
PROPERTY_HEADER(Part::RegularPolygon);

public:
RegularPolygon();

App::PropertyIntegerConstraint NumberOfSides;
App::PropertyLength Radius;
App::PropertyLength Height;

/** @name methods override feature */
//@{
/// recalculate the feature
App::DocumentObjectExecReturn *execute(void);
short mustExecute() const;
/// returns the type name of the ViewProvider
const char* getViewProviderName(void) const {
return "PartGui::ViewProviderRegularPolygon";
}
//@}
private:
static App::PropertyIntegerConstraint::Constraints numberOfSides;
};

class PartExport Cone : public Primitive
{
PROPERTY_HEADER(Part::Cone);
Expand Down
92 changes: 45 additions & 47 deletions src/Mod/Part/Gui/AppPartGui.cpp
Expand Up @@ -24,9 +24,8 @@

#include <Mod/Part/App/PropertyTopoShape.h>

#include "SoBrepShape.h"
#include "SoBrepFaceSet.h"
#include "SoBrepEdgeSet.h"
#include "SoBrepPointSet.h"
#include "SoFCShapeObject.h"
#include "ViewProvider.h"
#include "ViewProviderExt.h"
Expand All @@ -51,14 +50,15 @@
#include "ViewProviderTorusParametric.h"
#include "ViewProviderRuledSurface.h"
#include "ViewProviderPrism.h"
#include "ViewProviderSpline.h"
#include "ViewProviderRegularPolygon.h"

#include "DlgSettingsGeneral.h"
#include "DlgSettingsObjectColor.h"
#include "DlgSettings3DViewPartImp.h"
#include "Workbench.h"

#include <Gui/Language/Translator.h>
#include "qrc_Part.cpp"

#include "Resources/icons/PartFeature.xpm"
#include "Resources/icons/PartFeatureImport.xpm"
Expand Down Expand Up @@ -100,52 +100,50 @@ void PartGuiExport initPartGui()
(void) Py_InitModule("PartGui", PartGui_methods); /* mod name, table ptr */
Base::Console().Log("Loading GUI of Part module... done\n");

PartGui::SoBrepFaceSet ::initClass();
PartGui::SoBrepEdgeSet ::initClass();
PartGui::SoBrepPointSet ::initClass();
PartGui::SoFCControlPoints ::initClass();
PartGui::ViewProviderPartBase ::init();
PartGui::ViewProviderPartExt ::init();
PartGui::ViewProviderPart ::init();
PartGui::ViewProviderEllipsoid ::init();
PartGui::ViewProviderPython ::init();
PartGui::ViewProviderBox ::init();
PartGui::ViewProviderPrism ::init();
PartGui::ViewProviderWedge ::init();
PartGui::ViewProviderImport ::init();
PartGui::ViewProviderCurveNet ::init();
PartGui::ViewProviderExtrusion ::init();
PartGui::ViewProvider2DObject ::init();
PartGui::ViewProvider2DObjectPython ::init();
PartGui::ViewProviderMirror ::init();
PartGui::ViewProviderFillet ::init();
PartGui::ViewProviderChamfer ::init();
PartGui::ViewProviderRevolution ::init();
PartGui::ViewProviderLoft ::init();
PartGui::ViewProviderSweep ::init();
PartGui::ViewProviderOffset ::init();
PartGui::ViewProviderThickness ::init();
PartGui::ViewProviderCustom ::init();
PartGui::ViewProviderCustomPython ::init();
PartGui::ViewProviderBoolean ::init();
PartGui::ViewProviderMultiFuse ::init();
PartGui::ViewProviderMultiCommon ::init();
PartGui::ViewProviderCompound ::init();
PartGui::ViewProviderSpline ::init();
PartGui::ViewProviderCircleParametric ::init();
PartGui::ViewProviderLineParametric ::init();
PartGui::ViewProviderPointParametric ::init();
PartGui::ViewProviderEllipseParametric ::init();
PartGui::ViewProviderHelixParametric ::init();
PartGui::ViewProviderSpiralParametric ::init();
PartGui::ViewProviderPlaneParametric ::init();
PartGui::ViewProviderSphereParametric ::init();
PartGui::SoBrepFaceSet ::initClass();
PartGui::SoBrepEdgeSet ::initClass();
PartGui::SoBrepPointSet ::initClass();
PartGui::SoFCControlPoints ::initClass();
PartGui::ViewProviderPartBase ::init();
PartGui::ViewProviderPartExt ::init();
PartGui::ViewProviderPart ::init();
PartGui::ViewProviderEllipsoid ::init();
PartGui::ViewProviderPython ::init();
PartGui::ViewProviderBox ::init();
PartGui::ViewProviderPrism ::init();
PartGui::ViewProviderRegularPolygon ::init();
PartGui::ViewProviderImport ::init();
PartGui::ViewProviderCurveNet ::init();
PartGui::ViewProviderExtrusion ::init();
PartGui::ViewProvider2DObject ::init();
PartGui::ViewProvider2DObjectPython ::init();
PartGui::ViewProviderMirror ::init();
PartGui::ViewProviderFillet ::init();
PartGui::ViewProviderChamfer ::init();
PartGui::ViewProviderRevolution ::init();
PartGui::ViewProviderLoft ::init();
PartGui::ViewProviderSweep ::init();
PartGui::ViewProviderOffset ::init();
PartGui::ViewProviderThickness ::init();
PartGui::ViewProviderCustom ::init();
PartGui::ViewProviderCustomPython ::init();
PartGui::ViewProviderBoolean ::init();
PartGui::ViewProviderMultiFuse ::init();
PartGui::ViewProviderMultiCommon ::init();
PartGui::ViewProviderCompound ::init();
PartGui::ViewProviderCircleParametric ::init();
PartGui::ViewProviderLineParametric ::init();
PartGui::ViewProviderPointParametric ::init();
PartGui::ViewProviderEllipseParametric ::init();
PartGui::ViewProviderHelixParametric ::init();
PartGui::ViewProviderPlaneParametric ::init();
PartGui::ViewProviderSphereParametric ::init();
PartGui::ViewProviderCylinderParametric ::init();
PartGui::ViewProviderConeParametric ::init();
PartGui::ViewProviderTorusParametric ::init();
PartGui::ViewProviderRuledSurface ::init();
PartGui::ViewProviderConeParametric ::init();
PartGui::ViewProviderTorusParametric ::init();
PartGui::ViewProviderRuledSurface ::init();

PartGui::Workbench ::init();
PartGui::Workbench ::init();

// instantiating the commands
CreatePartCommands();
Expand Down
2 changes: 2 additions & 0 deletions src/Mod/Part/Gui/CMakeLists.txt
Expand Up @@ -167,6 +167,8 @@ SET(PartGui_SRCS
ViewProviderConeParametric.h
ViewProviderPrism.cpp
ViewProviderPrism.h
ViewProviderRegularPolygon.cpp
ViewProviderRegularPolygon.h
ViewProviderTorusParametric.cpp
ViewProviderTorusParametric.h
ViewProviderCurveNet.cpp
Expand Down
13 changes: 13 additions & 0 deletions src/Mod/Part/Gui/DlgPrimitives.cpp
Expand Up @@ -259,6 +259,7 @@ DlgPrimitives::DlgPrimitives(QWidget* parent)
ui.edgeY2->setMinimum(INT_MIN);
ui.edgeZ2->setMaximum(INT_MAX);
ui.edgeZ2->setMinimum(INT_MIN);
// RegularPolygon
}

/*
Expand Down Expand Up @@ -593,6 +594,18 @@ void DlgPrimitives::createPrimitive(const QString& placement)
.arg(ui.edgeZ2->value(),0,'f',2)
.arg(placement);
}
else if (ui.comboBox1->currentIndex() == 14) { // RegularPolygon
name = QString::fromAscii(doc->getUniqueObjectName("RegularPolygon").c_str());
cmd = QString::fromAscii(
"App.ActiveDocument.addObject(\"Part::RegularPolygon\",\"%1\")\n"
"App.ActiveDocument.%1.NumberOfSides=%2\n"
"App.ActiveDocument.%1.Radius=%3\n"
"App.ActiveDocument.%1.Placement=%5\n")
.arg(name)
.arg(ui.regularPolygonNumberOfSides->value())
.arg(ui.regularPolygonRadius->value(),0,'f',2)
.arg(placement);
}

// Execute the Python block
QString prim = tr("Create %1").arg(ui.comboBox1->currentText());
Expand Down
78 changes: 78 additions & 0 deletions src/Mod/Part/Gui/DlgPrimitives.ui
Expand Up @@ -103,6 +103,11 @@
<string>Line</string>
</property>
</item>
<item>
<property name="text">
<string>RegularPolygon</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
Expand Down Expand Up @@ -1853,6 +1858,79 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="page_regularPolygon">
<layout class="QGridLayout">
<property name="margin">
<number>9</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<item row="0" column="0">
<layout class="QGridLayout">
<property name="margin">
<number>0</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="labelRegularPolygonNumberOfSides">
<property name="text">
<string>Number Of Sides:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="regularPolygonNumberOfSides">
<property name="maximum">
<double>1000</double>
</property>
<property name="minimum">
<double>3</double>
</property>
<property name="value">
<double>6</double>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelRegularPolygonRadius">
<property name="text">
<string>Radius:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="regularPolygonRadius">
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>1000.000000000000000</double>
</property>
<property name="value">
<double>2.000000000000000</double>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
Expand Down
2 changes: 2 additions & 0 deletions src/Mod/Part/Gui/Resources/Part.qrc
Expand Up @@ -40,6 +40,8 @@
<file>icons/Part_Line_Parametric.svg</file>
<file>icons/Part_Circle_Parametric.svg</file>
<file>icons/Part_Point_Parametric.svg</file>
<file>icons/Part_Polygon_Parametric.svg</file>
<file>icons/Part_Spline_Parametric.svg</file>
<file>icons/Tree_Part_Box_Parametric.svg</file>
<file>icons/Tree_Part_Cylinder_Parametric.svg</file>
<file>icons/Tree_Part_Cone_Parametric.svg</file>
Expand Down

0 comments on commit 0656735

Please sign in to comment.