def resizeEvent(self, ev): logging.debug("In QVTKRenderWindowInteractor::resizeEvent()") if self._should_set_parent_info: # Set the window info and parent info on every resize. # vtkWin32OpenGLRenderWindow will render using incorrect offsets if # the parent info is not given to it because it assumes that it # needs to make room for the title bar. if sys.platform == "win32": self._RenderWindow.SetWindowInfo( str(int(pythonapi.PyCObject_AsVoidPtr(self.winId())))) else: self._RenderWindow.SetWindowInfo(str(int(self.winId()))) parent = self.parent() if parent is not None: if sys.platform == "win32": self._RenderWindow.SetParentInfo( str(int(pythonapi.PyCObject_AsVoidPtr(self.winId())))) else: self._RenderWindow.SetParentInfo(str(int(self.winId()))) else: self._RenderWindow.SetParentInfo("") w = self.width() h = self.height() self._RenderWindow.SetSize(w, h) self._Iren.SetSize(w, h)
def resizeEvent(self, ev): if self._should_set_parent_info: # Set the window info and parent info on every resize. # vtkWin32OpenGLRenderWindow will render using incorrect offsets if # the parent info is not given to it because it assumes that it # needs to make room for the title bar. if qt_api == 'pyqt' or sys.platform != 'win32': self._RenderWindow.SetWindowInfo(str(int(self.winId()))) else: # On Windows PySide has a bug with winID() function, so this is fix: self._RenderWindow.SetWindowInfo( str(int(pythonapi.PyCObject_AsVoidPtr(self.winId())))) parent = self.parent() if parent is not None: if qt_api == 'pyqt' or sys.platform != 'win32': self._RenderWindow.SetParentInfo(str(int(self.winId()))) else: # On Windows PySide has a bug with winID() function, so this is fix: self._RenderWindow.SetParentInfo( str(int(pythonapi.PyCObject_AsVoidPtr(self.winId())))) else: self._RenderWindow.SetParentInfo('') w = self.width() h = self.height() self._RenderWindow.SetSize(w, h) self._Iren.SetSize(w, h)
def createplayer (self): winid = self.ui.frame_2.winId() pythonapi.PyCObject_AsVoidPtr.restype = c_void_p pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] self.windowId = pythonapi.PyCObject_AsVoidPtr (winid) self.ui.frame_2.mouseMoveEvent = self.mouseMoveEvent self.ui.frame_2.mousePressEvent = self.mousePressEvent self.ui.frame_2.mouseReleaseEvent = self.frameMouseRelease self.player = Player (self.windowId, self.ui.sliderseek.minimum(), self.ui.sliderseek.maximum(), self.ui.slidervolume.minimum(), self.ui.slidervolume.maximum()) self.ui.buttonplayerplay.clicked.connect (self.player.playclickedsignal) self.ui.buttonplayerstop.clicked.connect (self.player.stopclickedsignal) self.ui.buttonplayerbackward.clicked.connect (self.player.backwardclickedsignal) self.ui.buttonplayerforward.clicked.connect (self.player.forwardclickedsignal) self.ui.buttonvolume.clicked.connect (self.player.muteornotsignal) self.ui.sliderseek.valueChanged.connect (self.player.sliderseekvaluesignal) self.ui.slidervolume.valueChanged.connect (self.player.slidervolumevaluesignal) self.player.updatelabelduration.connect (self.updatelabelduration) self.player.updatesliderseek.connect (self.updatesliderseek) self.player.updateslidervolume.connect (self.updateslidervolume) self.player.updatelineedit.connect (self.updatelineedit) self.player.setbuttonplay.connect (self.playersetbuttonplay) self.player.setbuttonpause.connect (self.playersetbuttonpause) self.player.startworker()
def _get_win_id(self): WId = self.winId() # Python2 if type(WId).__name__ == 'PyCObject': from ctypes import pythonapi, c_void_p, py_object pythonapi.PyCObject_AsVoidPtr.restype = c_void_p pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] WId = pythonapi.PyCObject_AsVoidPtr(WId) # Python3 elif type(WId).__name__ == 'PyCapsule': from ctypes import pythonapi, c_void_p, py_object, c_char_p pythonapi.PyCapsule_GetName.restype = c_char_p pythonapi.PyCapsule_GetName.argtypes = [py_object] name = pythonapi.PyCapsule_GetName(WId) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] WId = pythonapi.PyCapsule_GetPointer(WId, name) return str(int(WId))
def set_video(self, hwnd, output_width, output_height): try: pythonapi.PyCObject_AsVoidPtr.restype = c_void_p pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] hwnd = pythonapi.PyCObject_AsVoidPtr(hwnd) print "hwnd:", hwnd return self.__obs.core_set_video(hwnd, output_width, output_height) except Exception as inst: self.__log(inst)
def lp_from_pycobj(pycobj): """ @param pyobject PyObject @return ctypes.voidp Equivalent to reinterpret_cast<void *>(obj) See: http://www.expobrain.net/2011/02/22/handling-win32-windows-handler-in-pyside/ """ try: return pythonapi.PyCObject_AsVoidPtr(pycobj) except ArgumentError: return pycobj
def __createSurface(self): vkCreateWin32SurfaceKHR = vkGetInstanceProcAddr(self.__instance, 'vkCreateWin32SurfaceKHR') hwnd = pythonapi.PyCObject_AsVoidPtr(self.winId()) hinstance = Win32misc.getInstance(hwnd) createInfo = VkWin32SurfaceCreateInfoKHR( sType=VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR, hinstance=hinstance, hwnd=hwnd ) self.__surface = vkCreateWin32SurfaceKHR(self.__instance, createInfo, None) if self.__surface is None: raise Exception("failed to create window surface!")
def DWM_retract_frame(widget): """ Undo DWM_extend_frame_into_client_area on the provided widget. """ if not has_dwm: return False m = MARGINS(0, 0, 0, 0) result = _DwmExtendFrameIntoClientArea( pythonapi.PyCObject_AsVoidPtr(widget.winId()), m) if result: return False widget.setAttribute(Qt.WA_TranslucentBackground, False) return True
def DWM_extend_frame_into_client_area(widget, margin): """ Extend the window frame into the client area. Margins of -1 (the default) will result in the entire window being rendered as the frame. Note: You should not call DWM_enable_blur_behind_window before calling this function. """ if not has_dwm: return False result = _DwmExtendFrameIntoClientArea( pythonapi.PyCObject_AsVoidPtr(widget.winId()), margin) widget.setAttribute(Qt.WA_TranslucentBackground, not result) return not result
def __init__ (self, filename, path, parent = None): QtGui.QDialog.__init__ (self, parent) self.examfile = os.path.join (path, filename) if path == "" or filename == "" or not os.path.exists (path) or not os.path.isdir (path) or not os.path.isfile (self.examfile): msg = CommonError (self.tr ("File invalid.")) msg.exec_() QtGui.qApp.postEvent (self, QtGui.QCloseEvent()) return self.ui = Ui_player() self.ui.setupUi (self) self.setWindowFlags (QtCore.Qt.FramelessWindowHint) self.leftclicked = False winid = self.ui.frameaudio.winId() pythonapi.PyCObject_AsVoidPtr.restype = c_void_p pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] self.windowId = pythonapi.PyCObject_AsVoidPtr (winid) self.ui.frameaudio.mouseReleaseEvent = self.frameMouseRelease self.player = Player (self.windowId, self.ui.Sliderprogress.minimum(), self.ui.Sliderprogress.maximum(), self.ui.slidervolume.minimum(), self.ui.slidervolume.maximum()) self.ui.buttonplayerplay.clicked.connect (self.player.playclickedsignal) self.ui.buttonplayerstop.clicked.connect (self.player.stopclickedsignal) self.ui.buttonplayerbackward.clicked.connect (self.player.backwardclickedsignal) self.ui.buttonplayerforward.clicked.connect (self.player.forwardclickedsignal) self.ui.buttonvolume.clicked.connect (self.player.muteornotsignal) self.ui.Sliderprogress.valueChanged.connect (self.player.sliderseekvaluesignal) self.ui.slidervolume.valueChanged.connect (self.player.slidervolumevaluesignal) self.player.updatelabelduration.connect (self.updatelabelduration) self.player.updatesliderseek.connect (self.updatesliderseek) self.player.updateslidervolume.connect (self.updateslidervolume) self.player.setbuttonplay.connect (self.playersetbuttonplay) self.player.setbuttonpause.connect (self.playersetbuttonpause) self.player.startworker() self.player.playurisignal.emit (self.examfile) self.ui.label_3.setText (QtCore.QFileInfo (self.examfile).fileName()) self.ui.label_3.setAlignment (QtCore.Qt.AlignHCenter) self.ui.lineeditduration.setEnabled (False)
def spnav_x11_open(display, window): '''Opens a connection to the daemon, using the original magellan X11 protocol. Any application using this protocol should be compatible with the proprietary 3D connexion driver too. `display`: ``PyCObject`` containing X11 Display struct X11 display pointer `window`: **int** X11 window handle Raises ``SpnavConnectionException`` if Space Navigator daemon cannot be contacted. ''' display_ptr = pythonapi.PyCObject_AsVoidPtr(display) if libspnav.spnav_x11_open(display_ptr, window) == -1: raise SpnavConnectionException( 'failed to connect to the space navigator daemon')
def winIdFixed(winId): # PySide bug: QWidget.winId() returns <PyCObject object at 0x02FD8788>, # there is no easy way to convert it to int. try: return int(winId) except Exception: if sys.version_info[0] == 2: cpyapi.PyCObject_AsVoidPtr.restype = ctypes.c_void_p cpyapi.PyCObject_AsVoidPtr.argtypes = [ctypes.py_object] return cpyapi.PyCObject_AsVoidPtr(winId) elif sys.version_info[0] == 3: cpyapi.PyCapsule_GetPointer.restype = ctypes.c_void_p cpyapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object] return cpyapi.PyCapsule_GetPointer(winId, None)
def DWM_enable_blur_behind_window(widget, enable=True): """ Enable or disable blur behind window on a window. """ if not has_dwm: return False bb = DWM_BLURBEHIND() bb.fEnable = c_bool(enable) bb.dwFlags = DWM_BB_ENABLE bb.hRgnBlur = None widget.setAttribute(Qt.WA_TranslucentBackground, enable) widget.setAttribute(Qt.WA_NoSystemBackground, enable) result = _DwmEnableBlurBehindWindow( pythonapi.PyCObject_AsVoidPtr(widget.winId()), bb) return not result
def __init__(self, parent=None, wflags=QtCore.Qt.WindowFlags(), **kw): # the current button self._ActiveButton = QtCore.Qt.NoButton # private attributes self.__oldFocus = None self.__saveX = 0 self.__saveY = 0 self.__saveModifiers = QtCore.Qt.NoModifier self.__saveButtons = QtCore.Qt.NoButton # do special handling of some keywords: # stereo, rw stereo = 0 if kw.has_key('stereo'): if kw['stereo']: stereo = 1 rw = None if kw.has_key('rw'): rw = kw['rw'] # create qt-level widget QtGui.QWidget.__init__(self, parent, wflags | QtCore.Qt.MSWindowsOwnDC) if rw: # user-supplied render window self._RenderWindow = rw else: self._RenderWindow = vtk.vtkRenderWindow() if qt_api == 'pyqt' or sys.platform != 'win32': self._RenderWindow.SetWindowInfo(str(int(self.winId()))) else: # On Windows PySide has a bug with winID() function, so this is fix: self._RenderWindow.SetWindowInfo( str(int(pythonapi.PyCObject_AsVoidPtr(self.winId())))) self._should_set_parent_info = (sys.platform == 'win32') if stereo: # stereo mode self._RenderWindow.StereoCapableWindowOn() self._RenderWindow.SetStereoTypeToCrystalEyes() self._Iren = vtk.vtkGenericRenderWindowInteractor() self._Iren.SetRenderWindow(self._RenderWindow) # do all the necessary qt setup self.setAttribute(QtCore.Qt.WA_OpaquePaintEvent) self.setAttribute(QtCore.Qt.WA_PaintOnScreen) self.setMouseTracking(True) # get all mouse events self.setFocusPolicy(QtCore.Qt.WheelFocus) self.setSizePolicy( QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)) self._Timer = QtCore.QTimer(self) self.connect(self._Timer, QtCore.SIGNAL('timeout()'), self.TimerEvent) self._Iren.AddObserver('CreateTimerEvent', messenger.send) messenger.connect(self._Iren, 'CreateTimerEvent', self.CreateTimer) self._Iren.AddObserver('DestroyTimerEvent', messenger.send) messenger.connect(self._Iren, 'DestroyTimerEvent', self.DestroyTimer) render_window = self._Iren.GetRenderWindow() render_window.AddObserver('CursorChangedEvent', messenger.send) messenger.connect(render_window, 'CursorChangedEvent', self.CursorChangedEvent)
def add(register_func, when, cb_func, default=True, prefkey=None, label=None): # type: (Callable, int, Callable, bool, Text, Text) -> int """Add callback. see [OpenMaya.MSceneMessage Class Reference](http://help.autodesk.com/view/MAYAUL/2017/ENU//?guid=__py_ref_class_open_maya_1_1_m_scene_message_html) for more detail. Args: register_func: may [ addCallback addCheckCallback addCheckFileCallback addCheckReferenceCallback addConnectionFailedCallback addReferenceCallback addStringArrayCallback ] when: may [ kAfterCreateReference = 45 kAfterExport = 11 kAfterFileRead = 8 kAfterImport = 4 ... <snip> ] cb_func: The callback for invoked. default: Default value of callback enable. prefkey: The key name of entry in userPrefs. label: The label to display in the maya menu. Returns: int: Identifier used for removing the callback. Example: >>> import maya.api.OpenMaya as om >>> cb_func = lambda client_data: print("callback fired") >>> isinstance(add(om.MSceneMessage.addCallback, om.MSceneMessage.kBeforeNew, cb_func), int) True """ # from . import menu from ctypes import pythonapi, py_object, c_void_p global __CALLBACK_ENTRIES__ # decorate callback function with `executeIfOptionEnable` cb_id = register_func(when, cb_func) if "PyCObject" in str(type(cb_id)): # Get the actual data (This is beyond my knowledge but it works!) pythonapi.PyCObject_AsVoidPtr.restype = c_void_p pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] cb_id = pythonapi.PyCObject_AsVoidPtr(cb_id) keyname = getKeyName(cb_func) print("add: " + keyname) if not prefkey: prefkey = "CBMAN_{}".format(keyname) __CALLBACK_ENTRIES__[keyname] = { "prefkey": prefkey, "id": cb_id, # "cb": cb_id_wrapper, "default": 1 if default else 0, "label": label or keyname } setDefault(cb_func) # menu.reconstruct_menu() return cb_id
def __init__(self, parent=None, **kw): # the current button self._ActiveButton = Qt.NoButton # private attributes self.__saveX = 0 self.__saveY = 0 self.__saveModifiers = Qt.NoModifier self.__saveButtons = Qt.NoButton self.__wheelDelta = 0 # do special handling of some keywords: # stereo, rw try: stereo = bool(kw['stereo']) except KeyError: stereo = False try: rw = kw['rw'] except KeyError: rw = None # create base qt-level widget if QVTKRWIBase == "QWidget": if "wflags" in kw: wflags = kw['wflags'] else: wflags = Qt.WindowFlags() QWidget.__init__(self, parent, wflags | Qt.MSWindowsOwnDC) elif QVTKRWIBase == "QOpenGLWidget": QOpenGLWidget.__init__(self, parent) if rw: # user-supplied render window self._RenderWindow = rw else: self._RenderWindow = vtkRenderWindow() WId = self.winId() # Python2 if type(WId).__name__ == 'PyCObject': from ctypes import pythonapi, c_void_p, py_object pythonapi.PyCObject_AsVoidPtr.restype = c_void_p pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] WId = pythonapi.PyCObject_AsVoidPtr(WId) # Python3 elif type(WId).__name__ == 'PyCapsule': from ctypes import pythonapi, c_void_p, py_object, c_char_p pythonapi.PyCapsule_GetName.restype = c_char_p pythonapi.PyCapsule_GetName.argtypes = [py_object] name = pythonapi.PyCapsule_GetName(WId) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] WId = pythonapi.PyCapsule_GetPointer(WId, name) self._RenderWindow.SetWindowInfo(str(int(WId))) if stereo: # stereo mode self._RenderWindow.StereoCapableWindowOn() self._RenderWindow.SetStereoTypeToCrystalEyes() try: self._Iren = kw['iren'] except KeyError: self._Iren = vtkGenericRenderWindowInteractor() self._Iren.SetRenderWindow(self._RenderWindow) # do all the necessary qt setup self.setAttribute(Qt.WA_OpaquePaintEvent) self.setAttribute(Qt.WA_PaintOnScreen) self.setMouseTracking(True) # get all mouse events self.setFocusPolicy(Qt.WheelFocus) self.setSizePolicy( QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) self._Timer = QTimer(self) self._Timer.timeout.connect(self.TimerEvent) self._Iren.AddObserver('CreateTimerEvent', self.CreateTimer) self._Iren.AddObserver('DestroyTimerEvent', self.DestroyTimer) self._Iren.GetRenderWindow().AddObserver('CursorChangedEvent', self.CursorChangedEvent) # If we've a parent, it does not close the child when closed. # Connect the parent's destroyed signal to this widget's close # slot for proper cleanup of VTK objects. if self.parent(): self.parent().destroyed.connect(self.close, Qt.DirectConnection)
def __init__(self, parent=None, wflags=Qt.WindowFlags(), **kw): # the current button self._ActiveButton = Qt.NoButton # private attributes self.__saveX = 0 self.__saveY = 0 self.__saveModifiers = Qt.NoModifier self.__saveButtons = Qt.NoButton self.__fullScreenAction = QAction(parent) # do special handling of some keywords: # stereo, rw stereo = 0 if "stereo" in kw: if kw["stereo"]: stereo = 1 rw = None if "rw" in kw: rw = kw["rw"] # create qt-level widget QWidget.__init__(self, parent, wflags | Qt.MSWindowsOwnDC) # Add full screen shortcut self.__fullScreenAction.setShortcut(QKeySequence.FullScreen) self.__fullScreenAction.setCheckable(True) self.__fullScreenAction.setChecked(False) self.__fullScreenAction.triggered.connect(self.toggleFullScreen) QWidget.addAction(self, self.__fullScreenAction) if rw: # user-supplied render window self._RenderWindow = rw else: self._RenderWindow = vtk.vtkRenderWindow() WId = self.winId() if type(WId).__name__ == "PyCObject": from ctypes import pythonapi, c_void_p, py_object pythonapi.PyCObject_AsVoidPtr.restype = c_void_p pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] WId = pythonapi.PyCObject_AsVoidPtr(WId) self._RenderWindow.SetWindowInfo(str(int(WId))) if stereo: # stereo mode self._RenderWindow.StereoCapableWindowOn() self._RenderWindow.SetStereoTypeToCrystalEyes() if "iren" in kw: self._Iren = kw["iren"] else: self._Iren = vtk.vtkGenericRenderWindowInteractor() self._Iren.SetRenderWindow(self._RenderWindow) # do all the necessary qt setup self.setAttribute(Qt.WA_OpaquePaintEvent) self.setAttribute(Qt.WA_PaintOnScreen) self.setMouseTracking(True) # get all mouse events self.setFocusPolicy(Qt.WheelFocus) self.setSizePolicy( QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) self._Timer = QTimer(self) self._Timer.timeout.connect(self.TimerEvent) self._Iren.AddObserver("CreateTimerEvent", self.CreateTimer) self._Iren.AddObserver("DestroyTimerEvent", self.DestroyTimer) self._Iren.GetRenderWindow().AddObserver("CursorChangedEvent", self.CursorChangedEvent) # Create a hidden child widget and connect its destroyed signal to its # parent ``Finalize`` slot. The hidden children will be destroyed before # its parent thus allowing cleanup of VTK elements. # self._hidden = QtGui.QWidget(self) self._hidden = QWidget(self) self._hidden.hide() self._hidden.destroyed.connect(self.Finalize)
def __init__(self, parent=None, wflags=Qt.WindowFlags()): # the current button self._ActiveButton = Qt.NoButton # private attributes self.__saveX = 0 self.__saveY = 0 self.__saveModifiers = Qt.NoModifier self.__saveButtons = Qt.NoButton # create qt-level widget glFormat = QtOpenGL.QGLFormat() glFormat.setAlpha(True) QtOpenGL.QGLWidget.__init__(self, glFormat, parent, None) # Create a wender window self._RenderWindow = vtk.vtkRenderWindow() self._RenderWindow.SetAlphaBitPlanes(1) self._RenderWindow.SetMultiSamples(0) # Create a renderer self._Renderer = vtk.vtkRenderer() self._Renderer.SetUseDepthPeeling(1) #self._Renderer.SetMaximumNumberOfPeels(100) #self._Renderer.SetOcclusionRatio(0.0) self._RenderWindow.AddRenderer(self._Renderer) WId = self.winId() # Python2 if type(WId).__name__ == 'PyCObject': from ctypes import pythonapi, c_void_p, py_object pythonapi.PyCObject_AsVoidPtr.restype = c_void_p pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] WId = pythonapi.PyCObject_AsVoidPtr(WId) # Python3 elif type(WId).__name__ == 'PyCapsule': from ctypes import pythonapi, c_void_p, py_object, c_char_p pythonapi.PyCapsule_GetName.restype = c_char_p pythonapi.PyCapsule_GetName.argtypes = [py_object] name = pythonapi.PyCapsule_GetName(WId) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] WId = pythonapi.PyCapsule_GetPointer(WId, name) self._RenderWindow.SetWindowInfo(str(int(WId))) self._Iren = vtk.vtkGenericRenderWindowInteractor() self._Iren.SetRenderWindow(self._RenderWindow) # do all the necessary qt setup self.setAttribute(Qt.WA_OpaquePaintEvent) self.setAttribute(Qt.WA_PaintOnScreen) self.setMouseTracking(True) # get all mouse events self.setFocusPolicy(Qt.WheelFocus) self.setSizePolicy( QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) self._Timer = QTimer(self) self._Timer.timeout.connect(self.TimerEvent) self._Iren.AddObserver('CreateTimerEvent', self.CreateTimer) self._Iren.AddObserver('DestroyTimerEvent', self.DestroyTimer) self._Iren.GetRenderWindow().AddObserver('CursorChangedEvent', self.CursorChangedEvent) #Create a hidden child widget and connect its destroyed signal to its #parent ``Finalize`` slot. The hidden children will be destroyed before #its parent thus allowing cleanup of VTK elements. self._hidden = QWidget(self) self._hidden.hide() self._hidden.destroyed.connect(self.Finalize)
def __init__(self, parent=None, wflags=Qt.WindowFlags(), **kw): # the current button self._ActiveButton = Qt.NoButton # private attributes self.__saveX = 0 self.__saveY = 0 self.__saveModifiers = Qt.NoModifier self.__saveButtons = Qt.NoButton # do special handling of some keywords: # stereo, rw stereo = 0 if 'stereo' in kw: if kw['stereo']: stereo = 1 rw = None if 'rw' in kw: rw = kw['rw'] # create qt-level widget QWidget.__init__(self, parent, wflags | Qt.MSWindowsOwnDC) # check if retina display, or use 'retina' argument try: self.ratio = self.devicePixelRatio() except: self.ratio = 1 if 'retina' in kw: if kw['retina']: self.ratio = 2 if parent is None: self.ratio = 1 # to avoid strange boundary artefacts # if self.ratio > 1: # self.ratio *= 1.01 # unfortunately this causes problems with PNG writing if rw: # user-supplied render window self._RenderWindow = rw else: self._RenderWindow = vtk.vtkRenderWindow() WId = self.winId() if type(WId).__name__ == 'PyCObject': from ctypes import pythonapi, c_void_p, py_object pythonapi.PyCObject_AsVoidPtr.restype = c_void_p pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] WId = pythonapi.PyCObject_AsVoidPtr(WId) self._RenderWindow.SetWindowInfo(str(int(WId))) if stereo: # stereo mode self._RenderWindow.StereoCapableWindowOn() self._RenderWindow.SetStereoTypeToCrystalEyes() if 'iren' in kw: self._Iren = kw['iren'] else: self._Iren = vtk.vtkGenericRenderWindowInteractor() self._Iren.SetRenderWindow(self._RenderWindow) # do all the necessary qt setup self.setAttribute(Qt.WA_OpaquePaintEvent) self.setAttribute(Qt.WA_PaintOnScreen) self.setMouseTracking(True) # get all mouse events self.setFocusPolicy(Qt.WheelFocus) self.setSizePolicy( QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) self._Timer = QTimer(self) self._Timer.timeout.connect(self.TimerEvent) self._Iren.AddObserver('CreateTimerEvent', self.CreateTimer) self._Iren.AddObserver('DestroyTimerEvent', self.DestroyTimer) self._Iren.GetRenderWindow().AddObserver('CursorChangedEvent', self.CursorChangedEvent) # Create a hidden child widget and connect its destroyed signal to its # parent ``Finalize`` slot. The hidden children will be destroyed before # its parent thus allowing cleanup of VTK elements. self._hidden = QWidget(self) self._hidden.hide() self._hidden.destroyed.connect(self.Finalize)
def __init__(self, parent=None, **kw): logging.debug("In QVTKRenderWindowInteractor::__init__()") # the current button self._ActiveButton = QtCore.Qt.NoButton # private attributes self.__oldFocus = None self.__saveX = 0 self.__saveY = 0 self.__saveModifiers = QtCore.Qt.NoModifier self.__saveButtons = QtCore.Qt.NoButton # do special handling of some keywords: # stereo, rw stereo = 0 if kw.has_key('stereo'): if kw['stereo']: stereo = 1 rw = None if kw.has_key('rw'): rw = kw['rw'] # create qt-level widget #QtGui.QWidget.__init__(self, parent) #QtOpenGL.QGLWidget.__init__(self, parent) super(QVTKRenderWindowInteractor, self).__init__(parent) if rw: # user-supplied render window self._RenderWindow = rw else: self._RenderWindow = vtkRenderWindow() if sys.platform == "win32": self._RenderWindow.SetWindowInfo( str(int(pythonapi.PyCObject_AsVoidPtr(self.winId())))) else: self._RenderWindow.SetWindowInfo(str(int(self.winId()))) self._should_set_parent_info = (sys.platform == 'win32') if stereo: # stereo mode self._RenderWindow.StereoCapableWindowOn() self._RenderWindow.SetStereoTypeToCrystalEyes() self._Iren = vtkGenericRenderWindowInteractor() self._Iren.SetRenderWindow(self._RenderWindow) # do all the necessary qt setup self.setAttribute(QtCore.Qt.WA_OpaquePaintEvent) self.setAttribute(QtCore.Qt.WA_PaintOnScreen) self.setMouseTracking(True) # get all mouse events self.setFocusPolicy(QtCore.Qt.WheelFocus) self.setSizePolicy( QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)) self._Timer = QtCore.QTimer(self) self.connect(self._Timer, QtCore.SIGNAL('timeout()'), self.TimerEvent) self._Iren.AddObserver('CreateTimerEvent', self.CreateTimer) self._Iren.AddObserver('DestroyTimerEvent', self.DestroyTimer) self._Iren.GetRenderWindow().AddObserver('CursorChangedEvent', self.CursorChangedEvent)
def __init__(self, parent=None, wflags=Qt.WindowFlags(), **kw): # the current button self._ActiveButton = Qt.NoButton # private attributes self.__saveX = 0 self.__saveY = 0 self.__saveModifiers = Qt.NoModifier self.__saveButtons = Qt.NoButton self.__wheelDelta = 0 # do special handling of some keywords: # stereo, rw try: stereo = bool(kw['stereo']) except KeyError: stereo = False try: rw = kw['rw'] except KeyError: rw = None # create qt-level widget QWidget.__init__(self, parent, wflags | Qt.MSWindowsOwnDC) if rw: # user-supplied render window self._RenderWindow = rw else: self._RenderWindow = vtk.vtkRenderWindow() WId = self.winId() # Python2 if type(WId).__name__ == 'PyCObject': from ctypes import pythonapi, c_void_p, py_object pythonapi.PyCObject_AsVoidPtr.restype = c_void_p pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] WId = pythonapi.PyCObject_AsVoidPtr(WId) # Python3 elif type(WId).__name__ == 'PyCapsule': from ctypes import pythonapi, c_void_p, py_object, c_char_p pythonapi.PyCapsule_GetName.restype = c_char_p pythonapi.PyCapsule_GetName.argtypes = [py_object] name = pythonapi.PyCapsule_GetName(WId) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] WId = pythonapi.PyCapsule_GetPointer(WId, name) self._RenderWindow.SetWindowInfo(str(int(WId))) if stereo: # stereo mode self._RenderWindow.StereoCapableWindowOn() self._RenderWindow.SetStereoTypeToCrystalEyes() try: self._Iren = kw['iren'] except KeyError: self._Iren = vtk.vtkGenericRenderWindowInteractor() self._Iren.SetRenderWindow(self._RenderWindow) # do all the necessary qt setup self.setAttribute(Qt.WA_OpaquePaintEvent) self.setAttribute(Qt.WA_PaintOnScreen) self.setMouseTracking(True) # get all mouse events self.setFocusPolicy(Qt.WheelFocus) self.setSizePolicy( QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) self._Timer = QTimer(self) self._Timer.timeout.connect(self.TimerEvent) self._Iren.AddObserver('CreateTimerEvent', self.CreateTimer) self._Iren.AddObserver('DestroyTimerEvent', self.DestroyTimer) self._Iren.GetRenderWindow().AddObserver('CursorChangedEvent', self.CursorChangedEvent) #Create a hidden child widget and connect its destroyed signal to its #parent ``Finalize`` slot. The hidden children will be destroyed before #its parent thus allowing cleanup of VTK elements. self._hidden = QWidget(self) self._hidden.hide() self._hidden.destroyed.connect(self.Finalize)
def __init__(self, parent=None, **kw): # the current button self._ActiveButton = Qt.NoButton # private attributes self.__saveX = 0 self.__saveY = 0 self.__saveModifiers = Qt.NoModifier self.__saveButtons = Qt.NoButton self.__wheelDelta = 0 # do special handling of some keywords: # stereo, rw try: stereo = bool(kw['stereo']) except KeyError: stereo = False try: rw = kw['rw'] except KeyError: rw = None # create base qt-level widget if QVTKRWIBase == "QWidget": if "wflags" in kw: wflags = kw['wflags'] else: wflags = Qt.WindowFlags() QWidget.__init__(self, parent, wflags | Qt.MSWindowsOwnDC) elif QVTKRWIBase == "QGLWidget": QGLWidget.__init__(self, parent) if rw: # user-supplied render window self._RenderWindow = rw else: self._RenderWindow = vtk.vtkRenderWindow() WId = self.winId() print 'WId=', WId # print 'widget id = ', widget.winId() win_id = int(WId) print 'win_id=', win_id l_int = c_long(win_id) # lib.cpp_disableGLHiDPI(4621918512) lib.cpp_disableGLHiDPI(l_int) # # disableGLHiDPI(widget.winId()) # Python2 if type(WId).__name__ == 'PyCObject': from ctypes import pythonapi, c_void_p, py_object pythonapi.PyCObject_AsVoidPtr.restype = c_void_p pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object] WId = pythonapi.PyCObject_AsVoidPtr(WId) # Python3 elif type(WId).__name__ == 'PyCapsule': from ctypes import pythonapi, c_void_p, py_object, c_char_p pythonapi.PyCapsule_GetName.restype = c_char_p pythonapi.PyCapsule_GetName.argtypes = [py_object] name = pythonapi.PyCapsule_GetName(WId) pythonapi.PyCapsule_GetPointer.restype = c_void_p pythonapi.PyCapsule_GetPointer.argtypes = [py_object, c_char_p] WId = pythonapi.PyCapsule_GetPointer(WId, name) self._RenderWindow.SetWindowInfo(str(int(WId))) # if stereo: # stereo mode # self._RenderWindow.StereoCapableWindowOn() # self._RenderWindow.SetStereoTypeToCrystalEyes() try: self._Iren = kw['iren'] except KeyError: self._Iren = vtk.vtkGenericRenderWindowInteractor() self._Iren.SetRenderWindow(self._RenderWindow) # this is needed to get nice'n'smooth mouse interaction self.interactorStyle = vtk.vtkInteractorStyleSwitch() # self.interactorStyle.SetCurrentStyleToTrackballActor() self.interactorStyle.SetCurrentStyleToTrackballCamera() self._Iren.SetInteractorStyle(self.interactorStyle) # do all the necessary qt setup self.setAttribute(Qt.WA_OpaquePaintEvent) self.setAttribute(Qt.WA_PaintOnScreen) self.setMouseTracking(True) # get all mouse events self.setFocusPolicy(Qt.WheelFocus) self.setSizePolicy( QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) self._Timer = QTimer(self) self._Timer.timeout.connect(self.TimerEvent) self._Iren.AddObserver('CreateTimerEvent', self.CreateTimer) self._Iren.AddObserver('DestroyTimerEvent', self.DestroyTimer) self._Iren.GetRenderWindow().AddObserver('CursorChangedEvent', self.CursorChangedEvent) #Create a hidden child widget and connect its destroyed signal to its #parent ``Finalize`` slot. The hidden children will be destroyed before #its parent thus allowing cleanup of VTK elements. self._hidden = QWidget(self) self._hidden.hide() self._hidden.destroyed.connect(self.Finalize) self.mousePressEventFcn = self.mousePressEvent2DStyle