#genera due ruote ad assi concorrenti, provvede da solo alla loro rotazione #se gli assi sono // od ortogonali conviene usare una versione diversa # Copyright (C) 2003 - Giorgio Griffon # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import Blender import math from Blender import NMesh from math import sin,cos,sqrt,tan,atan,pi ################################################################# #DATI DI PROGETTO DI BASE R1=15 #raggio primitiva della prima ruota N1=30 tau=0.5 #rapp. di trasmissione: tau divisore di N1 oppure N1/tau intero s1=10.00 #spessore della prima ruota (assiale) theta=60.00 #angolo tra gli assi delle ruote, gradi omega1=360.00/200 #velocità angolare movente, in gradi/fotogrammi #Dati calcolati, non modificare! R2=R1/tau N2=N1/tau N2=int(N2) #Attenzione! Questo comando non deve servire ad approssimare N2 #serve solo a rendere la variabile di tipo intero, ma tau va scelta in modo che N2 sia già intera theta=theta*pi/180 theta1 = atan(R1*sin(theta)/(R2+R1*cos(theta))) #semiapertura cono prima ruota theta2 = atan(R2*sin(theta)/(R1+R2*cos(theta))) #semiapertura cono seconda ruota s2=s1*cos(theta2)/cos(theta1) omega1=omega1*pi/360 omega2=-omega1*tau #DATI ACCESSORI GEOMETRIA DELLE RUOTE inclinazione=20 #inclinazione dei denti elicoidali rispetto alla direzione assiale, gradi betat1=2*pi/(8*N1) #angolo sotteso dall'arco di circonf. di testa di un dente betat2=2*pi/(6*N1/tau) #angolo sotteso dall'arco di circonf. di testa di un dente Rbu1=4 #raggio foro albero #Rmo1=0.3*R1 #raggio mozzo ruota #Rco1=0.65*R1 #raggio interno corona ruota s_all1=0.3*s1 #profondit? (assiale) della cavit? di alleggerimento Rbu2=9.0 #raggio foro albero Rmo2=13.0 #raggio mozzo ruota Rco2=18.0 #raggio interno corona ruota s_all2=0.4*s2 #profondità (assiale) della cavità di alleggerimento #DEFINIZIONE DELL'APPROSSIMAZIONE a=10 #n. di punti tracciamento evolvente b=5 #n. di punti tracciamento arco di testa, arco di base l=2 #n. di piani in direzione assiale ################################################################### f=Blender.Get('curframe') m=2.00*R1/N1 #modulo, m1=m2! p=m*pi dd=1,25*m #dedendum ad=m #addendum Rb1=R1*(1-1.25*2/N1) Rt1=R1*(1.00+2.00/N1) Rb2=R2*(1-1.25*2/N2) Rt2=R2*(1.00+2.00/N2) print('fotogramma n. ', f, ' __________________________________') print(f) listax1=[] listax2=[] listay1=[] listay2=[] listaz1=[] listaz2=[] deltal1=s1/(l-1) deltal2=s2/(l-1) alfa1=(deltal1*tan(inclinazione*pi/180)/R1) #svergolamento fra due sezioni successive alfa2=-(deltal2*tan(inclinazione*pi/180)/R2) #le due ruote hanno inclinazione uguale => alfa diverso npunti=2*a+2*b #n. di punti di ogni piano def beta(gamma): bi=gamma-atan(gamma) return bi def raggio(Rb,gamma): rg=Rb*sqrt(gamma**2+1) return rg gammae1=sqrt(((N1+2)/(N1-2.5))**2-1) #val. di gamma alla fine dell'evolvente gammap1=sqrt((N1/(N1-2.5))**2-1) #val. di gamma in corrisp. del raggio primitivo betae1=beta(gammae1) #angolo sotteso dall'evolvente betab1=2*pi/N1-betat1-2*betae1 #angolo sotteso dall'arco di base, fra un dente e l'altro betap1=beta(gammap1) #angolo sotteso dal tratto di dente tra la circ. di base e la circ. primitiva gammae2=sqrt(((N2+2)/(N2-2.5))**2-1) #val. di gamma alla fine dell'evolvente gammap2=sqrt((N2/(N2-2.5))**2-1) #val. di gamma in corrisp. del raggio primitivo betae2=beta(gammae2) #angolo sotteso dall'evolvente betab2=2*pi/N2-betat2-2*betae2 #angolo sotteso dall'arco di base, fra un dente e l'altro betap2=beta(gammap2) #fasi: angoli di cui vanno ruotate le due ruote perch? #ingranino correttamente, presi rispetto al primo tracciamento fi1=betap1 fi2=-betap2 #print(N1,N2) #print(Rb1,R1,Rt1) #print(Rb2,R2,Rt2) #print("gammae, gammap, betae, betat, betab, betap") #print(gammae1*180/pi,gammap1*180/pi,betae1*180/pi,betat1*180/pi,betab1*180/pi,betap1*180/pi) #print(gammae2*180/pi,gammap2*180/pi,betae2*180/pi,betat2*180/pi,betab2*180/pi,betap2*180/pi) #print(theta*180/pi,theta1*180/pi,theta2*180/pi) #avanzamento delle ruote in base al fotogramma realizzato zeta1=omega1*(f-1) zeta2=omega2*(f-1) #omega2 è già opposto a omega1 #PUNTI PRIMA RUOTA############################################ #stabilisce angoli dei punti e relativi raggi della dentatura listabet=[] listar=[] for k in range(0,N1): #k=n. del dente tracciato (da 0 a N1-1) beta0=2*pi*k/N1 #angolo iniziale da cui tracciare ogni dente for i in range (0,npunti): #2*(a+b): if i