/**************************************************************************** * LaserMount by (c) 2018 Marcio Teixeira * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * To view a copy of the GNU General Public License, go to the following * * location: . * ****************************************************************************/ laser_barrel_bore_dia = 13.65; laser_module_height = 23.37; laser_module_hotspot = 7.85; laser_module_thickness = 1.51; laser_module_width = 15.91; pivot_height = 25; projection_elevation = 20; hotspot_dia = 6; hotspot_from_module = 0.5; stand_height = 50; laser_dist_from_hotspot = 15; laser_module_tilt = (90 - projection_elevation) / 2; top_dia = laser_barrel_bore_dia + 4; bot_dia = top_dia + tan(laser_module_tilt/1.5)*stand_height; module laser_module_transform() { translate([0,0,pivot_height]) rotate([0,-laser_module_tilt,0]) children(); } module laser_outlet_transform() { translate([0,0,pivot_height]) rotate([0,-laser_module_tilt*2,0]) children(); } module laser_module() { translate([ -laser_module_hotspot, -laser_module_width/2, -laser_module_thickness - hotspot_from_module]) cube([laser_module_height, laser_module_width, laser_module_thickness]); } module _laser_module_slot(gap_x, gap_y, gap_z_top, gap_z_bot) { w = laser_module_width + gap_y*2; translate([ -laser_module_hotspot - gap_x, -w/2, -laser_module_thickness - hotspot_from_module - gap_z_bot ]) cube([100, w, laser_module_thickness + gap_z_top + gap_z_bot]); } module laser_module_slot() { _laser_module_slot(0.2,0.2,0.2,0.2); _laser_module_slot(-2,-0.5,1.5,4.5); } module laser_outlet() { cylinder(r1=hotspot_dia/2, r2=50, h=100); } module laser_bore() { translate([0,0,pivot_height + laser_dist_from_hotspot]) { cylinder(r=laser_barrel_bore_dia/2, h=150); scale([1,1,.25]) sphere(r=laser_barrel_bore_dia/2+0.5); } translate([0,0,2]) cylinder(r=3, h=150); } module laser_grip_ring(top_dia, bot_dia,h,where,protrude=-.25) { dia = bot_dia + (top_dia - bot_dia) * where; r = 0.75; translate([0,0,h*where]) rotate_extrude($fn=40) translate([dia/2+r*protrude,0,0]) circle(r=r, center=true); } module laser_grip_balls(top_dia, bot_dia,h,where,protrude=-.25) { dia = bot_dia + (top_dia - bot_dia) * where; r = 1; translate([0,0,h*where]) for(a=[0:20:360]) rotate([0,0,a]) translate([dia/2+r*protrude,0,0]) sphere(r=r, center=true,$fn=15); } module laser_base_embelishments() { for(w=[.95,.85,.3,.1]) laser_grip_ring(top_dia, bot_dia, stand_height, w); for(w=[.9,.25,.2,.15]) laser_grip_balls(top_dia, bot_dia, stand_height, w); } module laser_base_screw_holes() { for(t=[-0.5,0,0.5]) translate([0,bot_dia/2*t,-0.1]) cylinder(r=1.75, h=10); } module laser_base() { cylinder(r1=bot_dia/2, r2=top_dia/2, h=stand_height,$fn=15); } module laser_stand() { difference() { laser_base(); laser_bore(); laser_outlet_transform() laser_outlet(); laser_module_transform() laser_module_slot(); laser_base_screw_holes(); } laser_base_embelishments(); } module cutaway() { difference() { children(); translate([0,-5000,0]) cube([10000,10000,10000],center=true); } } module assembly() { laser_module_transform() laser_module(); cutaway() laser_stand(); } module module_and_outlet() { laser_module_transform() laser_module(); #laser_outlet_transform() laser_outlet(); } module optics_assembly() { laser_module_transform() laser_module(); laser_bore(); } //laser_module(); // #laser_module_slot(); //assembly(); laser_stand(); //optics_assembly(); //module_and_outlet(); //laser_module(); //laser_outlet();