FreeCAD-macros
101 строка · 4.2 Кб
1# -*- coding: utf-8 -*-
2
3__Name__ = 'BoxCreator'
4__Comment__ = 'Creates a box with interlocked notches'
5__Author__ = 'christi'
6__Version__ = '1.3.7'
7__Date__ = '2023-01-03'
8__License__ = 'LGPL-3.0-or-later'
9__Web__ = 'https://forum.freecadweb.org/viewtopic.php?t=31795'
10__Wiki__ = ''
11__Icon__ = 'BoxCreator.svg'
12__Help__ = 'Try it out and play with it. It should be self explanatory'
13__Status__ = 'Beta'
14__Requires__ = 'FreeCAD >= v0.17'
15__Communication__ = 'https://forum.freecadweb.org/viewtopic.php?p=264483'
16__Files__ = 'BoxCreator.svg,boxcreator/__init__.py,boxcreator/boxcreator.py,boxcreator/boxcreator.ui'
17
18
19import os
20
21import FreeCAD as app
22import FreeCADGui as gui
23from FreeCAD import Vector
24
25from boxcreator import boxcreator
26
27
28class BoxcreatorDialog():
29"""Show a dialog for BoxCreator"""
30def __init__(self):
31self.ui_file = os.path.join(app.getUserMacroDir(True),
32'boxcreator/boxcreator.ui')
33self.form = gui.PySideUic.loadUi(self.ui_file)
34self._connect_widgets()
35self.form.show()
36
37def _connect_widgets(self):
38self.form.pushButtonCreate.pressed.connect(self.createBox)
39self.form.pushButton_CompartX.pressed.connect(self.compartmentX)
40self.form.pushButton_CompartY.pressed.connect(self.compartmentY)
41self.form.pushButton_CompartZ.pressed.connect(self.compartmentZ)
42
43def createBox(self):
44boxWidth = self.form.doubleSpinBoxWidth.value()
45boxHeight = self.form.doubleSpinBoxHeight.value()
46boxLength = self.form.doubleSpinBoxLength.value()
47notchWidth = self.form.doubleSpinBoxNotchWidth.value()
48materialWidth = self.form.doubleSpinBoxMaterialWidth.value()
49drawSides = [self.form.checkBoxTop.isChecked(),
50self.form.checkBoxBottom.isChecked(),
51self.form.checkBoxLeft.isChecked(),
52self.form.checkBoxRight.isChecked(),
53self.form.checkBoxFront.isChecked(),
54self.form.checkBoxBack.isChecked()]
55overhangTop = [self.form.overhangTopLeft.value(),
56self.form.overhangTopRight.value(),
57self.form.overhangTopFront.value(),
58self.form.overhangTopBack.value()]
59overhangBottom = [self.form.overhangBotLeft.value(),
60self.form.overhangBotRight.value(),
61self.form.overhangBotFront.value(),
62self.form.overhangBotBack.value()]
63if (boxWidth == 0) or (boxHeight == 0) or (boxLength == 0):
64app.Console.PrintError('Error! None of the values can be 0!')
65# we bail out without doing anything
66return
67
68box = boxcreator.create_box(materialWidth, boxWidth, boxHeight, boxLength, notchWidth, drawSides, overhangTop, overhangBottom, app.activeDocument())
69gui.Selection.clearSelection()
70gui.Selection.addSelection(box)
71gui.SendMsgToActiveView('ViewFit')
72
73def compartmentX(self):
74self.createCompartment(Vector(1,0,0))
75
76def compartmentY(self):
77self.createCompartment(Vector(0,1,0))
78
79def compartmentZ(self):
80self.createCompartment(Vector(0,0,1))
81
82def createCompartment(self, direction):
83box = gui.Selection.getSelection()
84notchWidth = self.form.doubleSpinBoxNotchWidth.value()
85materialWidth = self.form.doubleSpinBoxMaterialWidth.value()
86drawSides = [self.form.checkBoxTop.isChecked(),
87self.form.checkBoxBottom.isChecked(),
88self.form.checkBoxLeft.isChecked(),
89self.form.checkBoxRight.isChecked(),
90self.form.checkBoxFront.isChecked(),
91self.form.checkBoxBack.isChecked()]
92offset = self.form.compartmentOffset.value()
93boxsize = Vector(self.form.doubleSpinBoxWidth.value(), self.form.doubleSpinBoxLength.value(), self.form.doubleSpinBoxHeight.value())
94compartment = boxcreator.create_compartment(box, direction, offset, materialWidth, notchWidth, drawSides, boxsize)
95if compartment:
96gui.Selection.clearSelection()
97gui.Selection.addSelection(compartment)
98
99
100if __name__ == '__main__':
101d = BoxcreatorDialog()
102