You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
4.7 KiB
OpenSCAD

//modules
use <./component--joint--tee.scad>;
use <./component--pipe.scad>;
{ //parameters
{
caster_hight=135;
caster_widht=50;
joint_tee_size=60;
pipe_diameter=26.67;
}
{
table_widht=600;
table_length=1800;
table_hight=700;
}
{
base_bottom_center=caster_hight+joint_tee_size/2;
base_top_center=table_hight-joint_tee_size/2;
}
{
base_widht=table_widht-2*(0)/2;
base_length=table_length-2*(0)/2;
}
{
assembly_offset=5;
}
}
{ //operations
{ //positioning
point_node=(
[
[base_widht/2,base_length/2,base_bottom_center]
]
);
point_pipe_horizontal=(
[
[base_widht/4,base_length/2,base_bottom_center],
[base_widht/4,base_length/2,base_top_center],
]
);
point_central_node=(
[
[0,base_length/2,base_bottom_center],
[0,base_length/2,base_top_center],
]
);
point_pipe=(
[
[base_widht/2,base_length/2,caster_hight+(base_top_center-caster_hight)/2],
]
);
point_caster=(
[
[base_widht/2,base_length/2,caster_hight/2],
]
);
point_crossbar=(
[
[0,0,base_bottom_center],
[0,0,base_top_center],
]
);
point_node_top=(
[
[base_widht/2,base_length/2,base_top_center],
]
);
}
{ //modules
color("yellow")
crossbars();
laterals();
module laterals()
{
lateral_mid();
lateral_mid_mirror();
}
module lateral_mid()
{
lateral_quarter();
lateral_quarter_mirror();
node_pos_central();
}
module lateral_quarter()
{
color("blue")
caster();
color("red")
for (pos=point_node)
translate(pos)
node_bottom();
color("orange")
pipe_vertical();
color("orange")
pipe_horizontal_pos();
color("green")
node_top();
}
module node_bottom()
{
joint_tee(size=joint_tee_size);
};
module pipe_vertical()
{
for (pos=point_pipe)
translate(pos)
pipe(diam=pipe_diameter,hight=base_top_center-caster_hight-joint_tee_size+2*assembly_offset);
};
module pipe_horizontal_pos ()
{
for (pos=point_pipe_horizontal)
translate(pos)
pipe_horizontal();
};
module pipe_horizontal()
{
rotate([0,90,0])
pipe(diam=pipe_diameter,hight=base_widht/2-joint_tee_size+2*assembly_offset);
};
module caster()
{
for (pos=point_caster)
translate(pos)
rotate([0,90,0])
cylinder(h=caster_widht,r=caster_hight/2,center=true);
};
module node_top()
{
for (pos=point_node_top)
translate(pos)
cube(size=joint_tee_size,center=true);
};
module lateral_quarter_mirror()
{
mirror([1,0,0])
lateral_quarter();
};
module lateral_mid_mirror()
{
mirror([1,0,0])
lateral_mid();
}
module node_pos_central()
{
color("red")
for (pos=point_central_node)
translate(pos)
joint_tee(size=joint_tee_size);
}
module lateral_mid_mirror()
{
mirror([0,1,0])
lateral_mid();
};
module crossbars()
{
color("red")
for (pos=point_crossbar)
translate(pos)
crossbar();
}
module crossbar()
{
rotate([90,0,0])
pipe(diam=pipe_diameter,hight=base_length-joint_tee_size+2*assembly_offset);
}
}
}