// Tooth // 4__5<-------- OuterDiameter // / \ // 3/ \6<------ Pitch Diameter // ->|------|<------- Tooth Thickness (at Pitch Diameter) // ->|------|<------- Working Depth // 1__2 7__8 <--- Whole Depth; Root Radius private void DrawGearFace(float centerX, float centerY) { var outsideRadius = SpurGear.OutsideDiameter / 2 + centerX; var rootRadius = outsideRadius - SpurGear.WholeDepth; var pitchRadius = SpurGear.PitchDiameter / 2; var circularPitchAngle = (float)(RadInCyrcle / SpurGear.NumberOfTeeth); var toothThicknessAngle = ((float)(RadInCyrcle * SpurGear.ToothThickness) / (Math.PI * SpurGear.PitchDiameter)); var halfBottomLandPitch = ((circularPitchAngle - toothThicknessAngle) / 2f); var initVerticesCount = SpurGear.Vertices.Count; /*1*/ float startAngle = 0; var pos = new Pos2D(centerX, rootRadius + centerY); AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount); for (var i = 0; i < SpurGear.NumberOfTeeth; i++) { var pitchFacePos2D = new PitchFacePos2D(i); _pitchFacePos2Ds.Add(pitchFacePos2D); /*1-2 draw first half base*/ for (var angle = _segmentAngleInRad; angle < halfBottomLandPitch; angle += _segmentAngleInRad) { var pos2D = Pos(rootRadius, startAngle + angle, centerX, centerY); AddFace(pos2D.X, pos2D.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount); } /*2*/ pos = Pos(rootRadius, startAngle + halfBottomLandPitch, centerX, centerY); AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*3 - draw tooth*/ pos = Pos(pitchRadius, startAngle + halfBottomLandPitch, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*4*/ var q = toothThicknessAngle / 4; pos = Pos(outsideRadius, startAngle + halfBottomLandPitch + q, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*5*/ pos = Pos(outsideRadius, startAngle + halfBottomLandPitch + toothThicknessAngle - q, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*6*/ pos = Pos(pitchRadius, startAngle + halfBottomLandPitch + toothThicknessAngle, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*7*/ pos = Pos(rootRadius, startAngle + halfBottomLandPitch + toothThicknessAngle, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*8* draw second half base*/ for (var angle = startAngle + halfBottomLandPitch + toothThicknessAngle; angle < circularPitchAngle; angle += _segmentAngleInRad) { pos = Pos(rootRadius, angle, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); } startAngle += circularPitchAngle; } /*1 draw last half base*/ for (var angle = _segmentAngleInRad; angle < halfBottomLandPitch; angle += _segmentAngleInRad) { pos = Pos(rootRadius, startAngle + angle, centerX, centerY); AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount); } foreach (var pitchFacePos2D in _pitchFacePos2Ds) { for (int i = 2; i < pitchFacePos2D.Vertices.Count; i++) { AddTriangleFace(SpurGear, null, SpurGear.Vertices.IndexOf(pitchFacePos2D.Vertices[i].Top) + 1, 3,2,1); AddTriangleFace(SpurGear, null, SpurGear.Vertices.IndexOf(pitchFacePos2D.Vertices[i - 1].Top) + 1, 3, 2, 1); AddTriangleFace(SpurGear, null, SpurGear.Vertices.IndexOf(pitchFacePos2D.Vertices[i - 2].Top) + 1, 3, 2, 1); } } }
// Tooth // 4__5<-------- OuterDiameter // / \ // 3/ \6<------ Pitch Diameter // ->|------|<------- Tooth Thickness (at Pitch Diameter) // ->|------|<------- Working Depth // 1__2 7__8 <--- Whole Depth; Root Radius private void DrawGearFace(float centerX, float centerY) { var outsideRadius = SpurGear.OutsideDiameter / 2 + centerX; var rootRadius = outsideRadius - SpurGear.WholeDepth; var pitchRadius = SpurGear.PitchDiameter / 2; var circularPitchAngle = (float)(RadInCyrcle / SpurGear.NumberOfTeeth); var toothThicknessAngle = ((float)(RadInCyrcle * SpurGear.ToothThickness) / (Math.PI * SpurGear.PitchDiameter)); var halfBottomLandPitch = ((circularPitchAngle - toothThicknessAngle) / 2f); var initVerticesCount = SpurGear.Vertices.Count; /*1*/ float startAngle = 0; var pos = new Pos2D(centerX, rootRadius + centerY); AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount); for (var i = 0; i < SpurGear.NumberOfTeeth; i++) { var pitchFacePos2D = new PitchFacePos2D(i); _pitchFacePos2Ds.Add(pitchFacePos2D); /*1-2 draw first half base*/ for (var angle = _segmentAngleInRad; angle < halfBottomLandPitch; angle += _segmentAngleInRad) { var pos2D = Pos(rootRadius, startAngle + angle, centerX, centerY); AddFace(pos2D.X, pos2D.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount); } /*2*/ pos = Pos(rootRadius, startAngle + halfBottomLandPitch, centerX, centerY); AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*3 - draw tooth*/ pos = Pos(pitchRadius, startAngle + halfBottomLandPitch, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*4*/ var q = toothThicknessAngle / 4; pos = Pos(outsideRadius, startAngle + halfBottomLandPitch + q, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*5*/ pos = Pos(outsideRadius, startAngle + halfBottomLandPitch + toothThicknessAngle - q, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*6*/ pos = Pos(pitchRadius, startAngle + halfBottomLandPitch + toothThicknessAngle, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*7*/ pos = Pos(rootRadius, startAngle + halfBottomLandPitch + toothThicknessAngle, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); /*8* draw second half base*/ for (var angle = startAngle + halfBottomLandPitch + toothThicknessAngle; angle < circularPitchAngle; angle += _segmentAngleInRad) { pos = Pos(rootRadius, angle, centerX, centerY); pitchFacePos2D.Add(AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount)); } startAngle += circularPitchAngle; } /*1 draw last half base*/ for (var angle = _segmentAngleInRad; angle < halfBottomLandPitch; angle += _segmentAngleInRad) { pos = Pos(rootRadius, startAngle + angle, centerX, centerY); AddFace(pos.X, pos.Y, SpurGear.FaceWidth, SpurGear, 0, initVerticesCount); } foreach (var pitchFacePos2D in _pitchFacePos2Ds) { for (int i = 2; i < pitchFacePos2D.Vertices.Count; i++) { AddTriangleFace(SpurGear, null, SpurGear.Vertices.IndexOf(pitchFacePos2D.Vertices[i].Top) + 1, 3, 2, 1); AddTriangleFace(SpurGear, null, SpurGear.Vertices.IndexOf(pitchFacePos2D.Vertices[i - 1].Top) + 1, 3, 2, 1); AddTriangleFace(SpurGear, null, SpurGear.Vertices.IndexOf(pitchFacePos2D.Vertices[i - 2].Top) + 1, 3, 2, 1); } } }