#ifndef (_ROTATELIST_) #declare _ROTATELIST_ = 1; #macro getrotation(vx,vy,vz) #local ry = asin(-vx.z); #if (abs(cos(ry))<0.000001) // arbitrary threshold #local rx = atan2(vy.x,vz.x); #local rz = 0; #else #local rx = atan2(vy.z,vz.z); #local rz = atan2(vx.y,vx.x); #end (*180/pi) #end #macro xyz(px,py,pz) #local vx = vrotate(vrotate(vrotate(x,px*x),py*y),pz*z); #local vy = vrotate(vrotate(vrotate(y,px*x),py*y),pz*z); #local vz = vrotate(vrotate(vrotate(z,px*x),py*y),pz*z); getrotation(vx,vy,vz) #end #macro xzy(px,pz,py) #local vx = vrotate(vrotate(vrotate(x,px*x),pz*z),py*y); #local vy = vrotate(vrotate(vrotate(y,px*x),pz*z),py*y); #local vz = vrotate(vrotate(vrotate(z,px*x),pz*z),py*y); getrotation(vx,vy,vz) #end #macro yzx(py,pz,px) #local vx = vrotate(vrotate(vrotate(x,py*y),pz*z),px*x); #local vy = vrotate(vrotate(vrotate(y,py*y),pz*z),px*x); #local vz = vrotate(vrotate(vrotate(z,py*y),pz*z),px*x); getrotation(vx,vy,vz) #end #macro yxz(py,px,pz) #local vx = vrotate(vrotate(vrotate(x,py*y),px*x),pz*z); #local vy = vrotate(vrotate(vrotate(y,py*y),px*x),pz*z); #local vz = vrotate(vrotate(vrotate(z,py*y),px*x),pz*z); getrotation(vx,vy,vz) #end #macro zxy(pz,px,py) #local vx = vrotate(vrotate(vrotate(x,pz*z),px*x),py*y); #local vy = vrotate(vrotate(vrotate(y,pz*z),px*x),py*y); #local vz = vrotate(vrotate(vrotate(z,pz*z),px*x),py*y); getrotation(vx,vy,vz) #end #macro zyx(pz,py,px) #local vx = vrotate(vrotate(vrotate(x,pz*z),py*y),px*x); #local vy = vrotate(vrotate(vrotate(y,pz*z),py*y),px*x); #local vz = vrotate(vrotate(vrotate(z,pz*z),py*y),px*x); getrotation(vx,vy,vz) #end #end // _ROTATELIST_