#macro BevelPieNeg (Center,Height,Rad,AngFromX,AngTot,Bevel,Hole) intersection { union { difference { cylinder {<0,Bevel,0>,<0,Height-Bevel,0>,Rad+Hole} cylinder {<0,0,0>,<0,Height,0>,Rad} } difference { cylinder {<0,0,0>,<0,Height,0>,Rad+Hole} cylinder {<0,0-1,0>,<0,Height+1,0>,Rad+Bevel} } torus {Rad+Bevel Bevel translate y*Bevel} torus {Rad+Bevel Bevel translate y*(Height-Bevel)} } plane {z,0 rotate y*AngFromX} plane {z,0 inverse rotate y*(AngFromX+AngTot)} translate Center } #end //==================================================================================================== // PYRAMIDE //==================================================================================================== //Pyramide (Nombre de cotes,Apotheme,Hauteur) //posée sur xz, pointe en y #macro Pyramide (Nbfaces,Apot,Haut) #declare RotAngle=(360/Nbfaces); #declare AngHaut=degrees(atan2(Apot/Haut,1)); #declare boucle=0; intersection { #while (boucle < Nbfaces) plane {x,0 rotate z*AngHaut translate x*Apot rotate y*RotAngle*boucle} #declare boucle=boucle+1; #end plane {y,0 inverse} } #end //==================================================================================================== // PARALELLIPIPEDE A ARRETES DES SECTON CARREE //==================================================================================================== //BarBox (,,côté de la section carree) #macro BarBox (StartPoint,EndPoint,Thick) #declare SmallCorner=; #declare BigCorner=; #declare Amplitude=BigCorner-SmallCorner; union { box {<0,0,0>,} box {<0,Amplitude.y,0>,} box {<0,0,Amplitude.z>,} box {<0,Amplitude.y,Amplitude.z>,} box {<0,0,0>, translate 0} box {<0,0,0>, translate } box {<0,0,0>, translate <0,0,Amplitude.z-Thick>} box {<0,0,0>, translate } box {0,} box {0, translate } box {0, translate <0,Amplitude.y-Thick,0>} box {0, translate } translate SmallCorner } #end //==================================================================================================== // ROUNDED BOX //==================================================================================================== #macro RoundedBox(v_SP,v_EP,R) union { #local vSP=(v_SP)*<1,1,1>; #local vEP=(v_EP)*<1,1,1>; #if (vSP.x > vEP.x) #local tSave=vSP.x; #local vSP=; #local vEP=; #end #if (vSP.y > vEP.y) #local tSave=vSP.y; #local vSP=; #local vEP=; #end #if (vSP.z > vEP.z) #local tSave=vSP.z; #local vSP=; #local vEP=; #end box {,} box {,} box {,} #local vSP=vSP+R; #local vEP=vEP-R; sphere { ,R} sphere { ,R} sphere { ,R} sphere { ,R} sphere { ,R} sphere { ,R} sphere { ,R} sphere { ,R} cylinder { ,,R } cylinder { ,,R } cylinder { ,,R } cylinder { ,,R } cylinder { ,,R } cylinder { ,,R } cylinder { ,,R } cylinder { ,,R } cylinder { ,,R } cylinder { ,,R } cylinder { ,,R } cylinder { ,,R } } #end