Exemple #1
0
        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));
        }
Exemple #2
0
        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;
            }
        }