From a53559fe6251b6329841ea683c8e2b9abbf42d7f Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 21 Oct 2011 11:24:55 +0000 Subject: [PATCH] + implement command to view sketch perpendicular to sketch plane git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5046 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d --- src/Gui/View3DPy.cpp | 28 ++++++++++++++++++++ src/Gui/View3DPy.h | 1 + src/Mod/Complete/Gui/Workbench.cpp | 1 + src/Mod/PartDesign/Gui/Workbench.cpp | 1 + src/Mod/Sketcher/Gui/Command.cpp | 38 ++++++++++++++++++++++++++-- src/Mod/Sketcher/Gui/Workbench.cpp | 1 + 6 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/Gui/View3DPy.cpp b/src/Gui/View3DPy.cpp index 2c8e2b624..2be967c5d 100644 --- a/src/Gui/View3DPy.cpp +++ b/src/Gui/View3DPy.cpp @@ -92,6 +92,7 @@ void View3DInventorPy::init_type() add_varargs_method("getCameraNode",&View3DInventorPy::getCameraNode,"getCameraNode()"); add_varargs_method("getViewDirection",&View3DInventorPy::getViewDirection,"getViewDirection()"); add_varargs_method("setCamera",&View3DInventorPy::setCamera,"setCamera()"); + add_varargs_method("setCameraOrientation",&View3DInventorPy::setCameraOrientation,"setCameraOrientation()"); add_varargs_method("getCameraType",&View3DInventorPy::getCameraType,"getCameraType()"); add_varargs_method("setCameraType",&View3DInventorPy::setCameraType,"setCameraType()"); add_varargs_method("listCameraTypes",&View3DInventorPy::listCameraTypes,"listCameraTypes()"); @@ -399,6 +400,33 @@ Py::Object View3DInventorPy::viewAxometric(const Py::Tuple& args) return Py::None(); } +Py::Object View3DInventorPy::setCameraOrientation(const Py::Tuple& args) +{ + PyObject* o; + if (!PyArg_ParseTuple(args.ptr(), "O!", &PyTuple_Type, &o)) + throw Py::Exception(); + + try { + Py::Tuple tuple(o); + float q0 = (float)Py::Float(tuple[0]); + float q1 = (float)Py::Float(tuple[1]); + float q2 = (float)Py::Float(tuple[2]); + float q3 = (float)Py::Float(tuple[3]); + _view->getViewer()->setCameraOrientation(SbRotation(q0, q1, q2, q3)); + } + catch (const Base::Exception& e) { + throw Py::Exception(e.what()); + } + catch (const std::exception& e) { + throw Py::Exception(e.what()); + } + catch(...) { + throw Py::Exception("Unknown C++ exception"); + } + + return Py::None(); +} + Py::Object View3DInventorPy::viewPosition(const Py::Tuple& args) { PyObject* p=0; diff --git a/src/Gui/View3DPy.h b/src/Gui/View3DPy.h index cd703150d..3e9e1218b 100644 --- a/src/Gui/View3DPy.h +++ b/src/Gui/View3DPy.h @@ -69,6 +69,7 @@ public: Py::Object getCamera(const Py::Tuple&); Py::Object getViewDirection(const Py::Tuple&); Py::Object setCamera(const Py::Tuple&); + Py::Object setCameraOrientation(const Py::Tuple&); Py::Object getCameraType(const Py::Tuple&); Py::Object setCameraType(const Py::Tuple&); Py::Object getCameraNode(const Py::Tuple&); diff --git a/src/Mod/Complete/Gui/Workbench.cpp b/src/Mod/Complete/Gui/Workbench.cpp index 8c35760ec..adb599fb4 100644 --- a/src/Mod/Complete/Gui/Workbench.cpp +++ b/src/Mod/Complete/Gui/Workbench.cpp @@ -250,6 +250,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const *PartDesign << "Sketcher_NewSketch" << "Sketcher_LeaveSketch" + << "Sketcher_ViewSketch" << "Sketcher_MapSketch" << "Separator" << "Sketcher_CreateArc" diff --git a/src/Mod/PartDesign/Gui/Workbench.cpp b/src/Mod/PartDesign/Gui/Workbench.cpp index d9d8e46af..ae8a97f07 100644 --- a/src/Mod/PartDesign/Gui/Workbench.cpp +++ b/src/Mod/PartDesign/Gui/Workbench.cpp @@ -160,6 +160,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const part->setCommand("&Part Design"); *part << "Sketcher_NewSketch" << "Sketcher_LeaveSketch" + << "Sketcher_ViewSketch" << "Sketcher_MapSketch" << geom << cons diff --git a/src/Mod/Sketcher/Gui/Command.cpp b/src/Mod/Sketcher/Gui/Command.cpp index 1d751810c..752fdb376 100644 --- a/src/Mod/Sketcher/Gui/Command.cpp +++ b/src/Mod/Sketcher/Gui/Command.cpp @@ -297,6 +297,40 @@ bool CmdSketcherLeaveSketch::isActive(void) return false; } +DEF_STD_CMD_A(CmdSketcherViewSketch); + +CmdSketcherViewSketch::CmdSketcherViewSketch() + : Command("Sketcher_ViewSketch") +{ + sAppModule = "Sketcher"; + sGroup = QT_TR_NOOP("Sketcher"); + sMenuText = QT_TR_NOOP("View sketch"); + sToolTipText = QT_TR_NOOP("View sketch perpendicular to sketch plane"); + sWhatsThis = sToolTipText; + sStatusTip = sToolTipText; + eType = 0; +} + +void CmdSketcherViewSketch::activated(int iMsg) +{ + Gui::Document *doc = getActiveGuiDocument(); + SketcherGui::ViewProviderSketch* vp = dynamic_cast(doc->getInEdit()); + doCommand(Gui,"Gui.ActiveDocument.ActiveView.setCameraOrientation(App.ActiveDocument.%s.Placement.Rotation.Q)" + ,vp->getObject()->getNameInDocument()); +} + +bool CmdSketcherViewSketch::isActive(void) +{ + Gui::Document *doc = getActiveGuiDocument(); + if (doc) { + // checks if a Sketch Viewprovider is in Edit and is in no special mode + SketcherGui::ViewProviderSketch* vp = dynamic_cast(doc->getInEdit()); + if (vp && vp->getSketchMode() == ViewProviderSketch::STATUS_NONE) + return true; + } + return false; +} + @@ -308,5 +342,5 @@ void CreateSketcherCommands(void) rcCmdMgr.addCommand(new CmdSketcherNewSketch()); rcCmdMgr.addCommand(new CmdSketcherMapSketch()); rcCmdMgr.addCommand(new CmdSketcherLeaveSketch()); - - } + rcCmdMgr.addCommand(new CmdSketcherViewSketch()); +} diff --git a/src/Mod/Sketcher/Gui/Workbench.cpp b/src/Mod/Sketcher/Gui/Workbench.cpp index 38294986b..4cdfb8e6f 100644 --- a/src/Mod/Sketcher/Gui/Workbench.cpp +++ b/src/Mod/Sketcher/Gui/Workbench.cpp @@ -91,6 +91,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const *sketch << "Sketcher_NewSketch" << "Sketcher_LeaveSketch" + << "Sketcher_ViewSketch" << "Sketcher_MapSketch" << geom << cons