cadquery-freecad-module/InitGui.py
2017-10-21 07:31:40 -04:00

124 lines
4.8 KiB
Python

"""CadQuery GUI init module for FreeCAD
This adds a workbench with a scripting editor to FreeCAD's GUI."""
# (c) 2014-2016 Jeremy Wright Apache 2.0 License
import FreeCAD, FreeCADGui
try:
from CadQuery.Gui.Command import *
except:
from Gui.Command import *
import CadQuery_rc
class CadQueryWorkbench (Workbench):
"""CadQuery workbench for FreeCAD"""
MenuText = "CadQuery"
ToolTip = "CadQuery workbench"
Icon = ":/icons/CQ_Logo.svg"
#Keeps track of which workbenches we have hidden so we can reshow them
closedWidgets = []
def Initialize(self):
#Turn off logging for now
#import logging
#logging.basicConfig(filename='C:\\Users\\Jeremy\\Documents\\', level=logging.DEBUG)
#logging.basicConfig(filename='/home/jwright/Documents/log.txt', level=logging.DEBUG)
submenu = []
dirs = self.ListExamples()
# Step through and add an Examples submenu item for each example
for curFile in dirs:
submenu.append(str(curFile))
#We have our own CQ menu that's added when the user chooses our workbench
self.appendMenu('CadQuery', ['CadQueryNewScript', 'CadQueryOpenScript', 'CadQuerySaveScript',
'CadQuerySaveAsScript', 'CadQueryCloseScript'])
self.appendMenu(['CadQuery', 'Examples'], submenu)
self.appendMenu('CadQuery', ['Separator', 'CadQueryExecuteScript', 'CadQueryValidateScript', 'ToggleVariablesEditor', 'CadQueryClearOutput'])
def Activated(self):
import os
import module_locator
try:
from CadQuery.Gui import ImportCQ
except:
from Gui import ImportCQ
module_base_path = module_locator.module_path()
import cadquery
from PySide import QtGui, QtCore
msg = QtGui.QApplication.translate(
"cqCodeWidget",
"CadQuery " + cadquery.__version__ + "\r\n"
"CadQuery is a parametric scripting API "
"for creating and traversing CAD models\r\n"
"Author: David Cowden\r\n"
"License: Apache-2.0\r\n"
"Website: https://github.com/dcowden/cadquery\r\n",
None)
FreeCAD.Console.PrintMessage(msg)
#Getting the main window will allow us to start setting things up the way we want
mw = FreeCADGui.getMainWindow()
dockWidgets = mw.findChildren(QtGui.QDockWidget)
for widget in dockWidgets:
if widget.objectName() == "Report view":
widget.setVisible(True)
# Set up the paths to allow us to open the template
# template_path = os.path.join(module_base_path, 'Templates')
# template_path = os.path.join(template_path, 'script_template.py')
#
# ImportCQ.open(template_path)
def AutoExecute(self):
"""We should be able to pass the Gui.Commands.CadQueryExecuteScript function directly to the file_reloaded
connect function, but that causes a segfault in FreeCAD. This function is a work-around for that. This
function is passed to file_reloaded signal and in turn calls the CadQueryExecuteScript.Activated function."""
try:
import CadQuery.Gui.Command
CadQuery.Gui.Command.CadQueryExecuteScript().Activated()
except:
from Gui import ImportCQ
Gui.Command.CadQueryExecuteScript().Activated()
def Deactivated(self):
pass
@staticmethod
def ListExamples():
import os
import module_locator
dirs = []
# List all of the example files in an order that makes sense
module_base_path = module_locator.module_path()
exs_dir_path = os.path.join(module_base_path, 'Libs/cadquery/examples/FreeCAD')
dirs = os.listdir(exs_dir_path)
dirs.sort()
return dirs
FreeCADGui.addCommand('CadQueryNewScript', CadQueryNewScript())
FreeCADGui.addCommand('CadQueryOpenScript', CadQueryOpenScript())
FreeCADGui.addCommand('CadQuerySaveScript', CadQuerySaveScript())
FreeCADGui.addCommand('CadQuerySaveAsScript', CadQuerySaveAsScript())
FreeCADGui.addCommand('CadQueryExecuteScript', CadQueryExecuteScript())
FreeCADGui.addCommand('CadQueryValidateScript', CadQueryValidateScript())
FreeCADGui.addCommand('CadQueryCloseScript', CadQueryCloseScript())
FreeCADGui.addCommand('ToggleVariablesEditor', ToggleParametersEditor())
FreeCADGui.addCommand('CadQueryClearOutput', CadQueryClearOutput())
# Step through and add an Examples submenu item for each example
dirs = CadQueryWorkbench.ListExamples()
for curFile in dirs:
FreeCADGui.addCommand(curFile, CadQueryOpenExample(curFile))
FreeCADGui.addWorkbench(CadQueryWorkbench())