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