Worked through script validation and started to implement the logic to populate the parameters editor.

This commit is contained in:
Jeremy Mack Wright 2017-07-29 08:20:53 -04:00
parent ecefa3d707
commit 896bcca7c9
3 changed files with 58 additions and 25 deletions

View File

@ -127,8 +127,9 @@ class CadQueryExecuteScript:
# Clear the old render before re-rendering
Shared.clearActiveDocument()
# Check to see if we are executig a CQGI compliant script
scriptText = cqCodePane.toPlainText().encode('utf-8')
# Check to see if we are executig a CQGI compliant script
if "build_object(" in scriptText and "# build_object(" not in scriptText and "#build_boject(" not in scriptText:
FreeCAD.Console.PrintMessage("Executing CQGI-compliant script.\r\n")
@ -138,11 +139,7 @@ class CadQueryExecuteScript:
# Allows us to present parameters to users later that they can alter
parameters = cqModel.metadata.parameters
FreeCAD.Console.PrintMessage("Script Variables:\r\n")
for key, value in parameters.iteritems():
FreeCAD.Console.PrintMessage("variable name: " + key + ", variable value: " + str(value.default_value) + "\r\n")
build_result = cqgi.parse(scriptText).build()
build_result = cqModel.build()
# Make sure that the build was successful
if build_result.success:
@ -316,11 +313,11 @@ class CadQuerySaveAsScript:
CadQueryExecuteScript().Activated()
class ToggleVariablesEditor:
class ToggleParametersEditor:
"""If the user is running a CQGI-compliant script, they can edit variables through this edistor"""
def GetResources(self):
return {"MenuText": "Toggle Variables Editor",
return {"MenuText": "Toggle Parameters Editor",
"Accel": "Shift+Alt+E",
"ToolTip": "Opens a live variables editor editor",
"Pixmap": ":/icons/edit-edit.svg"}
@ -365,21 +362,27 @@ class CadQueryValidateScript:
return True
def Activated(self):
mw = FreeCADGui.getMainWindow()
# Grab our code editor so we can interact with it
cqCodePane = Shared.getActiveCodePane()
# Tracks whether or not we have already added the variables editor
isPresent = False
# If there is no script to check, ignore this command
if cqCodePane is None:
FreeCAD.Console.PrintMessage("There is no script to validate.")
return
# If the widget is open, we need to close it
dockWidgets = mw.findChildren(QtGui.QDockWidget)
for widget in dockWidgets:
if widget.objectName() == "cqVarsEditor":
# TODO: Clear and then populate the controls in the widget based on the variables
# Clear the old render before re-rendering
Shared.clearActiveDocument()
# Toggle the visibility of the widget
# if widget.visibleRegion().isEmpty():
# widget.setVisible(True)
# else:
# widget.setVisible(False)
scriptText = cqCodePane.toPlainText().encode('utf-8')
isPresent = True
if "build_object(" not in scriptText or "# build_object(" in scriptText or "#build_boject(" in scriptText:
FreeCAD.Console.PrintError("Script did not call build_object, no output available. Script must be CQGI compliant to get build output, variable editing and validation.\r\n")
return
# A repreentation of the CQ script with all the metadata attached
cqModel = cqgi.parse(scriptText)
# Allows us to present parameters to users later that they can alter
parameters = cqModel.metadata.parameters
Shared.populateParameterEditor(parameters)

View File

@ -113,7 +113,7 @@ FreeCADGui.addCommand('CadQuerySaveAsScript', CadQuerySaveAsScript())
FreeCADGui.addCommand('CadQueryExecuteScript', CadQueryExecuteScript())
FreeCADGui.addCommand('CadQueryValidateScript', CadQueryValidateScript())
FreeCADGui.addCommand('CadQueryCloseScript', CadQueryCloseScript())
FreeCADGui.addCommand('ToggleVariablesEditor', ToggleVariablesEditor())
FreeCADGui.addCommand('ToggleVariablesEditor', ToggleParametersEditor())
FreeCADGui.addCommand('CadQueryClearOutput', CadQueryClearOutput())
# Step through and add an Examples submenu item for each example

View File

@ -9,7 +9,10 @@ def clearActiveDocument():
# Grab our code editor so we can interact with it
mw = FreeCADGui.getMainWindow()
mdi = mw.findChild(QtGui.QMdiArea)
winName = mdi.currentSubWindow().windowTitle().split(" ")[0].split('.')[0]
currentWin = mdi.currentSubWindow()
if currentWin == None:
return
winName = currentWin.windowTitle().split(" ")[0].split('.')[0]
try:
doc = FreeCAD.getDocument(winName)
@ -84,4 +87,31 @@ def setActiveWindowTitle(title):
mdiWin.setWindowTitle(title)
cqCodePane = mdiWin.findChild(QtGui.QPlainTextEdit)
cqCodePane.setObjectName("cqCodePane_" + title.split('.')[0])
cqCodePane.setObjectName("cqCodePane_" + title.split('.')[0])
def populateParameterEditor(parameters):
"""Puts the proper controls in the script variable editor pane based on the parameters found"""
FreeCAD.Console.PrintMessage("Script Variables:\r\n")
for key, value in parameters.iteritems():
FreeCAD.Console.PrintMessage("variable name: " + key + ", variable value: " + str(value.default_value) + "\r\n")
mw = FreeCADGui.getMainWindow()
# Tracks whether or not we have already added the variables editor
isPresent = False
# If the widget is open, we need to close it
dockWidgets = mw.findChildren(QtGui.QDockWidget)
for widget in dockWidgets:
if widget.objectName() == "cqVarsEditor":
# TODO: Clear and then populate the controls in the widget based on the variables
# Toggle the visibility of the widget
# if widget.visibleRegion().isEmpty():
# widget.setVisible(True)
# else:
# widget.setVisible(False)
isPresent = True