FreeCAD-macros
117 строк · 3.5 Кб
1__Name__ = 'Parabola Creater'
2__Comment__ = 'Parabola Creater'
3__Author__ = 'unknown'
4__Version__ = '1.0.1'
5__Date__ = '2019-02-02'
6__License__ = 'LGPL-2.0-or-later'
7__Web__ = ''
8__Wiki__ = ''
9__Icon__ = ''
10__Help__ = ''
11__Status__ = ''
12__Requires__ = ''
13__Communication__ = 'https://github.com/FreeCAD/FreeCAD-macros/issues/'
14__Files__ = ''
15
16import FreeCAD as app
17import Part, PySide
18from PySide import QtCore, QtGui
19from PySide.QtGui import QLineEdit, QRadioButton
20
21
22class ParabolaCreater():
23def __init__(self):
24self.dialog = None
25
26self.dialog = QtGui.QDialog()
27#self.dialog.resize(450,110)
28
29self.dialog.setWindowTitle("Parabola Creator")
30la = QtGui.QVBoxLayout(self.dialog)
31
32self.radio1 = QRadioButton("Make 2D Shape")
33self.radio2 = QRadioButton("Make 3D Revolution")
34
35# set default to "Make 2D Shape" & make radio buttons - Change self.radio1.setChecked(True) to
36# self.radio2.setChecked(True) to set "Make 3D Revolution" as default
37
38self.radio1.setChecked(True)
39la.addWidget(self.radio1)
40la.addWidget(self.radio2)
41
42iN1 = QtGui.QLabel("Range Of Curve - Minimum")
43la.addWidget(iN1)
44self.r1 = QtGui.QLineEdit()
45la.addWidget(self.r1)
46self.r1.setText('-3')
47
48iN2 = QtGui.QLabel("Range Of Curve - Maximum")
49la.addWidget(iN2)
50self.r2 = QtGui.QLineEdit()
51la.addWidget(self.r2)
52self.r2.setText('3')
53
54iN3 = QtGui.QLabel("Focus")
55la.addWidget(iN3)
56self.f1 = QtGui.QLineEdit()
57la.addWidget(self.f1)
58self.f1.setText('2')
59
60iN4 = QtGui.QLabel("Degrees of Revolve (Only valid for 3D Revolution)")
61la.addWidget(iN4)
62self.Dg = QtGui.QLineEdit()
63la.addWidget(self.Dg)
64self.Dg.setText('360')
65
66okbox = QtGui.QDialogButtonBox(self.dialog)
67okbox.setOrientation(QtCore.Qt.Horizontal)
68okbox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
69la.addWidget(okbox)
70QtCore.QObject.connect(okbox, QtCore.SIGNAL("accepted()"), self.makeHyp)
71QtCore.QObject.connect(okbox, QtCore.SIGNAL("rejected()"), self.close)
72QtCore.QMetaObject.connectSlotsByName(self.dialog)
73self.dialog.show()
74self.dialog.exec_()
75
76def makeHyp(self):
77if self.radio1.isChecked():
78try:
79tS1 = float(self.r1.text())
80tS2 = float(self.r2.text())
81fc = float(self.f1.text())
82
83para=Part.Parabola()
84para.Focal = fc
85
86shape=para.toShape(tS1,tS2)
87Part.show(shape)
88except:
89sayexc()
90app.Console.PrintError("Unable to complete task")
91
92self.close()
93
94if self.radio2.isChecked():
95try:
96tS1 = float(self.r1.text())
97tS2 = float(self.r2.text())
98fc = float(self.f1.text())
99Dg = float(self.Dg.text())
100
101para=Part.Parabola()
102para.Focal = fc
103
104shape=para.toShape(tS1,tS2)
105rev=shape.revolve(app.Vector(1,0,0),app.Vector(1,0,0),Dg) # revolve around X axis by number of degrees
106Part.show(rev)
107except:
108sayexc()
109app.Console.PrintError("Unable to complete task")
110
111self.close()
112
113def close(self):
114self.dialog.hide()
115
116if __name__ == '__main__':
117ParabolaCreater()
118