Skip to content

Commit

Permalink
Part: make reverse function parametric
Browse files Browse the repository at this point in the history
  • Loading branch information
wwmayer committed Jan 29, 2020
1 parent 1350da3 commit 4142fb9
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 9 deletions.
7 changes: 4 additions & 3 deletions src/Mod/Part/App/AppPart.cpp
Expand Up @@ -487,12 +487,13 @@ PyMOD_INIT_FUNC(Part)
Part::Offset2D ::init();
Part::Thickness ::init();
Part::Refine ::init();
Part::Reverse ::init();

// Geometry types
Part::GeometryExtension ::init();
Part::GeometryIntExtension ::init();
Part::GeometryExtension ::init();
Part::GeometryIntExtension ::init();
Part::GeometryStringExtension ::init();
Part::GeometryBoolExtension ::init();
Part::GeometryBoolExtension ::init();
Part::GeometryDoubleExtension ::init();
Part::Geometry ::init();
Part::GeomPoint ::init();
Expand Down
26 changes: 26 additions & 0 deletions src/Mod/Part/App/PartFeatures.cpp
Expand Up @@ -694,3 +694,29 @@ App::DocumentObjectExecReturn *Refine::execute(void)
return new App::DocumentObjectExecReturn(e.GetMessageString());
}
}

// ----------------------------------------------------------------------------

PROPERTY_SOURCE(Part::Reverse, Part::Feature)

Reverse::Reverse()
{
ADD_PROPERTY_TYPE(Source, (0), "Reverse", App::Prop_None, "Source shape");
}

App::DocumentObjectExecReturn* Reverse::execute(void)
{
Part::Feature* source = Source.getValue<Part::Feature*>();
if (!source)
return new App::DocumentObjectExecReturn("No part object linked.");

try {
TopoDS_Shape myShape = source->Shape.getValue();
if (!myShape.IsNull())
this->Shape.setValue(myShape.Reversed());
return App::DocumentObject::StdReturn;
}
catch (Standard_Failure & e) {
return new App::DocumentObjectExecReturn(e.GetMessageString());
}
}
19 changes: 19 additions & 0 deletions src/Mod/Part/App/PartFeatures.h
Expand Up @@ -173,6 +173,25 @@ class Refine : public Part::Feature
//@}
};

class Reverse : public Part::Feature
{
PROPERTY_HEADER(Part::Reverse);

public:
Reverse();

App::PropertyLink Source;

/** @name methods override feature */
//@{
/// recalculate the feature
App::DocumentObjectExecReturn* execute(void);
const char* getViewProviderName(void) const {
return "PartGui::ViewProviderReverse";
}
//@}
};

} //namespace Part


Expand Down
1 change: 1 addition & 0 deletions src/Mod/Part/Gui/AppPartGui.cpp
Expand Up @@ -172,6 +172,7 @@ PyMOD_INIT_FUNC(PartGui)
PartGui::ViewProviderOffset2D ::init();
PartGui::ViewProviderThickness ::init();
PartGui::ViewProviderRefine ::init();
PartGui::ViewProviderReverse ::init();
PartGui::ViewProviderCustom ::init();
PartGui::ViewProviderCustomPython ::init();
PartGui::ViewProviderBoolean ::init();
Expand Down
13 changes: 7 additions & 6 deletions src/Mod/Part/Gui/Command.cpp
Expand Up @@ -1235,17 +1235,15 @@ void CmdPartReverseShape::activated(int iMsg)
Q_UNUSED(iMsg);
std::vector<App::DocumentObject*> objs = Gui::Selection().getObjectsOfType
(Part::Feature::getClassTypeId());
runCommand(Doc, "import Part");
openCommand("Reverse");
for (std::vector<App::DocumentObject*>::iterator it = objs.begin(); it != objs.end(); ++it) {
const TopoDS_Shape& shape = Part::Feature::getShape(*it);
if (!shape.IsNull()) {
QString str = QString::fromLatin1(
"__s__=App.ActiveDocument.%1.Shape.copy()\n"
"__s__.reverse()\n"
"__o__=App.ActiveDocument.addObject(\"Part::Feature\",\"%1_rev\")\n"
"__o__=App.ActiveDocument.addObject(\"Part::Reverse\",\"%1_rev\")\n"
"__o__.Source=App.ActiveDocument.%1\n"
"__o__.Label=\"%2 (Rev)\"\n"
"__o__.Shape=__s__\n"
"del __s__, __o__"
"del __o__"
)
.arg(QLatin1String((*it)->getNameInDocument()))
.arg(QLatin1String((*it)->Label.getValue()));
Expand All @@ -1260,6 +1258,9 @@ void CmdPartReverseShape::activated(int iMsg)
}
}
}

commitCommand();
updateActive();
}

bool CmdPartReverseShape::isActive(void)
Expand Down
14 changes: 14 additions & 0 deletions src/Mod/Part/Gui/ViewProviderMirror.cpp
Expand Up @@ -686,3 +686,17 @@ ViewProviderRefine::ViewProviderRefine()
ViewProviderRefine::~ViewProviderRefine()
{
}

// ---------------------------------------

PROPERTY_SOURCE(PartGui::ViewProviderReverse, PartGui::ViewProviderPart)

ViewProviderReverse::ViewProviderReverse()
{
//TODO: Need a specific icon here!
//sPixmap = "Part_Reverse_Shape";
}

ViewProviderReverse::~ViewProviderReverse()
{
}
11 changes: 11 additions & 0 deletions src/Mod/Part/Gui/ViewProviderMirror.h
Expand Up @@ -204,6 +204,17 @@ class ViewProviderRefine : public ViewProviderPart
virtual ~ViewProviderRefine();
};

class ViewProviderReverse : public ViewProviderPart
{
PROPERTY_HEADER(PartGui::ViewProviderReverse);

public:
/// constructor
ViewProviderReverse();
/// destructor
virtual ~ViewProviderReverse();
};

} // namespace PartGui


Expand Down

0 comments on commit 4142fb9

Please sign in to comment.