From 6eebab157e44d99378caba8414d66db2b8418e09 Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Thu, 15 Apr 2010 14:03:17 +0000 Subject: [PATCH] Enable SpaceNav Device if available git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2017 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- modules/gui/pymod/CMakeLists.txt | 1 + modules/gui/pymod/export_panel_bar.cc | 13 ++++++++ modules/gui/pymod/init_spacenav.py | 47 +++++++++++++++++++++++++++ scripts/init.py | 2 ++ 4 files changed, 63 insertions(+) create mode 100644 modules/gui/pymod/init_spacenav.py diff --git a/modules/gui/pymod/CMakeLists.txt b/modules/gui/pymod/CMakeLists.txt index c62fe901c..986a40130 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 ddf45c24b..2153804cf 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 000000000..ce18343b3 --- /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 066e3fb74..5032dc4b1 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', []) -- GitLab