From 59e69bbe0e74ab376a173f6c310d8e2accafc7bd Mon Sep 17 00:00:00 2001 From: blobfish Date: Tue, 17 Dec 2013 09:43:55 -0500 Subject: [PATCH] Part Dimension: alterations to existing files Not sure what is happening with View3dInventorViewer.h. The only REAL change, beyond the addition of dim functions, is the removal of the member arrowrotation. It wasn't referenced anywhere. --- src/Gui/View3DInventor.cpp | 26 +++- src/Gui/View3DInventorViewer.cpp | 51 ++++++++ src/Gui/View3DInventorViewer.h | 45 ++++--- src/Mod/Part/Gui/AppPartGui.cpp | 5 +- src/Mod/Part/Gui/CMakeLists.txt | 3 + src/Mod/Part/Gui/Command.cpp | 180 ++++++++++++++++++++++++++++ src/Mod/Part/Gui/Resources/Part.qrc | 8 ++ src/Mod/Part/Gui/Workbench.cpp | 13 +- 8 files changed, 313 insertions(+), 18 deletions(-) diff --git a/src/Gui/View3DInventor.cpp b/src/Gui/View3DInventor.cpp index 01ed3653c..890cada0e 100644 --- a/src/Gui/View3DInventor.cpp +++ b/src/Gui/View3DInventor.cpp @@ -152,6 +152,9 @@ View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent, Qt::W OnChange(*hGrp,"OrbitStyle"); OnChange(*hGrp,"Sensitivity"); OnChange(*hGrp,"ResetCursorPosition"); + OnChange(*hGrp,"DimensionsVisible"); + OnChange(*hGrp,"Dimensions3dVisible"); + OnChange(*hGrp,"DimensionsDeltaVisible"); stopSpinTimer = new QTimer(this); connect(stopSpinTimer, SIGNAL(timeout()), this, SLOT(stopAnimating())); @@ -360,7 +363,28 @@ void View3DInventor::OnChange(ParameterGrp::SubjectType &rCaller,ParameterGrp::M else _viewer->setCameraType(SoPerspectiveCamera::getClassTypeId()); } - else { + else if (strcmp(Reason, "DimensionsVisible") == 0) + { + if (rGrp.GetBool("DimensionsVisible", true)) + _viewer->turnAllDimensionsOn(); + else + _viewer->turnAllDimensionsOff(); + } + else if (strcmp(Reason, "Dimensions3dVisible") == 0) + { + if (rGrp.GetBool("Dimensions3dVisible", true)) + _viewer->turn3dDimensionsOn(); + else + _viewer->turn3dDimensionsOff(); + } + else if (strcmp(Reason, "DimensionsDeltaVisible") == 0) + { + if (rGrp.GetBool("DimensionsDeltaVisible", true)) + _viewer->turnDeltaDimensionsOn(); + else + _viewer->turnDeltaDimensionsOff(); + } + else{ unsigned long col1 = rGrp.GetUnsigned("BackgroundColor",3940932863UL); unsigned long col2 = rGrp.GetUnsigned("BackgroundColor2",859006463UL); // default color (dark blue) unsigned long col3 = rGrp.GetUnsigned("BackgroundColor3",2880160255UL); // default color (blue/grey) diff --git a/src/Gui/View3DInventorViewer.cpp b/src/Gui/View3DInventorViewer.cpp index 02d410251..6aa1192d1 100644 --- a/src/Gui/View3DInventorViewer.cpp +++ b/src/Gui/View3DInventorViewer.cpp @@ -250,6 +250,11 @@ View3DInventorViewer::View3DInventorViewer (QWidget *parent, const char *name, pEventCallback->ref(); pcViewProviderRoot->addChild(pEventCallback); pEventCallback->addEventCallback(SoEvent::getClassTypeId(), handleEventCB, this); + + dimensionRoot = new SoSwitch(SO_SWITCH_NONE); + pcViewProviderRoot->addChild(dimensionRoot); + dimensionRoot->addChild(new SoSwitch()); //first one will be for the 3d dimensions. + dimensionRoot->addChild(new SoSwitch()); //second one for the delta dimensions. // This is a callback node that logs all action that traverse the Inventor tree. #if defined (FC_DEBUG) && defined(FC_LOGGING_CB) @@ -2182,3 +2187,49 @@ std::vector View3DInventorViewer::getViewProvidersOfType(const Ba } return views; } + +void View3DInventorViewer::turnAllDimensionsOn() +{ + dimensionRoot->whichChild = SO_SWITCH_ALL; +} + +void View3DInventorViewer::turnAllDimensionsOff() +{ + dimensionRoot->whichChild = SO_SWITCH_NONE; +} + +void View3DInventorViewer::eraseAllDimensions() +{ + static_cast(dimensionRoot->getChild(0))->removeAllChildren(); + static_cast(dimensionRoot->getChild(1))->removeAllChildren(); +} + +void View3DInventorViewer::turn3dDimensionsOn() +{ + static_cast(dimensionRoot->getChild(0))->whichChild = SO_SWITCH_ALL; +} + +void View3DInventorViewer::turn3dDimensionsOff() +{ + static_cast(dimensionRoot->getChild(0))->whichChild = SO_SWITCH_NONE; +} + +void View3DInventorViewer::addDimension3d(SoNode *node) +{ + static_cast(dimensionRoot->getChild(0))->addChild(node); +} + +void View3DInventorViewer::addDimensionDelta(SoNode *node) +{ + static_cast(dimensionRoot->getChild(1))->addChild(node); +} + +void View3DInventorViewer::turnDeltaDimensionsOn() +{ + static_cast(dimensionRoot->getChild(1))->whichChild = SO_SWITCH_ALL; +} + +void View3DInventorViewer::turnDeltaDimensionsOff() +{ + static_cast(dimensionRoot->getChild(1))->whichChild = SO_SWITCH_NONE; +} diff --git a/src/Gui/View3DInventorViewer.h b/src/Gui/View3DInventorViewer.h index d37fc9101..1728e381f 100644 --- a/src/Gui/View3DInventorViewer.h +++ b/src/Gui/View3DInventorViewer.h @@ -112,8 +112,8 @@ public: SbBool isBacklight(void) const; void setSceneGraph (SoNode *root); - void setAnimationEnabled(const SbBool enable); - SbBool isAnimationEnabled(void) const; + void setAnimationEnabled(const SbBool enable); + SbBool isAnimationEnabled(void) const; void setPopupMenuEnabled(const SbBool on); SbBool isPopupMenuEnabled(void) const; @@ -121,16 +121,16 @@ public: void startAnimating(const SbVec3f& axis, float velocity); void stopAnimating(void); SbBool isAnimating(void) const; - - void setFeedbackVisibility(const SbBool enable); - SbBool isFeedbackVisible(void) const; - - void setFeedbackSize(const int size); - int getFeedbackSize(void) const; - void setRenderFramebuffer(const SbBool enable); - SbBool isRenderFramebuffer() const; - void renderToFramebuffer(QGLFramebufferObject*); + void setFeedbackVisibility(const SbBool enable); + SbBool isFeedbackVisible(void) const; + + void setFeedbackSize(const int size); + int getFeedbackSize(void) const; + + void setRenderFramebuffer(const SbBool enable); + SbBool isRenderFramebuffer() const; + void renderToFramebuffer(QGLFramebufferObject*); virtual void setViewing(SbBool enable); virtual void setCursorEnabled(SbBool enable); @@ -193,8 +193,8 @@ public: void setEditingCursor (const QCursor& cursor); void setRedirectToSceneGraph(SbBool redirect) { this->redirected = redirect; } SbBool isRedirectedToSceneGraph() const { return this->redirected; } - void setRedirectToSceneGraphEnabled(SbBool enable) { this->allowredir = enable; } - SbBool isRedirectToSceneGraphEnabled(void) const { return this->allowredir; } + void setRedirectToSceneGraphEnabled(SbBool enable) { this->allowredir = enable; } + SbBool isRedirectToSceneGraphEnabled(void) const { return this->allowredir; } //@} /** @name Pick actions */ @@ -241,6 +241,23 @@ public: /** Project the given normalized 2d point onto the far plane */ SbVec3f projectOnFarPlane(const SbVec2f&) const; //@} + + /** @name Dimension controls + * the "turn*" functions are wired up to parameter groups through view3dinventor. + * don't call them directly. instead set the parameter groups. + * @see TaskDimension + */ + //@{ + void turnAllDimensionsOn(); + void turnAllDimensionsOff(); + void turn3dDimensionsOn(); + void turn3dDimensionsOff(); + void turnDeltaDimensionsOn(); + void turnDeltaDimensionsOff(); + void eraseAllDimensions(); + void addDimension3d(SoNode *node); + void addDimensionDelta(SoNode *node); + //@} /** * Set the camera's orientation. If isAnimationEnabled() returns @@ -320,7 +337,6 @@ private: SoFCBackgroundGradient *pcBackGround; SoSeparator * backgroundroot; SoSeparator * foregroundroot; - SoRotationXYZ * arrowrotation; SoDirectionalLight* backlight; SoSeparator * pcViewProviderRoot; @@ -328,6 +344,7 @@ private: NavigationStyle* navigation; SoFCUnifiedSelection* selectionRoot; QGLFramebufferObject* framebuffer; + SoSwitch *dimensionRoot; // small axis cross in the corner SbBool axiscrossEnabled; diff --git a/src/Mod/Part/Gui/AppPartGui.cpp b/src/Mod/Part/Gui/AppPartGui.cpp index 1a9848968..2a74641e6 100644 --- a/src/Mod/Part/Gui/AppPartGui.cpp +++ b/src/Mod/Part/Gui/AppPartGui.cpp @@ -53,7 +53,7 @@ #include "ViewProviderPrism.h" #include "ViewProviderSpline.h" #include "ViewProviderRegularPolygon.h" - +#include "TaskDimension.h" #include "DlgSettingsGeneral.h" #include "DlgSettingsObjectColor.h" #include "DlgSettings3DViewPartImp.h" @@ -146,6 +146,9 @@ void PartGuiExport initPartGui() PartGui::ViewProviderConeParametric ::init(); PartGui::ViewProviderTorusParametric ::init(); PartGui::ViewProviderRuledSurface ::init(); + PartGui::DimensionLinear ::initClass(); + PartGui::DimensionAngular ::initClass(); + PartGui::ArcEngine ::initClass(); PartGui::Workbench ::init(); diff --git a/src/Mod/Part/Gui/CMakeLists.txt b/src/Mod/Part/Gui/CMakeLists.txt index d301196b0..245e005d8 100644 --- a/src/Mod/Part/Gui/CMakeLists.txt +++ b/src/Mod/Part/Gui/CMakeLists.txt @@ -45,6 +45,7 @@ set(PartGui_MOC_HDRS TaskOffset.h TaskSweep.h TaskThickness.h + TaskDimension.h TaskCheckGeometry.h ) fc_wrap_cpp(PartGui_MOC_SRCS ${PartGui_MOC_HDRS}) @@ -208,6 +209,8 @@ SET(PartGui_SRCS TaskSweep.ui TaskThickness.cpp TaskThickness.h + TaskDimension.cpp + TaskDimension.h TaskCheckGeometry.cpp TaskCheckGeometry.h ) diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index c51b9b87c..65df59e90 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -63,6 +63,7 @@ #include "TaskShapeBuilder.h" #include "TaskLoft.h" #include "TaskSweep.h" +#include "TaskDimension.h" #include "TaskCheckGeometry.h" @@ -1495,6 +1496,179 @@ bool CmdColorPerFace::isActive(void) return (hasActiveDocument() && !Gui::Control().activeDialog() && objectSelected); } +//=========================================================================== +// Part_Measure_Linear +//=========================================================================== + +DEF_STD_CMD_A(CmdMeasureLinear); + +CmdMeasureLinear::CmdMeasureLinear() + : Command("Part_Measure_Linear") +{ + sAppModule = "Part"; + sGroup = QT_TR_NOOP("Part"); + sMenuText = QT_TR_NOOP("Measure Linear"); + sToolTipText = QT_TR_NOOP("Measure Linear"); + sWhatsThis = sToolTipText; + sStatusTip = sToolTipText; + sPixmap = "Part_Measure_Linear"; +} + +void CmdMeasureLinear::activated(int iMsg) +{ + PartGui::goDimensionLinearRoot(); +} + +bool CmdMeasureLinear::isActive(void) +{ + return hasActiveDocument(); +} + +//=========================================================================== +// Part_Measure_Angular +//=========================================================================== + +DEF_STD_CMD_A(CmdMeasureAngular); + +CmdMeasureAngular::CmdMeasureAngular() + : Command("Part_Measure_Angular") +{ + sAppModule = "Part"; + sGroup = QT_TR_NOOP("Part"); + sMenuText = QT_TR_NOOP("Measure Angular"); + sToolTipText = QT_TR_NOOP("Measure Angular"); + sWhatsThis = sToolTipText; + sStatusTip = sToolTipText; + sPixmap = "Part_Measure_Angular"; +} + +void CmdMeasureAngular::activated(int iMsg) +{ + PartGui::goDimensionAngularRoot(); +} + +bool CmdMeasureAngular::isActive(void) +{ + return hasActiveDocument(); +} + +//=========================================================================== +// Part_Measure_Clear_All +//=========================================================================== + +DEF_STD_CMD_A(CmdMeasureClearAll); + +CmdMeasureClearAll::CmdMeasureClearAll() + : Command("Part_Measure_Clear_All") +{ + sAppModule = "Part"; + sGroup = QT_TR_NOOP("Part"); + sMenuText = QT_TR_NOOP("Clear All"); + sToolTipText = QT_TR_NOOP("Clear All"); + sWhatsThis = sToolTipText; + sStatusTip = sToolTipText; + sPixmap = "Part_Measure_Clear_All"; +} + +void CmdMeasureClearAll::activated(int iMsg) +{ + PartGui::eraseAllDimensions(); +} + +bool CmdMeasureClearAll::isActive(void) +{ + return hasActiveDocument(); +} + +//=========================================================================== +// Part_Measure_Toggle_All +//=========================================================================== + +DEF_STD_CMD_A(CmdMeasureToggleAll); + +CmdMeasureToggleAll::CmdMeasureToggleAll() + : Command("Part_Measure_Toggle_All") +{ + sAppModule = "Part"; + sGroup = QT_TR_NOOP("Part"); + sMenuText = QT_TR_NOOP("Toggle All"); + sToolTipText = QT_TR_NOOP("Toggle All"); + sWhatsThis = sToolTipText; + sStatusTip = sToolTipText; + sPixmap = "Part_Measure_Toggle_All"; +} + +void CmdMeasureToggleAll::activated(int iMsg) +{ + ParameterGrp::handle group = App::GetApplication().GetUserParameter(). + GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("View"); + bool visibility = group->GetBool("DimensionsVisible", true); + if (visibility) + group->SetBool("DimensionsVisible", false); + else + group->SetBool("DimensionsVisible", true); +} + +bool CmdMeasureToggleAll::isActive(void) +{ + return hasActiveDocument(); +} + +//=========================================================================== +// Part_Measure_Toggle_3d +//=========================================================================== + +DEF_STD_CMD_A(CmdMeasureToggle3d); + +CmdMeasureToggle3d::CmdMeasureToggle3d() + : Command("Part_Measure_Toggle_3d") +{ + sAppModule = "Part"; + sGroup = QT_TR_NOOP("Part"); + sMenuText = QT_TR_NOOP("Toggle 3d"); + sToolTipText = QT_TR_NOOP("Toggle 3d"); + sWhatsThis = sToolTipText; + sStatusTip = sToolTipText; + sPixmap = "Part_Measure_Toggle_3d"; +} + +void CmdMeasureToggle3d::activated(int iMsg) +{ + PartGui::toggle3d(); +} + +bool CmdMeasureToggle3d::isActive(void) +{ + return hasActiveDocument(); +} + +//=========================================================================== +// Part_Measure_Toggle_Delta +//=========================================================================== + +DEF_STD_CMD_A(CmdMeasureToggleDelta); + +CmdMeasureToggleDelta::CmdMeasureToggleDelta() + : Command("Part_Measure_Toggle_Delta") +{ + sAppModule = "Part"; + sGroup = QT_TR_NOOP("Part"); + sMenuText = QT_TR_NOOP("Toggle Delta"); + sToolTipText = QT_TR_NOOP("Toggle Delta"); + sWhatsThis = sToolTipText; + sStatusTip = sToolTipText; + sPixmap = "Part_Measure_Toggle_Delta"; +} + +void CmdMeasureToggleDelta::activated(int iMsg) +{ + PartGui::toggleDelta(); +} + +bool CmdMeasureToggleDelta::isActive(void) +{ + return hasActiveDocument(); +} void CreatePartCommands(void) { @@ -1531,4 +1705,10 @@ void CreatePartCommands(void) rcCmdMgr.addCommand(new CmdPartThickness()); rcCmdMgr.addCommand(new CmdCheckGeometry()); rcCmdMgr.addCommand(new CmdColorPerFace()); + rcCmdMgr.addCommand(new CmdMeasureLinear()); + rcCmdMgr.addCommand(new CmdMeasureAngular()); + rcCmdMgr.addCommand(new CmdMeasureClearAll()); + rcCmdMgr.addCommand(new CmdMeasureToggleAll()); + rcCmdMgr.addCommand(new CmdMeasureToggle3d()); + rcCmdMgr.addCommand(new CmdMeasureToggleDelta()); } diff --git a/src/Mod/Part/Gui/Resources/Part.qrc b/src/Mod/Part/Gui/Resources/Part.qrc index 1202a86c9..763035a67 100644 --- a/src/Mod/Part/Gui/Resources/Part.qrc +++ b/src/Mod/Part/Gui/Resources/Part.qrc @@ -42,6 +42,14 @@ icons/Part_Point_Parametric.svg icons/Part_Polygon_Parametric.svg icons/Part_Spline_Parametric.svg + icons/Part_Measure_Linear.svg + icons/Part_Measure_Angular.svg + icons/Part_Measure_Clear_All.svg + icons/Part_Measure_Toggle_All.svg + icons/Part_Measure_Toggle_3d.svg + icons/Part_Measure_Toggle_Delta.svg + icons/Part_Measure_Step_Active.svg + icons/Part_Measure_Step_Done.svg icons/Tree_Part_Box_Parametric.svg icons/Tree_Part_Cylinder_Parametric.svg icons/Tree_Part_Cone_Parametric.svg diff --git a/src/Mod/Part/Gui/Workbench.cpp b/src/Mod/Part/Gui/Workbench.cpp index e827fe420..f64913a7e 100644 --- a/src/Mod/Part/Gui/Workbench.cpp +++ b/src/Mod/Part/Gui/Workbench.cpp @@ -66,6 +66,11 @@ Gui::MenuItem* Workbench::setupMenuBar() const Gui::MenuItem* bop = new Gui::MenuItem; bop->setCommand("Boolean"); *bop << "Part_Boolean" << "Part_Cut" << "Part_Fuse" << "Part_Common"; + + Gui::MenuItem* measure = new Gui::MenuItem; + measure->setCommand("Measure"); + *measure << "Part_Measure_Linear" << "Part_Measure_Angular" << "Part_Measure_Clear_All" << "Part_Measure_Toggle_All" << + "Part_Measure_Toggle_3d" << "Part_Measure_Toggle_Delta"; Gui::MenuItem* part = new Gui::MenuItem; root->insertItem(item, part); @@ -74,7 +79,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const *part << prim << "Part_Primitives" << "Part_Builder" << "Separator" << "Part_ShapeFromMesh" << "Part_MakeSolid" << "Part_ReverseShape" << "Part_SimpleCopy" << "Part_RefineShape" << "Part_CheckGeometry" - << "Separator" << bop << "Separator" + << measure << "Separator" << bop << "Separator" << "Part_CrossSections" << "Part_Compound" << "Part_Extrude" << "Part_Revolve" << "Part_Mirror" << "Part_Fillet" << "Part_Chamfer" << "Part_RuledSurface" << "Part_Loft" << "Part_Sweep" @@ -114,6 +119,11 @@ Gui::ToolBarItem* Workbench::setupToolBars() const boolop->setCommand("Boolean"); *boolop << "Part_Boolean" << "Part_Cut" << "Part_Fuse" << "Part_Common" << "Part_CheckGeometry" << "Part_Section" << "Part_CrossSections"; + + Gui::ToolBarItem* measure = new Gui::ToolBarItem(root); + measure->setCommand("Measure"); + *measure << "Part_Measure_Linear" << "Part_Measure_Angular" << "Part_Measure_Clear_All" << "Part_Measure_Toggle_All" + << "Part_Measure_Toggle_3d" << "Part_Measure_Toggle_Delta"; return root; } @@ -124,4 +134,3 @@ Gui::ToolBarItem* Workbench::setupCommandBars() const Gui::ToolBarItem* root = new Gui::ToolBarItem; return root; } -