Slicing a 3D object to SVG: verschil tussen versies

Uit MakerSpace Leiden
Ga naar: navigatie, zoeken
Regel 1: Regel 1:
 
One can use OpenSCAD to slice a 3D STL or an object made in OpenSCAD into SVG usable with the Lasersaur.
 
One can use OpenSCAD to slice a 3D STL or an object made in OpenSCAD into SVG usable with the Lasersaur.
  
[[Bestand:Sphere-on-box-example.png|220px]] to [[Bestand:Sphere-on-box-as-slices-Flat.png]]
+
Or in other words, turning
 +
[[Bestand:Sphere-on-box-example.png|220px]] into [[Bestand:Sphere-on-box-as-slices-Flat.png]].
 +
 
 +
Needed: http://www.openscad.org/ - OpenScad (free).
  
 
== Example of a CSG object ==
 
== Example of a CSG object ==

Versie van 3 mrt 2018 om 21:19

One can use OpenSCAD to slice a 3D STL or an object made in OpenSCAD into SVG usable with the Lasersaur.

Or in other words, turning Sphere-on-box-example.png into Sphere-on-box-as-slices-Flat.png.

Needed: http://www.openscad.org/ - OpenScad (free).

Example of a CSG object

Example of a sphere on top of a cube (thing() in below code) which is sliced; and each slice is then laid out flat.

 module thing() {
   difference() {
       union() {
           translate([-5,-5,0]) 
               cube([10,10,10]);
           translate([0,0,12])
               sphere(r=10);
           };
       union() {
           translate([-5,-5,0]) 
               translate([1,1,1]) cube([8,8,8]);
           translate([0,0,12])
               sphere(r=9);
           };
       };
 }
 
 z_min = 0;
 z_max = 23;
 slice = 1;
 n = 5; // floor(sqrt((z_max - z_min)/slice+10));
 for(z = [-z_max:slice:z_min]) { 
   i = (z + z_max) / slice;
   x = 40 * (i % n);
   y = 40 * floor(i / n);
   translate([x,y,0]) {
       projection(cut=true) 
           translate([0,0,z]) thing();
   };
 };

Example with an STL

An example of an STL that is loaded from a file and then sliced. You will have to manually adjust the Z range & slice distance.

 // 30x150x20 bbx
 import("dino.stl", convexity=3); 
 
 z_min = 0;
 z_max = 30;
 x_max = 20
 y_max = 150;
 slice = 0.5;
 
 n = floor(sqrt((z_max - z_min)/slice)+1);
 for(z = [-z_max:slice:z_min]) { 
   i = (z + z_max) / slice;
   x = x_max * (i % n);
   y = Y_max * floor(i / n);
   translate([x,y,0]) {
       projection(cut=true) 
           translate([0,0,z]) thing();
   };
 };