//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); } } }