Assembly: Rename to setActiveBody and make link indeipendant Part initialization

This commit is contained in:
jriegel
2014-09-25 12:06:50 +02:00
committed by Stefan Tröger
parent 271bb65cbd
commit dc4fdc2c53
14 changed files with 175 additions and 76 deletions

View File

@@ -29,6 +29,8 @@
#include <Base/PyObjectBase.h>
#include <Base/Console.h>
#include <App/PartPy.h>
#include <Gui/Application.h>
#include <Gui/Document.h>
#include <Gui/ViewProviderDocumentObject.h>
@@ -36,6 +38,8 @@
#include <Mod/PartDesign/App/BodyPy.h>
#include "ViewProviderBody.h"
#include "Workbench.h"
namespace PartDesignGui {
@@ -50,7 +54,7 @@ const char* BaseplaneNames[3] = {"BaseplaneXY", "BaseplaneXZ", "BaseplaneYZ"};
}
static PyObject * setActivePart(PyObject *self, PyObject *args)
static PyObject * setActiveBody(PyObject *self, PyObject *args)
{
PyObject *object=0;
if (PyArg_ParseTuple(args,"|O!",&(PartDesign::BodyPy::Type), &object)&& object) {
@@ -78,7 +82,7 @@ static PyObject * setActivePart(PyObject *self, PyObject *args)
Py_Return;
}
static PyObject * getActivePart(PyObject *, PyObject *)
static PyObject * getActiveBody(PyObject *, PyObject *)
{
if (PartDesignGui::ActivePartObject == NULL) {
return Py::_None();
@@ -87,13 +91,35 @@ static PyObject * getActivePart(PyObject *, PyObject *)
return PartDesignGui::ActivePartObject->getPyObject();
}
void setUpPart(App::Part *part);
static PyObject * setUpPart(PyObject *self, PyObject *args)
{
PyObject *object=0;
if (! PyArg_ParseTuple(args,"O!",&(App::PartPy::Type), &object) )
return NULL;
App::Part* part = static_cast<App::PartPy*>(object)->getPartPtr();
// Should be set!
assert(part);
PartDesignGui::Workbench::setUpPart(part);
Py_Return;
}
/* registration table */
struct PyMethodDef Assembly_methods[] = {
{"setActivePart" ,setActivePart ,METH_VARARGS,
"setActivePart(BodyObject) -- Set the PartBody object in work."},
{"setActiveBody" ,setActiveBody ,METH_VARARGS,
"setActiveBody(BodyObject) -- Set the PartBody object in work."},
{"getActivePart" ,getActivePart ,METH_NOARGS,
"getActivePart() -- Get the PartBody object in work."},
{"setActiveBody" ,getActiveBody ,METH_NOARGS,
"setActiveBody() -- Get the PartBody object in work."},
{"setUpPart" ,setUpPart ,METH_VARARGS,
"setUpPart(Part) -- Sets a empty part object up for usage in PartDesign."},
{NULL, NULL} /* end of table marker */
};

View File

@@ -29,6 +29,8 @@
#include <Base/PyObjectBase.h>
#include <Base/Console.h>
#include <App/PartPy.h>
#include <Gui/Application.h>
#include <Gui/Document.h>
#include <Gui/ViewProviderDocumentObject.h>
@@ -36,6 +38,8 @@
#include <Mod/PartDesign/App/BodyPy.h>
#include "ViewProviderBody.h"
#include "Workbench.h"
namespace PartDesignGui {
@@ -50,7 +54,7 @@ const char* BaseplaneNames[3] = {"BaseplaneXY", "BaseplaneXZ", "BaseplaneYZ"};
}
static PyObject * setActivePart(PyObject *self, PyObject *args)
static PyObject * setActiveBody(PyObject *self, PyObject *args)
{
PyObject *object=0;
if (PyArg_ParseTuple(args,"|O!",&(PartDesign::BodyPy::Type), &object)&& object) {
@@ -78,10 +82,12 @@ static PyObject * setActivePart(PyObject *self, PyObject *args)
Py_Return;
}
<<<<<<< 35072e8d22a22eaf711a74958d47b351d55292ae:src/Mod/Assembly/App/AppAssemblyPy.cpp
<<<<<<< 394f4c51924312cf9cfcce09be5c3ba696a82cf4:src/Mod/Assembly/App/AppAssemblyPy.cpp
static PyObject * getActivePart(PyObject *, PyObject *)
=======
static PyObject * getActivePart(PyObject *, PyObject *)
static PyObject * getActiveBody(PyObject *, PyObject *)
>>>>>>> Assembly: Rename to setActiveBody and make link indeipendant Part initialization:src/Mod/PartDesign/Gui/AppPartDesignGuiPy.cpp
{
if (PartDesignGui::ActivePartObject == NULL) {
return Py::_None();
@@ -90,18 +96,41 @@ static PyObject * getActivePart(PyObject *, PyObject *)
return PartDesignGui::ActivePartObject->getPyObject();
}
>>>>>>> getActivePart() python function as complement to setActivePart():src/Mod/PartDesign/Gui/AppPartDesignGuiPy.cpp
void setUpPart(App::Part *part);
static PyObject * setUpPart(PyObject *self, PyObject *args)
{
PyObject *object=0;
if (! PyArg_ParseTuple(args,"O!",&(App::PartPy::Type), &object) )
return NULL;
App::Part* part = static_cast<App::PartPy*>(object)->getPartPtr();
// Should be set!
assert(part);
PartDesignGui::Workbench::setUpPart(part);
Py_Return;
}
/* registration table */
<<<<<<< 394f4c51924312cf9cfcce09be5c3ba696a82cf4:src/Mod/Assembly/App/AppAssemblyPy.cpp
struct PyMethodDef Assembly_methods[] = {
{"setActivePart" ,setActivePart ,METH_VARARGS,
"setActivePart(BodyObject) -- Set the PartBody object in work."},
<<<<<<< 35072e8d22a22eaf711a74958d47b351d55292ae:src/Mod/Assembly/App/AppAssemblyPy.cpp
{NULL, NULL} /* end of table marker */
=======
{"getActivePart" ,getActivePart ,METH_NOARGS,
"getActivePart() -- Get the PartBody object in work."},
struct PyMethodDef PartDesignGui_Import_methods[] = {
{"setActiveBody" ,setActiveBody ,METH_VARARGS,
"setActiveBody(BodyObject) -- Set the PartBody object in work."},
{NULL, NULL} /* end of table marker */
>>>>>>> getActivePart() python function as complement to setActivePart():src/Mod/PartDesign/Gui/AppPartDesignGuiPy.cpp
{"setActiveBody" ,getActiveBody ,METH_NOARGS,
"setActiveBody() -- Get the PartBody object in work."},
>>>>>>> Assembly: Rename to setActiveBody and make link indeipendant Part initialization:src/Mod/PartDesign/Gui/AppPartDesignGuiPy.cpp
{"setUpPart" ,setUpPart ,METH_VARARGS,
"setUpPart(Part) -- Sets a empty part object up for usage in PartDesign."},
{NULL, NULL} /* end of table marker */
};

View File

@@ -25,7 +25,6 @@ set(AssemblyGui_LIBS
#${ODE_LIBRARIES}
Assembly
PartGui
PartDesignGui
FreeCADGui
)

View File

@@ -35,7 +35,6 @@
#include <Gui/Command.h>
#include <Gui/Document.h>
#include <Gui/DlgCheckableMessageBox.h>
#include <Mod/PartDesign/Gui/Workbench.h>
#include <App/Part.h>
#include "Workbench.h"
@@ -57,8 +56,11 @@ void switchToDocument(const App::Document* doc)
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().%s.Items = App.activeDocument().%s",ProductName.c_str(),RefName.c_str());
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().addObject('App::Part','%s')",PartName.c_str());
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().%s.Item = App.activeDocument().%s",RefName.c_str(),PartName.c_str());
PartDesignGui::Workbench::setUpPart(dynamic_cast<App::Part *>( doc->getObject(PartName.c_str())) );
Gui::Command::addModule(Gui::Command::Gui,"AssemblyGui");
Gui::Command::doCommand(Gui::Command::Doc,"AssemblyGui.setActiveAssembly(App.activeDocument().%s)",ProductName.c_str());
// create a PartDesign Part for now, can be later any kind of Part or an empty one
Gui::Command::addModule(Gui::Command::Doc,"PartDesignGui");
Gui::Command::doCommand(Gui::Command::Doc,"PartDesignGui.setUpPart(App.activeDocument().%s)",PartName.c_str());
}
}

View File

@@ -123,7 +123,7 @@ void CmdPartDesignBody::activated(int iMsg)
//doCommand(Doc,"App.activeDocument().%s.Model = []",FeatName.c_str());
//doCommand(Doc,"App.activeDocument().%s.Tip = None",FeatName.c_str());
addModule(Gui,"PartDesignGui"); // import the Gui module only once a session
doCommand(Gui,"PartDesignGui.setActivePart(App.ActiveDocument.%s)", FeatName.c_str());
doCommand(Gui,"PartDesignGui.setActiveBody(App.ActiveDocument.%s)", FeatName.c_str());
// Make the "Create sketch" prompt appear in the task panel
doCommand(Gui,"Gui.Selection.clearSelection()");
doCommand(Gui,"Gui.Selection.addSelection(App.ActiveDocument.%s)", FeatName.c_str());
@@ -174,7 +174,7 @@ void CmdPartDesignMoveTip::activated(int iMsg)
// Switch to other body
pcActiveBody = static_cast<PartDesign::Body*>(Part::BodyBase::findBodyOf(selFeature));
if (pcActiveBody != NULL)
Gui::Command::doCommand(Gui::Command::Gui,"PartDesignGui.setActivePart(App.activeDocument().%s)",
Gui::Command::doCommand(Gui::Command::Gui,"PartDesignGui.setActiveBody(App.activeDocument().%s)",
pcActiveBody->getNameInDocument());
else
return;
@@ -244,7 +244,7 @@ void CmdPartDesignDuplicateSelection::activated(int iMsg)
// Switch to other body
pcActiveBody = static_cast<PartDesign::Body*>(Part::BodyBase::findBodyOf(selFeature));
if (pcActiveBody != NULL)
Gui::Command::doCommand(Gui::Command::Gui,"PartDesignGui.setActivePart(App.activeDocument().%s)",
Gui::Command::doCommand(Gui::Command::Gui,"PartDesignGui.setActiveBody(App.activeDocument().%s)",
pcActiveBody->getNameInDocument());
else
return;

View File

@@ -105,7 +105,7 @@ bool ViewProviderBody::doubleClicked(void)
// assure the PartDesign workbench
Gui::Command::assureWorkbench("PartDesignWorkbench");
Gui::Command::addModule(Gui::Command::Gui,"PartDesignGui");
Gui::Command::doCommand(Gui::Command::Gui,"PartDesignGui.setActivePart(App.activeDocument().%s)",this->getObject()->getNameInDocument());
Gui::Command::doCommand(Gui::Command::Gui,"PartDesignGui.setActiveBody(App.activeDocument().%s)",this->getObject()->getNameInDocument());
return true;
}

View File

@@ -46,6 +46,7 @@
#include <Gui/ToolBarManager.h>
#include <Gui/Control.h>
#include <Gui/DlgCheckableMessageBox.h>
#include <Gui/ViewProviderPart.h>
#include <Mod/Sketcher/Gui/Workbench.h>
#include <Mod/Part/App/Part2DObject.h>
@@ -100,44 +101,7 @@ Workbench::~Workbench()
PartDesign::Body *Workbench::setUpPart(const App::Part *part)
{
// add the standard planes at the root of the feature tree
// first check if they already exist
// FIXME: If the user renames them, they won't be found...
bool found = false;
std::vector<App::DocumentObject*> planes = part->getObjectsOfType(App::Plane::getClassTypeId());
for (std::vector<App::DocumentObject*>::const_iterator p = planes.begin(); p != planes.end(); p++) {
for (unsigned i = 0; i < 3; i++) {
if (strcmp(PartDesignGui::BaseplaneNames[i], (*p)->getNameInDocument()) == 0) {
found = true;
break;
}
}
if (found) break;
}
if (!found) {
// ... and put them in the 'Origin' group
Gui::Command::doCommand(Gui::Command::Doc,"OGroup = App.activeDocument().addObject('App::DocumentObjectGroup','%s')", "Origin");
Gui::Command::doCommand(Gui::Command::Doc,"OGroup.Label = '%s'", QObject::tr("Origin").toStdString().c_str());
// Add the planes ...
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().addObject('App::Plane','%s')", PartDesignGui::BaseplaneNames[0]);
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().ActiveObject.Label = '%s'", QObject::tr("XY-Plane").toStdString().c_str());
Gui::Command::doCommand(Gui::Command::Doc,"OGroup.addObject(App.activeDocument().ActiveObject)");
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().addObject('App::Plane','%s')", PartDesignGui::BaseplaneNames[1]);
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().ActiveObject.Placement = App.Placement(App.Vector(),App.Rotation(App.Vector(1,0,0),-90))");
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().ActiveObject.Label = '%s'", QObject::tr("XZ-Plane").toStdString().c_str());
Gui::Command::doCommand(Gui::Command::Doc,"OGroup.addObject(App.activeDocument().ActiveObject)");
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().addObject('App::Plane','%s')", PartDesignGui::BaseplaneNames[2]);
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().ActiveObject.Placement = App.Placement(App.Vector(),App.Rotation(App.Vector(0,1,0),90))");
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().ActiveObject.Label = '%s'", QObject::tr("YZ-Plane").toStdString().c_str());
Gui::Command::doCommand(Gui::Command::Doc,"OGroup.addObject(App.activeDocument().ActiveObject)");
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().%s.addObject(OGroup)", part->getNameInDocument());
// TODO: Fold the group (is that possible through the Python interface?)
}
Gui::ViewProviderPart::setUpPart(part);
return NULL;
}
@@ -408,7 +372,7 @@ void switchToDocument(const App::Document* doc)
if (activeBody != NULL) {
Gui::Command::doCommand(Gui::Command::Doc,"import PartDesignGui");
Gui::Command::doCommand(Gui::Command::Gui,"PartDesignGui.setActivePart(App.activeDocument().%s)", activeBody->getNameInDocument());
Gui::Command::doCommand(Gui::Command::Gui,"PartDesignGui.setActiveBody(App.activeDocument().%s)", activeBody->getNameInDocument());
} else {
QMessageBox::critical(Gui::getMainWindow(), QObject::tr("Could not create body"),
QObject::tr("No body was found in this document, and none could be created. Please report this bug."
@@ -670,7 +634,7 @@ void Workbench::deactivated()
removeTaskWatcher();
// reset the active Body
Gui::Command::doCommand(Gui::Command::Doc,"import PartDesignGui");
Gui::Command::doCommand(Gui::Command::Gui,"PartDesignGui.setActivePart(None)");
Gui::Command::doCommand(Gui::Command::Gui,"PartDesignGui.setActiveBody(None)");
Gui::Workbench::deactivated();