.. Catia's structure browser:: http://goo.gl/KBh7BL .. OpenGL overpainting example:: https://github.com/Werkov/PyQt4/blob/master/examples/opengl/overpainting.py """ import random import sys from OCC.Display.backend import get_backend, get_qt_modules backend = get_backend() QtCore, QtGui, QtWidgets, QtOpenGL = get_qt_modules() from OCC.Display.qtDisplay import qtViewer3d # -------------------------------------------------------------------------- # these are names of actions that invoke the OpenGL viewport to be redrawn # such actions need to be invoked through the GLWidget.update method, which # in turn invoked the GLWidget.paintEvent method # this way, all command that redraw the viewport are invoked synchronously # -------------------------------------------------------------------------- ON_ZOOM = "on_zoom" ON_ZOOM_AREA = "on_zoom_area" ON_ZOOM_FACTOR = "on_zoom_factor"
def init_display(backend_str=None, size=(1024, 768)): used_backend = get_backend(backend_str) log.info("GUI backend set to: {0}".format(used_backend)) # wxPython based simple GUI if used_backend == 'wx': import wx from wxDisplay import wxViewer3d class AppFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1, "pythonOCC-%s 3d viewer ('wx' backend)" % VERSION, style=wx.DEFAULT_FRAME_STYLE, size=size) self.canva = wxViewer3d(self) self.menuBar = wx.MenuBar() self._menus = {} self._menu_methods = {} def add_menu(self, menu_name): _menu = wx.Menu() self.menuBar.Append(_menu, "&" + menu_name) self.SetMenuBar(self.menuBar) self._menus[menu_name] = _menu def add_function_to_menu(self, menu_name, _callable): # point on curve _id = wx.NewId() check_callable(_callable) try: self._menus[menu_name].Append(_id, _callable.__name__.replace('_', ' ').lower()) except KeyError: raise ValueError('the menu item %s does not exist' % menu_name) self.Bind(wx.EVT_MENU, _callable, id=_id) app = wx.App(False) win = AppFrame(None) win.Show(True) wx.SafeYield() win.canva.InitDriver() app.SetTopWindow(win) display = win.canva._display def add_menu(*args, **kwargs): win.add_menu(*args, **kwargs) def add_function_to_menu(*args, **kwargs): win.add_function_to_menu(*args, **kwargs) def start_display(): app.MainLoop() # Qt based simple GUI elif 'qt' in used_backend: from OCC.Display.qtDisplay import qtViewer3d QtCore, QtGui, QtWidgets, QtOpenGL = get_qt_modules() class MainWindow(QtWidgets.QMainWindow): def __init__(self, *args): QtWidgets.QMainWindow.__init__(self, *args) self.canva = qtViewer3d(self) self.setWindowTitle("pythonOCC-%s 3d viewer ('%s' backend)" % (VERSION, used_backend)) self.resize(size[0], size[1]) self.setCentralWidget(self.canva) if not sys.platform == 'darwin': self.menu_bar = self.menuBar() else: # create a parentless menubar # see: http://stackoverflow.com/questions/11375176/qmenubar-and-qmenu-doesnt-show-in-mac-os-x?lq=1 # noticeable is that the menu ( alas ) is created in the # topleft of the screen, just # next to the apple icon # still does ugly things like showing the "Python" menu in # bold self.menu_bar = QtWidgets.QMenuBar() self._menus = {} self._menu_methods = {} # place the window in the center of the screen, at half the # screen size self.centerOnScreen() def centerOnScreen(self): '''Centers the window on the screen.''' resolution = QtWidgets.QDesktopWidget().screenGeometry() self.move((resolution.width() / 2) - (self.frameSize().width() / 2), (resolution.height() / 2) - (self.frameSize().height() / 2)) def add_menu(self, menu_name): _menu = self.menu_bar.addMenu("&" + menu_name) self._menus[menu_name] = _menu def add_function_to_menu(self, menu_name, _callable): check_callable(_callable) try: _action = QtWidgets.QAction(_callable.__name__.replace('_', ' ').lower(), self) # if not, the "exit" action is now shown... _action.setMenuRole(QtWidgets.QAction.NoRole) _action.triggered.connect(_callable) self._menus[menu_name].addAction(_action) except KeyError: raise ValueError('the menu item %s does not exist' % menu_name) # following couple of lines is a twek to enable ipython --gui='qt' app = QtWidgets.QApplication.instance() # checks if QApplication already exists if not app: # create QApplication if it doesnt exist app = QtWidgets.QApplication(sys.argv) win = MainWindow() win.show() win.canva.InitDriver() display = win.canva._display if sys.platform != "linux2": display.EnableAntiAliasing() # background gradient display.set_bg_gradient_color(206, 215, 222, 128, 128, 128) # display black trihedron display.display_trihedron() def add_menu(*args, **kwargs): win.add_menu(*args, **kwargs) def add_function_to_menu(*args, **kwargs): win.add_function_to_menu(*args, **kwargs) def start_display(): win.raise_() # make the application float to the top app.exec_() return display, start_display, add_menu, add_function_to_menu
def init_display(backend_str=None, size=(1024, 768)): used_backend = get_backend(backend_str) log.info("GUI backend set to: {0}".format(used_backend)) # wxPython based simple GUI if used_backend == 'wx': import wx from wxDisplay import wxViewer3d class AppFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1, "pythonOCC-%s 3d viewer ('wx' backend)" % VERSION, style=wx.DEFAULT_FRAME_STYLE, size=size) self.canva = wxViewer3d(self) self.menuBar = wx.MenuBar() self._menus = {} self._menu_methods = {} def add_menu(self, menu_name): _menu = wx.Menu() self.menuBar.Append(_menu, "&" + menu_name) self.SetMenuBar(self.menuBar) self._menus[menu_name] = _menu def add_function_to_menu(self, menu_name, _callable): # point on curve _id = wx.NewId() check_callable(_callable) try: self._menus[menu_name].Append(_id, _callable.__name__.replace('_', ' ').lower()) except KeyError: raise ValueError('the menu item %s does not exist' % menu_name) self.Bind(wx.EVT_MENU, _callable, id=_id) app = wx.PySimpleApp() win = AppFrame(None) win.Show(True) wx.SafeYield() win.canva.InitDriver() app.SetTopWindow(win) display = win.canva._display def add_menu(*args, **kwargs): win.add_menu(*args, **kwargs) def add_function_to_menu(*args, **kwargs): win.add_function_to_menu(*args, **kwargs) def start_display(): app.MainLoop() # Qt based simple GUI elif 'qt' in used_backend: from OCC.Display.qtDisplay import qtViewer3d QtCore, QtGui, QtWidgets, QtOpenGL = get_qt_modules() class MainWindow(QtWidgets.QMainWindow): def __init__(self, *args): QtWidgets.QMainWindow.__init__(self, *args) self.canva = qtViewer3d(self) self.setWindowTitle("pythonOCC-%s 3d viewer ('%s' backend)" % (VERSION, used_backend)) self.resize(size[0], size[1]) self.setCentralWidget(self.canva) if not sys.platform == 'darwin': self.menu_bar = self.menuBar() else: # create a parentless menubar # see: http://stackoverflow.com/questions/11375176/qmenubar-and-qmenu-doesnt-show-in-mac-os-x?lq=1 # noticeable is that the menu ( alas ) is created in the # topleft of the screen, just # next to the apple icon # still does ugly things like showing the "Python" menu in # bold self.menu_bar = QtWidgets.QMenuBar() self._menus = {} self._menu_methods = {} # place the window in the center of the screen, at half the # screen size self.centerOnScreen() def centerOnScreen(self): '''Centers the window on the screen.''' resolution = QtWidgets.QDesktopWidget().screenGeometry() self.move((resolution.width() / 2) - (self.frameSize().width() / 2), (resolution.height() / 2) - (self.frameSize().height() / 2)) def add_menu(self, menu_name): _menu = self.menu_bar.addMenu("&" + menu_name) self._menus[menu_name] = _menu def add_function_to_menu(self, menu_name, _callable): check_callable(_callable) try: _action = QtWidgets.QAction(_callable.__name__.replace('_', ' ').lower(), self) # if not, the "exit" action is now shown... _action.setMenuRole(QtWidgets.QAction.NoRole) self.connect(_action, QtCore.SIGNAL("triggered()"), _callable) self._menus[menu_name].addAction(_action) except KeyError: raise ValueError('the menu item %s does not exist' % menu_name) # following couple of lines is a twek to enable ipython --gui='qt' app = QtWidgets.QApplication.instance() # checks if QApplication already exists if not app: # create QApplication if it doesnt exist app = QtWidgets.QApplication(sys.argv) win = MainWindow() win.show() win.canva.InitDriver() display = win.canva._display if sys.platform != "linux2": display.EnableAntiAliasing() # background gradient display.set_bg_gradient_color(206, 215, 222, 128, 128, 128) # display black trihedron display.display_trihedron() def add_menu(*args, **kwargs): win.add_menu(*args, **kwargs) def add_function_to_menu(*args, **kwargs): win.add_function_to_menu(*args, **kwargs) def start_display(): win.raise_() # make the application float to the top app.exec_() return display, start_display, add_menu, add_function_to_menu
http://goo.gl/KBh7BL .. OpenGL overpainting example:: https://github.com/Werkov/PyQt4/blob/master/examples/opengl/overpainting.py """ from __future__ import print_function import random import sys from OCC.Display.backend import get_backend, get_qt_modules backend = get_backend() QtCore, QtGui, QtWidgets, QtOpenGL = get_qt_modules() from OCC.Display.qtDisplay import qtViewer3d # -------------------------------------------------------------------------- # these are names of actions that invoke the OpenGL viewport to be redrawn # such actions need to be invoked through the GLWidget.update method, which # in turn invoked the GLWidget.paintEvent method # this way, all command that redraw the viewport are invoked synchronously # -------------------------------------------------------------------------- ON_ZOOM = "on_zoom" ON_ZOOM_AREA = "on_zoom_area" ON_ZOOM_FACTOR = "on_zoom_factor" ON_ZOOM_FITALL = "on_zoom_fitall"