Resumen
// hacer enhttps://openjscad.org/
funcionamiento principal (main)
{
// Punto de entrada principal; aquí construimos nuestro sólido:
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 = unión (gear, Gear(params));
Devolver el equipo;
}
funcion Gear(params)
{
// Punto de entrada principal; aquí construimos nuestro sólido:
var gear = involuteGear(
params.numTeeth,
params.circularPitch,
params.pressureAngle,
params.clearance,
params.thickness
);
si(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);
}
Devuelve el equipo;
}
// Aquí definimos los parámetros editables por el usuario:
función getParameterDefinitions() {
devolver [
{ nombre: 'numTeeth', subtítulo: 'Número de dientes:', tipo: 'int', valor por defecto: 15 },
{ nombre: 'circularPitch', subtítulo: 'Tono circular:', tipo: 'flotante', valor por defecto: 10 },
{ nombre: 'ángulo de presión', subtítulo: 'Ángulo de presión:', tipo: 'flotante', valor por defecto: 20 },
{ nombre: 'clearance', subtítulo: 'Clearance:', tipo: 'float', valor por defecto: 0 },
{ nombre: 'espesor', subtítulo: 'Espesor:', tipo: 'flotante', valor por defecto: 5 },
{ nombre: 'centrohoyoradio', subtítulo: 'Radio del orificio central (0 para sin orificio):', tipo: 'flotante', valor por defecto: 2 },
];
}
/*
Para la terminología de equipamiento, vea:
http://www.astronomiainumbria.org/advanced_internet_files/meccanica/easyweb.easynet.co.uk/_chrish/geardata.htm
Algoritmo basado en:
http://www.cartertools.com/involute.html
Pitch circular: La distancia entre dientes adyacentes medida en el círculo de pitch.
*/
función de engranaje involuto (numTeeth, paso circular, ángulo de presión, holgura, espesor)
{
// valores por defecto:
si(la longitud de los argumentos < 3) ángulo de presión = 20;
Si (la longitud de los argumentos es inferior a 4), la autorización es 0;
si(la longitud de los argumentos < 4) grosor = 1;
var addendum = circularPitch / Math.PI;
var dedendum = addendum + clearance;
// radios de los 4 círculos:
var pitchRadius = numTeethcircularPitch / (2Math.PI);
var baseRadius = pitchRadiusMath.cos(Math.PI)ángulo de presión / 180);
var outerRadius = pitchRadius + addendum;
var rootRadius = pitchRadius - dedendum;
var maxtanlength = Math.sqrt(radio exterior)radioBase);
var maxangle = maxtanlength / baseRadius;
var tl_at_pitchcircle = Math.sqrt(pitchRadius)radioBase);
var angle_at_pitchcircle = tl_at_pitchcircle / baseRadius;
var diffangle = ángulo_en_círculo_de_pitch - Math.atan(ángulo_en_círculo_de_pitch);
var angularToothWidthAtBase = Math.PI / numTeeth + 2*diffangle;
// Construye un solo diente 2D en la matriz de 'puntos':
var resolución = 5;
var puntos = [nuevo CSG.Vector2D(0,0)];
para (var i = 0; i <= resolución; i++)
{
// primer lado del diente:
var angle = maxanglei / resolución;
var tanlength = ánguloradioBase;
var radvector = CSG.Vector2D.fromAngle(ángulo);
var tanvector = radvector.normal();
var p = radvector.veces(baseRadius).más(tanvector.veces(tanlength));
puntos[i+1] = p;
}
// crea el polígono y extrúelo en 3D:
var tooth3d = new CSG.Polygon2D(points).extrude({offset: [0, 0, thickness]});
var allteeth = nuevo CSG();
para(var i = 0; i < numTeeth; i++)
{
var angle = i*360/numTeeth;
var rotatedtooth = tooth3d.rotateZ(ángulo);
allteeth = allteeth.unionForNonIntersecting(rotatedtooth);
}
// Construye el círculo raíz:
puntos = [];
var toothAngle = 2Math.PI / numTeeth;
var toothCenterAngle = 0.5Ancho del diente angular en la base;
para(var i = 0; i < numTeeth; i++)
{
var angle = toothCenterAngle + i * toothAngle;
var p = CSG.Vector2D.fromAngle(ángulo).multiplicado por (raíz del radio);
puntos.push(p);
}
// crea el polígono y extrúelo en 3D:
var rootcircle = new CSG.Polygon2D(puntos).extrude({offset: [0, 0, espesor]});
var result = rootcircle.union(allteeth);
// Centrado en el origen:
//result = result.translate([0, 0, -thickness/2]);
Regresa el resultado;
}
Etiquetas
Fuente del modelo
