« OpenSCAD : LOL-SCAD » : différence entre les versions

De Vanlindt Marc
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 17 : Ligne 17 :
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]]
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]]
----
----
== Fonctions sur nombres ==
=== Random ===
==== Paramètres ====
* '''n''' : nombre entre 0 et ce nombre.
* '''s''' : "seed", il faut changer ce nombre pour avoir un aléatoire différent (OpenSCAD ne gère pas directement un aléa basé sur une variable externe telle que l'heure, etc.)
* '''pos''' : indique si le nombre peut être négatif, auquel cas l'aléa ira de '''-n''' à '''n'''.
==== Code de la fonction ====
<syntaxhighlight lang="openscad">
function random    (n,s,pos)      = rands(pos==undef?0:pos==true?0:-n,n,1,s==undef?n:s)[0];
</syntaxhighlight>
==== Exemple ====
<syntaxhighlight lang="openscad">
echo(random(n=10,s=1,pos=true)," - ",random(n=10,s=1,pos=false));
echo(random(n=10,s=2,pos=true)," - ",random(n=10,s=2,pos=false));
echo(random(n=10,s=3,pos=true)," - ",random(n=10,s=3,pos=false));
echo(random(n=10,s=4,pos=true)," - ",random(n=10,s=4,pos=false));
echo(random(n=10,s=5,pos=true)," - ",random(n=10,s=5,pos=false));
echo(random(n=10,s=6,pos=true)," - ",random(n=10,s=6,pos=false));
echo(random(n=10,s=7,pos=true)," - ",random(n=10,s=7,pos=false));
echo(random(n=10,s=8,pos=true)," - ",random(n=10,s=8,pos=false));
echo(random(n=10,s=9,pos=true)," - ",random(n=10,s=9,pos=false));
echo(random(n=10,s=10,pos=true)," - ",random(n=10,s=10,pos=false));
</syntaxhighlight>
==== Résultat console ====
<syntaxhighlight lang="openscad">
ECHO: 9.97185, " - ", 9.9437
ECHO: 1.85082, " - ", -6.29836
ECHO: 0.707249, " - ", -8.5855
ECHO: 9.00621, " - ", 8.01243
ECHO: 0.551801, " - ", -8.8964
ECHO: 9.47476, " - ", 8.94952
ECHO: 2.27339, " - ", -5.45322
ECHO: 0.111144, " - ", -9.77771
ECHO: 3.64461, " - ", -2.71078
ECHO: 2.98761, " - ", -4.02478
</syntaxhighlight>


== Objets 2D ==
== Objets 2D ==

Version du 1 octobre 2025 à 18:49

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]]


Fonctions sur nombres

Random

Paramètres

  • n : nombre entre 0 et ce nombre.
  • s : "seed", il faut changer ce nombre pour avoir un aléatoire différent (OpenSCAD ne gère pas directement un aléa basé sur une variable externe telle que l'heure, etc.)
  • pos : indique si le nombre peut être négatif, auquel cas l'aléa ira de -n à n.

Code de la fonction

function random    (n,s,pos)       = rands(pos==undef?0:pos==true?0:-n,n,1,s==undef?n:s)[0];

Exemple

echo(random(n=10,s=1,pos=true)," - ",random(n=10,s=1,pos=false));
echo(random(n=10,s=2,pos=true)," - ",random(n=10,s=2,pos=false));
echo(random(n=10,s=3,pos=true)," - ",random(n=10,s=3,pos=false));
echo(random(n=10,s=4,pos=true)," - ",random(n=10,s=4,pos=false));
echo(random(n=10,s=5,pos=true)," - ",random(n=10,s=5,pos=false));
echo(random(n=10,s=6,pos=true)," - ",random(n=10,s=6,pos=false));
echo(random(n=10,s=7,pos=true)," - ",random(n=10,s=7,pos=false));
echo(random(n=10,s=8,pos=true)," - ",random(n=10,s=8,pos=false));
echo(random(n=10,s=9,pos=true)," - ",random(n=10,s=9,pos=false));
echo(random(n=10,s=10,pos=true)," - ",random(n=10,s=10,pos=false));

Résultat console

ECHO: 9.97185, " - ", 9.9437
ECHO: 1.85082, " - ", -6.29836
ECHO: 0.707249, " - ", -8.5855
ECHO: 9.00621, " - ", 8.01243
ECHO: 0.551801, " - ", -8.8964
ECHO: 9.47476, " - ", 8.94952
ECHO: 2.27339, " - ", -5.45322
ECHO: 0.111144, " - ", -9.77771
ECHO: 3.64461, " - ", -2.71078
ECHO: 2.98761, " - ", -4.02478

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

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;


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);
}

Roundsquare

Roundsquare

Paramètres

  • s : taille de l'objet sous forme [x,y]
  • d : diamètres des coins sous forme [d1,d2,d3,d4]
  • fn : qualité des arrondis

Code de la fonction

function roundsquare(s,d,fn) = let (
  fn = fn == undef ? 8:fn,
  s = s == undef ? [15,20] : s,
  d = d == undef ? [3,6,3,6] : len(d) == 1 ? [d[0]/2,d[0]/2,d[0]/2,d[0]/2]:len(d)==2?[d[0]/2,d[1]/2,d[1]/2,d[1]/2]:len(d)==3?[d[0]/2,d[1]/2,d[2]/2,d[2]/2]:d[0]==undef?[d/2,d/2,d/2,d/2]:d/2,
 
  p1 = [0,0],
  p2 = [0,d[0]],
  p3 = [0,s[1]-d[1]],
  p4 = [0,s[1]],
  p5 = [d[1],s[1]],
  p6 = [s[0]-d[2],s[1]],
  p7 = [s[0],s[1]],
  p8 = [s[0],s[1]-d[2]],
  p9= [s[0],d[3]],
  p10= [s[0],0],
  p11= [s[0]-d[3],0],
  p12= [d[0],0],
 
  c1=curve([p3,p4,p5],fn=fn),
  c2=curve([p6,p7,p8],fn=fn),
  c3=curve([p9,p10,p11],fn=fn),
  c4=curve([p12,p1,p2],fn=fn),
 
  aa=clean(join2([c1,c2,c3,c4,[p3]]))
 
)
 
  aa;

Exemple

roundsquare(s=[10,5],d=[5,4,5,1],fn=8); 
translate([11,0]) roundsquare(s=[10,5],d=[9,1,9,1],fn=8); 
rs= roundsquare(s=[10,5],d=[5,5,5,5],fn=8);
translate([0,-6]) 2D(rs);
rs2= roundsquare(s=[10,5],d=[1,9,0,0],fn=8);
translate([11,-6]) 2D(rs2);

Star

Star

Paramètres

  • d1 : diamètre extérieur
  • d2 : diamètre intérieur
  • fn : nombre de branches

Code de la fonction

function star(d1,d2,fn) = let (
    d1=d1==undef?10:d1/2, 
    d2=d2==undef?5:d2/2,
    fn=fn==undef?7:fn,
    aa=[for(i=[0:2*(fn)])[sin(360/(2*fn)*i)*(pair(i)==true?d1:d2),cos(360/(2*fn)*i)*(pair(i)==true?d1:d2)]]
  )
  aa;

Exemple

star(d1=5,d2=2,fn=5);
etoile= star(d1=5,d2=3,fn=8);
translate([5,0]) 2D(etoile);

Teardrop

OpenSCAD - 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;


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]]