+ 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
|
# signal that the gui is up
|
||||||
App.GuiUp = 1
|
App.GuiUp = 1
|
||||||
App.Gui = FreeCADGui
|
App.Gui = FreeCADGui
|
||||||
|
FreeCADGui.Workbench = Workbench
|
||||||
|
|
||||||
Gui.addWorkbench(NoneWorkbench())
|
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