Improved gears

pull/20/head
Carlos Garcia 2014-08-19 16:57:26 +02:00
parent 334c100e6a
commit 328887ce95
12 changed files with 101716 additions and 108887 deletions

View File

@ -164,7 +164,7 @@ render_2D_or_3D() {
// Draw right Y smooth rod
rotate([0,0,180]) standard_rod(diam=axes_Ysmooth_rodD, length=axes_Ysmooth_rodLen, threaded=false, echoPart=true);
Cyclone_X_leftFrame();
!Cyclone_X_leftFrame();
}

View File

@ -9,6 +9,7 @@ Xmotor_sideLen = 42.20;
axes_XgearSeparation = 37;
axes_XgearRatio = 21/21; // Number of tooth (motor/rod)
axes_XgearThickness = 10;
X_frames_additional_thickness = 5;
@ -39,6 +40,34 @@ module Cyclone_X_leftFrame(isLeft=true) {
corner_radius = 10;
module Cyclone_XsubPart_gearsAndMotor(renderGears=false, echoPart=false, drawMotor=false, gearMargin=0) {
translate([gearWallSeparation,0,0]) rotate([0,90,0])
rodGear(r=axes_XgearSeparation/(1+1/axes_XgearRatio)+gearMargin, h=axes_XgearThickness+gearMargin, echoPart=echoPart, renderPart=renderGears);
// Translate to motor position
rotate([motorRotatedOffset,0,0]) {
translate([0,axes_XgearSeparation,0])
rotate([-motorRotatedOffset,0,0]) {
if(drawMotor)
translate([-motorWallSeparation,0,0]) rotate([0,90,0]) stepperMotor(screwHeight=motorWallSeparation, echoPart=echoPart);
translate([gearWallSeparation,0,0]) rotate([0,90,0]) motorGear(r=axes_XgearSeparation/(1+axes_XgearRatio)+gearMargin, h=axes_XgearThickness+gearMargin, echoPart=echoPart, renderPart=renderGears);
}
}
}
module Cyclone_XsubPart_gearCover() {
margin = 4;
wallThickness = 2;
color("grey")
difference() {
union()
Cyclone_XsubPart_gearsAndMotor(renderGears=true, gearMargin=margin+wallThickness);
translate([-0.01,0,0])
union()
Cyclone_XsubPart_gearsAndMotor(renderGears=true, gearMargin=margin);
rotate([0,90,0]) cylinder(r=20/2-1.5, h=30);
}
}
difference() {
// Main block
@ -115,16 +144,8 @@ module Cyclone_X_leftFrame(isLeft=true) {
translate([-bearingDepth,0,0]) rotate([0,90,0])
radialBearing(echoPart=true);
if(isLeft) {
translate([gearWallSeparation,0,0]) rotate([0,90,0])
rodGear(r=axes_XgearSeparation/(1+1/axes_XgearRatio), echoPart=true);
// Translate to motor position
rotate([motorRotatedOffset,0,0]) {
translate([0,axes_XgearSeparation,0])
rotate([-motorRotatedOffset,0,0]) {
translate([-motorWallSeparation,0,0]) rotate([0,90,0]) stepperMotor(screwHeight=motorWallSeparation, echoPart=true);
translate([gearWallSeparation,0,0]) rotate([0,90,0]) motorGear(r=axes_XgearSeparation/(1+axes_XgearRatio), echoPart=true);
}
}
Cyclone_XsubPart_gearsAndMotor(echoPart=true, drawMotor=true);
Cyclone_XsubPart_gearCover();
}
translate([0,0,axes_Xsmooth_separation])
rotate([0,0,-90])

View File

@ -37,7 +37,7 @@ include <MCAD/materials.scad>
include <MCAD/teardrop.scad>
include <MCAD/involute_gears.scad>
motor_shaft_diameter=5.3;
motor_shaft_diameter=5.6;
BigGear_N_Teeth = 21; // 24
nholes = 9; // 7
@ -73,8 +73,7 @@ module herringbone_gear( teeth=12, circles=0, shaft=5 ) {
hub_diameter=1,
bore_diameter=shaft,
circles=circles,
twist=twist/teeth,
$fn=15*2
twist=twist/teeth
);
mirror([0,0,1]) translate([0,0,-height/2-0.01]) {
difference() {
@ -101,32 +100,28 @@ union() difference() {
translate( [0, 0, 12] ) mirror( [0, 0, 1] ) difference() {
//shaft
cylinder( r=9, h=15, $fn=40 );
//adapted to include 3 captive nuts for symmetrical positioning
//adpted bij HJ Binnema on August 26 2013.
for (i= [0:2]){
rotate([0,0,i*120]){
cylinder( r=9, h=15);
//captive nut and grub holes
translate( [0, 20, 3.5] ) rotate( [90, 0, 0] ) union() {
translate( [0, 19.5, 3.5] ) rotate( [90, 0, 0] ) union() {
//enterance
translate( [0, -3, 14.5] ) cube( [6, 6, 2.6], center=true );
translate( [0, -3, 14.5] ) cube( [6, 6, 2.8], center=true );
//nut
translate( [0, 0, 13.3] ) rotate( [0, 0, 30] )
cylinder( r=6/2+0.5, h=2.6, $fn=6 );
translate( [0, 0, 14.5] ) rotate( [0, 0, 30] )
cylinder( r=6/2+0.5, h=2.8, $fn=6, center=true);
//grub hole
translate( [0, 0, 9] ) cylinder( r=3.2/2, h=10, $fn=6 );
}}}
translate( [0, 0, 9] ) cylinder( r=3.2/2, h=10);
}
}
}
//holes to save plastic
for(i=[0:nholes-1])
rotate( [0, 0, i*360/(nholes)+45], $fn=20 )
translate( [hole_distance_from_center, 0] )
cylinder( r=holes_diam/2, h=11, center=true, $fn=30 );
//for(i=[0:nholes-1])
// rotate( [0, 0, i*360/(nholes)+45])
// translate( [hole_distance_from_center, 0] )
// cylinder( r=holes_diam/2, h=11, center=true);
//shaft hole
translate( [0, 0, -6] ) cylinder( r=motor_shaft_diameter/2, h=20, $fn=30 );
translate( [0, 0, -6] ) cylinder( r=motor_shaft_diameter/2, h=20);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,18 @@
/* Derived by Carlosgs from:
* http://www.thingiverse.com/thing:12789
* An extruder gear set for the TechZone Huxley,
* featuring Herringbone teeth.
* featuring Herringbone teeth.
* You will have to recalibrate your E_STEPS_PER_MM in
* your firmware (ratio changing from original techzone
* lasercut gears).
* your firmware (ratio changing from original techzone
* lasercut gears).
* This use 2 modules from the MCAD library that you can
* get from https://github.com/elmom/MCAD.
* get from https://github.com/elmom/MCAD.
*
* Part - the motor gear mount hub with set screw hole -
* derived from http://www.thingiverse.com/thing:3104
* (thanks GilesBathgate) which is under GPL CC license.
* derived from http://www.thingiverse.com/thing:3104
* (thanks GilesBathgate) which is under GPL CC license.
*
* Copyright (C) 2011 Guy 'DeuxVis' P.
* Copyright (C) 2011 Guy 'DeuxVis' P.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -21,94 +21,79 @@
*
* 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
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* --
* DeuxVis - device@ymail.com */
* DeuxVis - device@ymail.com */
include <MCAD/metric_fastners.scad>
include <MCAD/materials.scad>
include <MCAD/teardrop.scad>
include <MCAD/involute_gears.scad>
M8_nut_diameter = 15.3;
nut_separation = 3;
nut_separation = 5;
SmallGear_N_Teeth = 21;//17; // 12
SmallGear_N_Teeth = 21;
M8_rod_diam = 8.4;
// Increase the resolution of default shapes
$fa = 5; // Minimum angle for fragments [degrees]
$fs = 0.5; // Minimum fragment size [mm]
/* Herringbone gear module, adapted from MCAD/involute_gears */
module herringbone_gear( teeth=12, circles=0, shaft=5 ) {
twist=200;
height=10;
pressure_angle=30;
twist=100;
height=10;
pressure_angle=30;
gear(
number_of_teeth=teeth,
circular_pitch=320,
pressure_angle=pressure_angle,
clearance = 0.2,
gear_thickness = height/2,
rim_thickness = height/2,
rim_width = 1,
hub_thickness = height/2,
hub_diameter=1,
bore_diameter=shaft,
circles=circles,
twist=twist/teeth
);
diam = teeth*2;
truncation_length = 3;
truncation_height = height/3;
module myGear() {
difference() {
gear(
number_of_teeth=teeth,
circular_pitch=320,
pressure_angle=pressure_angle,
clearance = 0.2,
gear_thickness = height/2,
rim_thickness = height/2,
rim_width = 1,
hub_thickness = height/2,
hub_diameter=1,
bore_diameter=shaft,
circles=circles,
twist=twist/teeth
);
mirror([0,0,1]) translate([0,0,-height/2-0.01]) {
difference() {
cylinder(r=diam/2+1, h=truncation_height);
translate([0,0,-0.01])
cylinder(r1=diam/2-truncation_length, r2=diam/2, h=truncation_height+0.02);
}
}
}
}
myGear();
mirror( [0,0,1] )
gear(
number_of_teeth=teeth,
circular_pitch=320,
pressure_angle=pressure_angle,
clearance = 0.2,
gear_thickness = height/2,
rim_thickness = height/2,
rim_width = 1,
hub_thickness = height/2,
hub_diameter=1,
bore_diameter=shaft,
circles=circles,
twist=twist/teeth
);
myGear();
}
module cyclone_rod_gear(with_extra_parts=false, exploded=false) {
// Extruder Gear
difference() {
union() {
//gear
rotate([180,0,0]) herringbone_gear( teeth=SmallGear_N_Teeth, circles=0, shaft=M8_rod_diam, $fn=40 );
union() {
//gear
rotate([180,0,0]) herringbone_gear( teeth=SmallGear_N_Teeth, circles=0, shaft=M8_rod_diam);
}
//M8 hobbed bolt head fit washer
/*difference() {
translate( [0, 0, 5] ) cylinder( r=8, h=3, $fn=60 );
translate( [0, 0, 5-0.01] ) cylinder( r=M8_nut_diameter/2, h=7, $fn=6 );
}*/
/*rotate([180,0,0]) difference() {
translate( [0, 0, 5] ) cylinder( r=13, h=3, $fn=60 );
translate( [0, 0, 5+0.4] ) cylinder( r=M8_nut_diameter/2, h=7, $fn=6 );
}*/
}
translate( [0, 0, (nut_separation/2)] ) cylinder( r=M8_nut_diameter/2, h=7, $fn=6 );
translate( [0, 0, (nut_separation/2)] ) cylinder( r=M8_nut_diameter/2, h=7, $fn=6 );
}
if(with_extra_parts)
cyclone_rod_gear_extras(exploded_distance=(exploded?12:0));
module cyclone_rod_gear_extras(exploded_distance=0) {
echo("Non-Plastic Parts, 2, Nut M8 to attach rod_gear on threaded rod");
translate([0,0,-10/2-0.8*8-1.0*exploded_distance]) color(Steel) flat_nut(8);
translate([0,0,nut_separation/2+0.8*8+1.0*exploded_distance]) rotate([180,0,0]) color(Steel) flat_nut(8);
}
}
cyclone_rod_gear();

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +1,21 @@
/* Derived by Carlosgs from:
* http://www.thingiverse.com/thing:12789
* An extruder gear set for the TechZone Huxley,
* featuring Herringbone teeth.
* featuring Herringbone teeth.
* You will have to recalibrate your E_STEPS_PER_MM in
* your firmware (ratio changing from original techzone
* lasercut gears).
* your firmware (ratio changing from original techzone
* lasercut gears).
* This use 2 modules from the MCAD library that you can
* get from https://github.com/elmom/MCAD.
* get from https://github.com/elmom/MCAD.
*
* Part - the motor gear mount hub with set screw hole -
* derived from http://www.thingiverse.com/thing:3104
* (thanks GilesBathgate) which is under GPL CC license.
* derived from http://www.thingiverse.com/thing:3104
* (thanks GilesBathgate) which is under GPL CC license.
*
* August 2013 added 2 extra setscrews to ensure centered usage.
* by Harry Binnema.
*
* Copyright (C) 2011 Guy 'DeuxVis' P.
* Copyright (C) 2011 Guy 'DeuxVis' P.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -24,104 +24,84 @@
*
* 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
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* --
* DeuxVis - device@ymail.com */
* DeuxVis - device@ymail.com */
include <MCAD/materials.scad>
include <MCAD/teardrop.scad>
include <MCAD/involute_gears.scad>
motor_shaft_diameter=5.4;
motor_shaft_diameter=5.6;
pos=15.4-1; //position hole for grubnut
nholes = 7;
shaft_diam=10;
shaft_diam=9;
shaft_height=7;
// Increase the resolution of default shapes
$fa = 5; // Minimum angle for fragments [degrees]
$fs = 0.5; // Minimum fragment size [mm]
/* Herringbone gear module, adapted from MCAD/involute_gears */
module herringbone_gear( teeth=12, circles=0, shaft=5 ) {
twist=200;
height=10;
pressure_angle=30;
gear(
number_of_teeth=teeth,
circular_pitch=320,
pressure_angle=pressure_angle,
clearance = 0.2,
gear_thickness = height/2,
rim_thickness = height/2,
rim_width = 1,
hub_thickness = height/2,
hub_diameter=1,
bore_diameter=shaft,
circles=circles,
twist=twist/teeth
);
twist=100;
height=10;
pressure_angle=30;
module myGear() {
gear(
number_of_teeth=teeth,
circular_pitch=320,
pressure_angle=pressure_angle,
clearance = 0.2,
gear_thickness = height/2,
rim_thickness = height/2,
rim_width = 1,
hub_thickness = height/2,
hub_diameter=1,
bore_diameter=shaft,
circles=circles,
twist=twist/teeth
);
}
myGear();
mirror( [0,0,1] )
gear(
number_of_teeth=teeth,
circular_pitch=320,
pressure_angle=pressure_angle,
clearance = 0.2,
gear_thickness = height/2,
rim_thickness = height/2,
rim_width = 1,
hub_thickness = height/2,
hub_diameter=1,
bore_diameter=shaft,
circles=circles,
twist=twist/teeth
);
myGear();
}
module cyclone_motor_z_gear(with_extra_parts=false, exploded=false) {
// Motor gear
rotate([180,0,0]) union() difference() {
union() {
union() {
//gear
herringbone_gear( teeth=8 );
//gear
herringbone_gear( teeth=8 );
translate( [0, 0, 12] ) mirror( [0, 0, 1] ) difference() {
//shaft
cylinder( r=shaft_diam, h=shaft_height, $fn=40 );
//captive nut and grub holes
for (i=[0:2]){ //3 symmetric grubscrews
rotate([0,0,i*120]){
translate( [0, 20, 3.5] ) rotate( [90, 0, 0] ) union() {
//entrance for nut
translate( [0, -4.4, pos] ) cube( [5.9, 5.8, 2.45], center=true );
//nut hole
translate( [0, 0, pos-1.2] ) rotate( [0, 0, 30] )
cylinder( r=6/2+0.2, h=2.6, $fn=6 );
//grub screw hole
translate( [0, 0, 9] ) cylinder( r=1.5, h=10, $fn=20 );
}
}
translate( [0, 0, 12] ) mirror( [0, 0, 1] ) difference() {
//shaft
cylinder( r=shaft_diam, h=shaft_height);
//captive nut and grub holes
translate( [0, 19.5, 3.5] ) rotate( [90, 0, 0] ) union() {
//enterance
translate( [0, -3, 14.5] ) cube( [6, 6, 2.8], center=true );
//nut
translate( [0, 0, 14.5] ) rotate( [0, 0, 30] )
cylinder( r=6/2+0.5, h=2.8, $fn=6, center=true);
//grub hole
translate( [0, 0, 9] ) cylinder( r=3.2/2, h=10);
}
}
}
}
}
//shaft hole
translate( [0, 0, -6] ) cylinder( r=motor_shaft_diameter/2, h=20, $fn=30 );
//shaft hole
translate( [0, 0, -6] ) cylinder( r=motor_shaft_diameter/2, h=20);
}
if(with_extra_parts)
cyclone_motor_z_gear_extras(exploded_distance = (exploded?24:0));
module cyclone_motor_z_gear_extras(exploded_distance=0) {
echo("Non-Plastic Parts, 1, Grub Screw M3 x 8 mm to attach Z motor gear to motor shaft");
translate([0,-2.5-exploded_distance,-(12-3.5)]) rotate([90, 0, 0]) color(Steel) cylinder(r=1.5, h=8, $fn=30);
}
}
cyclone_motor_z_gear();

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,18 @@
/* Derived by Carlosgs from:
* http://www.thingiverse.com/thing:12789
* An extruder gear set for the TechZone Huxley,
* featuring Herringbone teeth.
* featuring Herringbone teeth.
* You will have to recalibrate your E_STEPS_PER_MM in
* your firmware (ratio changing from original techzone
* lasercut gears).
* your firmware (ratio changing from original techzone
* lasercut gears).
* This use 2 modules from the MCAD library that you can
* get from https://github.com/elmom/MCAD.
* get from https://github.com/elmom/MCAD.
*
* Part - the motor gear mount hub with set screw hole -
* derived from http://www.thingiverse.com/thing:3104
* (thanks GilesBathgate) which is under GPL CC license.
* derived from http://www.thingiverse.com/thing:3104
* (thanks GilesBathgate) which is under GPL CC license.
*
* Copyright (C) 2011 Guy 'DeuxVis' P.
* Copyright (C) 2011 Guy 'DeuxVis' P.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -21,93 +21,79 @@
*
* 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
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* --
* DeuxVis - device@ymail.com */
* DeuxVis - device@ymail.com */
include <MCAD/metric_fastners.scad>
include <MCAD/nuts_and_bolts.scad>
include <MCAD/materials.scad>
include <MCAD/teardrop.scad>
include <MCAD/involute_gears.scad>
module cyclone_rod_z_gear(with_extra_parts=false, exploded=false) {
M8_nut_diameter = 15.3;
nut_separation = 3;
nut_separation = 5;
SmallGear_N_Teeth = 15;
M8_rod_diam = 8.4;
// Increase the resolution of default shapes
$fa = 5; // Minimum angle for fragments [degrees]
$fs = 0.5; // Minimum fragment size [mm]
/* Herringbone gear module, adapted from MCAD/involute_gears */
module herringbone_gear( teeth=12, circles=0, shaft=5 ) {
twist=200;
height=10;
pressure_angle=30;
twist=100;
height=10;
pressure_angle=30;
gear(
number_of_teeth=teeth,
circular_pitch=320,
pressure_angle=pressure_angle,
clearance = 0.2,
gear_thickness = height/2,
rim_thickness = height/2,
rim_width = 1,
hub_thickness = height/2,
hub_diameter=1,
bore_diameter=shaft,
circles=circles,
twist=twist/teeth
);
diam = teeth*2;
truncation_length = 3;
truncation_height = height/3;
module myGear() {
difference() {
gear(
number_of_teeth=teeth,
circular_pitch=320,
pressure_angle=pressure_angle,
clearance = 0.2,
gear_thickness = height/2,
rim_thickness = height/2,
rim_width = 1,
hub_thickness = height/2,
hub_diameter=1,
bore_diameter=shaft,
circles=circles,
twist=twist/teeth
);
mirror([0,0,1]) translate([0,0,-height/2-0.01]) {
difference() {
cylinder(r=diam/2+1, h=truncation_height);
translate([0,0,-0.01])
cylinder(r1=diam/2-truncation_length, r2=diam/2, h=truncation_height+0.02);
}
}
}
}
myGear();
mirror( [0,0,1] )
gear(
number_of_teeth=teeth,
circular_pitch=320,
pressure_angle=pressure_angle,
clearance = 0.2,
gear_thickness = height/2,
rim_thickness = height/2,
rim_width = 1,
hub_thickness = height/2,
hub_diameter=1,
bore_diameter=shaft,
circles=circles,
twist=twist/teeth
);
myGear();
}
module cyclone_rod_gear(with_extra_parts=false, exploded=false) {
// Extruder Gear
difference() {
union() {
//gear
rotate([180,0,0]) herringbone_gear( teeth=15, circles=0, shaft=8.5, $fn=40 );
union() {
//gear
rotate([180,0,0]) herringbone_gear( teeth=SmallGear_N_Teeth, circles=0, shaft=M8_rod_diam);
}
//M8 hobbed bolt head fit washer
/*difference() {
translate( [0, 0, 5] ) cylinder( r=8, h=3, $fn=60 );
translate( [0, 0, 5-0.01] ) cylinder( r=M8_nut_diameter/2, h=7, $fn=6 );
}*/
/*rotate([180,0,0]) difference() {
translate( [0, 0, 5] ) cylinder( r=13, h=3, $fn=60 );
translate( [0, 0, 5+0.4] ) cylinder( r=M8_nut_diameter/2, h=7, $fn=6 );
}*/
}
translate( [0, 0, (nut_separation/2)] ) cylinder( r=M8_nut_diameter/2, h=7, $fn=6 );
translate( [0, 0, (nut_separation/2)] ) cylinder( r=M8_nut_diameter/2, h=7, $fn=6 );
}
}
if(with_extra_parts)
cyclone_rod_z_gear_extras(exploded_distance = (exploded ?8:0));
module cyclone_rod_z_gear_extras(exploded_distance=false) {
echo("Non-Plastic Parts, 2, Nut M8 for rod_gear");
translate([0,0,0.8*8+nut_separation/2+exploded_distance]) rotate([180,0,0]) color(Steel) flat_nut(8);
translate([0,0,-0.8*8-10/2-exploded_distance]) rotate([0,0,0]) color(Steel) flat_nut(8);
}
}
cyclone_rod_z_gear();
cyclone_rod_gear();

File diff suppressed because it is too large Load Diff

View File

@ -178,15 +178,15 @@ module stepperMotor(screwHeight=10, renderPart=false, echoPart=false) {
module motorGear(r=30,renderPart=false, echoPart=false) {
module motorGear(r=30,h=10,renderPart=false, echoPart=false) {
renderStandardPart(renderPart)
color("lightgreen") cylinder(r=r,h=10)
color("lightgreen") cylinder(r=r,h=h)
if(echoPart) echo(str("BOM: Gear. Motor."));
}
module rodGear(r=30,renderPart=false, echoPart=false) {
module rodGear(r=30,h=10,renderPart=false, echoPart=false) {
renderStandardPart(renderPart)
color("lightgreen") cylinder(r=r,h=10)
color("lightgreen") cylinder(r=r,h=h)
if(echoPart) echo(str("BOM: Gear. Rod."));
}

File diff suppressed because it is too large Load Diff