| 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/09 00:04] vanlindtmarc [gradient (a,b,c)] |
outilsit:fablab:laser:lol [2022/02/09 02:27] (Version actuelle) vanlindtmarc |
| 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> |
| |
| } | } |
| </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> |
| | |
| |
| ---- | ---- |
| } | } |
| </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 ===== |
| 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(); |
| } | } |
| } | } |