Previously I made a module that you could use to perforate different shaped holes in a tube to make an interesting design, these used dxf files or an stl file:
Since it's so easy to use Inkscape to make an svg file for this I made a few simple changes to my existing code so I could use an svg also.
Here is the updated code:
/* [Svg Perforate] */
Show_Perforate = true;
Path_to_SVG_File ="";
Svg_layer_name="layer1";
Columns = 4; //[1:100]
Rows = 4; //[1:100]
Extrude = 1; //[0:.1:200]
diameter = 10; //[1:.1:200]
Verticle_spacing = 10; //[1:.1:200]
Horizontal_spacing = 10; //[1:.1:200]
Verticle_rotate = 90; //[0:.1:360]
Rotate_X = 0; //[0:.1:360]
Rotate_Y = 90; //[0:.1:360]
Rotate_Z = 90; //[0:.1:360]
Rotate_All_X = 0; //[0:.1:360]
Rotate_All_Y = 0; //[0:.1:360]
Rotate_All_Z = 0; //[0:.1:360]87.7
Move_X = 0; //[-200:.1:200]
Move_Y = 0; //[-200:.1:200]
Move_Z = 0; //[-200:.1:200]
scale_perf_x=1;//[.1:.01:100]
scale_perf_y=1;//[.1:.01:100]
scale_perf_z=1;//[.1:.01:100]
/* [Tube] */
Tube_height=20;//[.1:.01:400]
Inside_diameter=10;//[.1:.01:200]
Inside_shape=100;//[3:1:100]
Outside_diameter=10;//[.1:.01:200]
Outside_shape=100;//[3:1:100]
Tube_scale=1;//[.25:.01:20]
module SVG_Perforate(){
for(v=[1:Columns]){
rotate([Rotate_All_X,Rotate_All_Y,Rotate_All_Z])
translate([Move_X,Move_Y,Move_Z])
translate([0,0,v*Verticle_spacing])
for(h=[1:Rows])
rotate([0,Verticle_rotate,h*Horizontal_spacing,])
translate([0,diameter,0])
rotate([Rotate_X ,Rotate_Y,Rotate_Z])
{
scale([scale_perf_x,scale_perf_y,scale_perf_z])
linear_extrude(Extrude)
import(Path_to_SVG_File, layer= Svg_layer_name);
}}}
module Tube(){
linear_extrude(Tube_height,scale=Tube_scale){
difference(){
circle(Outside_diameter/2,$fn=Outside_shape);
circle(Inside_diameter/2,$fn=Inside_shape);
}}}
render()
difference(){
Tube();
SVG_Perforate();
}
if(Show_Perforate)
#SVG_Perforate();
I also added a check box so you can see where the holes line up on the tube if you want to make it have different shapes: