| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include <TopoDS.hxx> |
| |
|
| |
|
| | #include "FeatureCut.h" |
| |
|
| |
|
| | using namespace Surface; |
| |
|
| | PROPERTY_SOURCE(Surface::Cut, Part::Feature) |
| |
|
| | Cut::Cut() |
| | { |
| | ADD_PROPERTY(ShapeList, (nullptr, "TopoDS_Shape")); |
| | ShapeList.setScope(App::LinkScope::Global); |
| | } |
| |
|
| | |
| |
|
| | short Cut::mustExecute() const |
| | { |
| | if (ShapeList.isTouched()) { |
| | return 1; |
| | } |
| | return 0; |
| | } |
| |
|
| | App::DocumentObjectExecReturn* Cut::execute() |
| | { |
| | |
| |
|
| | try { |
| | std::vector<App::DocumentObject*> shapes = ShapeList.getValues(); |
| | if (shapes.size() != 2) { |
| | return new App::DocumentObjectExecReturn( |
| | "Two shapes must be entered at a time for a cut operation" |
| | ); |
| | } |
| |
|
| | Part::TopoShape ts1; |
| | Part::TopoShape ts2; |
| |
|
| | |
| | if (shapes[0]->isDerivedFrom<Part::Feature>()) { |
| | ts1 = static_cast<Part::Feature*>(shapes[0])->Shape.getShape(); |
| | } |
| | else { |
| | return new App::DocumentObjectExecReturn("Shape1 not from Part::Feature"); |
| | } |
| |
|
| | |
| | if (shapes[1]->isDerivedFrom<Part::Feature>()) { |
| | ts2 = static_cast<Part::Feature*>(shapes[1])->Shape.getShape(); |
| | } |
| | else { |
| | return new App::DocumentObjectExecReturn("Shape2 not from Part::Feature"); |
| | } |
| |
|
| | |
| | TopoDS_Shape aCutShape; |
| | aCutShape = ts1.cut(ts2.getShape()); |
| |
|
| | |
| | if (aCutShape.IsNull()) { |
| | return new App::DocumentObjectExecReturn("Resulting shape is null"); |
| | } |
| |
|
| | this->Shape.setValue(aCutShape); |
| | return nullptr; |
| | } |
| | catch (Standard_Failure& e) { |
| |
|
| | return new App::DocumentObjectExecReturn(e.GetMessageString()); |
| | } |
| | } |
| |
|