Create standard XY, XZ, YZ planes when running the PartDesign_Body command if they don't exist yet
This commit is contained in:
parent
acd88878af
commit
7dee0b7018
|
@ -41,6 +41,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include <App/DocumentObjectGroup.h>
|
#include <App/DocumentObjectGroup.h>
|
||||||
|
#include <App/Plane.h>
|
||||||
#include <Gui/Application.h>
|
#include <Gui/Application.h>
|
||||||
#include <Gui/Command.h>
|
#include <Gui/Command.h>
|
||||||
#include <Gui/Control.h>
|
#include <Gui/Control.h>
|
||||||
|
@ -100,10 +101,48 @@ CmdPartDesignBody::CmdPartDesignBody()
|
||||||
|
|
||||||
void CmdPartDesignBody::activated(int iMsg)
|
void CmdPartDesignBody::activated(int iMsg)
|
||||||
{
|
{
|
||||||
std::string FeatName = getUniqueObjectName("Body");
|
|
||||||
openCommand("Add a body feature");
|
openCommand("Add a body feature");
|
||||||
doCommand(Doc,"App.activeDocument().addObject('PartDesign::Body','%s')",FeatName.c_str());
|
std::string FeatName = getUniqueObjectName("Body");
|
||||||
|
|
||||||
|
// 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 = getDocument()->getObjectsOfType(App::Plane::getClassTypeId());
|
||||||
|
for (std::vector<App::DocumentObject*>::const_iterator p = planes.begin(); p != planes.end(); p++) {
|
||||||
|
if ((strcmp("Body_PlaneXY", (*p)->getNameInDocument()) == 0) ||
|
||||||
|
(strcmp("Body_PlaneYZ", (*p)->getNameInDocument()) == 0) ||
|
||||||
|
(strcmp("Body_PlaneXZ", (*p)->getNameInDocument()) == 0)) {
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found) {
|
||||||
|
// Add the planes ...
|
||||||
|
doCommand(Doc,"App.activeDocument().addObject('App::Plane','Body_PlaneXY')");
|
||||||
|
doCommand(Doc,"App.activeDocument().ActiveObject.Label = 'XY-Plane'");
|
||||||
|
doCommand(Doc,"App.activeDocument().addObject('App::Plane','Body_PlaneYZ')");
|
||||||
|
doCommand(Doc,"App.activeDocument().ActiveObject.Placement = App.Placement(App.Vector(),App.Rotation(App.Vector(0,1,0),90))");
|
||||||
|
doCommand(Doc,"App.activeDocument().ActiveObject.Label = 'YZ-Plane'");
|
||||||
|
doCommand(Doc,"App.activeDocument().addObject('App::Plane','Body_PlaneXZ')");
|
||||||
|
doCommand(Doc,"App.activeDocument().ActiveObject.Placement = App.Placement(App.Vector(),App.Rotation(App.Vector(1,0,0),90))");
|
||||||
|
doCommand(Doc,"App.activeDocument().ActiveObject.Label = 'XZ-Plane'");
|
||||||
|
// ... and put them in the 'Origin' group
|
||||||
|
doCommand(Doc,"App.activeDocument().addObject('App::DocumentObjectGroup','Origin')");
|
||||||
|
doCommand(Doc,"App.activeDocument().Origin.addObject(App.activeDocument().getObject('Body_PlaneXY'))");
|
||||||
|
doCommand(Doc,"App.activeDocument().Origin.addObject(App.activeDocument().getObject('Body_PlaneYZ'))");
|
||||||
|
doCommand(Doc,"App.activeDocument().Origin.addObject(App.activeDocument().getObject('Body_PlaneXZ'))");
|
||||||
|
// TODO: Fold the group (is that possible through the Python interface?)
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the Body feature itself, and make it active
|
||||||
|
doCommand(Doc,"App.activeDocument().addObject('PartDesign::Body','%s')",FeatName.c_str());
|
||||||
|
doCommand(Gui,"PartDesignGui.setActivePart(App.ActiveDocument.ActiveObject)");
|
||||||
|
// Make the "Create sketch" prompt appear in the task panel
|
||||||
|
doCommand(Gui,"Gui.Selection.addSelection(App.ActiveDocument.ActiveObject)");
|
||||||
|
|
||||||
|
updateActive();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CmdPartDesignBody::isActive(void)
|
bool CmdPartDesignBody::isActive(void)
|
||||||
|
@ -960,7 +999,7 @@ bool CmdPartDesignDraft::isActive(void)
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
// Common functions for all Transformed features
|
// Common functions for all Transformed features
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
;;;
|
|
||||||
void prepareTransformed(Gui::Command* cmd, const std::string& which,
|
void prepareTransformed(Gui::Command* cmd, const std::string& which,
|
||||||
std::vector<App::DocumentObject*>& features, std::string& FeatName,
|
std::vector<App::DocumentObject*>& features, std::string& FeatName,
|
||||||
std::vector<std::string>& selList, std::string& selNames)
|
std::vector<std::string>& selList, std::string& selNames)
|
||||||
|
|
|
@ -153,7 +153,9 @@ void Workbench::activated()
|
||||||
|
|
||||||
// make the previously used active Body active again
|
// make the previously used active Body active again
|
||||||
PartDesign::Body* activeBody = NULL;
|
PartDesign::Body* activeBody = NULL;
|
||||||
std::vector<App::DocumentObject*> bodies = App::GetApplication().getActiveDocument()->getObjectsOfType(PartDesign::Body::getClassTypeId());
|
App::Document* activeDocument = App::GetApplication().getActiveDocument();
|
||||||
|
if (activeDocument != NULL) {
|
||||||
|
std::vector<App::DocumentObject*> bodies = activeDocument->getObjectsOfType(PartDesign::Body::getClassTypeId());
|
||||||
for (std::vector<App::DocumentObject*>::const_iterator b = bodies.begin(); b != bodies.end(); b++) {
|
for (std::vector<App::DocumentObject*>::const_iterator b = bodies.begin(); b != bodies.end(); b++) {
|
||||||
PartDesign::Body* body = static_cast<PartDesign::Body*>(*b);
|
PartDesign::Body* body = static_cast<PartDesign::Body*>(*b);
|
||||||
if (body->IsActive.getValue()) {
|
if (body->IsActive.getValue()) {
|
||||||
|
@ -161,9 +163,12 @@ void Workbench::activated()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there is only one body, make it active
|
// If there is only one body, make it active
|
||||||
if ((activeBody == NULL) && (bodies.size() == 1))
|
if ((activeBody == NULL) && (bodies.size() == 1))
|
||||||
activeBody = static_cast<PartDesign::Body*>(bodies.front());
|
activeBody = static_cast<PartDesign::Body*>(bodies.front());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (activeBody != NULL) {
|
if (activeBody != NULL) {
|
||||||
Gui::Command::doCommand(Gui::Command::Doc,"import PartDesignGui");
|
Gui::Command::doCommand(Gui::Command::Doc,"import PartDesignGui");
|
||||||
|
|
|
@ -21,10 +21,7 @@
|
||||||
#* *
|
#* *
|
||||||
#***************************************************************************
|
#***************************************************************************
|
||||||
|
|
||||||
import FreeCADGui, PartDesignGui
|
import FreeCADGui
|
||||||
FreeCADGui.activateWorkbench("PartDesignWorkbench")
|
FreeCADGui.activateWorkbench("PartDesignWorkbench")
|
||||||
App.newDocument()
|
App.newDocument()
|
||||||
App.ActiveDocument.addObject("PartDesign::Body")
|
FreeCADGui.runCommand('PartDesign_Body')
|
||||||
PartDesignGui.setActivePart(App.ActiveDocument.ActiveObject)
|
|
||||||
# Make the "Create sketch" prompt appear in the task panel
|
|
||||||
Gui.Selection.addSelection(App.ActiveDocument.ActiveObject)
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user