141 lines
4.7 KiB
Python
141 lines
4.7 KiB
Python
import FreeCAD
|
|
import FreeCADGui
|
|
from PySide import QtGui
|
|
|
|
|
|
def clearActiveDocument():
|
|
"""Clears the currently active 3D view so that we can re-render"""
|
|
|
|
# Grab our code editor so we can interact with it
|
|
mw = FreeCADGui.getMainWindow()
|
|
mdi = mw.findChild(QtGui.QMdiArea)
|
|
currentWin = mdi.currentSubWindow()
|
|
if currentWin == None:
|
|
return
|
|
winName = currentWin.windowTitle().split(" ")[0].split('.')[0]
|
|
|
|
# Translate dashes so that they can be safetly used since theyare common
|
|
if '-' in winName:
|
|
winName= winName.replace('-', "__")
|
|
|
|
try:
|
|
doc = FreeCAD.getDocument(winName)
|
|
|
|
# Make sure we have an active document to work with
|
|
if doc is not None:
|
|
for obj in doc.Objects:
|
|
doc.removeObject(obj.Name)
|
|
except:
|
|
pass
|
|
|
|
|
|
def getActiveCodePane():
|
|
"""Gets the currently active code pane, even if its 3D view is selected."""
|
|
|
|
# Grab our code editor so we can interact with it
|
|
mw = FreeCADGui.getMainWindow()
|
|
mdi = mw.findChild(QtGui.QMdiArea)
|
|
|
|
# If our current subwindow doesn't contain a script, we need to find the one that does
|
|
mdiWin = mdi.currentSubWindow()
|
|
if mdiWin == None: return None # We need to warn the caller that there is no code pane
|
|
|
|
windowTitle = mdiWin.windowTitle()
|
|
|
|
if mdiWin == 0 or ".py" not in mdiWin.windowTitle():
|
|
if '__' in mdiWin.windowTitle():
|
|
windowTitle = mdiWin.windowTitle().replace("__", '-')
|
|
|
|
subList = mdi.subWindowList()
|
|
|
|
for sub in subList:
|
|
if sub.windowTitle() == windowTitle.split(" ")[0] + ".py":
|
|
mdiWin = sub
|
|
|
|
winName = mdiWin.windowTitle().split('.')[0]
|
|
cqCodePane = mw.findChild(QtGui.QPlainTextEdit, "cqCodePane_" + winName)
|
|
|
|
return cqCodePane
|
|
|
|
|
|
def closeActiveCodeWindow():
|
|
mw = FreeCADGui.getMainWindow()
|
|
mdi = mw.findChild(QtGui.QMdiArea)
|
|
|
|
# We cannot trust the current subwindow to be a script window, it may be the associated 3D view
|
|
mdiWin = mdi.currentSubWindow()
|
|
|
|
# We have a 3D view selected so we need to find the corresponding script window
|
|
if mdiWin == 0 or ".py" not in mdiWin.windowTitle():
|
|
subList = mdi.subWindowList()
|
|
|
|
for sub in subList:
|
|
if sub.windowTitle() == mdiWin.windowTitle().split(" ")[0] + ".py":
|
|
sub.close()
|
|
return
|
|
|
|
mdiWin.close()
|
|
|
|
def setActiveWindowTitle(title):
|
|
"""Sets the title of the currently active MDI window, as long as it is a scripting window"""
|
|
|
|
mw = FreeCADGui.getMainWindow()
|
|
mdi = mw.findChild(QtGui.QMdiArea)
|
|
|
|
# We cannot trust the current subwindow to be a script window, it may be the associated 3D view
|
|
mdiWin = mdi.currentSubWindow()
|
|
|
|
if mdiWin == 0 or ".py" not in mdiWin.windowTitle():
|
|
subList = mdi.subWindowList()
|
|
|
|
for sub in subList:
|
|
if sub.windowTitle() == mdiWin.windowTitle() + ".py":
|
|
mdiWin = sub
|
|
|
|
# Change the window title if there is something there to change
|
|
if (mdiWin != 0):
|
|
mdiWin.setWindowTitle(title)
|
|
|
|
cqCodePane = mdiWin.findChild(QtGui.QPlainTextEdit)
|
|
cqCodePane.setObjectName("cqCodePane_" + title.split('.')[0])
|
|
|
|
|
|
def populateParameterEditor(parameters):
|
|
"""Puts the proper controls in the script variable editor pane based on the parameters found"""
|
|
|
|
mw = FreeCADGui.getMainWindow()
|
|
|
|
# If the widget is open, we need to close it
|
|
dockWidgets = mw.findChildren(QtGui.QDockWidget)
|
|
for widget in dockWidgets:
|
|
if widget.objectName() == "cqVarsEditor":
|
|
gridLayout = QtGui.QGridLayout()
|
|
|
|
line = 1
|
|
|
|
# Add controls for all the parameters so that they can be edited from the GUI
|
|
for pKey, pVal in parameters.iteritems():
|
|
label = QtGui.QLabel(pKey)
|
|
|
|
# We want to keep track of this parameter value field so that we can pull its value later when executing
|
|
value = QtGui.QLineEdit()
|
|
value.setText(str(pVal.default_value))
|
|
value.setObjectName("pcontrol_" + pKey)
|
|
|
|
# Add the parameter control sets, one set per line
|
|
gridLayout.addWidget(label, line, 0)
|
|
gridLayout.addWidget(value, line, 1)
|
|
|
|
line += 1
|
|
|
|
# Create a widget we can put the layout in and add a scrollbar
|
|
newWidget = QtGui.QWidget()
|
|
newWidget.setLayout(gridLayout)
|
|
|
|
# Add a scroll bar in case there are a lot of variables in the script
|
|
scrollArea = QtGui.QScrollArea()
|
|
scrollArea.setBackgroundRole(QtGui.QPalette.Light)
|
|
scrollArea.setStyleSheet("QLabel { color : black; }");
|
|
scrollArea.setWidget(newWidget)
|
|
|
|
widget.setWidget(scrollArea) |