+ Add Python example of embedding FreeCAD
This commit is contained in:
parent
8ebf64ac3f
commit
2362239edf
|
@ -127,6 +127,7 @@ Log ('Init: Running FreeCADGuiInit.py start script...\n')
|
|||
# signal that the gui is up
|
||||
App.GuiUp = 1
|
||||
App.Gui = FreeCADGui
|
||||
FreeCADGui.Workbench = Workbench
|
||||
|
||||
Gui.addWorkbench(NoneWorkbench())
|
||||
|
||||
|
|
53
src/Tools/embedded/PySide/mainwindow.py
Normal file
53
src/Tools/embedded/PySide/mainwindow.py
Normal file
|
@ -0,0 +1,53 @@
|
|||
import sys
|
||||
#sys.path.append("")
|
||||
|
||||
from PySide import QtCore, QtGui
|
||||
import FreeCAD, FreeCADGui
|
||||
|
||||
from ui_mainwindow import Ui_MainWindow
|
||||
|
||||
class MainWindow(QtGui.QMainWindow):
|
||||
def __init__(self, parent = None):
|
||||
super(MainWindow, self).__init__(parent)
|
||||
from PySide import QtNetwork
|
||||
# Webkit is used to create icons from SVG files. This could cause a deadlock
|
||||
# when setting up the internally used network interface. Doing this before
|
||||
# creating the icons fixes the issue.
|
||||
QtNetwork.QNetworkConfigurationManager()
|
||||
|
||||
def showEvent(self, event):
|
||||
FreeCADGui.showMainWindow()
|
||||
self.setCentralWidget(FreeCADGui.getMainWindow())
|
||||
# Need version >= 0.16.5949
|
||||
class BlankWorkbench(FreeCADGui.Workbench):
|
||||
MenuText = "Blank"
|
||||
ToolTip = "Blank workbench"
|
||||
def Initialize(self):
|
||||
return
|
||||
def GetClassName(self):
|
||||
return "Gui::BlankWorkbench"
|
||||
FreeCADGui.addWorkbench(BlankWorkbench)
|
||||
FreeCADGui.activateWorkbench("BlankWorkbench")
|
||||
|
||||
@QtCore.Slot()
|
||||
def on_actionEmbed_triggered(self):
|
||||
return
|
||||
|
||||
@QtCore.Slot()
|
||||
def on_actionDocument_triggered(self):
|
||||
FreeCAD.newDocument()
|
||||
|
||||
@QtCore.Slot()
|
||||
def on_actionCube_triggered(self):
|
||||
FreeCAD.ActiveDocument.addObject("Part::Box")
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
FreeCADGui.ActiveDocument.ActiveView.fitAll()
|
||||
|
||||
app=QtGui.QApplication(sys.argv)
|
||||
ui=Ui_MainWindow()
|
||||
mw=MainWindow()
|
||||
ui.setupUi(mw)
|
||||
ui.actionEmbed.setVisible(False)
|
||||
mw.resize(1200,800)
|
||||
mw.show()
|
||||
app.exec_()
|
55
src/Tools/embedded/PySide/mainwindow.ui
Normal file
55
src/Tools/embedded/PySide/mainwindow.ui
Normal file
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget"/>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuFreeCAD">
|
||||
<property name="title">
|
||||
<string>FreeCAD</string>
|
||||
</property>
|
||||
<addaction name="actionEmbed"/>
|
||||
<addaction name="actionDocument"/>
|
||||
<addaction name="actionCube"/>
|
||||
</widget>
|
||||
<addaction name="menuFreeCAD"/>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
<action name="actionEmbed">
|
||||
<property name="text">
|
||||
<string>Embed</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionDocument">
|
||||
<property name="text">
|
||||
<string>Document</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionCube">
|
||||
<property name="text">
|
||||
<string>Cube</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
35
src/Tools/embedded/PySide/mainwindow2.py
Normal file
35
src/Tools/embedded/PySide/mainwindow2.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
import sys
|
||||
#sys.path.append("")
|
||||
|
||||
from PySide import QtCore, QtGui
|
||||
import FreeCADGui
|
||||
|
||||
class MainWindow(QtGui.QMainWindow):
|
||||
def __init__(self, parent = None):
|
||||
super(MainWindow, self).__init__(parent)
|
||||
from PySide import QtNetwork
|
||||
# Webkit is used to create icons from SVG files. This could cause a deadlock
|
||||
# when setting up the internally used network interface. Doing this before
|
||||
# creating the icons fixes the issue.
|
||||
QtNetwork.QNetworkConfigurationManager()
|
||||
|
||||
def showEvent(self, event):
|
||||
FreeCADGui.showMainWindow()
|
||||
self.setCentralWidget(FreeCADGui.getMainWindow())
|
||||
# Need version >= 0.16.5949
|
||||
class BlankWorkbench(FreeCADGui.Workbench):
|
||||
MenuText = "Blank"
|
||||
ToolTip = "Blank workbench"
|
||||
def Initialize(self):
|
||||
self.appendMenu("Menu",["Std_New", "Part_Box"])
|
||||
return
|
||||
def GetClassName(self):
|
||||
return "Gui::PythonBlankWorkbench"
|
||||
FreeCADGui.addWorkbench(BlankWorkbench)
|
||||
FreeCADGui.activateWorkbench("BlankWorkbench")
|
||||
|
||||
app=QtGui.QApplication(sys.argv)
|
||||
mw=MainWindow()
|
||||
mw.resize(1200,800)
|
||||
mw.show()
|
||||
app.exec_()
|
53
src/Tools/embedded/PySide/mainwindow3.py
Normal file
53
src/Tools/embedded/PySide/mainwindow3.py
Normal file
|
@ -0,0 +1,53 @@
|
|||
import sys
|
||||
#sys.path.append("")
|
||||
|
||||
from PySide import QtCore, QtGui
|
||||
import FreeCAD, FreeCADGui
|
||||
import ctypes
|
||||
|
||||
from ui_mainwindow import Ui_MainWindow
|
||||
|
||||
class MainWindow(QtGui.QMainWindow):
|
||||
def __init__(self, parent = None):
|
||||
super(MainWindow, self).__init__(parent)
|
||||
from PySide import QtNetwork
|
||||
# Webkit is used to create icons from SVG files. This could cause a deadlock
|
||||
# when setting up the internally used network interface. Doing this before
|
||||
# creating the icons fixes the issue.
|
||||
QtNetwork.QNetworkConfigurationManager()
|
||||
|
||||
@QtCore.Slot()
|
||||
def on_actionEmbed_triggered(self):
|
||||
FreeCADGui.showMainWindow()
|
||||
hwnd=self.winId()
|
||||
PyCObject_AsVoidPtr = ctypes.PYFUNCTYPE(ctypes.c_void_p, ctypes.py_object)(('PyCObject_AsVoidPtr', ctypes.pythonapi))
|
||||
addr = PyCObject_AsVoidPtr(hwnd)
|
||||
FreeCADGui.embedToWindow(hex(addr))
|
||||
# Need version >= 0.16.5949
|
||||
class BlankWorkbench(FreeCADGui.Workbench):
|
||||
MenuText = "Blank"
|
||||
ToolTip = "Blank workbench"
|
||||
def Initialize(self):
|
||||
return
|
||||
def GetClassName(self):
|
||||
return "Gui::BlankWorkbench"
|
||||
FreeCADGui.addWorkbench(BlankWorkbench)
|
||||
FreeCADGui.activateWorkbench("BlankWorkbench")
|
||||
|
||||
@QtCore.Slot()
|
||||
def on_actionDocument_triggered(self):
|
||||
FreeCAD.newDocument()
|
||||
|
||||
@QtCore.Slot()
|
||||
def on_actionCube_triggered(self):
|
||||
FreeCAD.ActiveDocument.addObject("Part::Box")
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
FreeCADGui.ActiveDocument.ActiveView.fitAll()
|
||||
|
||||
app=QtGui.QApplication(sys.argv)
|
||||
ui=Ui_MainWindow()
|
||||
mw=MainWindow()
|
||||
ui.setupUi(mw)
|
||||
mw.resize(1200,800)
|
||||
mw.show()
|
||||
app.exec_()
|
48
src/Tools/embedded/PySide/ui_mainwindow.py
Normal file
48
src/Tools/embedded/PySide/ui_mainwindow.py
Normal file
|
@ -0,0 +1,48 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'mainwindow.ui'
|
||||
#
|
||||
# Created: Fri Nov 20 18:03:04 2015
|
||||
# by: pyside-uic 0.2.13 running on PySide 1.1.0
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PySide import QtCore, QtGui
|
||||
|
||||
class Ui_MainWindow(object):
|
||||
def setupUi(self, MainWindow):
|
||||
MainWindow.setObjectName("MainWindow")
|
||||
MainWindow.resize(800, 600)
|
||||
self.centralwidget = QtGui.QWidget(MainWindow)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
self.menubar = QtGui.QMenuBar(MainWindow)
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 25))
|
||||
self.menubar.setObjectName("menubar")
|
||||
self.menuFreeCAD = QtGui.QMenu(self.menubar)
|
||||
self.menuFreeCAD.setObjectName("menuFreeCAD")
|
||||
MainWindow.setMenuBar(self.menubar)
|
||||
self.statusbar = QtGui.QStatusBar(MainWindow)
|
||||
self.statusbar.setObjectName("statusbar")
|
||||
MainWindow.setStatusBar(self.statusbar)
|
||||
self.actionEmbed = QtGui.QAction(MainWindow)
|
||||
self.actionEmbed.setObjectName("actionEmbed")
|
||||
self.actionDocument = QtGui.QAction(MainWindow)
|
||||
self.actionDocument.setObjectName("actionDocument")
|
||||
self.actionCube = QtGui.QAction(MainWindow)
|
||||
self.actionCube.setObjectName("actionCube")
|
||||
self.menuFreeCAD.addAction(self.actionEmbed)
|
||||
self.menuFreeCAD.addAction(self.actionDocument)
|
||||
self.menuFreeCAD.addAction(self.actionCube)
|
||||
self.menubar.addAction(self.menuFreeCAD.menuAction())
|
||||
|
||||
self.retranslateUi(MainWindow)
|
||||
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||
|
||||
def retranslateUi(self, MainWindow):
|
||||
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
|
||||
self.menuFreeCAD.setTitle(QtGui.QApplication.translate("MainWindow", "FreeCAD", None, QtGui.QApplication.UnicodeUTF8))
|
||||
self.actionEmbed.setText(QtGui.QApplication.translate("MainWindow", "Embed", None, QtGui.QApplication.UnicodeUTF8))
|
||||
self.actionDocument.setText(QtGui.QApplication.translate("MainWindow", "Document", None, QtGui.QApplication.UnicodeUTF8))
|
||||
self.actionCube.setText(QtGui.QApplication.translate("MainWindow", "Cube", None, QtGui.QApplication.UnicodeUTF8))
|
||||
|
Loading…
Reference in New Issue
Block a user