private MECMOD.Constraint createCnst(Part prt, Sketch skt, CatConstraintType cnstType, INFITF.AnyObject ob1, INFITF.AnyObject ob2) { INFITF.Reference ref1 = prt.CreateReferenceFromGeometry(ob1); INFITF.Reference ref2 = prt.CreateReferenceFromGeometry(ob2); MECMOD.Constraint cnst = skt.Constraints.AddBiEltCst(cnstType, ref1, ref2); return(cnst); }
// CreateCnst overloading------------- private static Constraint CreateCnst(Part prt, Sketch skt, CatConstraintType cntype, INFITF.AnyObject ob) { INFITF.Reference r = prt.CreateReferenceFromGeometry(ob); Constraint cnt = skt.Constraints.AddMonoEltCst(cntype, r); //1객체를 구속시킨다. return(cnt); }
//구속조건을 주는 method-------------------------------------------- private static Constraint CreateCnst(Part prt, Sketch skt, CatConstraintType cntype, INFITF.AnyObject ob1, INFITF.AnyObject ob2) { INFITF.Reference r1 = prt.CreateReferenceFromGeometry(ob1); INFITF.Reference r2 = prt.CreateReferenceFromGeometry(ob2); Constraint cnt = skt.Constraints.AddBiEltCst(cntype, r1, r2); //2객체 사이의 구속조건을 준다. return(cnt); }
//------------------------------------------------------------------------------ //삼각형을 만든 method private static void CreateTriangle(Factory2D fac, Part prt, Sketch skt, Point2D p1, Point2D p2, Point2D p3) { Line2D lin1 = CreateLine(fac, p1, p2); Line2D lin2 = CreateLine(fac, p2, p3); Line2D lin3 = CreateLine(fac, p3, p1); CatConstraintType cntL = CatConstraintType.catCstTypeLength; CatConstraintType cntD = CatConstraintType.catCstTypeDistance; // CreateCnst(prt, skt, cntL, lin1); //다중구속이 되어 error CreateCnst(prt, skt, cntL, lin2); CreateCnst(prt, skt, cntL, lin3); //CreateCnst(prt, skt, CatConstraintType.catCstTypeHorizontality, lin2); //안되는 경우가 발생한다. CreateCnst(prt, skt, cntD, p1, skt.AbsoluteAxis.HorizontalReference); CreateCnst(prt, skt, cntD, p1, skt.AbsoluteAxis.VerticalReference); CreateCnst(prt, skt, cntD, p2, skt.AbsoluteAxis.HorizontalReference); CreateCnst(prt, skt, cntD, p2, skt.AbsoluteAxis.VerticalReference); }
//사각형을 만든 method------------------------------------------------- private static void CreateRectangle(Factory2D fac, Part prt, Sketch skt, double x1, double y1, double x2, double y2) { Point2D p1 = fac.CreatePoint(x1, y1); Point2D p2 = fac.CreatePoint(x2, y1); Point2D p3 = fac.CreatePoint(x2, y2); Point2D p4 = fac.CreatePoint(x1, y2); Line2D lin1 = CreateLine(fac, p1, p2); Line2D lin2 = CreateLine(fac, p2, p3); Line2D lin3 = CreateLine(fac, p3, p4); Line2D lin4 = CreateLine(fac, p4, p1); CatConstraintType cntype = CatConstraintType.catCstTypeDistance; Constraint cnst1 = CreateCnst(prt, skt, cntype, lin1, lin3); Constraint cnst2 = CreateCnst(prt, skt, cntype, lin2, lin4); Constraint cnst3 = CreateCnst(prt, skt, cntype, lin1, skt.AbsoluteAxis.HorizontalReference); Constraint cnst4 = CreateCnst(prt, skt, cntype, lin2, skt.AbsoluteAxis.VerticalReference); }
private void button1_Click(object sender, EventArgs e) { INFITF.Application catia; //add the reference - catia v5 infiit interface... try { //열려 있는 catia가져오기 catia = (INFITF.Application)Marshal.GetActiveObject("CATIA.Application"); } catch (Exception) { //catia 실행하기 catia = (INFITF.Application)Activator.CreateInstance(Type.GetTypeFromProgID("CATIA.Application")); catia.Visible = true; } MECMOD.PartDocument prtDoc = (MECMOD.PartDocument)catia.Documents.Add("Part"); MECMOD.Part prt = prtDoc.Part; MECMOD.Bodies bdys = prt.Bodies; MECMOD.Body bdy = bdys.Add(); MECMOD.Sketches skts = bdy.Sketches; INFITF.Reference xypln = (INFITF.Reference)prt.OriginElements.PlaneXY; Sketch skt1 = skts.Add(xypln); Factory2D fac2d = skt1.OpenEdition(); //fac2d안에서 sketch가 이루어진다. fac2d cketch의 기능을 쓸수있다 Point2D p1 = fac2d.CreatePoint(10, 10); Point2D p2 = fac2d.CreatePoint(10, 30); Point2D p3 = fac2d.CreatePoint(40, 30); Point2D p4 = fac2d.CreatePoint(40, 10); //method를 만들고 line생성 Line2D lin1 = CreateLine(fac2d, p1, p2); Line2D lin2 = CreateLine(fac2d, p2, p3); Line2D lin3 = CreateLine(fac2d, p3, p4); Line2D lin4 = CreateLine(fac2d, p4, p1); CatConstraintType cnstDis = CatConstraintType.catCstTypeDistance; MECMOD.Constraint d1 = createCnst(prt, skt1, cnstDis, lin1, lin3); MECMOD.Constraint d2 = createCnst(prt, skt1, cnstDis, lin2, lin4); MECMOD.Constraint d3 = createCnst(prt, skt1, cnstDis, skt1.AbsoluteAxis.HorizontalReference, lin4); MECMOD.Constraint d4 = createCnst(prt, skt1, cnstDis, skt1.AbsoluteAxis.VerticalReference, lin1); /* * INFITF.Reference rline1 = prt.CreateReferenceFromGeometry(lin1); * INFITF.Reference rline2 = prt.CreateReferenceFromGeometry(lin2); * INFITF.Reference rline3 = prt.CreateReferenceFromGeometry(lin3); * INFITF.Reference rline4 = prt.CreateReferenceFromGeometry(lin4); * INFITF.Reference rlineH = prt.CreateReferenceFromGeometry(skt1.AbsoluteAxis.HorizontalReference); * INFITF.Reference rlineV = prt.CreateReferenceFromGeometry(skt1.AbsoluteAxis.VerticalReference); * * MECMOD.Constraint d1 = skt1.Constraints.AddBiEltCst(CatConstraintType.catCstTypeDistance, rline1, rline3); * MECMOD.Constraint d2 = skt1.Constraints.AddBiEltCst(CatConstraintType.catCstTypeDistance, rline2, rline4); * MECMOD.Constraint d3 = skt1.Constraints.AddBiEltCst(CatConstraintType.catCstTypeDistance, rlineH, rline4); * MECMOD.Constraint d4 = skt1.Constraints.AddBiEltCst(CatConstraintType.catCstTypeDistance, rlineV, rline1); */ skt1.CloseEdition(); //create a circlr Sketch skt2 = skts.Add(xypln); Factory2D fac2d1 = skt2.OpenEdition(); //fac2d = skt2.OpenEdition(); //이렇게 함녀 된다. INFITF.Reference H = prt.CreateReferenceFromGeometry(skt2.AbsoluteAxis.HorizontalReference); INFITF.Reference V = prt.CreateReferenceFromGeometry(skt2.AbsoluteAxis.VerticalReference); Circle2D c = fac2d1.CreateClosedCircle(40, 30, 10); c.CenterPoint = p3; // MECMOD.Constraint orPtH = skt2.Constraints.AddBiEltCst(CatConstraintType.catCstTypeDistance,H,(INFITF.Reference)c); //MECMOD.Constraint orPtV = skt2.Constraints.AddBiEltCst(CatConstraintType.catCstTypeDistance, V, (INFITF.Reference)c); MECMOD.Constraint r = skt2.Constraints.AddMonoEltCst(CatConstraintType.catCstTypeRadius, (INFITF.Reference)c); skt2.CloseEdition(); ShapeFactory ShpFac = (ShapeFactory)prt.ShapeFactory; //pad Pad pad = ShpFac.AddNewPad(skt1, 20); //poket Pocket pock = ShpFac.AddNewPocket(skt2, 20); pock.DirectionOrientation = CatPrismOrientation.catRegularOrientation; prt.Update(); }