FreeCAD-macros

Форк
0
/
BoxCreator.FCMacro 
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

19
import os
20

21
import FreeCAD as app
22
import FreeCADGui as gui
23
from FreeCAD import Vector
24

25
from boxcreator import boxcreator
26

27

28
class BoxcreatorDialog():
29
    """Show a dialog for BoxCreator"""
30
    def __init__(self):
31
        self.ui_file = os.path.join(app.getUserMacroDir(True),
32
                                    'boxcreator/boxcreator.ui')
33
        self.form = gui.PySideUic.loadUi(self.ui_file)
34
        self._connect_widgets()
35
        self.form.show()
36

37
    def _connect_widgets(self):
38
        self.form.pushButtonCreate.pressed.connect(self.createBox)
39
        self.form.pushButton_CompartX.pressed.connect(self.compartmentX)
40
        self.form.pushButton_CompartY.pressed.connect(self.compartmentY)
41
        self.form.pushButton_CompartZ.pressed.connect(self.compartmentZ)
42

43
    def createBox(self):
44
        boxWidth = self.form.doubleSpinBoxWidth.value()
45
        boxHeight = self.form.doubleSpinBoxHeight.value()
46
        boxLength = self.form.doubleSpinBoxLength.value()
47
        notchWidth = self.form.doubleSpinBoxNotchWidth.value()
48
        materialWidth = self.form.doubleSpinBoxMaterialWidth.value()
49
        drawSides = [self.form.checkBoxTop.isChecked(),
50
                     self.form.checkBoxBottom.isChecked(),
51
                     self.form.checkBoxLeft.isChecked(),
52
                     self.form.checkBoxRight.isChecked(),
53
                     self.form.checkBoxFront.isChecked(),
54
                     self.form.checkBoxBack.isChecked()]
55
        overhangTop = [self.form.overhangTopLeft.value(),
56
                       self.form.overhangTopRight.value(),
57
                       self.form.overhangTopFront.value(),
58
                       self.form.overhangTopBack.value()]
59
        overhangBottom = [self.form.overhangBotLeft.value(),
60
                          self.form.overhangBotRight.value(),
61
                          self.form.overhangBotFront.value(),
62
                          self.form.overhangBotBack.value()]
63
        if (boxWidth == 0) or (boxHeight == 0) or (boxLength == 0):
64
            app.Console.PrintError('Error! None of the values can be 0!')
65
            # we bail out without doing anything
66
            return
67

68
        box = boxcreator.create_box(materialWidth, boxWidth, boxHeight, boxLength, notchWidth, drawSides, overhangTop, overhangBottom, app.activeDocument())
69
        gui.Selection.clearSelection()
70
        gui.Selection.addSelection(box)
71
        gui.SendMsgToActiveView('ViewFit')
72

73
    def compartmentX(self):
74
        self.createCompartment(Vector(1,0,0))
75

76
    def compartmentY(self):
77
        self.createCompartment(Vector(0,1,0))
78

79
    def compartmentZ(self):
80
        self.createCompartment(Vector(0,0,1))
81

82
    def createCompartment(self, direction):
83
        box = gui.Selection.getSelection()
84
        notchWidth = self.form.doubleSpinBoxNotchWidth.value()
85
        materialWidth = self.form.doubleSpinBoxMaterialWidth.value()
86
        drawSides = [self.form.checkBoxTop.isChecked(),
87
                     self.form.checkBoxBottom.isChecked(),
88
                     self.form.checkBoxLeft.isChecked(),
89
                     self.form.checkBoxRight.isChecked(),
90
                     self.form.checkBoxFront.isChecked(),
91
                     self.form.checkBoxBack.isChecked()]
92
        offset = self.form.compartmentOffset.value()
93
        boxsize = Vector(self.form.doubleSpinBoxWidth.value(), self.form.doubleSpinBoxLength.value(), self.form.doubleSpinBoxHeight.value())
94
        compartment = boxcreator.create_compartment(box, direction, offset, materialWidth, notchWidth, drawSides, boxsize)
95
        if compartment:
96
            gui.Selection.clearSelection()
97
            gui.Selection.addSelection(compartment)
98

99

100
if __name__ == '__main__':
101
    d = BoxcreatorDialog()
102

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.