3d part design with OpenSCAD #88: Reverse engineering an STL file part 2

3 min read
By Bob
3d part design with OpenSCAD #88: Reverse engineering an STL file part 2

When I made post #41 there were a bunch of loose ends I wanted to tighten up and features I wanted to add so I decided to take a couple of minutes this morning and see what I could come up with and I think it is much more functional now.

Here is the updated code:

Note: as i have time to experiment with the settings I am making changes to the code so you will need to delete the older code and save the newer one, for example I noticed I had set the default setting for cut width to 50 which made the projection kind of slow.

Path_to_STL_File="/home/none3/Desktop/.stl";

/*[Cut to SVG]*/
//__________________________________________
Slice_SVG=true;
Cut_svg_layer = 1; //[-200:.01:200]
Cut_width=.03;//[0:.01:200]
Rotate_svg_x=0;//[-360:.01:360]
Rotate_svg_y=0;//[-360:.01:360]
Rotate_svg_z=0;//[-360:.01:360]

/*[Cut to STL]*/
//__________________________________________
Slice_STL=false;
Cut_start = 0; //[-200:.1:400]
Cut_end= 60; //[-200:.1:400]

Rotate_x=0;//[-360:.01:360]
Rotate_y=0;//[-360:.01:360]
Rotate_z=0;//[-360:.01:360]

module Slice_to_SVG(){
if(Slice_SVG){
 color("blue",alpha=.1)
%cube(400,center=true);
 translate([0, 0, Cut_svg_layer])
 rotate([Rotate_svg_x,Rotate_svg_y,Rotate_svg_z])
 color("blue",alpha=.1)
 %square(400,center=true);
 color("red",alpha=.3)
 %import(Path_to_STL_File);
 
 render(){
 intersection(){
 color("red")
 rotate([Rotate_svg_x,Rotate_svg_y,Rotate_svg_z])
 import(Path_to_STL_File);
 translate([0, 0,Cut_svg_layer])
 rotate([Rotate_svg_x,Rotate_svg_y,Rotate_svg_z])
 linear_extrude(Cut_width)
 square(400,center=true);
}
}}}

module Slice_to_STL(){
if(Slice_STL){
 color("blue",alpha=.1)
%cube(400,center=true);
 translate([0, 0, Cut_start])
 rotate([Rotate_x,Rotate_y,Rotate_z])
 color("blue",alpha=.1)
 %square(400,center=true);
 translate([0, 0,Cut_start+ Cut_end])
 rotate([Rotate_x,Rotate_y,Rotate_z])
 color("red",alpha=.1)
 %square(400,center=true);

 render()
 intersection(){
 import(Path_to_STL_File);
 rotate([Rotate_x,Rotate_y,Rotate_z])
 translate([-200,-200, Cut_start])
 linear_extrude(Cut_end,convexity=8)
 square(400,Cut_start);
}}}

if (Slice_SVG){
projection(){
Slice_to_SVG();
}}


Slice_to_STL();

I added a cube that represents the build area, a couple of cut planes so it's easier to see where you are slicing the model at and figured out a way to make projection() almost instantaneous because the way I was doing it before was kind of slow.

here are some screen shots:

Ready to save to a SVG file

same slice saved as a DXF file

By adding a start and end plane I am able to slice the model with much more control:

This new code is a major improvement over my last attempt, and I think it makes it a better tool for selecting sections of an STL file to work with.

To do: automate slicing layers to multiple SVG files