Slicing a 3D object to SVG: verschil tussen versies
(→Example of a CSG object) |
|||
Regel 18: | Regel 18: | ||
== Example of a CSG object == | == Example of a CSG object == | ||
− | Below is an example of a sphere on top of a cube (''thing()'' in below code) which is sliced; and each slice is then laid out flat. | + | Below is an example of a hollow sphere on top of a hollow cube (''thing()'' in below code) which is sliced; and each slice is then laid out flat. |
module thing() { | module thing() { |
Versie van 3 mrt 2018 om 20:34
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 into .
Needed: http://www.openscad.org/ - OpenScad (free).
The typical workflow is
- create an OpenSCAD object; or import an STL of an object into OpenScad.
- Add the Slicing code below.
- Adjust the sizes
- Render the object
- Save the resulting SVG
- Open this in Inktscape to check and perhaps make a bit more efficient by moving things around/nesting things.
- Export/upload the SVG from Inktscape to the Lasersaur.
Example of a CSG object
Below is an example of a hollow sphere on top of a hollow 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(); }; };