public string GetReportNameBySketchElementName(string tSketchName, string tSketchElementName)
        {
            string cReportName = null;

            IEnumerator tFeatureList = PartManager.tFeatures.GetEnumerator();

            while (tFeatureList.MoveNext())
            {
                TransCAD.IFeature tFeature = (TransCAD.IFeature)tFeatureList.Current;

                if (tFeature.Name == tSketchName)
                {
                    TransCAD.IStdSketchFeature tSketch = (TransCAD.IStdSketchFeature)tFeature;

                    IEnumerator tGeoms = tSketch.Geometries.GetEnumerator();
                    int         count  = 2; // localX, localY 포함

                    while (tGeoms.MoveNext())
                    {
                        TransCAD.IStdSketchGeometry tGeom = (TransCAD.IStdSketchGeometry)tGeoms.Current;
                        count++;

                        if (tGeom.Name == tSketchElementName)
                        {
                            cReportName = count.ToString();
                            break;
                        }
                    }

                    break;
                }
            }

            return(cReportName);
        }
        public TransCAD.IFeature GetFeatureFromReference(TransCAD.Reference reference)
        {
            // Reference 형식으로 저장 된 특징형상을 Feature 형식으로 리턴
            if (!isSubAssemblyPart)
            {
                IEnumerator tFeatureList = tFeatures.GetEnumerator();

                while (tFeatureList.MoveNext())
                {
                    TransCAD.IFeature tFeature = (TransCAD.IFeature)tFeatureList.Current;

                    if (tFeature.Name == reference.ReferenceeName)
                    {
                        return(tFeature);
                    }
                }
            }
            else
            {
                tFeatures = tAssemDoc.Assem.Component[0].Part[partNum + 1].Features;

                for (int i = 1; i < tFeatures.Count; i++)
                {
                    TransCAD.IFeature tFeature = (TransCAD.IFeature)tFeatures[i];

                    if (tFeature.Name == reference.ReferenceeName)
                    {
                        return(tFeature);
                    }
                }
            }

            return(null);
        }
        // Post
        public override void TranslateT2C(TransCAD.IFeature tFeature)
        {
            TransCAD.IStdSolidChamferFeature tChamfer = (TransCAD.IStdSolidChamferFeature)tFeature;

            double length = tChamfer.Length;

            TransCAD.ChamferType chamferType = tChamfer.ChamferType;

            PARTITF.Chamfer cChamfer = PartManager.cShapeFactory.AddNewChamfer(null, PARTITF.CatChamferPropagation.catMinimalChamfer, PARTITF.CatChamferMode.catTwoLengthChamfer, PARTITF.CatChamferOrientation.catNoReverseChamfer, length, length);

            IEnumerator edges = tChamfer.SelectedEdges.GetEnumerator();

            while (edges.MoveNext())
            {
                TransCAD.Reference edge = (TransCAD.Reference)edges.Current;

                string           cRefName = PartManager.ReferenceManager.GetCATIANameFromTransCADName(edge.ReferenceeName);
                INFITF.Reference cRef     = PartManager.cPart.CreateReferenceFromBRepName(cRefName, PartManager.GetRecentFeature());

                cChamfer.AddElementToChamfer(cRef);
            }

            PartManager.cPart.UpdateObject(cChamfer);
            PartManager.ReferenceManager.NameMap.Add(tChamfer.Name, cChamfer.get_Name());
        }
        // Post
        public override void TranslateT2C(TransCAD.IFeature tFeature)
        {
            TransCAD.IStdSolidFilletConstantFeature tFillet = (TransCAD.IStdSolidFilletConstantFeature)tFeature;

            double radius = tFillet.Radius;

            TransCAD.PropagationType propagation = tFillet.Propagation;

            PARTITF.ConstRadEdgeFillet cFillet = PartManager.cShapeFactory.AddNewEdgeFilletWithConstantRadius(null, PARTITF.CatFilletEdgePropagation.catMinimalFilletEdgePropagation, radius);

            IEnumerator edges = tFillet.FilletEdges.GetEnumerator();

            while (edges.MoveNext())
            {
                TransCAD.Reference edge = (TransCAD.Reference)edges.Current;

                string           cRefName = PartManager.ReferenceManager.GetCATIANameFromTransCADName(edge.ReferenceeName);
                INFITF.Reference cRef     = PartManager.cPart.CreateReferenceFromBRepName(cRefName, PartManager.GetRecentFeature());

                cFillet.AddObjectToFillet(cRef);
            }

            if (propagation == TransCAD.PropagationType.Tangency)
            {
                cFillet.EdgePropagation = PARTITF.CatFilletEdgePropagation.catTangencyFilletEdgePropagation;
            }

            PartManager.cPart.UpdateObject(cFillet);
            PartManager.ReferenceManager.NameMap.Add(tFillet.Name, cFillet.get_Name());
        }
        // Post
        public override void TranslateT2C(TransCAD.IFeature tFeature)
        {
            TransCAD.IStdSolidProtrusionExtrudeFeature proExtrude = (TransCAD.IStdSolidProtrusionExtrudeFeature)tFeature;

            // 스케치 변환
            FeatureSketch SketchManager = new FeatureSketch(PartManager);

            TransCAD.IFeature profilesketch = PartManager.GetFeatureFromReference(proExtrude.ProfileSketch);
            SketchManager.TranslateT2C(profilesketch);

            double sD = proExtrude.StartDepth;

            TransCAD.StdExtrudeEndType sC = proExtrude.StartCondition;
            double eD = proExtrude.EndDepth;

            TransCAD.StdExtrudeEndType eC = proExtrude.EndCondition;
            bool isFlip = proExtrude.IsFlip;

            PARTITF.Pad cPad = PartManager.cShapeFactory.AddNewPadFromRef(SketchManager.cReference, sD);
            cPad.FirstLimit.Dimension.Value  = sD;
            cPad.SecondLimit.Dimension.Value = eD;

            if (sC == TransCAD.StdExtrudeEndType.Blind)
            {
                cPad.FirstLimit.LimitMode = PARTITF.CatLimitMode.catOffsetLimit;
            }
            else if (sC == TransCAD.StdExtrudeEndType.ThroughAll)
            {
                cPad.FirstLimit.LimitMode = PARTITF.CatLimitMode.catUpToLastLimit;
            }

            if (eC == TransCAD.StdExtrudeEndType.Blind)
            {
                cPad.SecondLimit.LimitMode = PARTITF.CatLimitMode.catOffsetLimit;
            }
            else if (eC == TransCAD.StdExtrudeEndType.ThroughAll)
            {
                cPad.SecondLimit.LimitMode = PARTITF.CatLimitMode.catUpToLastLimit;
            }

            if (isFlip == false)
            {
                cPad.DirectionOrientation = PARTITF.CatPrismOrientation.catRegularOrientation;
            }
            else if (isFlip == true)
            {
                cPad.DirectionOrientation = PARTITF.CatPrismOrientation.catInverseOrientation;
            }

            PartManager.cPart.UpdateObject(cPad);
            PartManager.ReferenceManager.NameMap.Add(proExtrude.Name, cPad.get_Name());
        }
        // Post
        public override void TranslateT2C(TransCAD.IFeature tFeature)
        {
            TransCAD.IStdSolidCutRevolveFeature cutRevolve = (TransCAD.IStdSolidCutRevolveFeature)tFeature;

            FeatureSketch SketchManager = new FeatureSketch(PartManager);

            SketchManager.TranslateT2C(PartManager.GetFeatureFromReference(cutRevolve.ProfileSketch));

            double sA = cutRevolve.StartAngle;
            double eA = cutRevolve.EndAngle;

            PARTITF.Groove cGroove = PartManager.cShapeFactory.AddNewGrooveFromRef(SketchManager.cReference);

            cGroove.FirstAngle.Value  = sA;
            cGroove.SecondAngle.Value = eA;

            PartManager.cPart.UpdateObject(cGroove);
            PartManager.ReferenceManager.NameMap.Add(cutRevolve.Name, cGroove.get_Name());
        }
Beispiel #7
0
        // Post
        public override void TranslateT2C(TransCAD.IFeature tFeature)
        {
            TransCAD.IStdSolidProtrusionRevolveFeature proRevolve = (TransCAD.IStdSolidProtrusionRevolveFeature)tFeature;

            FeatureSketch SketchManager = new FeatureSketch(PartManager);

            SketchManager.TranslateT2C(PartManager.GetFeatureFromReference(proRevolve.ProfileSketch));

            double sA = proRevolve.StartAngle;
            double eA = proRevolve.EndAngle;

            PARTITF.Shaft cShaft = PartManager.cShapeFactory.AddNewShaftFromRef(SketchManager.cReference);

            cShaft.FirstAngle.Value  = sA;
            cShaft.SecondAngle.Value = eA;

            PartManager.cPart.UpdateObject(cShaft);
            PartManager.ReferenceManager.NameMap.Add(proRevolve.Name, cShaft.get_Name());
        }
Beispiel #8
0
        // Post
        public override void TranslateT2C(TransCAD.IFeature tFeature)
        {
            TransCAD.IStdSolidOperatePatternRectangularFeature tRectPattern = (TransCAD.IStdSolidOperatePatternRectangularFeature)tFeature;

            double[] colDir = new double[3];
            double[] rowDir = new double[3];

            tRectPattern.ColumnDirection(out colDir[0], out colDir[1], out colDir[2]);
            tRectPattern.RowDirection(out rowDir[0], out rowDir[1], out rowDir[2]);

            int    colInstance = tRectPattern.ColumnNumber;
            double colSpacing  = tRectPattern.ColumnSpacing;
            int    rowInstance = tRectPattern.RowNumber;
            double rowSpacing  = tRectPattern.RowSpacing;

            PARTITF.RectPattern cRectPattern = PartManager.cShapeFactory.AddNewRectPattern(null, 2, 1, 20.0, 20.0, 1, 1, null, null, true, true, 0.0);

            IEnumerator tTargetFeatures = tRectPattern.TargetFeatures.GetEnumerator();

            while (tTargetFeatures.MoveNext())
            {
                TransCAD.Reference tTargetFeature = (TransCAD.Reference)tTargetFeatures.Current;

                cRectPattern.ItemToCopy = PartManager.cShapes.Item(PartManager.ReferenceManager.NameMap[tTargetFeature.ReferenceeName]);
            }

            cRectPattern.FirstRectangularPatternParameters  = PARTITF.CatRectangularPatternParameters.catInstancesandSpacing;
            cRectPattern.SecondRectangularPatternParameters = PARTITF.CatRectangularPatternParameters.catInstancesandSpacing;

            INFITF.Reference referencePlane = GetReferencePlane(cRectPattern, colDir, rowDir);
            cRectPattern.SetFirstDirection(referencePlane);
            cRectPattern.SetSecondDirection(referencePlane);

            cRectPattern.FirstDirectionRepartition.InstancesCount.Value = colInstance;
            cRectPattern.FirstDirectionRepartition.Spacing.Value        = colSpacing;

            cRectPattern.SecondDirectionRepartition.InstancesCount.Value = rowInstance;
            cRectPattern.SecondDirectionRepartition.Spacing.Value        = rowSpacing;

            PartManager.cPart.UpdateObject(cRectPattern);
            PartManager.ReferenceManager.NameMap.Add(tRectPattern.Name, cRectPattern.get_Name());
        }
        // Post
        public override void TranslateT2C(TransCAD.IFeature tFeature)
        {
            TransCAD.IStdSolidProtrusionSweepFeature proSweep = (TransCAD.IStdSolidProtrusionSweepFeature)tFeature;

            FeatureSketch ProfileSketch = new FeatureSketch(PartManager);

            ProfileSketch.TranslateT2C(PartManager.GetFeatureFromReference(proSweep.ProfileSketch));
            INFITF.Reference profile = ProfileSketch.cReference;

            FeatureSketch GuideSketch = new FeatureSketch(PartManager);

            GuideSketch.TranslateT2C(PartManager.GetFeatureFromReference(proSweep.GuideCurve));
            INFITF.Reference guide = GuideSketch.cReference;

            PARTITF.Rib cRib = PartManager.cShapeFactory.AddNewRibFromRef(null, null);
            cRib.SetProfileElement(profile);
            cRib.CenterCurveElement = guide;

            PartManager.cPart.UpdateObject(cRib);
            PartManager.ReferenceManager.NameMap.Add(proSweep.Name, cRib.get_Name());
        }
Beispiel #10
0
        // Post
        public override void TranslateT2C(TransCAD.IFeature tFeature)
        {
            TransCAD.IStdSolidOperatePatternCircularFeature tCircPattern = (TransCAD.IStdSolidOperatePatternCircularFeature)tFeature;

            double[] center = new double[3];
            double[] axis   = new double[3];

            tCircPattern.CenterAxis(out center[0], out center[1], out center[2], out axis[0], out axis[1], out axis[2]);

            int    angInstance = tCircPattern.AngleNumber;
            double angSpacing  = tCircPattern.AngleIncrement;
            int    radInstance = tCircPattern.RadialNumber;
            double radSpacing  = tCircPattern.RadialSpacing;

            PARTITF.CircPattern cCircPattern = PartManager.cShapeFactory.AddNewCircPattern(null, 1, 2, 20.0, 45.0, 1, 1, null, null, true, 0.0, true);

            IEnumerator tTargetFeatures = tCircPattern.TargetFeatures.GetEnumerator();

            while (tTargetFeatures.MoveNext())
            {
                TransCAD.Reference tTargetFeature = (TransCAD.Reference)tTargetFeatures.Current;

                cCircPattern.ItemToCopy = PartManager.cShapes.Item(PartManager.ReferenceManager.NameMap[tTargetFeature.ReferenceeName]);
            }

            cCircPattern.CircularPatternParameters = PARTITF.CatCircularPatternParameters.catInstancesandAngularSpacing;

            INFITF.Reference rotationAxis = GetRotationAxis(cCircPattern, center, axis);
            cCircPattern.SetRotationAxis(rotationAxis);

            cCircPattern.AngularRepartition.InstancesCount.Value = angInstance;
            cCircPattern.AngularRepartition.AngularSpacing.Value = angSpacing;

            cCircPattern.RadialRepartition.InstancesCount.Value = radInstance;
            cCircPattern.RadialRepartition.Spacing.Value        = radSpacing;

            PartManager.cPart.UpdateObject(cCircPattern);
            PartManager.ReferenceManager.NameMap.Add(tCircPattern.Name, cCircPattern.get_Name());
        }
Beispiel #11
0
        // Post
        public void TranslateT2C(TransCAD.IFeature tFeature)
        {
            TransCAD.IStdSketchFeature tSketch = (TransCAD.IStdSketchFeature)tFeature;

            string sketchName = tSketch.Name;

            TransCAD.IStdSketchGeometries tGeoms = tSketch.Geometries;

            double[] coords  = new double[9];
            object[] tCoords = new object[9];

            tSketch.GetCoordinateSystem(out coords[0], out coords[1], out coords[2],
                                        out coords[3], out coords[4], out coords[5],
                                        out coords[6], out coords[7], out coords[8]);

            for (int i = 0; i < 9; ++i)
            {
                tCoords[i] = coords[i];
            }

            INFITF.Reference cSktReference = PartManager.ReferenceManager.GetCATIASketchReference(tSketch);
            MECMOD.Sketch    cSketch       = PartManager.cSketches.Add(cSktReference);
            cSketch.SetAbsoluteAxisData(tCoords);

            cFactory = cSketch.OpenEdition();

            // 스케치 로컬 좌표 축 설정
            MECMOD.GeometricElement axis   = cSketch.GeometricElements.Item("AbsoluteAxis");
            INFITF.CATBaseDispatch  localX = axis.GetItem("HDirection");
            MECMOD.Line2D           locX   = (MECMOD.Line2D)localX;
            locX.ReportName = ++cReportName;

            INFITF.CATBaseDispatch localY = axis.GetItem("VDirection");
            MECMOD.Line2D          locY   = (MECMOD.Line2D)localY;
            locX.ReportName = ++cReportName;

            IEnumerator tGeomList = tGeoms.GetEnumerator();

            while (tGeomList.MoveNext())
            {
                TransCAD.IStdSketchGeometry tGeom = (TransCAD.IStdSketchGeometry)tGeomList.Current;

                if (tGeom.Type == TransCAD.StdSketchGeometryType.Line ||
                    tGeom.Type == TransCAD.StdSketchGeometryType.Centerline)
                {
                    SketchLine2D line2D = new SketchLine2D(this);
                    line2D.TranslateT2C(tGeom);

                    if (tGeom.Type == TransCAD.StdSketchGeometryType.Centerline)
                    {
                        cSketch.CenterLine = cCenterLine;
                    }
                }
                else if (tGeom.Type == TransCAD.StdSketchGeometryType.Circle ||
                         tGeom.Type == TransCAD.StdSketchGeometryType.CircularArc)
                {
                    SketchCircle2D circle2D = new SketchCircle2D(this);
                    circle2D.TranslateT2C(tGeom);
                }
            }

            cSketch.CloseEdition();

            cReference = PartManager.cPart.CreateReferenceFromObject(cSketch);

            PartManager.cPart.InWorkObject = cSketch;
            PartManager.cPart.UpdateObject(cSketch);

            PartManager.ReferenceManager.NameMap.Add(tSketch.Name, cSketch.get_Name());
        }
Beispiel #12
0
        // Post
        public override void TranslateT2C(TransCAD.IFeature tFeature)
        {
            double diameter     = 0.0;
            double depth        = 0.0;
            double bottomAngle  = 180.0;
            double headDiameter = 0.0;
            double headAngle    = 0.0;
            double headDepth    = 0.0;

            double[] org = new double[3];

            PARTITF.Hole cHole = null;

            if (tFeature.Type == TransCAD.FeatureType.StdSolidHoleSimpleFeature)
            {
                TransCAD.IStdSolidHoleSimpleFeature tHoleSimple = (TransCAD.IStdSolidHoleSimpleFeature)tFeature;
                tHoleSimple.CenterPoint(out org[0], out org[1], out org[2]);
                depth    = tHoleSimple.Depth;
                diameter = tHoleSimple.Radius * 2;
                INFITF.Reference targetFace = GetTargetFace(tHoleSimple.TargetFace.ReferenceeName);

                cHole      = PartManager.cShapeFactory.AddNewHole(targetFace, 10.0);
                cHole.Type = PARTITF.CatHoleType.catSimpleHole;
                cHole.SetOrigin(org[0], org[1], org[2]);
                cHole.BottomLimit.Dimension.Value = depth;
                cHole.Diameter.Value = diameter;

                PartManager.ReferenceManager.NameMap.Add(tHoleSimple.Name, cHole.get_Name());
            }
            else if (tFeature.Type == TransCAD.FeatureType.StdSolidHoleCounterboredFeature)
            {
                TransCAD.StdSolidHoleCounterboredFeature tHoleCounterbored = (TransCAD.StdSolidHoleCounterboredFeature)tFeature;
                tHoleCounterbored.CenterPoint(out org[0], out org[1], out org[2]);
                headDepth    = tHoleCounterbored.StartDepth;
                headDiameter = tHoleCounterbored.StartRadius * 2;
                depth        = tHoleCounterbored.EndDepth + headDepth;
                diameter     = tHoleCounterbored.EndRadius * 2;
                bottomAngle  = tHoleCounterbored.Angle;
                INFITF.Reference targetFace = GetTargetFace(tHoleCounterbored.TargetFace.ReferenceeName);

                cHole      = PartManager.cShapeFactory.AddNewHole(targetFace, 10.0);
                cHole.Type = PARTITF.CatHoleType.catCounterboredHole;
                cHole.SetOrigin(org[0], org[1], org[2]);
                cHole.HeadDepth.Value             = headDepth;
                cHole.HeadDiameter.Value          = headDiameter;
                cHole.BottomLimit.Dimension.Value = depth;
                cHole.Diameter.Value = diameter;

                PartManager.ReferenceManager.NameMap.Add(tHoleCounterbored.Name, cHole.get_Name());
            }
            else if (tFeature.Type == TransCAD.FeatureType.StdSolidHoleCountersunkFeature)
            {
                TransCAD.IStdSolidHoleCountersunkFeature tHoleCountersunk = (TransCAD.IStdSolidHoleCountersunkFeature)tFeature;
                tHoleCountersunk.CenterPoint(out org[0], out org[1], out org[2]);
                headAngle    = tHoleCountersunk.SinkAngle;
                headDiameter = tHoleCountersunk.SinkRadius * 2;
                depth        = tHoleCountersunk.Depth;
                diameter     = tHoleCountersunk.Radius * 2;
                headDepth    = 0.5 * (headDiameter - diameter) / Math.Tan(0.5 * headAngle * Math.PI / 180);

                bottomAngle = tHoleCountersunk.BottomAngle;
                INFITF.Reference targetFace = GetTargetFace(tHoleCountersunk.TargetFace.ReferenceeName);

                cHole                 = PartManager.cShapeFactory.AddNewHole(targetFace, 10.0);
                cHole.Type            = PARTITF.CatHoleType.catCountersunkHole;
                cHole.CounterSunkMode = PARTITF.CatCSHoleMode.catCSModeAngleDiameter;
                cHole.SetOrigin(org[0], org[1], org[2]);
                cHole.HeadAngle.Value             = headAngle;
                cHole.HeadDepth.Value             = headDepth;
                cHole.BottomLimit.Dimension.Value = depth;
                cHole.Diameter.Value = diameter;

                PartManager.ReferenceManager.NameMap.Add(tHoleCountersunk.Name, cHole.get_Name());
            }

            if (bottomAngle != 180.0)
            {
                cHole.BottomType        = PARTITF.CatHoleBottomType.catVHoleBottom;
                cHole.BottomAngle.Value = bottomAngle;
            }

            PartManager.cPart.UpdateObject(cHole);
        }
Beispiel #13
0
 public virtual void TranslateT2C(TransCAD.IFeature tFeature)
 {
     // Do nothing
 }
        public void TranslateT2C(TransCAD.IPart tPart)
        {
            //IEnumerator tFeatureList = tPart.Features.GetEnumerator();
            TransCAD.Features tFeatures = tPart.Features;


            //TransCAD.IFeature tFeature = (TransCAD.IFeature)tFeatureList.Current;

            for (int i = 1; i <= tFeatures.Count; i++)
            {
                TransCAD.IFeature tFeature = (TransCAD.IFeature)tFeatures[i];
                try
                {
                    Feature pFeature = null;

                    if (tFeature.Type == TransCAD.FeatureType.StdSolidProtrusionExtrudeFeature)
                    {
                        pFeature = new FeaturePad(this);
                    }
                    else if (tFeature.Type == TransCAD.FeatureType.StdSolidCutExtrudeFeature)
                    {
                        pFeature = new FeaturePocket(this);
                    }
                    else if (tFeature.Type == TransCAD.FeatureType.StdSolidFilletConstantFeature)
                    {
                        pFeature = new FeatureEdgeFillet(this);
                    }
                    else if (tFeature.Type == TransCAD.FeatureType.StdSolidProtrusionSweepFeature)
                    {
                        pFeature = new FeatureRib(this);
                    }
                    else if (tFeature.Type == TransCAD.FeatureType.StdSolidCutSweepFeature)
                    {
                        pFeature = new FeatureSlot(this);
                    }
                    else if (tFeature.Type == TransCAD.FeatureType.StdSolidProtrusionRevolveFeature)
                    {
                        pFeature = new FeatureShaft(this);
                    }
                    else if (tFeature.Type == TransCAD.FeatureType.StdSolidChamferFeature)
                    {
                        pFeature = new FeatureChamfer(this);
                    }
                    else if (tFeature.Type == TransCAD.FeatureType.StdSolidCutRevolveFeature)
                    {
                        pFeature = new FeatureGroove(this);
                    }
                    else if (tFeature.Type == TransCAD.FeatureType.StdSolidOperatePatternRectangularFeature)
                    {
                        pFeature = new FeatureRectPattern(this);
                    }
                    else if (tFeature.Type == TransCAD.FeatureType.StdSolidOperatePatternCircularFeature)
                    {
                        pFeature = new FeatureCircPattern(this);
                    }
                    else if (tFeature.Type == TransCAD.FeatureType.StdSolidHoleCounterboredFeature ||
                             tFeature.Type == TransCAD.FeatureType.StdSolidHoleCountersunkFeature ||
                             tFeature.Type == TransCAD.FeatureType.StdSolidHoleSimpleFeature)
                    {
                        pFeature = new FeatureHole(this);
                    }

                    if (pFeature != null)
                    {
                        pFeature.TranslateT2C(tFeature);
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show("-Feature Name: " + tFeature.Name + "\n-Error Message: " + e.Message, "Failed to create a feature!");
                }

                cPart.Update(); // CATIA Part 업데이트
            }
        }