« OpenSCAD : LOL-SCAD » : différence entre les versions
Aller à la navigation
Aller à la recherche
Aucun résumé des modifications |
|||
Ligne 52 : | Ligne 52 : | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
---- | |||
=== Star === | |||
==== Paramètres ==== | |||
* '''d1''' : diamètre extérieur | |||
* '''d2''' : diamètre intérieur | |||
* '''fn''' : nombre de branches | |||
==== Code de la fonction ==== | |||
<syntaxhighlight lang="openscad" line="1"> | |||
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; | |||
</syntaxhighlight> | |||
[[Fichier:Star.png|vignette|Star]] | |||
==== Exemple ==== | |||
<syntaxhighlight lang="openscad" line="1"> | |||
star(d1=5,d2=2,fn=5); | |||
etoile= star(d1=5,d2=3,fn=8); | |||
translate([5,0]) 2D(etoile); | |||
</syntaxhighlight> | |||
---- | |||
=== Teardrop === | === Teardrop === | ||
Ligne 89 : | Ligne 118 : | ||
[[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]] | [[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]] | ||
</syntaxhighlight> | </syntaxhighlight> | ||
---- |
Version du 1 octobre 2025 à 18:03
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;

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