Beispiel #1
0
 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);
 }
Beispiel #2
0
        // 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);
        }
Beispiel #3
0
        //구속조건을 주는 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);
        }
Beispiel #4
0
        //------------------------------------------------------------------------------
        //삼각형을 만든 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);
        }
Beispiel #5
0
        //사각형을 만든 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);
        }
Beispiel #6
0
        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();
        }