-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDoubleSliderAnimation.py
62 lines (46 loc) · 1.85 KB
/
DoubleSliderAnimation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Javier Martínez García August 2015
from PySide import QtCore
from math import sin, cos, radians
# retrieve the objects from the document
slider_x = FreeCAD.ActiveDocument.getObject("Pad003002")
slider_y = FreeCAD.ActiveDocument.getObject("Pad003001")
arm = FreeCAD.ActiveDocument.getObject("Pad002001")
# store initial placement (needed to restore initial position)
slider_x_placement = slider_x.Placement
slider_y_placement = slider_y.Placement
arm_placement = arm.Placement
# store object placements in a new variable
r_slider_x_pl = slider_x.Placement
r_slider_y_pl = slider_y.Placement
r_arm_pl = arm.Placement
def reset():
# function to restore initial position of the objects
slider_x.Placement = r_slider_x_pl
slider_y.Placement = r_slider_y_pl
arm.Placement = r_arm_pl
# In this mechanism, "i" represents the angle of the rod in degrees
i = 0
# update function calculates object position as f(i) and increases i
def update():
global i
alpha = radians( i )
x = 150.0*cos( alpha )
y = 150.0*sin( alpha )
slider_x.Placement = FreeCAD.Placement( slider_x_placement.Base + FreeCAD.Vector( 150-x, 0, 0 ),
slider_x_placement.Rotation )
slider_y.Placement = FreeCAD.Placement( slider_y_placement.Base + FreeCAD.Vector( 0, y, 0 ),
slider_y_placement.Rotation )
arm.Placement = FreeCAD.Placement( arm_placement.Base + FreeCAD.Vector( 0, y, 0 ),
FreeCAD.Rotation( FreeCAD.Vector( 0,0,1), i))
# update the scene
FreeCAD.Gui.updateGui()
# increase mechanism input position
i += 1
# create a timer object
timer = QtCore.QTimer()
# connect timer event to function "update"
timer.timeout.connect( update )
# start the timer by triggering "update" every 10 ms
timer.start( 10 )