diff --git a/modules/gui/pymod/CMakeLists.txt b/modules/gui/pymod/CMakeLists.txt index c62fe901cc7a30482eb5b41da8aa60413efd1393..986a401304d365177c0cf4aebd59c833bf7caa65 100644 --- a/modules/gui/pymod/CMakeLists.txt +++ b/modules/gui/pymod/CMakeLists.txt @@ -75,6 +75,7 @@ endif() set(OST_GUI_PYMOD_MODULES __init__.py init_menubar.py + init_spacenav.py ) pymod(NAME gui CPP ${OST_GUI_PYMOD_SOURCES} diff --git a/modules/gui/pymod/export_panel_bar.cc b/modules/gui/pymod/export_panel_bar.cc index ddf45c24bc97584a481387e8f0b75da32d2ae7ff..2153804cfae7e24eb60ff42cecf234906664292d 100644 --- a/modules/gui/pymod/export_panel_bar.cc +++ b/modules/gui/pymod/export_panel_bar.cc @@ -85,6 +85,17 @@ object panels_get_menu(Panels* panels) return menu; } +object panels_get_qwidget(Panels* panels) +{ + static object sip_module=import("sip"); + static object pyqt4_module=import("PyQt4.QtGui"); + object sip_handle((size_t)panels); + object qwidget = pyqt4_module.attr("QWidget"); + object widget = sip_module.attr("wrapinstance")(sip_handle, qwidget); + + return widget; +} + void panel_bar_add_widget(PanelBar * pb, const SipHandlerBase& sh, bool hidden) { pb->AddWidget(reinterpret_cast<Widget*>(sh.GetSipHandle()),hidden); @@ -111,11 +122,13 @@ void export_PanelBar() .def("RemoveWidget", &panels_remove_widget_a) .def("RemoveWidget", &panels_remove_widget_b) .def("GetMenu", &panels_get_menu) + .def("GetQWidget", &panels_get_qwidget) .def("AddWidgetToPool", &panels_add_widget_to_pool_a) .def("AddWidgetToPool", &panels_add_widget_to_pool_b) .def("Save", &Panels::Save) .def("Restore", &Panels::Restore) .add_property("menu", &panels_get_menu) + .add_property("qwidget", &panels_get_qwidget) ; class_<PanelBar, boost::noncopyable>("PanelBar", no_init) diff --git a/modules/gui/pymod/init_spacenav.py b/modules/gui/pymod/init_spacenav.py new file mode 100644 index 0000000000000000000000000000000000000000..ce18343b3e9782222dbbe4cc61205eec498f1ddc --- /dev/null +++ b/modules/gui/pymod/init_spacenav.py @@ -0,0 +1,47 @@ +from PyQt4 import QtCore, QtGui + +from ost import geom, gfx, gui + +import sys, random +import sip + +class SpacenavControl(QtCore.QObject): + def __init__(self, spnav, + parent=None): + QtCore.QObject.__init__(self, parent) + QtCore.QObject.connect(spnav,QtCore.SIGNAL("deviceTransformed(int,int,int,int,int,int)"), self.Changed) + QtCore.QObject.connect(spnav,QtCore.SIGNAL("deviceButtonPressed(int)"), self.Toggle) + + self.trans = True + self.rot = True + + def Changed(self, tx,ty,tz,rx,ry,rz): + transf = gfx.Scene().GetTransform() + if(self.trans): + transf.ApplyXAxisTranslation(tx/480.0) + transf.ApplyYAxisTranslation(ty/480.0) + transf.ApplyZAxisTranslation(-tz/480.0) + if(self.rot): + transf.ApplyXAxisRotation(rx/480.0) + transf.ApplyYAxisRotation(ry/480.0) + transf.ApplyZAxisRotation(rz/480.0) + gfx.Scene().SetTransform(transf) + gfx.Scene().RequestRedraw() + + def Toggle(self, button): + if button == 0: + self.trans = not self.trans + print "Translation Enabled:",self.trans + elif button == 1: + self.rot = not self.rot + print "Rotation Enabled:",self.rot + +def _InitSpaceNav(parent): + try: + spnav = gui.SpnavInput.GetQThread() + spnav.start() + snc=SpacenavControl(spnav,parent) + gfx.Scene().AutoAutoslab(False) + gfx.Scene().SetNearFar(1,10000) + except AttributeError: + pass \ No newline at end of file diff --git a/scripts/init.py b/scripts/init.py index 066e3fb74ba31bdcdc69089d409a855784d5055e..5032dc4b1eabd43ce9e3f562d9ee730b8fd202f7 100644 --- a/scripts/init.py +++ b/scripts/init.py @@ -17,6 +17,7 @@ import httplib from PyQt4 import QtGui, QtCore from ost.gui.scene.init_inspector import _InitInspector from ost.gui.init_menubar import _InitMenuBar +from ost.gui.init_spacenav import _InitSpaceNav def _InitRuleBasedBuilder(): compound_lib_path=os.path.join(ost.GetSharedDataPath(), 'compounds.chemlib') @@ -50,6 +51,7 @@ def _InitFrontEnd(): main_area=app.perspective.main_area _InitPanels(app, app.perspective.panels) _InitMenuBar(app.perspective.GetMenuBar()) + _InitSpaceNav(app.perspective.panels.qwidget) main_area.AddPersistentWidget("3D Scene", "gl_win" , app.gl_win, int(QtCore.Qt.WindowMaximized)) app.perspective.Restore() additional_modules=getattr(__main__, 'ADDITIONAL_GUI_MODULES', [])