[TD]Landmark Dims initial impl
This commit is contained in:
@@ -54,6 +54,7 @@
|
||||
# include <Mod/TechDraw/App/DrawProjGroup.h>
|
||||
# include <Mod/TechDraw/App/DrawViewDimension.h>
|
||||
# include <Mod/TechDraw/App/DrawDimHelper.h>
|
||||
# include <Mod/TechDraw/App/LandmarkDimension.h>
|
||||
# include <Mod/TechDraw/App/DrawPage.h>
|
||||
# include <Mod/TechDraw/App/DrawUtil.h>
|
||||
# include <Mod/TechDraw/App/Geometry.h>
|
||||
@@ -1338,6 +1339,101 @@ void execVExtent(Gui::Command* cmd)
|
||||
1);
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
// TechDraw_LandmarkDimension
|
||||
//===========================================================================
|
||||
|
||||
DEF_STD_CMD_A(CmdTechDrawLandmarkDimension)
|
||||
|
||||
CmdTechDrawLandmarkDimension::CmdTechDrawLandmarkDimension()
|
||||
: Command("TechDraw_LandmarkDimension")
|
||||
{
|
||||
sAppModule = "TechDraw";
|
||||
sGroup = QT_TR_NOOP("TechDraw");
|
||||
sMenuText = QT_TR_NOOP("Insert Landmark Dimension");
|
||||
sToolTipText = sMenuText;
|
||||
sWhatsThis = "TechDraw_LandmarkDimension";
|
||||
sStatusTip = sToolTipText;
|
||||
sPixmap = "techdraw-landmarkdistance";
|
||||
}
|
||||
|
||||
void CmdTechDrawLandmarkDimension::activated(int iMsg)
|
||||
{
|
||||
Q_UNUSED(iMsg);
|
||||
bool result = _checkSelection(this,3); //redundant??
|
||||
if (!result)
|
||||
return;
|
||||
|
||||
const std::vector<App::DocumentObject*> objects = getSelection().
|
||||
getObjectsOfType(Part::Feature::getClassTypeId()); //??
|
||||
if ( (objects.size() != 2) &&
|
||||
(objects.size() != 3) ) {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
QObject::tr("Select 2 or 3 point objects and 1 View. (1)"));
|
||||
return;
|
||||
}
|
||||
|
||||
const std::vector<App::DocumentObject*> views = getSelection().
|
||||
getObjectsOfType(TechDraw::DrawViewPart::getClassTypeId());
|
||||
if (views.size() != 1) {
|
||||
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
|
||||
QObject::tr("Select 2 or 3 two point objects and 1 View. (2)"));
|
||||
return;
|
||||
}
|
||||
|
||||
TechDraw::DrawViewPart* dvp = dynamic_cast<TechDraw::DrawViewPart*>(views.front());
|
||||
|
||||
std::vector<App::DocumentObject*> refs2d;
|
||||
|
||||
std::vector<std::string> subs;
|
||||
subs.push_back("Vertex1");
|
||||
subs.push_back("Vertex1");
|
||||
TechDraw::DrawPage* page = dvp->findParentPage();
|
||||
std::string parentName = dvp->getNameInDocument();
|
||||
std::string PageName = page->getNameInDocument();
|
||||
|
||||
TechDraw::LandmarkDimension *dim = 0;
|
||||
std::string FeatName = getUniqueObjectName("LandmarkDim");
|
||||
|
||||
openCommand("Create Dimension");
|
||||
doCommand(Doc,"App.activeDocument().addObject('TechDraw::LandmarkDimension','%s')",FeatName.c_str());
|
||||
doCommand(Doc,"App.activeDocument().%s.addView(App.activeDocument().%s)",PageName.c_str(),FeatName.c_str());
|
||||
if (objects.size() == 2) {
|
||||
//what about distanceX and distanceY??
|
||||
doCommand(Doc,"App.activeDocument().%s.Type = '%s'",FeatName.c_str(), "Distance");
|
||||
refs2d.push_back(dvp);
|
||||
refs2d.push_back(dvp);
|
||||
} else if (objects.size() == 3) {
|
||||
doCommand(Doc,"App.activeDocument().%s.Type = '%s'",FeatName.c_str(), "Angle3Pt");
|
||||
refs2d.push_back(dvp);
|
||||
refs2d.push_back(dvp);
|
||||
refs2d.push_back(dvp);
|
||||
subs.push_back("Vertex1");
|
||||
}
|
||||
|
||||
dim = dynamic_cast<TechDraw::LandmarkDimension *>(getDocument()->getObject(FeatName.c_str()));
|
||||
if (!dim) {
|
||||
throw Base::TypeError("CmdTechDrawLandmarkDimension - dim not found\n");
|
||||
}
|
||||
dim->References2D.setValues(refs2d, subs);
|
||||
dim->References3D.setValues(objects, subs);
|
||||
|
||||
commitCommand();
|
||||
dim->recomputeFeature();
|
||||
|
||||
//Horrible hack to force Tree update
|
||||
double x = dvp->X.getValue();
|
||||
dvp->X.setValue(x);
|
||||
}
|
||||
|
||||
bool CmdTechDrawLandmarkDimension::isActive(void)
|
||||
{
|
||||
bool havePage = DrawGuiUtil::needPage(this);
|
||||
bool haveView = DrawGuiUtil::needView(this);
|
||||
return (havePage && haveView);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void CreateTechDrawCommandsDims(void)
|
||||
{
|
||||
@@ -1355,6 +1451,7 @@ void CreateTechDrawCommandsDims(void)
|
||||
rcCmdMgr.addCommand(new CmdTechDrawVerticalExtentDimension());
|
||||
rcCmdMgr.addCommand(new CmdTechDrawHorizontalExtentDimension());
|
||||
rcCmdMgr.addCommand(new CmdTechDrawLinkDimension());
|
||||
rcCmdMgr.addCommand(new CmdTechDrawLandmarkDimension());
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
Reference in New Issue
Block a user