Resumé
// faire enhttps://openjscad.org/
fonction main(paramètres)
{
// Point d'entrée principal ; ici, nous construisons notre solide :
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));
retourner l'engrenage ;
}
fonction Gear(params)
{
// Point d'entrée principal ; ici, nous construisons notre solide :
var gear = involuteGear(
params.numTeeth,
params.circularPitch,
params.pressureAngle,
params.clearance,
params.épaisseur
);
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.soustraire(centerhole);
}
Retournez l'engrenage ;
}
// Ici, nous définissons les paramètres modifiables par l'utilisateur :
La fonction getParameterDefinitions() :
retourne [
{ name: 'numTeeth', caption: 'Nombre de dents :', type: 'int', default: 15 },
{ name: 'circularPitch', caption: 'Pitch circulaire :', type: 'float', default: 10 },
{ name: 'pressureAngle', caption: 'Anglet de pression :', type: 'float', default: 20 },
{ name: 'clearance', caption: 'Clearance :', type: 'float', default: 0 },
{ nom : 'épaisseur', légende : 'Épaisseur :', type : 'flottant', valeur par défaut : 5 },
{ name: 'centerholeradius', caption: 'Rayon du trou central (0 pour pas de trou) :', type: 'float', default: 2 },
];
}
/*
Pour la terminologie des engrenages, voir :
http://www.astronomiainumbria.org/advanced_internet_files/meccanica/easyweb.easynet.co.uk/_chrish/geardata.htm
Algorithme basé sur :
http://www.cartertools.com/involute.html
Pitch circulaire : La distance entre les dents adjacentes mesurée au niveau du cercle de pitch.
*/
fonction involuteGear(nombre de dents, pas de vis, angle de pression, jeu, épaisseur)
{
// valeurs par défaut :
si(la longueur des arguments < 3) , l'angle de pression est égal à 20 ;
si(la longueur des arguments est inférieure à 4), l'autorisation est égale à 0 ;
si(la longueur des arguments < 4) l'épaisseur = 1 ;
var addendum = circularPitch / Math.PI ;
var dedendum = addendum + clearance ;
// les rayons des 4 cercles :
var pitchRadius = numTeethcircularPitch / (2Math.PI);
var baseRadius = pitchRadiusMath.cos(Math.PI)pressureAngle / 180);
var outerRadius = pitchRadius + addendum ;
var rootRadius = pitchRadius - dedendum ;
var maxtanlength = Math.sqrt(rayon extérieur) ;rayon extérieur - rayon de baserayonDeBase);
var maxangle = maxtanlength / baseRadius ;
var tl_at_pitchcircle = Math.sqrt(pitchRadius) ;pitchRadius - baseRadiusrayonDeBase);
var angle_au_cercle_de_pitch = tl_au_cercle_de_pitch / rayon_de_base ;
var diffangle = angle_au_cercle_de_pitch - Math.atan(angle_au_cercle_de_pitch);
var largeur de la dent angulaire à la base = Math.PI / nombre de dents + 2*angle de différence ;
// construire une seule dent 2D dans le tableau 'points' :
var résolution = 5 ;
var points = [new CSG.Vector2D(0,0)];
pour(var i = 0 ; i <= résolution ; i++)
{
// Le premier côté de la dent :
var angle = maxanglei / résolution ;
var tanlength = anglerayon de base ;
var radvector = CSG.Vector2D.fromAngle(angle);
var tanvector = radvector.normal();
var p = radvector.times(baseRadius).plus(tanvector.times(tanlength));
points[i+1] = p ;
)
// créer le polygone et l'extruder en 3D :
var tooth3d = new CSG.Polygon2D(points).extrude({offset: [0, 0, thickness]});
var allteeth = new CSG();
pour(var i = 0 ; i < numTeeth ; i++)
{
var angle = i*360/numTeeth ;
var rotatedtooth = tooth3d.rotateZ(angle);
allteeth = allteeth.unionForNonIntersecting(rotatedtooth);
}
// construire le cercle racine :
points = [];
var toothAngle = 2Math.PI / numTeeth ;
var toothCenterAngle = 0,5largeur de la dent angulaire à la base ;
pour(var i = 0 ; i < numTeeth ; i++)
{
var angle = angle du centre de la dent + i * angle de la dent ;
var p = CSG.Vector2D.fromAngle(angle).times(rootRadius);
points.push(p);
}
// créer le polygone et l'extruder en 3D :
var rootcircle = new CSG.Polygon2D(points).extrude({offset: [0, 0, thickness]});
var result = rootcircle.union(allteeth);
// centré à l'origine :
//result = result.translate([0, 0, -épaisseur/2]);
retourner le résultat ;
}
태그
모델 소스
