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);
        }
Beispiel #2
0
 public void UninitializeTransCAD()
 {
     tApp      = null;
     tDocs     = null;
     tPartDoc  = null;
     tPart     = null;
     tAssemDoc = null;
     tFeatures = null;
 }
        ////

        //// TransCAD 관련 함수
        public bool InitializeTransCAD(int mode)
        {
            try
            {
                tApp = (TransCAD.Application)Marshal.GetActiveObject("TransCAD.Application");
            }
            catch
            {
                tApp = (TransCAD.Application)Activator.CreateInstance(Type.GetTypeFromProgID("TransCAD.Application"));
            }

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

            tDocs = tApp.Documents;

            if (mode == 0)  //pre일때 사용 PartDocument 추가
            {
                tPartDoc = tDocs.AddPartDocument();
            }
            else if (mode == 1) //post일때 사용 이미 열려있는 것을 Active
            {
                tPartDoc = (TransCAD.PartDocument)tApp.ActiveDocument;
            }
            else if (mode == 2) //Assembly document에서 part 번역을 위한 initialization
            {
                tAssemDoc         = (TransCAD.AssemDocument)tApp.ActiveDocument;
                isSubAssemblyPart = true;
                return(true);
            }



            tApp.Visible = true;

            tPart     = tPartDoc.Part;
            tFeatures = tPart.Features;

            if (ReferenceManager == null)
            {
                ReferenceManager = new Reference(this);
            }

            //tAssemDoc.Update();

            return(true);
        }
        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 업데이트
            }
        }