OpenSCAD : LOL-SCAD

De Vanlindt Marc
Aller à la navigation Aller à la recherche

Le but de LOLScad est de permettre l'utilisation de formes en tant que variable afin de permettre de nouvelles formes et transformations.

Cela change en profondeur la manière d'utiliser OpenSCAD. Par exemple, pour faire un carré :

Avant

square([3,4],center=true);

Après

moncarre = square([3,4],center=true);

2D(moncarre);

La différence ?

Si vous réalisez un echo de la variable moncarre, la console affichera : [[-1.5,-2],[-1.5,2],[1.5,2],[-1.5,2]]


Objets 2D

Tous les objets (y compris ceux d'origine d'OpenSCAD) peuvent être utilisés à la fois en tant que variable qu'en tant qu'objet classique.

Ngon

Paramètres

  • d : diamètre
  • fn : nombre de faces
  • inside : inscrit ou non dans le diamètre

Code de la fonction

function ngon(d,fn,inside) = let (  
    d=d==undef?10:inside==undef?d:inside==true?d:d*((d/2)/(cos(360/fn/2)*d/2)),
    fn=fn==undef?4:fn,
    aa=[for(i=[0:fn])[sin(360/fn*i)*d/2,cos(360/fn*i)*d/2]]
    )
  aa;
Ngon

Exemple

difference(){
    ngon(d=5,fn=5,inside=false);
    circle(d=5,$fn=64);
}
ng= ngon(d=5,fn=5,inside=true);
translate([7.5,0]) difference(){
    circle(d=5,$fn=64);
    2D(ng);
}

Teardrop

Paramètres

  • d : diamètre
  • a : angle
  • fn : qualité. Attention, le nombre total sera de ce nombre + 2 car la qualité ne correspond qu'à la partie courbe, non au cône formant la goutte, formé de deux vecteurs. (cf. exemple tear2)

Code de la fonction

function teardrop(d,a,fn)=let (
  d=d==undef?10:d,
  a=a==undef?30:a,
  h=d*tan(90-a),
  fn=fn==undef?16:fn,
  courbe= [for(i=[0:fn]) [sin(90-a+(360-(90-a)*2)/fn*i)*d/2,cos(90-a+(360-(90-a)*2)/fn*i)*d/2]],
  aa=concat(courbe,[[0,(cos(90-a)*d/2)+h*sin(90-a)/2]],[[sin(90-a)*d/2,cos(90-a)*d/2]])
)
aa;
OpenSCAD - Teardrop

Exemple

teardrop(d=5,a=45,fn=32);
tear= teardrop(d=3,a=20,fn=32);
tear2= teardrop(d=3,a=10,fn=3);
translate([5,0,0]) 2D(tear);
translate([9,0,0]) 2D(tear2);
echo(tear);

Résultat console

 [[1.40954, 0.51303], [1.46082, 0.340614], [1.49108, 0.1633], [1.49991, -0.0163621], [1.48717, -0.195789], [1.45304, -0.372401], [1.39801, -0.543657], [1.32288, -0.707095], [1.22873, -0.860365], [1.1169, -1.00126], [0.989019, -1.12776], [0.84691, -1.23804], [0.692623, -1.33052], [0.528375, -1.40386], [0.356529, -1.45701], [0.179555, -1.48921], [0, -1.5], [-0.179555, -1.48921], [-0.356529, -1.45701], [-0.528375, -1.40386], [-0.692623, -1.33052], [-0.84691, -1.23804], [-0.989019, -1.12776], [-1.1169, -1.00126], [-1.22873, -0.860365], [-1.32288, -0.707095], [-1.39801, -0.543657], [-1.45304, -0.372401], [-1.48717, -0.195789], [-1.49991, -0.0163621], [-1.49108, 0.1633], [-1.46082, 0.340614], [-1.40954, 0.51303], [0, 4.38571], [1.40954, 0.51303]]