Outils pour utilisateurs

Outils du site


outilsit:fablab:laser:lol

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
outilsit:fablab:laser:lol [2022/02/08 23:10]
vanlindtmarc
outilsit:fablab:laser:lol [2022/02/09 02:27] (Version actuelle)
vanlindtmarc
Ligne 64: Ligne 64:
 pi        = 3.141592654; pi        = 3.141592654;
 tau       = pi*2; tau       = pi*2;
 +</code>
 +
 +----
 +===== Fonctions de base =====
 +
 +==== 2D(a) et 3D(a) ====
 +{{ :outilsit:fablab:openscad:lolscad:2022-02-09_00_08_39-lol2022-wip.scad_-_openscad.png?400|}}
 +<code>abc=square();
 +def=cube();
 +2D(abc);
 +translate([11,0,0]) 3D(def);
 +</code>
 +<code>
 +module 2D(a){
 +  polygon(a);
 +}
 +module 3D(a){
 + if(a[1]!=undef)
 + {
 + polyhedron(a[0],a[1]);
 + }
 +}
 </code> </code>
  
Ligne 438: Ligne 460:
 def=fractalize(abc,force=1,maxit=4); def=fractalize(abc,force=1,maxit=4);
 ghi=chaincurve(def); ghi=chaincurve(def);
-polygon(def); +2D(def); 
-translate([55,0,0]) polygon(ghi);+translate([55,0,0]) 2D(ghi);
 </code> </code>
  
Ligne 532: Ligne 554:
 abc = square([10,20],center=true); abc = square([10,20],center=true);
 square([10,20],center=true); square([10,20],center=true);
-translate ([12,0,0]) polygon(abc);+translate ([12,0,0]) 2D(abc);
 </code> </code>
  
Ligne 558: Ligne 580:
 def = circle(r=5,fn=8); def = circle(r=5,fn=8);
 circle(d=10,$fn=24); circle(d=10,$fn=24);
-translate ([12,0,0]) polygon(abc); +translate ([12,0,0]) 2D(abc); 
-translate ([24,0,0]) polygon(def);+translate ([24,0,0]) 2D(def);
 </code> </code>
  
Ligne 580: Ligne 602:
 abc = ellipse([40,20],fn=12); abc = ellipse([40,20],fn=12);
 ellipse([20,40],fn=24);; ellipse([20,40],fn=24);;
-translate ([40,0,0]) polygon(abc);+translate ([40,0,0]) 2D(abc);
 </code> </code>
  
Ligne 601: Ligne 623:
 abc = star(d1=40,d2=10,fn=12); abc = star(d1=40,d2=10,fn=12);
 star(d1=40,d2=30,fn=9); star(d1=40,d2=30,fn=9);
-translate ([40,0,0]) polygon(abc);+translate ([40,0,0]) 2D(abc);
 </code> </code>
  
Ligne 623: Ligne 645:
 abc = roundsquare([15,25],[10,2.5,2.5,10]); abc = roundsquare([15,25],[10,2.5,2.5,10]);
 roundsquare([20,10],[1,8,8,1]); roundsquare([20,10],[1,8,8,1]);
-translate ([22,0,0]) polygon(abc);+translate ([22,0,0]) 2D(abc);
 </code> </code>
  
Ligne 661: Ligne 683:
 abc = triangle(10,20); abc = triangle(10,20);
 triangle(20,10); triangle(20,10);
-translate ([17.55,0,0]) polygon(abc);+translate ([17.55,0,0]) 2D(abc);
 </code> </code>
  
Ligne 683: Ligne 705:
 abc=piepart(d=50,p=16/100); abc=piepart(d=50,p=16/100);
 piepart(d=50,a=60); piepart(d=50,a=60);
-translate([30,0,0]) polygon(abc);+translate([30,0,0]) 2D(abc);
 </code> </code>
  
Ligne 706: Ligne 728:
 def=teardrop(25,15,4); def=teardrop(25,15,4);
 teardrop(25,30,24); teardrop(25,30,24);
-translate([30,0,0]) polygon(abc); +translate([30,0,0]) 2D(abc); 
-translate([60,0,0]) polygon(def);+translate([60,0,0]) 2D(def);
 </code> </code>
  
Ligne 732: Ligne 754:
 def=ngon(20,4,inside=false); def=ngon(20,4,inside=false);
 ngon(20,16); ngon(20,16);
-translate([25,0,0]) polygon(abc); +translate([25,0,0]) 2D(abc); 
-translate([50,0,0]) polygon(def);+translate([50,0,0]) 2D(def);
 translate([25,0,-1]) #circle(d=20); translate([25,0,-1]) #circle(d=20);
 translate([50,0,1]) #circle(d=20); translate([50,0,1]) #circle(d=20);
Ligne 756: Ligne 778:
 abc=losange([10,20]); abc=losange([10,20]);
 losange([20,10]); losange([20,10]);
-translate([20,0,0]) polygon(abc);+translate([20,0,0]) 2D(abc);
 </code> </code>
  
Ligne 780: Ligne 802:
 translate([50,0,0]) fractshape(d=40,fn=3,it=3,inside=false); translate([50,0,0]) fractshape(d=40,fn=3,it=3,inside=false);
  
-translate([0,50,0]) polygon(abc); +translate([0,50,0]) 2D(abc); 
-translate([50,50,0]) polygon(def);+translate([50,50,0]) 2D(def);
 </code> </code>
  
Ligne 797: Ligne 819:
  
 ---- ----
 +
 +===== Primitives 3D =====
 +
 +==== cube(d,center) ====
 +{{ :outilsit:fablab:openscad:lolscad:2022-02-08_23_38_26-lol2022-wip.scad_-_openscad.png?400|}}
 +<code>
 +abc=cube([10,20,30],center=true);
 +echo(abc);
 +3D(abc);
 +</code>
 +<code>
 +function cube(d,center)=let
 +  (
 +    d=d==undef?[10,10,10]:d,
 +    center=center==undef?false:center,
 +    mys=square([d[0],d[1]],center=center),
 +    aa=to3D(mys,mys,h=d[2])
 +  )
 +  center==false?aa:translate3D(aa,[0,0,-d[2]/2]);
 +</code>
 +
 +----
 +==== cylinder(d,d1,d2,h,fn,center) ====
 +{{ :outilsit:fablab:openscad:lolscad:2022-02-08_23_43_36-lol2022-wip.scad_-_openscad.png?400|}}
 +<code>
 +abc=cylinder(d1=20,d2=0,h=50,fn=16);
 +def=cylinder(d=20,h=50,fn=64,center=true);
 +3D(abc);
 +translate([25,0,0]) 3D(def);
 +</code>
 +<code>
 +function cylinder(d,d1,d2,h,fn,center)=let
 +  (
 +    d1=d==undef?d1==undef?10:d1:d,
 +    d2=d==undef?d2==undef?10:d2:d,
 +    h=h==undef?40:h,
 +    fn=fn==undef?16:fn,
 +    center=center==undef?false:center,
 +    myg1=ngon(d=d1,fn=fn),
 +    myg2=ngon(d=d2,fn=fn),
 +    aa=to3D(myg1,myg2,h=h)
 +  )
 +  center==false?aa:translate3D(aa,[0,0,-h/2]);
 +</code>
  
 ===== Divers ===== ===== Divers =====
Ligne 839: Ligne 905:
 aa; aa;
 </code> </code>
 +
 +----
 +
 +==== RVB(a,b,c,d) ====
 +{{ :outilsit:fablab:openscad:lolscad:2022-02-09_00_03_38-lol2022-wip.scad_-_openscad.png?400|}}
 +<code>
 +color(RVB(192,64,128)) cube();
 +translate([1.1,0,0]) color(RVB(12,64,255,128)) cube();
 +translate([2.2,0,0]) color(RVB(255,255,0,64)) cube();
 +</code>
 +<code>
 +function RVB(a,b,c,d)= let( a=a==undef?0.5:1/255*a,
 +b=b==undef?0.5:1/255*b,
 +c=c==undef?0.5:1/255*c,
 +d=d==undef?1:1/255*d,
 +aa=[a,b,c,d]
 +)aa;
 +</code>
 +
  
 ---- ----
Ligne 925: Ligne 1010:
 } }
 </code> </code>
 +
 +----
 +
 +==== outline(w,t) ====
 +
 +<code>
 +abc=square([50,50],center=true);
 +
 +#translate([0,0,2]) 2D(abc);
 +outline(w=3) 2D(abc);
 +
 +#translate([55,0,2]) 2D(abc);
 +translate([55,0,0]) outline(w=3,t="in") 2D(abc);
 +
 +#translate([110,0,2]) 2D(abc);
 +translate([110,0,0]) outline(w=3,t="out") 2D(abc);
 +</code>
 +<code>
 +module outline                (w,t){ 
 +  w=w==undef?1:w;
 +  t=t==undef?"on":t;
 +  difference()
 +  {    
 +    offset(t=="out"?w:t=="in"?0:w/2)
 +    children();
 +    offset(t=="out"?0:t=="in"?-w:-w/2)
 +    children();
 +  }
 +}
 +</code>
 +
  
 ---- ----
Ligne 1098: Ligne 1214:
 } }
 </code> </code>
 +
 +----
 +==== menger3D(d,maxit) ====
 +{{ :outilsit:fablab:openscad:lolscad:2022-02-09_00_52_31-lol2022-wip.scad_-_openscad.png?400|}}
 +Attention, la prévisualisation amène des erreurs d'affichage. Mais le résultat final est bon.
 +<code>
 +menger3D(d=100,maxit=3);
 +</code>
 +<code>
 +module menger3d(it=1,d,maxit){
 +    if (it==maxit){
 +        cube([d,d,d],center=true);
 +    }
 +    if (it<=maxit){
 +        union(){
 +        for (i=[-1:1]){
 +            translate([d/3,d/3,d/3*i]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +            translate([-d/3,d/3,d/3*i]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +            }
 +            
 +        translate([0,d/3,d/3]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +        translate([0,d/3,-d/3]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +
 +        for (i=[-1:1]){
 +            translate([d/3,-d/3,d/3*i]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +            translate([-d/3,-d/3,d/3*i]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +            }
 +        translate([0,-d/3,d/3]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +        translate([0,-d/3,-d/3]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +        translate([d/3,0,d/3]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +        translate([d/3,0,-d/3]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +        translate([-d/3,0,d/3]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +        translate([-d/3,0,-d/3]) rotate([0,90,0]) menger3d(it=it+1,d=d*1/3,maxit=maxit);
 +}}}
 +</code>
 +
 +----
 +==== jcube(d,maxit) ====
 +{{ :outilsit:fablab:openscad:lolscad:2022-02-09_01_18_16-lol2022-wip.scad_-_openscad.png?400|}}
 +<code>
 +jcube(d=100,maxit=4);
 +</code>
 +<code>
 +module jcube(it,d,maxit){
 +    it=it==undef?1:it;
 +union()
 +    {
 +        if(it==maxit)
 +        {
 +            cube([d,d,d],center=true);
 +        }    
 +        if(it<=maxit)
 +        {
 +            translate([d/2,d/2,d/2]) translate([-d/2*(sqrt(2)-1),-d/2*(sqrt(2)-1),-d/2*(sqrt(2)-1)]) jcube(it=it+1,maxit=maxit,d=d*(sqrt(2)-1));
 +            translate([-d/2,d/2,d/2]) translate([d/2*(sqrt(2)-1),-d/2*(sqrt(2)-1),-d/2*(sqrt(2)-1)]) jcube(it=it+1,maxit=maxit,d=d*(sqrt(2)-1));
 +            translate([d/2,-d/2,d/2]) translate([-d/2*(sqrt(2)-1),d/2*(sqrt(2)-1),-d/2*(sqrt(2)-1)]) jcube(it=it+1,maxit=maxit,d=d*(sqrt(2)-1));
 +            translate([-d/2,-d/2,d/2]) translate([d/2*(sqrt(2)-1),d/2*(sqrt(2)-1),-d/2*(sqrt(2)-1)]) jcube(it=it+1,maxit=maxit,d=d*(sqrt(2)-1));
 +            translate([d/2,d/2,-d/2]) translate([-d/2*(sqrt(2)-1),-d/2*(sqrt(2)-1),d/2*(sqrt(2)-1)]) jcube(it=it+1,maxit=maxit,d=d*(sqrt(2)-1));
 +            translate([-d/2,d/2,-d/2]) translate([d/2*(sqrt(2)-1),-d/2*(sqrt(2)-1),d/2*(sqrt(2)-1)]) jcube(it=it+1,maxit=maxit,d=d*(sqrt(2)-1));
 +            translate([d/2,-d/2,-d/2]) translate([-d/2*(sqrt(2)-1),d/2*(sqrt(2)-1),d/2*(sqrt(2)-1)]) jcube(it=it+1,maxit=maxit,d=d*(sqrt(2)-1));
 +            translate([-d/2,-d/2,-d/2]) translate([d/2*(sqrt(2)-1),d/2*(sqrt(2)-1),d/2*(sqrt(2)-1)]) jcube(it=it+1,maxit=maxit,d=d*(sqrt(2)-1));
 +            translate([-d/2,-d/2,0]) translate([d/2*(1-(2*(sqrt(2)-1))),d/2*(1-(2*(sqrt(2)-1))),0]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +            translate([-d/2,d/2,0]) translate([d/2*(1-(2*(sqrt(2)-1))),-d/2*(1-(2*(sqrt(2)-1))),0]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +            translate([d/2,-d/2,0]) translate([-d/2*(1-(2*(sqrt(2)-1))),d/2*(1-(2*(sqrt(2)-1))),0]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +            translate([d/2,d/2,0]) translate([-d/2*(1-(2*(sqrt(2)-1))),-d/2*(1-(2*(sqrt(2)-1))),0]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +            translate([-d/2,0,-d/2]) translate([d/2*(1-(2*(sqrt(2)-1))),0,d/2*(1-(2*(sqrt(2)-1)))]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +            translate([-d/2,0,d/2]) translate([d/2*(1-(2*(sqrt(2)-1))),0,-d/2*(1-(2*(sqrt(2)-1)))]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +            translate([d/2,0,-d/2]) translate([-d/2*(1-(2*(sqrt(2)-1))),0,d/2*(1-(2*(sqrt(2)-1)))]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +            translate([d/2,0,d/2]) translate([-d/2*(1-(2*(sqrt(2)-1))),0,-d/2*(1-(2*(sqrt(2)-1)))]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +            translate([0,-d/2,-d/2]) translate([0,d/2*(1-(2*(sqrt(2)-1))),d/2*(1-(2*(sqrt(2)-1)))]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +            translate([0,-d/2,d/2]) translate([0,d/2*(1-(2*(sqrt(2)-1))),-d/2*(1-(2*(sqrt(2)-1)))]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +            translate([0,d/2,-d/2]) translate([0,-d/2*(1-(2*(sqrt(2)-1))),d/2*(1-(2*(sqrt(2)-1)))]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +            translate([0,d/2,d/2]) translate([0,-d/2*(1-(2*(sqrt(2)-1))),-d/2*(1-(2*(sqrt(2)-1)))]) jcube(it=it+1,maxit=maxit,d=d*(1-(2*(sqrt(2)-1))));
 +}}}
 +</code>
 +
 +----
  
 ===== Modificateurs formes 2D et 3D ===== ===== Modificateurs formes 2D et 3D =====
Ligne 1367: Ligne 1560:
       children();       children();
     };     };
 +  }
 +}
 +</code>
 +
 +----
 +
 +==== mirror(a,x,y) ====
 +{{ :outilsit:fablab:openscad:lolscad:2022-02-09_00_18_42-lol2022-wip.scad_-_openscad.png?400|}}
 +<code>
 +abc=chaincurve(center(LetterL),3);
 +2D(abc);
 +translate([60,0,0]) 2D(mirror(abc,x=true));
 +translate([0,-80,0]) 2D(mirror(abc,y=true));
 +translate([60,-80,0]) 2D(mirror(abc,x=true,y=true));
 +</code>
 +<code>
 +function mirror(a,x,y)=let(
 +  xx=x==undef?1:x==true?-1:1,
 +  yy=y==undef?1:y==true?-1:1,
 +  aa=[
 +    for(i=[0:len(a)-1])
 +      each
 +      [
 +        [a[i][0]*xx,a[i][1]*yy]
 +      ]
 +  ]
 +)aa;
 +</code>
 +
 +----
 +
 +==== translate3D(a,b) & rescale3D(a,b) ====
 +{{ :outilsit:fablab:openscad:lolscad:2022-02-09_00_38_15-lol2022-wip.scad_-_openscad.png?400|}}
 +<code>
 +abc=cube([10,10,10],center=true);
 +def=translate3D(rescale3D(abc,2),[10,20,30]);
 +3D(abc);
 +3D(def);
 +</code>
 +<code>
 +function translate3D(a,b)=[[for(i=[0:len(a[0])-1]) a[0][i]+b],a[1]];
 +function rescale3D(a,s)=  [[for(i=[0:len(a[0])-1]) a[0][i]*s],a[1]];
 +</code>
 +
 +----
 +
 +==== skew(XY,XZ,YX,YZ,ZX,ZY) ====
 +{{ :outilsit:fablab:openscad:lolscad:2022-02-09_02_26_38-lol2022-wip.scad_-_openscad.png?400|}}
 +<code>
 +skew(XY=0.5) cube([25,25,25],center=true);
 +translate([50,0,0]) skew(XZ=0.5) cube([25,25,25],center=true);
 +translate([0,-50,0]) skew(YX=0.5) cube([25,25,25],center=true);
 +translate([50,-50,0]) skew(YZ=0.5) cube([25,25,25],center=true);
 +translate([0,-100,0]) skew(ZX=0.5) cube([25,25,25],center=true);
 +translate([50,-100,0]) skew(ZY=0.5) cube([25,25,25],center=true);
 +</code>
 +<code>
 +module skew(XY,XZ,YX,YZ,ZX,ZY){  
 +  matrice=[ 
 +    [1,XY,XZ,0], //[redimX, skewXY, skewXZ,translateX]
 +    [YX,1,YZ,0], //[SkewYX,RedimY,SkewYZ,translateY]
 +    [ZX,ZY,1,0] //[SkewZX, SkewZY,redimZ,TranslateZ]
 +  ]; 
 +  multmatrix(matrice){
 +    children();
   }   }
 } }
Ligne 1380: Ligne 1638:
 def=chaincurve(koch(abc,maxit=2)); def=chaincurve(koch(abc,maxit=2));
 my3Dobject=simple3D(abc,def,h=70); my3Dobject=simple3D(abc,def,h=70);
-polyhedron(my3Dobject[0],my3Dobject[1]);+3D(my3Dobject);
 </code> </code>
 <code> <code>
outilsit/fablab/laser/lol.1644358235.txt.gz · Dernière modification: 2022/02/08 23:10 de vanlindtmarc