# -*- coding: utf-8 -*-
# Macro Begin: ...\Asm3_TestRotor.FCMacro +FreeCAD
#Test rotations Rotor-Base (Constraint001) + OgiveGearWheel-Warhead (Constraint009)
# + Blade1-Rotor (Constraint002) + Blade2-Rotor (Constraint003) + Blade3-Rotor (Constraint004)

import FreeCAD
#rotation Rotor-Base (Constraint001)
#rotation OgiveGearWheel-Warhead (Constraint009)
#rotation Blade1-Rotor (Constraint002)
#rotation Blade2-Rotor (Constraint003)
#rotation Blade3-Rotor (Constraint004)

import time #Clock to create animation   Horloge pour cr�er l'animation

#1st movement : only Rotor/Base
#rotor rotation control
#angle is the name of the variable

#1er mouvement : seulement Rotor/Base
#contrôle de la rotation rotor
#angle est le nom de la variable


angle = 0
for i in range(121):
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint001").Angle = angle
    Gui.runCommand('asm3CmdQuickSolve',0)
    angle += 2
    FreeCADGui.updateGui() # necessary to update the screen before each incrementation
    time.sleep(0.001)

#2nd movement : the wind is too fast, the rotor speed too high
#the centrifugal effect on the weights corrects the inclination of the blades
#locking of the angles of the blades and the toothed wheel of the ogive
#so that piloting is possible

#2nd mouvement : le vent est trop fort, la vitesse du rotor trop rapide
#l'effet centrifuge sur les masselottes corrige l'inclinaison des pales
#verrouillage des angles des pales et de la roue dentée de l'ogive
#pour rendre le pilotage possible

FreeCAD.getDocument('_Asm3_100WindTurbine').getObject('Constraint002').LockAngle = True
FreeCAD.getDocument('_Asm3_100WindTurbine').getObject('Constraint003').LockAngle = True
FreeCAD.getDocument('_Asm3_100WindTurbine').getObject('Constraint004').LockAngle = True
FreeCAD.getDocument('_Asm3_100WindTurbine').getObject('Constraint009').LockAngle = True

#definition of new variables and their starting value (to be checked and confirmed)
#for control of the rotation of the rotor, the blades and the toothed wheel of the ogive

#définition des variables et de leurs valeurs initiales (doivent être vérifiées et confirmées)
#pour contrôler la rotation du rotor, des pales et de la roue dentée de l'ogive

angle = 240       #end value of 1st movement   valeur finale du 1er mouvement
angle1 = 12
angleBl1 = 12
angleBl2 = 12
angleBl3 = -12

#Set in motion with all variables
#Mise en mouvement avec toutes les variables

for i in range(41):
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint001").Angle = angle
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint009").Angle = angle1
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint002").Angle = angleBl1
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint003").Angle = angleBl2
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint004").Angle = angleBl3
    Gui.runCommand('asm3CmdQuickSolve',0)
    angle += 2
    angle1 += 0.5
    angleBl1 += 1
    angleBl2 += 1
    angleBl3 -= 1
    FreeCADGui.updateGui() # necessary to update the screen before each incrementation
    time.sleep(0.001)

#3rd movement : the wind has decreased, the rotor speed decreases
#the centrifugal effect on the weights decreases and so does the inclination of the blades
#new starting values of the variables corresponding to the values
#obtained at the end of the 2nd movement (to be noted and corrected)

#3ème mouvement : le vent a diminué, la vitesse du rotor a baissé
#l'effet centrifuge sur les masselottes diminue de même que l'inclinaison des pales
#nouvelles valeurs initiales des variables correspondant aux valeurs
#à la fin du 2nd mouvement (à noter et corriger)


angle = 320        #end value of 1st + 2nd movements   valeur finale des 1er + 2e mouvements
angle1 = 32        #end value of 2nd movement   valeur finale du 2e mouvement
angleBl1 = 52      #end value of 2nd movement   valeur finale du 2e mouvement
angleBl2 = 52      #end value of 2nd movement   valeur finale du 2e mouvement
angleBl3 = -52     #end value of 2nd movement   valeur finale du 2e mouvement

#Set in motion with all variables
#Mise en mouvement avec toutes les variables

for i in range(41):
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint001").Angle = angle
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint009").Angle = angle1
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint002").Angle = angleBl1
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint003").Angle = angleBl2
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint004").Angle = angleBl3
    Gui.runCommand('asm3CmdQuickSolve',0)
    angle += 2
    angle1 -= 0.5
    angleBl1 -= 1
    angleBl2 -= 1
    angleBl3 += 1
    FreeCADGui.updateGui() # necessary to update the screen before each incrementation
    time.sleep(0.001)

# 4th movement: the wind is stable
# the centrifugal effect on the weights is stable

#4ème mouvement : le vent est stable
#l'effet centrifuge sur les masselottes est stable


angle = 400        #end value of 1st + 2nd + 3rd movements   valeur finale des 1er + 2e + 3e mouvements

#Set in motion with only Rotor/Base
#Mise en mouvement avec seulement Rotor/Base

for i in range(81):
    FreeCAD.getDocument("_Asm3_100WindTurbine").getObject("Constraint001").Angle = angle
    Gui.runCommand('asm3CmdQuickSolve',0)
    angle += 2
    FreeCADGui.updateGui() # necessary to update the screen before each incrementation
    time.sleep(0.001)

# IF YOU WANT TO DO ANOTHER TEST, DON'T FORGET TO RESET THE CONSTRAINTS TO THE INITIAL VALUES
# SI VOUS VOULEZ REFAIRE UN ESSAI, N'OUBLIEZ PAS DE REMETTRE LES VALEURS INITALES DES CONTRAINTES


# Macro End: D:\02_trav_FreeCad\00_FCtutos_jpg87\Asm3\_Asm3eolAnim\AnimWindTurbine.FCMacro +++++++++++++++++++++++++++++++++++++++++++++++++
