2121 ***************************************************************************/
2222
2323#include < limits>
24+ #include < functional>
2425
2526#include < Inventor/actions/SoGetBoundingBoxAction.h>
2627#include < Inventor/nodes/SoClipPlane.h>
2930#include < QDockWidget>
3031#include < QPointer>
3132
33+ #include < App/Application.h>
34+
3235#include " Clipping.h"
3336#include " ui_Clipping.h"
3437#include " DockWindowManager.h"
@@ -51,6 +54,10 @@ class Clipping::Private
5154 bool flipY {false };
5255 bool flipZ {false };
5356 SoTimerSensor* sensor;
57+ App::Document* shownOn {nullptr };
58+ QDockWidget* dockWidget {nullptr };
59+ fastsignals::scoped_connection activeDocConnection;
60+
5461 Private ()
5562 {
5663 clipX = new SoClipPlane ();
@@ -99,7 +106,7 @@ class Clipping::Private
99106
100107/* TRANSLATOR Gui::Dialog::Clipping */
101108
102- Clipping::Clipping (Gui::View3DInventor* view, QWidget* parent)
109+ Clipping::Clipping (Gui::View3DInventor* view, App::Document* showOn, QWidget* parent)
103110 : QDialog(parent)
104111 , d(new Private)
105112{
@@ -124,6 +131,7 @@ Clipping::Clipping(Gui::View3DInventor* view, QWidget* parent)
124131 d->ui .dirZ ->setRange (-max, max);
125132 d->ui .dirZ ->setSingleStep (0 .1f );
126133 d->ui .dirZ ->setValue (1 .0f );
134+ d->shownOn = showOn;
127135
128136 d->view = view;
129137 View3DInventorViewer* viewer = view->getViewer ();
@@ -190,21 +198,23 @@ Clipping::Clipping(Gui::View3DInventor* view, QWidget* parent)
190198 }
191199}
192200
193- Clipping* Clipping::makeDockWidget (Gui::View3DInventor* view)
201+ Clipping* Clipping::makeDockWidget (Gui::View3DInventor* view, App::Document* showOn )
194202{
195203 // embed this dialog into a QDockWidget
196- auto clipping = new Clipping (view);
204+ auto clipping = new Clipping (view, showOn );
197205 Gui::DockWindowManager* pDockMgr = Gui::DockWindowManager::instance ();
198206 QDockWidget* dw = pDockMgr->addDockWindow (" Clipping" , clipping, Qt::LeftDockWidgetArea);
199207 dw->setFeatures (QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
200208 dw->show ();
209+ clipping->d ->dockWidget = dw;
201210
202211 return clipping;
203212}
204213
205214/* * Destroys the object and frees any allocated resources */
206215Clipping::~Clipping ()
207216{
217+ d->activeDocConnection .disconnect ();
208218 d->node ->removeChild (d->clipX );
209219 d->node ->removeChild (d->clipY );
210220 d->node ->removeChild (d->clipZ );
@@ -216,6 +226,8 @@ Clipping::~Clipping()
216226void Clipping::setupConnections ()
217227{
218228 // clang-format off
229+ d->activeDocConnection = App::GetApplication ().signalActiveDocument .connect (
230+ std::bind (&Clipping::onActiveDocument, this , std::placeholders::_1));
219231 connect (d->ui .groupBoxX , &QGroupBox::toggled,
220232 this , &Clipping::onGroupBoxXToggled);
221233 connect (d->ui .groupBoxY , &QGroupBox::toggled,
@@ -259,7 +271,18 @@ void Clipping::reject()
259271 dw->deleteLater ();
260272 }
261273}
262-
274+ void Clipping::onActiveDocument (const App::Document& doc)
275+ {
276+ if (!d || !d->dockWidget ) {
277+ return ;
278+ }
279+ if (&doc == d->shownOn ) {
280+ d->dockWidget ->show ();
281+ }
282+ else {
283+ d->dockWidget ->hide ();
284+ }
285+ }
263286void Clipping::onGroupBoxXToggled (bool on)
264287{
265288 if (on) {
0 commit comments