diff --git a/modules/gfx/pymod/export_scene.cc b/modules/gfx/pymod/export_scene.cc index 3a9ac0dc72e65e8d7df71bab08f8fb0113793784..c97fb1114fc6b6c7931a6fdf430d84c5de8ecc87 100644 --- a/modules/gfx/pymod/export_scene.cc +++ b/modules/gfx/pymod/export_scene.cc @@ -81,6 +81,7 @@ void export_Scene() .def("Autoslab", &Scene::Autoslab, scene_autoslab_overloads()) .def("AutoAutoslab",&Scene::AutoAutoslab) + .def("GetAutoAutoslab",&Scene::GetAutoAutoslab) .def("AutoslabMax",&Scene::AutoslabMax) .def("Remove", remove1) .def("Remove", remove2) diff --git a/modules/gfx/src/scene.hh b/modules/gfx/src/scene.hh index d07ac83607c59e50aa51e75edda28db3f1b0afe6..0756aa3d9e5a78b69a268783cb5c0912277e1c53 100644 --- a/modules/gfx/src/scene.hh +++ b/modules/gfx/src/scene.hh @@ -181,6 +181,9 @@ class DLLEXPORT_OST_GFX Scene { void AutoAutoslab(bool f); //@} + /// \brief get current state of automatic auto-slabbing + bool GetAutoAutoslab() const { return auto_autoslab_; } + /// \brief set stereo mode /// one of 0 (off), 1 (quad-buffered) 2 (interlaced (for special monitors)) void SetStereoMode(unsigned int mode); diff --git a/modules/gui/pymod/dng/menu.py b/modules/gui/pymod/dng/menu.py index b2d50f5cf0b367039a95efd4239faddf61633ebc..c2b672c2b28e7a11a9855eec4aff08c722845016 100644 --- a/modules/gui/pymod/dng/menu.py +++ b/modules/gui/pymod/dng/menu.py @@ -24,7 +24,66 @@ class FileMenu(QMenu): '%s.pdb' % sel_node.name) io.SavePDB(sel_node.view, str(filename)) +class ClipWidget(QWidget): + def __init__(self, width=500, height=500): + QWidget.__init__(self) + self.setWindowFlags(Qt.Tool) + l = QGridLayout(self) + l.addWidget(QLabel("Near"), 0, 0) + l.addWidget(QLabel("Far"), 1, 0) + bounds_near = QLineEdit(str(0)) + bounds_near.setValidator(QIntValidator(0, 9999, bounds_near)) + bounds_near.setMaxLength(4) + bounds_near.setMaximumWidth(50) + bounds_far = QLineEdit(str(200)) + bounds_far.setValidator(QIntValidator(0, 9999, bounds_far)) + bounds_far.setMaxLength(4) + bounds_far.setMaximumWidth(50) + l.addWidget(bounds_near, 0, 1, 2, 1) + l.addWidget(bounds_far, 0, 3, 2, 1) + self.near_ = QSlider(Qt.Horizontal) + self.near_.setMinimum(int(bounds_near.text())) + self.near_.setMaximum(int(bounds_far.text())) + self.near_.setValue(int(gfx.Scene().near)) + self.far_ = QSlider(Qt.Horizontal) + self.far_.setMinimum(int(bounds_near.text())) + self.far_.setMaximum(int(bounds_far.text())) + far = int(gfx.Scene().far) + if far>sys.maxint: + far = sys.maxint + self.far_.setValue(far) + self.auto_ = QCheckBox("Continuous Automatic Clipping") + self.auto_.setChecked(gfx.Scene().GetAutoAutoslab()) + + l.addWidget(self.near_, 0, 2) + l.addWidget(self.far_, 1, 2) + l.addWidget(self.auto_, 2, 0, 1, 4) + self.connect(self.near_, SIGNAL('valueChanged(int)'), self.SetNear) + self.connect(self.far_, SIGNAL('valueChanged(int)'), self.SetFar) + self.connect(self.auto_, SIGNAL('stateChanged(int)'), self.SetAuto) + self.connect(bounds_near, SIGNAL('textEdited(QString)'), self.SetNearBounds) + self.connect(bounds_far, SIGNAL('textEdited(QString)'), self.SetFarBounds) + + def SetNear(self, val): + gfx.Scene().near = val + + def SetFar(self, val): + gfx.Scene().far = val + def SetAuto(self, val): + gfx.Scene().AutoAutoslab(val) + gfx.Scene().near = int(self.near_.value()) + gfx.Scene().far = int(self.far_.value()) + + def SetNearBounds(self, text): + if text!='': + self.near_.setMinimum(int(text)) + self.far_.setMinimum(int(text)) + + def SetFarBounds(self, text): + if text!='': + self.near_.setMaximum(int(text)) + self.far_.setMaximum(int(text)) class ExportSceneDialog(QDialog): def __init__(self, width=500, height=500): @@ -76,6 +135,7 @@ class SceneMenu(QMenu): gui.AddMenuAction(self, 'Fit To Screen', self._FitToScreen, enabled=gui.OneOf(gfx.Entity)) gui.AddMenuAction(self, 'Save Snapshot', self._ExportScene) + gui.AddMenuAction(self, 'Scene Clipping', self._ClipScene, shortcut='Ctrl+Shift+C') def _ExportScene(self): qd=ExportSceneDialog() @@ -86,6 +146,10 @@ class SceneMenu(QMenu): if filename: gfx.Scene().Export(str(filename), qd.width, qd.height, qd.transparent) + def _ClipScene(self): + self.cw = ClipWidget() + self.cw.show() + def _AboutToShow(self): self.fog_action.setChecked(gfx.Scene().fog)