Esempio n. 1
0
        /////////////////////////////////////////////////////////////
        // Use: Modelizes a Standard ThreadFeature.
        //
        /////////////////////////////////////////////////////////////
        public static bool ModelizeThreadStandard(PartDocument doc,
                                                  PartFeature feature,
                                                  PlanarSketch templateSketch,
                                                  ThreadInfo threadInfo,
                                                  Face threadedFace,
                                                  double extraPitch)
        {
            Transaction Tx =
                _Application.TransactionManager.StartTransaction(
                    doc as _Document,
                    "Modelizing Thread " + feature.Name);

            try
            {
                double pitch =
                    ThreadWorker.GetThreadPitch(threadInfo);

                Vector threadDirection =
                    threadInfo.ThreadDirection;

                bool isInteriorFace =
                    Toolkit.IsInteriorFace(threadedFace);

                Point basePoint =
                    threadInfo.ThreadBasePoints[1] as Point;

                if (isInteriorFace)
                {
                    Vector normal =
                        Toolkit.GetOrthoVector(
                            threadDirection.AsUnitVector()).AsVector();

                    normal.ScaleBy(
                        ThreadWorker.GetThreadMajorRadiusStandard(
                            threadedFace));

                    basePoint.TranslateBy(normal);
                }

                PlanarSketch newSketch = Toolkit.InsertSketch(doc,
                                                              templateSketch,
                                                              threadDirection.AsUnitVector(),
                                                              Toolkit.GetOrthoVector(
                                                                  threadDirection.AsUnitVector()),
                                                              basePoint);

                Point coilBase =
                    threadInfo.ThreadBasePoints[1] as Point;

                bool rightHanded = threadInfo.RightHanded;

                double taper = 0;

                if (!ThreadWorker.InitializeForCoilStandard(doc,
                                                            threadInfo,
                                                            threadedFace,
                                                            newSketch.Name,
                                                            isInteriorFace, pitch))
                {
                    Tx.Abort();
                    return(false);
                }

                Profile profile =
                    newSketch.Profiles.AddForSolid(true, null, null);

                if (!ThreadWorker.CreateCoilFeature(doc,
                                                    profile,
                                                    threadDirection,
                                                    coilBase,
                                                    rightHanded,
                                                    taper,
                                                    pitch,
                                                    extraPitch))
                {
                    Tx.Abort();
                    return(false);
                }

                newSketch.Shared = false;

                feature.Suppressed = true;

                Tx.End();

                return(true);
            }
            catch
            {
                Tx.Abort();
                return(false);
            }
        }
Esempio n. 2
0
        /////////////////////////////////////////////////////////////
        // Use: Initializes parameters to create new solid bodies
        //      affected by the future CoilFeature for Tapered
        //      Thread.
        /////////////////////////////////////////////////////////////
        private static bool InitializeForCoilTapered(
            PartDocument doc,
            ThreadInfo threadInfo,
            Face threadedFace,
            string sketchName,
            bool isInteriorFace, double pitchValue)
        {
            Parameter pitch =
                Toolkit.FindAndUpdateParameter(doc,
                                               "Pitch",
                                               sketchName);

            if (pitch == null)
            {
                return(false);
            }

            Parameter offset =
                Toolkit.FindAndUpdateParameter(doc,
                                               "ThreadOffset",
                                               sketchName);

            if (offset == null)
            {
                return(false);
            }

            Parameter major =
                Toolkit.FindAndUpdateParameter(doc,
                                               "MajorRadius",
                                               sketchName);

            if (major == null)
            {
                return(false);
            }

            Parameter minor =
                Toolkit.FindAndUpdateParameter(doc,
                                               "MinorRadius",
                                               sketchName);

            if (minor == null)
            {
                return(false);
            }

            pitch.Value = pitchValue;

            offset.Value = 0;

            double majorRad = 0;

            major.Value = (isInteriorFace ? 0 : majorRad);

            doc.Update();

            double minorRad =
                (isInteriorFace ?
                 majorRad + Math.Abs((double)minor.Value) :
                 Math.Abs((double)minor.Value));

            bool ret = ThreadWorker.CreateCoilBodyTapered(doc,
                                                          threadInfo,
                                                          threadedFace,
                                                          Math.Abs(majorRad - minorRad),
                                                          isInteriorFace);

            return(ret);
        }
Esempio n. 3
0
        /////////////////////////////////////////////////////////////
        // Use: Creates new solid bodies affected by the future
        //      CoilFeature for Tapered Thread.
        /////////////////////////////////////////////////////////////
        private static bool CreateCoilBodyTapered(PartDocument doc,
                                                  ThreadInfo threadInfo,
                                                  Face threadedFace,
                                                  double depth,
                                                  bool isInteriorFace)
        {
            try
            {
                PartComponentDefinition compDef =
                    doc.ComponentDefinition;

                Vector direction = threadInfo.ThreadDirection;

                Point basePoint =
                    threadInfo.ThreadBasePoints[1] as Point;

                Point endPoint = _Tg.CreatePoint(
                    basePoint.X + direction.X,
                    basePoint.Y + direction.Y,
                    basePoint.Z + direction.Z);

                UnitVector yAxis = direction.AsUnitVector();

                UnitVector xAxis = Toolkit.GetOrthoVector(yAxis);

                WorkPoint wpt = compDef.WorkPoints.AddFixed(basePoint,
                                                            _ConstructionWorkFeature);

                WorkPlane wpl = compDef.WorkPlanes.AddFixed(basePoint,
                                                            xAxis, yAxis, _ConstructionWorkFeature);

                WorkAxis xWa = compDef.WorkAxes.AddFixed(basePoint,
                                                         xAxis, _ConstructionWorkFeature);

                WorkAxis yWa = compDef.WorkAxes.AddFixed(basePoint,
                                                         yAxis, _ConstructionWorkFeature);

                PlanarSketch sketch =
                    compDef.Sketches.AddWithOrientation(wpl,
                                                        xWa, true, true, wpt, false);

                Cone cone = threadedFace.Geometry as Cone;

                double revDepth =
                    depth / Math.Cos(cone.HalfAngle) *
                    (isInteriorFace ? -1.0 : 1.0);

                Line l1 = Toolkit.GetFaceSideDirection(threadedFace, xAxis);

                Line l2 = _Tg.CreateLine(basePoint, xAxis.AsVector());

                Line l3 = _Tg.CreateLine(endPoint, xAxis.AsVector());

                Point p1 = l1.IntersectWithCurve(l2, 0.0001)[1] as Point;
                Point p2 = l1.IntersectWithCurve(l3, 0.0001)[1] as Point;

                Point p3 = _Tg.CreatePoint(
                    p2.X - xAxis.X * revDepth,
                    p2.Y - xAxis.Y * revDepth,
                    p2.Z - xAxis.Z * revDepth);

                Point p4 = _Tg.CreatePoint(
                    p1.X - xAxis.X * revDepth,
                    p1.Y - xAxis.Y * revDepth,
                    p1.Z - xAxis.Z * revDepth);

                SketchPoint skp1 = sketch.SketchPoints.Add(
                    sketch.ModelToSketchSpace(p1), false);

                SketchPoint skp2 = sketch.SketchPoints.Add(
                    sketch.ModelToSketchSpace(p2), false);

                SketchPoint skp3 = sketch.SketchPoints.Add(
                    sketch.ModelToSketchSpace(p3), false);

                SketchPoint skp4 = sketch.SketchPoints.Add(
                    sketch.ModelToSketchSpace(p4), false);

                sketch.SketchLines.AddByTwoPoints(skp1, skp2);
                sketch.SketchLines.AddByTwoPoints(skp2, skp3);
                sketch.SketchLines.AddByTwoPoints(skp3, skp4);
                sketch.SketchLines.AddByTwoPoints(skp4, skp1);

                Profile profile = sketch.Profiles.AddForSolid(true,
                                                              null, null);

                RevolveFeature rev1 =
                    compDef.Features.RevolveFeatures.AddFull(
                        profile,
                        yWa,
                        PartFeatureOperationEnum.kCutOperation);

                sketch = compDef.Sketches.AddWithOrientation(wpl,
                                                             xWa, true, true, wpt, false);

                skp1 = sketch.SketchPoints.Add(
                    sketch.ModelToSketchSpace(p1), false);

                skp2 = sketch.SketchPoints.Add(
                    sketch.ModelToSketchSpace(p2), false);

                skp3 = sketch.SketchPoints.Add(
                    sketch.ModelToSketchSpace(p3), false);

                skp4 = sketch.SketchPoints.Add(
                    sketch.ModelToSketchSpace(p4), false);

                sketch.SketchLines.AddByTwoPoints(skp1, skp2);
                sketch.SketchLines.AddByTwoPoints(skp2, skp3);
                sketch.SketchLines.AddByTwoPoints(skp3, skp4);
                sketch.SketchLines.AddByTwoPoints(skp4, skp1);

                profile = sketch.Profiles.AddForSolid(true, null, null);

                RevolveFeature rev2 =
                    compDef.Features.RevolveFeatures.AddFull(
                        profile,
                        yWa,
                        PartFeatureOperationEnum.kNewBodyOperation);

                return(true);
            }
            catch
            {
                return(false);
            }
        }
Esempio n. 4
0
        /////////////////////////////////////////////////////////////
        // Use: Modelizes a Tapered ThreadFeature.
        //
        /////////////////////////////////////////////////////////////
        public static bool ModelizeThreadTapered(PartDocument doc,
                                                 PartFeature feature,
                                                 PlanarSketch templateSketch,
                                                 ThreadInfo threadInfo,
                                                 Face threadedFace,
                                                 double extraPitch)
        {
            Transaction Tx =
                _Application.TransactionManager.StartGlobalTransaction(
                    doc as _Document,
                    "Modelizing Thread ");

            try
            {
                double pitch =
                    ThreadWorker.GetThreadPitch(threadInfo);

                Vector threadDirection =
                    threadInfo.ThreadDirection;

                Point coilBase =
                    threadInfo.ThreadBasePoints[1] as Point;

                bool isInteriorFace =
                    Toolkit.IsInteriorFace(threadedFace);

                Line sideDir =
                    ThreadWorker.GetThreadSideDirection(
                        threadInfo,
                        threadedFace);

                Vector sketchYAxis =
                    sideDir.RootPoint.VectorTo(coilBase);

                sketchYAxis.ScaleBy((isInteriorFace ? -1.0 : 1.0));

                PlanarSketch newSketch = Toolkit.InsertSketch(doc,
                                                              templateSketch,
                                                              sideDir.Direction,
                                                              sketchYAxis.AsUnitVector(),
                                                              sideDir.RootPoint);

                bool rightHanded = threadInfo.RightHanded;

                bool IsExpanding = ThreadWorker.IsExpanding(
                    threadInfo,
                    threadedFace);

                double taper =
                    Math.Abs(threadDirection.AngleTo(
                                 sideDir.Direction.AsVector()))
                    * (IsExpanding ? 1.0 : -1.0);

                if (!ThreadWorker.InitializeForCoilTapered(doc,
                                                           threadInfo,
                                                           threadedFace,
                                                           newSketch.Name,
                                                           isInteriorFace, pitch))
                {
                    Tx.Abort();
                    return(false);
                }

                Profile profile =
                    newSketch.Profiles.AddForSolid(true,
                                                   null,
                                                   null);

                if (!ThreadWorker.CreateCoilFeature(doc,
                                                    profile,
                                                    threadDirection,
                                                    coilBase,
                                                    rightHanded,
                                                    taper,
                                                    pitch,
                                                    extraPitch))
                {
                    Tx.Abort();
                    return(false);
                }

                newSketch.Shared = false;

                feature.Suppressed = true;

                Tx.End();

                return(true);
            }
            catch
            {
                try
                {
                    Tx.Abort();
                    return(false);
                }
                catch
                {
                    return(false);
                }
            }
        }