private Cone GetConeAtParameter(double t) { Point point = Point.Create(GetHyperbolicRadius(t), 0, t); double slope = A * t / B / B / Math.Sqrt(1 + Math.Pow(t / B, 2)); double angle; if (Accuracy.LengthIsZero(slope)) { angle = Math.PI / 2; } else { angle = Math.Atan(-1 / slope); } if (Accuracy.AngleIsNegative(angle)) { angle += Math.PI; } Debug.Assert(angle < Math.PI && angle > 0, "Cone angle improper."); Frame frame = Frame.Create(Point.Create(0, 0, t), Direction.DirX, Direction.DirY); return(Cone.Create(frame, GetHyperbolicRadius(t), angle)); }
protected void CreateDesignBodies(Body gearBody, Body pitchCircleBody, Body addendumBody, Body dedendumBody) { Debug.Assert(gearBody != null); Debug.Assert(pitchCircleBody != null); Debug.Assert(addendumBody != null); Debug.Assert(dedendumBody != null); // Fillets var roundEdges = new List <KeyValuePair <Edge, EdgeRound> >(); FixedRadiusRound round = new FixedRadiusRound(GearData.Module * GearData.DedendumClearance); foreach (Edge edge in gearBody.Edges) { if (edge.Faces.Count == 2 && Accuracy.AngleIsNegative(edge.GetAngle())) { roundEdges.Add(new KeyValuePair <Edge, EdgeRound>(edge, round)); } } // if (!GearData.IsSmallDedendum)////////tdb gearBody.RoundEdges(roundEdges); GearDesBody = DesignBody.Create(Part, Resources.GearNameSimple, gearBody); GearDesBody.Layer = GearLayer; PitchCircleDesBody = DesignBody.Create(Part, Resources.PitchCircleSurfaceName, pitchCircleBody); PitchCircleDesBody.Layer = PitchCircleLayer; var alignmentPlanes = new List <Body>(); Matrix trans; for (int i = 0; i < GearData.NumberOfTeeth; i++) { trans = Matrix.CreateRotation(Line.Create(Point.Origin, Direction.DirZ), GearData.PitchAngle * 2 * i); alignmentPlanes.Add(addendumBody.CreateTransformedCopy(trans)); alignmentPlanes.Add(dedendumBody.CreateTransformedCopy(trans)); } // Alignment planes foreach (Body alignmentBody in alignmentPlanes) { DesignBody desBody = DesignBody.Create(AlignmentPart, Resources.AlignmentPlaneBodyName, alignmentBody); desBody.Layer = AlignmentLayer; AlignmentDesBodies.Add(desBody); } foreach (Body visualizationBody in CreateVisualizationBodies()) { DesignBody desBody = DesignBody.Create(Part, Resources.VisualizationBodyName, visualizationBody); desBody.Layer = VisualizationLayer; } }