Zusammenfassung
//Machen Sie es inhttps://openjscad.org/
Funktion main(Params)
{
// Haupt-Einstiegspunkt; hier konstruieren wir unseren Solid:
var gear = Gear(params).translate([dist,dist,0]);
params.numTeeth = params.numTeeth2;
params.circularPitch = params.circularPitch2;
params.pressureAngle = params.pressureAngle2;
params.clearance = params.clearance2;
params.thickness = params.thickness2;
Gear = Union(gear, Gear(params));
Rückgabe des Getriebes;
}
Funktion Gear(params)
{
// Haupt-Einstiegspunkt; hier konstruieren wir unser Solid:
var gear = involuteGear(
params.numTeeth,
params.circularPitch,
params.pressureAngle,
params.clearance,
params.dicke
);
wenn (params.centerholeradius > 0)
{
var centerhole = CSG.cylinder({start: [0,0,-params.thickness], end: [0,0,params.thickness], radius: params.centerholeradius, resolution: 16});
Gear = Gear.subtract(Centerhole);
}
Gear zurückgeben;
}
// Hier definieren wir die vom Benutzer editierbaren Parameter:
Funktion getParameterDefinitions() {
return [
{ name: 'numTeeth', caption: 'Anzahl der Zähne:', type: 'int', default: 15 },
{ name: 'circularPitch', caption: 'Kreisförmige Tonhöhe:', type: 'float', default: 10 },
{ name: 'pressureAngle', caption: 'Druckwinkel:', type: 'float', default: 20 },
{ name: 'clearance', caption: 'Clearance:', type: 'float', default: 0 },
{ name: 'Dicke', caption: 'Dicke:', type: 'float', default: 5 },
{ name: 'centerholeradius', caption: 'Radius des Zentrallochs (0 für kein Loch):', type: 'float', default: 2 },
];
}
/*
Für Gear-Terminologie siehe:
http://www.astronomiainumbria.org/advanced_internet_files/meccanica/easyweb.easynet.co.uk/_chrish/geardata.htm
Algorithmus basierend auf:
http://www.cartertools.com/involute.html
CircularPitch: Der Abstand zwischen benachbarten Zähnen, gemessen am Pitchkreis.
*/
Funktion involuteGear(Anzahl der Zähne, Zirkularteilung, Druckwinkel, Spielraum, Dicke)
{
// Standardwerte:
wenn (Anzahl der Argumente < 3) ist der Druckwinkel 20;
wenn (Anzahl der Argumente < 4) ist Clearance = 0;
wenn (Anzahl der Argumente < 4) ist die Dicke = 1;
var Addendum = kreisförmiger Pitch / Math.PI;
var dedendum = addendum + clearance;
// Radien der 4 Kreise:
var pitchRadius = Anzahl der ZähnecircularPitch / (2Math.PI);
var baseRadius = pitchRadiusMath.cos(Math.PI)Druckwinkel / 180);
var outerRadius = pitchRadius + addendum;
var rootRadius = pitchRadius - dedendum;
var maxtanlength = Math.sqrt(äußerer Radius)Äußerer Radius - BasisradiusBasisradius);
var maxangle = maxtanlength / baseRadius;
var tl_at_pitchcircle = Math.sqrt(pitchRadius)PitchRadius - BasisRadiusBasisradius);
var angle_at_pitchcircle = tl_at_pitchcircle / baseRadius;
var diffangle = Winkel_am_Höhenkreis - Math.atan(Winkel_am_Höhenkreis);
var angularToothWidthAtBase = Math.PI / numTeeth + 2*diffangle;
// Erstelle einen einzelnen 2D-Zahn im 'points'-Array:
var resolution = 5;
var points = [new CSG.Vector2D(0,0)];
für(var i = 0; i <= Auflösung; i++)
{
// erste Seite des Zahns:
var angle = maxangleI / Auflösung;
var tanlength = WinkelBasisradius;
var radvector = CSG.Vector2D.fromAngle(angle);
var tanvector = radvector.normal();
var p = radvector.times(baseRadius).plus(tanvector.times(tanlength));
points[i+1] = p;
)
// Erstelle das Polygon und extrudiere es in 3D:
var tooth3d = new CSG.Polygon2D(points).extrude({offset: [0, 0, thickness]});
var allteeth = new CSG();
für (var i = 0; i < numTeeth; i++)
{
var angle = i*360/numTeeth;
var rotatedtooth = tooth3d.rotateZ(angle);
allteeth = allteeth.unionForNonIntersecting(rotatedtooth);
}
// Baue den Wurzelkreis:
Punkte = [];
var toothAngle = 2Math.PI / numTeeth;
var toothCenterAngle = 0,5angularToothWidthAtBase;
für (var i = 0; i < numTeeth; i++)
{
var angle = toothCenterAngle + i * toothAngle;
var p = CSG.Vector2D.fromAngle(angle).times(rootRadius);
points.push(p);
}
// Erstelle das Polygon und extrudiere es in 3D:
var rootcircle = new CSG.Polygon2D(points).extrude({offset: [0, 0, thickness]});
var result = rootcircle.union(allteeth);
// Zentrieren am Ursprung:
//result = result.translate([0, 0, -thickness/2]);
Rückgabe des Ergebnisses;
}
タグ
モデルソース
