import FreeCAD from FreeCAD import Gui from PySide import QtGui, QtCore import Boxer, BoxerDockWidget from Boxer import SideType class BoxerDocumentObserver: def __init__(self): pass def slotDeletedDocument(self, doc): gui.dockWidget.ui.generateButton.setEnabled(FreeCAD.ActiveDocument is not None) def slotActivateDocument(self, doc): gui.dockWidget.ui.generateButton.setEnabled(FreeCAD.ActiveDocument is not None) class BoxerGui(object): def __init__(self): self.cfg = Boxer.BoxCfg() self.cfg.outerDimmensions(100, 50, 200) self.cfg.notchUnitWidth = 10 def setupGui(self): doc = FreeCAD.ActiveDocument self.dockWidget = dockWidget = QtGui.QDockWidget() dockWidget.ui = BoxerDockWidget.Ui_BoxerDockWidget() dockWidget.generateClicked = self.generateButtonClicked dockWidget.fitAllClicked = self.fitAllButtonClicked dockWidget.ui.setupUi(dockWidget) dockWidget.ui.generateButton.setEnabled(doc is not None) dockWidget.ui.outerWidth.setValue(self.cfg.outerWidth) dockWidget.ui.outerHeight.setValue(self.cfg.outerHeight) dockWidget.ui.outerDepth.setValue(self.cfg.outerDepth) dockWidget.ui.notchSize.setValue(self.cfg.notchUnitWidth) self.sideCheckBoxes = [ # yapf: disable (SideType.front, dockWidget.ui.frontCheckBox, dockWidget.ui.frontThickness), (SideType.back, dockWidget.ui.backCheckBox, dockWidget.ui.backThickness), (SideType.left, dockWidget.ui.leftCheckBox, dockWidget.ui.leftThickness), (SideType.right, dockWidget.ui.rightCheckBox, dockWidget.ui.rightThickness), (SideType.top, dockWidget.ui.topCheckBox, dockWidget.ui.topThickness), (SideType.bottom, dockWidget.ui.bottomCheckBox, dockWidget.ui.bottomThickness) # yapf: enable ] for (sideType, checkBox, thickness) in self.sideCheckBoxes: side = self.cfg.sideForType(sideType) checkBox.setChecked(side.enabled) thickness.setValue(side.thickness) self.documentObserver = BoxerDocumentObserver() FreeCAD.addDocumentObserver(self.documentObserver) def generateButtonClicked(self): ui = self.dockWidget.ui self.cfg.outerDimmensions(ui.outerWidth.value(), ui.outerHeight.value(), ui.outerDepth.value()) self.cfg.notchSize = self.dockWidget.ui.notchSize.value() for (sideType, checkBox, thickness) in self.sideCheckBoxes: side = self.cfg.sideForType(sideType) side.enabled = checkBox.isChecked() side.thickness = thickness.value() self.cfg.prt() doc = FreeCAD.ActiveDocument Boxer.removeEverything(doc) objects = Boxer.make(doc, self.cfg) itemsToSelect = objects['parts'] extrudes = objects['extrudes'] if extrudes is not None: itemsToSelect = extrudes Gui.Selection.clearSelection() [Gui.Selection.addSelection(e) for e in itemsToSelect.values()] Gui.SendMsgToActiveView("ViewSelection") Gui.Selection.clearSelection() # This results in some strange flickering. Perhaps all the items should be set visible=False while rotating Gui.SendMsgToActiveView("ViewAxo") def removeBox(self): doc = FreeCAD.ActiveDocument Boxer.removeEverything(doc) def fitAllButtonClicked(self): Gui.SendMsgToActiveView("ViewFit") gui = BoxerGui() gui.setupGui()