public void UninitializeCATIA() { cPart = null; cBodies = null; cCurrentBody = null; cShapes = null; cFactory = null; cShapeFactory = null; cHybridShapeFactory = null; cSketches = null; cOriginalElements = null; }
//// CATIA 관련 함수 public bool InitializeCATIA(string filePath, int mode) { try { cApp = (INFITF.Application)Marshal.GetActiveObject("CATIA.Application"); } catch { cApp = (INFITF.Application)Activator.CreateInstance(Type.GetTypeFromProgID("CATIA.Application")); } if (cApp == null) { return(false); } cDocs = cApp.Documents; if (mode == 0) { cPartDoc = (MECMOD.PartDocument)cDocs.Read(filePath); } else if (mode == 1) { cPartDoc = (MECMOD.PartDocument)cDocs.Add("Part"); } cApp.Visible = true; cPart = cPartDoc.Part; cBodies = cPart.Bodies; cFactory = cPart.ShapeFactory; cShapeFactory = (PARTITF.ShapeFactory)cFactory; cHybridShapeFactory = (HybridShapeTypeLib.HybridShapeFactory)cPart.HybridShapeFactory; cCurrentBody = cBodies.Item(1); cShapes = cCurrentBody.Shapes; cSketches = cCurrentBody.Sketches; cOriginalElements = cPart.OriginElements; if (ReferenceManager == null) { ReferenceManager = new Reference(this); } return(true); }
private void button1_Click(object sender, EventArgs e) { DRAFTINGITF.DrawingDocument DrwDoc = null; DRAFTINGITF.DrawingView DrwView = null; try { DrwDoc = (DRAFTINGITF.DrawingDocument)catia.ActiveDocument; } catch (Exception) { MessageBox.Show("please open a DrawingDocument"); return; } DRAFTINGITF.DrawingRoot DrwRoot = DrwDoc.DrawingRoot; try { DrwView = DrwRoot.ActiveSheet.Views.Item(DrwRoot.ActiveSheet.Views.Count); } catch (Exception) { MessageBox.Show("sheet가 없습니다."); return; } DRAFTINGITF.DrawingViewGenerativeBehavior DrwGenBeh = DrwView.GenerativeBehavior; double X1, Y1, Z1, X2, Y2, Z2; DrwGenBeh.GetProjectionPlane(out X1, out Y1, out Z1, out X2, out Y2, out Z2); ProductStructureTypeLib.Product Prd = (ProductStructureTypeLib.Product)DrwGenBeh.Document; MECMOD.PartDocument PrtDoc = (MECMOD.PartDocument)Prd.ReferenceProduct.Parent; MECMOD.Part Prt = PrtDoc.Part; MECMOD.Body Bdy = Prt.MainBody; MECMOD.Shapes Shps = Bdy.Shapes; PARTITF.Hole tHole = (PARTITF.Hole)Shps.GetItem("Hole.1"); object[] opt = new object[3]; tHole.GetOrigin(opt); //radiuse //tHole. //3D 위치 값 // double X = -37.935, Y = 96.8, Z = 104.207; double X = (double)opt[0]; double Y = (double)opt[1]; double Z = (double)opt[2]; //결과 값 double COS_ALPHA = 0, VW_H = 0, VW_V = 0; //계산과정 COS_ALPHA = (X * X1 + Y * Y1 + Z * Z1) / ((Math.Pow(X1, 2) + Math.Pow(Y1, 2) + Math.Pow(Z1, 2)) * Math.Sqrt(Math.Pow(X, 2) + Math.Pow(Y, 2) + Math.Pow(Z, 2))); VW_H = Math.Sqrt(X * X + Y * Y + Z * Z) * COS_ALPHA; COS_ALPHA = (X * X2 + Y * Y2 + Z * Z2) / ((Math.Pow(X2, 2) + Math.Pow(Y2, 2) + Math.Pow(Z2, 2)) * Math.Sqrt(Math.Pow(X, 2) + Math.Pow(Y, 2) + Math.Pow(Z, 2))); VW_V = Math.Sqrt(Math.Pow(X, 2) + Math.Pow(Y, 2) + Math.Pow(Z, 2)) * COS_ALPHA; //create the point MECMOD.Factory2D fac = DrwView.Factory2D; fac.CreatePoint(VW_H, VW_V); //add a text (20정도 뛰어보자) DRAFTINGITF.DrawingText txt = DrwView.Texts.Add("Hole( " + (int)X + " , " + (int)Y + " , " + (int)Z + " )", VW_H + 20, VW_V - 20); // DRAFTINGITF.DrawingText txt = DrwView.Texts.Add(("( {0} , {1} , {2} )"X,Y,Z), VW_H + 20, VW_V - 20); txt.SetFontSize(0, 0, 12); DRAFTINGITF.DrawingLeader FDleadr = txt.Leaders.Add(VW_H, VW_V); //update the drawing document. DrwDoc.Update(); }