FreeCAD-macros
/
FCRotateViewAbsolute.FCMacro
193 строки · 4.6 Кб
1__Name__ = 'FCRotateViewAbsolute'
2__Comment__ = ''
3__License__ = ''
4__Web__ = ''
5__Wiki__ = ''
6__Icon__ = ''
7__Help__ = ''
8__Author__ = ''
9__Version__ = ''
10__Status__ = ''
11__Requires__ = ''
12__Files__ = ''
13
14from FreeCAD import Base
15import FreeCADGui as Gui
16
17
18from math import cos,sin,pi
19
20import sys
21from PySide.QtCore import *
22from PySide.QtGui import *
23
24from pivy import coin
25
26class Form(QDialog):
27
28def __init__(self, parent=None):
29super(Form, self).__init__(parent)
30self.alpha=00
31self.beta=180
32self.setWindowFlags(Qt.WindowStaysOnTopHint)
33
34dial = QDial()
35dial.setNotchesVisible(True)
36self.dial=dial
37dial.setMaximum(360)
38dial.setValue(self.alpha)
39
40
41
42dial2 = QDial()
43dial2.setNotchesVisible(True)
44self.dial2=dial2
45dial2.setMaximum(360)
46dial2.setValue(self.beta)
47
48spinbox = QSpinBox()
49spinbox.setMaximum(360)
50
51layout = QHBoxLayout()
52
53
54self.pushButton00 = QPushButton(QIcon('icons:freecad.svg'),"Dimetric")
55self.pushButton01 = QPushButton(QIcon('icons:freecad.svg'),"Trimetric")
56self.pushButton02 = QPushButton(QIcon('icons:freecad.svg'),"Isometric")
57self.pushButton03 = QPushButton(QIcon('icons:freecad.svg'),"Front")
58self.pushButton00.clicked.connect(self.dimetric)
59self.pushButton01.clicked.connect(self.trimetric)
60self.pushButton02.clicked.connect(self.isometric)
61self.pushButton03.clicked.connect(self.front)
62layout.addWidget(self.pushButton03)
63layout.addWidget(self.pushButton00)
64layout.addWidget(self.pushButton01)
65layout.addWidget(self.pushButton02)
66
67
68layout.addWidget(dial)
69layout.addWidget(dial2)
70# layout.addWidget(spinbox)
71self.setLayout(layout)
72
73#self.connect(dial, SIGNAL("valueChanged(int)"), spinbox.setValue)
74#self.connect(spinbox, SIGNAL("valueChanged(int)"), dial.setValue)
75dial.valueChanged.connect(spinbox.setValue);
76
77dial.valueChanged.connect(self.dreher);
78dial2.valueChanged.connect(self.heber);
79
80
81self.cami()
82self.setWindowTitle("Camera position")
83Gui.SendMsgToActiveView("ViewFit")
84
85
86
87def dreher(self):
88self.alpha=self.dial.value()
89self.cami()
90
91def heber(self):
92self.beta=self.dial2.value()
93self.cami()
94
95def rotY(self,delta=10):
96if self.beta==1:
97self.beta=0
98
99self.beta += delta
100if self.beta >360:
101self.beta -= 360
102if self.beta <0:
103self.beta += 360
104if self.beta==0:
105self.beta=1
106FreeCAD.Console.PrintMessage(str(self.beta)+" # ");
107self.dial2.setValue(self.beta)
108
109
110def rotZ(self,delta=10):
111self.alpha += delta
112if self.alpha >360:
113self.alpha -= 360
114if self.alpha <0:
115self.alpha += 360
116self.dial.setValue(self.alpha)
117
118def cami(self):
119
120from pivy import coin
121alpha=self.alpha
122beta=self.beta
123
124camera = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
125
126Gui=FreeCADGui
127if False:
128typeCamera="Orthographic"
129if typeCamera=="Orthographic":
130Gui.activeDocument().activeView().setCameraType("Orthographic")
131else:
132Gui.activeDocument().activeView().setCameraType("Perspective")
133
134campos=Base.Vector( 1000 * cos (pi*alpha/360*2)*sin(pi*beta/360*1), 1000*sin(pi*alpha/360*2)*sin(pi*beta/360*1), 1000*cos(pi*beta/360*1))
135camera.position.setValue( campos)
136
137pos3=FreeCAD.Vector(0,0,0)
138pos3.sub(campos)
139
140#if False:
141camera.pointAt(coin.SbVec3f(pos3),coin.SbVec3f(0,0,1))
142
143App.ActiveDocument.recompute()
144FreeCADGui.updateGui()
145
146def front(self):
147from pivy import coin
148pos3=FreeCAD.Vector(0,0,0)
149campos=FreeCAD.Vector(0,-10,0)
150camera = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
151camera.position.setValue( campos)
152camera.pointAt(coin.SbVec3f(pos3),coin.SbVec3f(0,0,1))
153
154def isometric(self):
155
156pos3=FreeCAD.Vector(0,0,0)
157campos=FreeCAD.Vector(100,-100,100)
158camera = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
159camera.position.setValue( campos)
160pos3.sub(campos)
161camera.pointAt(coin.SbVec3f(pos3),coin.SbVec3f(0,0,1))
162
163def dimetric(self):
164pos3=FreeCAD.Vector(0,0,0)
165campos=FreeCAD.Vector(68,-68,27)
166camera = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
167camera.position.setValue( campos)
168pos3.sub(campos)
169camera.pointAt(coin.SbVec3f(pos3),coin.SbVec3f(0,0,1))
170App.ActiveDocument.recompute()
171FreeCADGui.updateGui()
172
173
174def trimetric(self):
175pos3=FreeCAD.Vector(0,0,0)
176campos=FreeCAD.Vector(210,-790,580)
177camera = FreeCADGui.ActiveDocument.ActiveView.getCameraNode()
178camera.position.setValue( campos)
179pos3.sub(campos)
180camera.pointAt(coin.SbVec3f(pos3),coin.SbVec3f(0,0,1))
181
182
183if hasattr(FreeCAD,"ViewMgr")and FreeCAD.ViewMgr:
184FreeCAD.ViewMgr.show()
185FreeCAD.Console.PrintMessage("neu gestrte")
186else:
187FreeCAD.ViewMgr=Form()
188FreeCAD.ViewMgr.show()
189FreeCAD.Console.PrintMessage(" war schon da")
190
191
192t=FreeCADGui.getMainWindow()
193t.activateWindow()
194