Exemplo n.º 1
0
        private void button3_Click(object sender, EventArgs e)
        {
            if (PtStart == null)
            {
                return;
            }

            if (PtEnd == null)
            {
                return;
            }

            MECMOD.PartDocument PrtDoc = (MECMOD.PartDocument)Catia.ActiveDocument;
            MECMOD.Part         prt    = PrtDoc.Part;

            MECMOD.HybridBodies HBs = prt.HybridBodies;

            MECMOD.HybridBody HyBody = HBs.Add();

            HybridShapeTypeLib.HybridShapeFactory  HSFac    = (HybridShapeTypeLib.HybridShapeFactory)prt.HybridShapeFactory;
            HybridShapeTypeLib.HybridShapeLinePtPt Lineptpt = null;
            Lineptpt = HSFac.AddNewLinePtPt((INFITF.Reference)PtStart, (INFITF.Reference)PtEnd);

            HyBody.AppendHybridShape(Lineptpt);
            prt.Update();
        }
Exemplo n.º 2
0
 public void UninitializeCATIA()
 {
     cPart               = null;
     cBodies             = null;
     cCurrentBody        = null;
     cShapes             = null;
     cFactory            = null;
     cShapeFactory       = null;
     cHybridShapeFactory = null;
     cSketches           = null;
     cOriginalElements   = null;
 }
Exemplo n.º 3
0
        //// 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);
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
        private void button4_Click(object sender, EventArgs e)
        {
            if (catia == null)
            {
                MessageBox.Show("Please run CATIA");
                return;
            }

            try
            {
                drwDoc = (DRAFTINGITF.DrawingDocument)catia.ActiveDocument;
            }
            catch (Exception)
            {
                MessageBox.Show("please open a document.");
                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;

            ////7.point txt, leader생성
            //CreateTxt(DrwGenBeh, pt1, DrwView);
            //CreateTxt(DrwGenBeh, pt2, DrwView);
            //CreateTxt(DrwGenBeh, pt3, DrwView);

            double X1, Y1, Z1, X2, Y2, Z2;

            DrwGenBeh.GetProjectionPlane(out X1, out Y1, out Z1, out X2, out Y2, out Z2);


            //MECMOD.Body Bdy = Prt.MainBody;
            //MECMOD.Shapes Shps = Bdy.Shapes;

            //7.point txt, leader생성
            // CreateTxt(DrwGenBeh, X1, Y1, Z1, X2, Y2, Z2, pt1, DrwView);
            // CreateTxt(X1, Y1, Z1, X2, Y2, Z2, pt2, DrwView);
            // CreateTxt(X1, Y1, Z1, X2, Y2, Z2, pt3, DrwView);

            object[] ap1 = new object[3];
            object[] ap2 = new object[3];
            object[] ap3 = new object[3];

            pt1.GetCoordinates(ap1);
            pt2.GetCoordinates(ap2);
            pt3.GetCoordinates(ap3);

            //pt1---
            double X = (double)ap1[0];
            double Y = (double)ap1[1];
            double Z = (double)ap1[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;
             */
            MECMOD.Factory2D fac = DrwView.Factory2D;
            VW_H = 0;
            VW_V = 0;

            fac.CreatePoint(VW_H, VW_V);

            DRAFTINGITF.DrawingText txt = DrwView.Texts.Add(pt1.get_Name() + "( " + (int)X + " , " + (int)Y + " , " + (int)Z + " )", VW_H + 20, VW_V - 20);
            txt.SetFontSize(0, 0, 12);

            DRAFTINGITF.DrawingLeader FDleadr = txt.Leaders.Add(VW_H, VW_V);

            //pt2---
            X = (double)ap2[0];
            Y = (double)ap2[1];
            Z = (double)ap2[2];

            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;

            fac = DrwView.Factory2D;
            fac.CreatePoint(VW_H, VW_V);

            txt = DrwView.Texts.Add(pt2.get_Name() + "( " + (int)X + " , " + (int)Y + " , " + (int)Z + " )", VW_H + 20, VW_V - 20);
            txt.SetFontSize(0, 0, 12);

            FDleadr = txt.Leaders.Add(VW_H, VW_V);

            //pt3---
            X = (double)ap3[0];
            Y = (double)ap3[1];
            Z = (double)ap3[2];

            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;

            fac = DrwView.Factory2D;
            fac.CreatePoint(VW_H, VW_V);

            txt = DrwView.Texts.Add(pt3.get_Name() + "( " + (int)X + " , " + (int)Y + " , " + (int)Z + " )", VW_H + 20, VW_V - 20);
            txt.SetFontSize(0, 0, 12);

            FDleadr = txt.Leaders.Add(VW_H, VW_V);

            //pt_A----
            ProductStructureTypeLib.Product Prd    = (ProductStructureTypeLib.Product)DrwGenBeh.Document;
            MECMOD.PartDocument             PrtDoc = (MECMOD.PartDocument)Prd.ReferenceProduct.Parent;
            MECMOD.Part Prt = PrtDoc.Part;

            MECMOD.HybridBody bs = Prt.HybridBodies.Item("forTestGS").HybridBodies.Item("Base");

            HybridShapeTypeLib.Point ptA = (HybridShapeTypeLib.Point)bs.HybridShapes.GetItem("PT-A");
            object[] aa = new object[3];
            ptA.GetCoordinates(aa);
            X = (double)aa[0];
            Y = (double)aa[1];
            Z = (double)aa[2];

            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;

            fac = DrwView.Factory2D;
            fac.CreatePoint(VW_H, VW_V);

            txt = DrwView.Texts.Add(ptA.get_Name() + "( " + (int)X + " , " + (int)Y + " , " + (int)Z + " )", VW_H - 20, VW_V + 40);
            txt.SetFontSize(0, 0, 12);

            FDleadr = txt.Leaders.Add(VW_H, VW_V);
            //------
            //table 생성

            List <HybridShapeTypeLib.Point> list = new List <HybridShapeTypeLib.Point>();

            list.Add(pt1);
            list.Add(pt2);
            list.Add(pt3);

            int col = 4;
            int row = 5;

            DRAFTINGITF.DrawingTable table = DrwView.Tables.Add(200, 200, row, col, 36, 80);

            table.SetCellString(1, 1, "Name");
            table.SetCellString(1, 2, "X");
            table.SetCellString(1, 3, "Y");
            table.SetCellString(1, 4, "Z");

            int ii = 2;

            foreach (HybridShapeTypeLib.Point p in list)
            {
                object[] ap = new object[3];
                p.GetCoordinates(ap);

                table.SetCellString(ii, 1, p.get_Name());
                table.SetCellString(ii, 2, ap[0] + "");
                table.SetCellString(ii, 3, ap[1] + "");
                table.SetCellString(ii, 4, ap[2] + "");
                ii++;
            }

            table.SetCellString(5, 1, ptA.get_Name());
            table.SetCellString(5, 2, aa[0] + "");
            table.SetCellString(5, 3, aa[1] + "");
            table.SetCellString(5, 4, aa[2] + "");

            //table txt stayle 변경---
            for (int i = 1; i <= row; i++)
            {
                for (int j = 1; j <= col; j++)
                {
                    table.GetCellObject(i, j).SetFontSize(0, 0, 14);
                    table.GetCellObject(i, j).TextProperties.Justification = CatJustification.catCenter;
                }
            }


            drwDoc.Update();

            //8.save the 도면 파일
            drwDoc.Save();
        }
Exemplo n.º 6
0
        static void action(PlanarfaceWithReference cpl)
        {
            //all try
            try {
                pointsListDouble.Clear();
                linesListDouble.Clear();

                oPartDocument.Selection.Clear();
                oPartDocument.Selection.Add(cpl.OPlanarFace);
                MECMOD.Body oBody = (MECMOD.Body)oPartDocument.Selection.FindObject("CATIAShape").Parent;
                MECMOD.Part oPart = (MECMOD.Part)oBody.Parent;

                MECMOD.Sketch    oSketch    = oBody.Sketches.Add(cpl.OReference);
                MECMOD.Factory2D oFactory2D = oSketch.OpenEdition();

                oFactory2D.CreateProjection(cpl.OReference);
                oSketch.CloseEdition();

                oPart.Update();
                oPartDocument.Selection.Clear();

                List <object[]>         pointsListObjects         = new List <object[]>();
                List <MECMOD.Point2D>   mecmodPointsForRemoveList = new List <MECMOD.Point2D>();
                List <object[]>         linesListObjects          = new List <object[]>();
                List <INFITF.AnyObject> mecmodlineForRemoveList   = new List <INFITF.AnyObject>();

                string sketchOriginName = oSketch.get_Name();
                oSketch.set_Name(oSketch.get_Name() + "_Isolate_me_please.");

                oPart.Update();
                oPartDocument.Selection.Add(oSketch);

                if (isolateKeyAuto)
                {
                    SupportClass.isolateKeyAuto();
                }

                bool      isolate = false;
                int       timeout = 60;
                const int sleep   = 1000;
                while (!isolate)
                {
                    catiaInstance.set_StatusBar("Isolate the sketch " + oSketch.get_Name() + " " + (timeout * 1000) / sleep + "s timeout");
                    Thread.Sleep(sleep);
                    if (timeout <= 0)
                    {
                        catiaInstance.set_StatusBar("Macro timeout");
                        oPartDocument.Selection.Clear();
                        oPartDocument.Selection.Add(oSketch);
                        oPartDocument.Selection.Delete();
                        return;
                    }
                    timeout--;
                    try {
                        foreach (MECMOD.GeometricElement geo in oSketch.GeometricElements)
                        {
                            if (geo.GeometricType == MECMOD.CatGeometricType.catGeoTypePoint2D)
                            {
                                MECMOD.Point2D oPoint = (MECMOD.Point2D)geo;
                                isolate = true;
                                object[] oPointArray = new object[2];
                                oPoint.GetCoordinates(oPointArray);
                                pointsListObjects.Add(oPointArray);
                                mecmodPointsForRemoveList.Add(oPoint);
                            }
                            if (geo.GeometricType == MECMOD.CatGeometricType.catGeoTypeLine2D)
                            {
                                MECMOD.Line2D oLine = (MECMOD.Line2D)geo;
                                isolate = true;
                                object[] oPointArray = new object[4];
                                oLine.GetEndPoints(oPointArray);
                                linesListObjects.Add(oPointArray);
                                mecmodlineForRemoveList.Add(oLine);
                            }
                            //NOT fully solved! Just gets endpoints and connets them by a line.
                            if (geo.GeometricType == MECMOD.CatGeometricType.catGeoTypeCircle2D)
                            {
                                MECMOD.Circle2D oCircle = (MECMOD.Circle2D)geo;
                                isolate = true;
                                object[] oPointArray = new object[4];
                                oCircle.GetEndPoints(oPointArray);
                                linesListObjects.Add(oPointArray);
                                mecmodlineForRemoveList.Add(oCircle);
                            }
                            //NOT fully solved! Just gets endpoints and connets them by a line.
                            if (geo.GeometricType == MECMOD.CatGeometricType.catGeoTypeEllipse2D)
                            {
                                MECMOD.Ellipse2D oElipse = (MECMOD.Ellipse2D)geo;
                                isolate = true;
                                object[] oPointArray = new object[4];
                                oElipse.GetEndPoints(oPointArray);
                                linesListObjects.Add(oPointArray);
                                mecmodlineForRemoveList.Add(oElipse);
                            }
                            //NOT fully solved! Just gets endpoints and connets them by a line.
                            if (geo.GeometricType == MECMOD.CatGeometricType.catGeoTypeHyperbola2D)
                            {
                                MECMOD.Hyperbola2D oHyp = (MECMOD.Hyperbola2D)geo;
                                isolate = true;
                                object[] oPointArray = new object[4];
                                oHyp.GetEndPoints(oPointArray);
                                linesListObjects.Add(oPointArray);
                                mecmodlineForRemoveList.Add(oHyp);
                            }
                            //NOT fully solved! Just gets endpoints and connets them by a line.
                            if (geo.GeometricType == MECMOD.CatGeometricType.catGeoTypeParabola2D)
                            {
                                MECMOD.Parabola2D oParab = (MECMOD.Parabola2D)geo;
                                isolate = true;
                                object[] oPointArray = new object[4];
                                oParab.GetEndPoints(oPointArray);
                                linesListObjects.Add(oPointArray);
                                mecmodlineForRemoveList.Add(oParab);
                            }
                            //NOT fully solved! Just gets endpoints and connets them by a line.
                            if (geo.GeometricType == MECMOD.CatGeometricType.catGeoTypeSpline2D)
                            {
                                MECMOD.Spline2D oSpline = (MECMOD.Spline2D)geo;
                                isolate = true;
                                object[] oPointArray = new object[4];
                                oSpline.GetEndPoints(oPointArray);
                                linesListObjects.Add(oPointArray);
                                mecmodlineForRemoveList.Add(oSpline);
                            }
                            //?????????????????????????????
                            if (geo.GeometricType == MECMOD.CatGeometricType.catGeoTypeUnknown)
                            {
                                MECMOD.Curve2D o = (MECMOD.Curve2D)geo;
                                isolate = true;
                                object[] oPointArray = new object[4];
                                o.GetEndPoints(oPointArray);
                                linesListObjects.Add(oPointArray);
                                mecmodlineForRemoveList.Add(o);
                            }
                        }
                    } catch {    }
                }

                oSketch.set_Name(sketchOriginName);
                oPart.Update();

                oFactory2D = oSketch.OpenEdition();
                oPartDocument.Selection.Clear();
                foreach (MECMOD.Point2D p in mecmodPointsForRemoveList)
                {
                    oPartDocument.Selection.Add(p);
                }
                foreach (INFITF.AnyObject l in mecmodlineForRemoveList)
                {
                    oPartDocument.Selection.Add(l);
                }
                oPartDocument.Selection.Delete();
                oSketch.CloseEdition();

                oPart.Update();

                foreach (object[] point in pointsListObjects)
                {
                    pointsListDouble.Add(new double[] { Double.Parse(point[0].ToString()), Double.Parse(point[1].ToString()) });
                }

                foreach (object[] line in linesListObjects)
                {
                    linesListDouble.Add(new double[] { Double.Parse(line[0].ToString()), Double.Parse(line[1].ToString()), Double.Parse(line[2].ToString()), Double.Parse(line[3].ToString()) });
                }

                double       minX    = pointsListDouble.Min(setting => setting[0]);
                double       maxX    = pointsListDouble.Max(setting => setting[0]);
                double       minY    = pointsListDouble.Min(setting => setting[1]);
                double       maxY    = pointsListDouble.Max(setting => setting[1]);
                const double delitel = 20;

                double rastrX = (Math.Abs(maxX - minX)) / delitel;
                if (rastrX < 0.1)
                {
                    rastrX = 0.1;
                }

                double rastrY = (Math.Abs(maxY - minY)) / delitel;
                if (rastrY < 0.1)
                {
                    rastrY = 0.1;
                }

                List <myRectangle> allRectanglesInThisLimit = new List <myRectangle>();

                double rastrXvalue = minX;
                double rastrYvalue = minY;
                while (rastrYvalue < maxY)
                {
                    while (rastrXvalue < maxX)
                    {
                        myRectangle rastrInsideLim = new myRectangle(rastrXvalue, rastrYvalue, rastrXvalue + rastrX, rastrYvalue + rastrY);
                        allRectanglesInThisLimit.Add(rastrInsideLim);
                        rastrXvalue += rastrX;
                    }
                    rastrXvalue  = minX;
                    rastrYvalue += rastrY;
                }

                List <myRectangle> allRectanglesInThisLimitNoZero = new List <myRectangle>();
                foreach (myRectangle obl in allRectanglesInThisLimit)
                {
                    if (obl.obsah != 0)
                    {
                        obl.resizeAllEdges(-Math.Min(rastrX, rastrY) * 0.1);
                        allRectanglesInThisLimitNoZero.Add(obl);
                    }
                }

                List <myRectangle> allRectanglesInThisLimitNoCross = new List <myRectangle>();
                foreach (myRectangle obl2 in allRectanglesInThisLimitNoZero)
                {
                    if (!obl2.anyLineFromListCrossRectangle(linesListDouble))
                    {
                        allRectanglesInThisLimitNoCross.Add(obl2);
                    }
                }

                if (debugRastr)
                {
                    DebugCreateAll.createAll(allRectanglesInThisLimitNoCross, oSketch, catiaInstance);
                }



                double             inflateX                       = rastrX / 10;
                double             inflateY                       = rastrY / 10;
                double             maxInflateAreaEdge             = Math.Max(Math.Abs(maxX - minX) + rastrX, Math.Abs(maxY - minY) + rastrY);
                double             maxInflateArea                 = maxInflateAreaEdge * maxInflateAreaEdge;
                List <myRectangle> maxRectanglesListIflatedNoLeak = new List <myRectangle>();
                int count = 1;
                foreach (myRectangle obl in allRectanglesInThisLimitNoCross)
                {
                    obl.resizeAllEdges(-Math.Min(rastrX, rastrY) * 0.1);
                    bool leaked = false;
                    if (count == 1)
                    {
                        double initilaArea = obl.obsah;
                        leaked = SupportClass.inflationLoop(SupportClass.inflateDirection.B, obl, linesListDouble, inflateY, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.R, obl, linesListDouble, inflateX, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.T, obl, linesListDouble, inflateY, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.L, obl, linesListDouble, inflateX, initilaArea, maxInflateArea);
                    }
                    if (count == 2)
                    {
                        double initilaArea = obl.obsah;
                        leaked = SupportClass.inflationLoop(SupportClass.inflateDirection.T, obl, linesListDouble, inflateY, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.L, obl, linesListDouble, inflateX, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.B, obl, linesListDouble, inflateY, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.R, obl, linesListDouble, inflateX, initilaArea, maxInflateArea);
                    }
                    if (count == 3)
                    {
                        double initilaArea = obl.obsah;
                        leaked = SupportClass.inflationLoop(SupportClass.inflateDirection.R, obl, linesListDouble, inflateX, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.T, obl, linesListDouble, inflateY, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.L, obl, linesListDouble, inflateX, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.B, obl, linesListDouble, inflateY, initilaArea, maxInflateArea);
                    }
                    if (count == 4)
                    {
                        double initilaArea = obl.obsah;
                        leaked = SupportClass.inflationLoop(SupportClass.inflateDirection.L, obl, linesListDouble, inflateX, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.B, obl, linesListDouble, inflateY, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.R, obl, linesListDouble, inflateX, initilaArea, maxInflateArea) ||
                                 SupportClass.inflationLoop(SupportClass.inflateDirection.T, obl, linesListDouble, inflateY, initilaArea, maxInflateArea);
                    }
                    if (!leaked)
                    {
                        if (type == grooveType.Cross && Math.Min(obl.A, obl.B) > width * 2)
                        {
                            maxRectanglesListIflatedNoLeak.Add(obl);
                        }
                        if (type == grooveType.ZigZag && Math.Min(obl.A, obl.B) > width * 3)
                        {
                            maxRectanglesListIflatedNoLeak.Add(obl);
                        }
                    }

                    count++;
                    if (count > 4)
                    {
                        count = 1;
                    }
                }

                if (debugInflated)
                {
                    DebugCreateAll.createAll(maxRectanglesListIflatedNoLeak, oSketch, catiaInstance);
                }

                List <myRectangle> maxRectangleListIflatedNoLeakEdgesResized = new List <myRectangle>();
                foreach (myRectangle obl in maxRectanglesListIflatedNoLeak)
                {
                    obl.resizeAllEdges(-edges);
                    if (obl.obsah > 0)
                    {
                        maxRectangleListIflatedNoLeakEdgesResized.Add(obl);
                    }
                }

                double finalP1x = 0;
                double finalP1y = 0;
                double finalP2x = 0;
                double finalP2y = 0;

                myRectangle win = null;
                if (maxRectangleListIflatedNoLeakEdgesResized.Count > 0)
                {
                    win = SupportClass.optimalMaxAndABRatio(maxRectangleListIflatedNoLeakEdgesResized);

                    finalP1x = Math.Round(win.P1x, 1);
                    finalP1y = Math.Round(win.P1y, 1);
                    finalP2x = Math.Round(win.P2x, 1);
                    finalP2y = Math.Round(win.P2y, 1);

                    myRectangle finalRectangle  = new myRectangle(finalP1x, finalP1y, finalP2x, finalP2y);
                    crossLube   finalcrossLube  = new crossLube(finalRectangle, width, depth);
                    ZigZagLube  finalZigZagLube = new ZigZagLube(finalRectangle, width, depth);

                    oPart.Update();
                    oFactory2D = oSketch.OpenEdition();

                    if (type == grooveType.ZigZag)
                    {
                        finalZigZagLube.toSketch(oFactory2D);
                    }
                    else
                    {
                        finalcrossLube.toSketch(oFactory2D);
                    }

                    oSketch.CloseEdition();
                    oPart.Update();

                    if (debugInflated || debugRastr)
                    {
                        return;
                    }

                    oPart.InWorkObject = oSketch;

                    PARTITF.ShapeFactory oShapeFactory = (PARTITF.ShapeFactory)oPart.ShapeFactory;
                    PARTITF.Pocket       oNewPadPlus   = oShapeFactory.AddNewPocket(oSketch, finalcrossLube.Depth);

                    oPart.Update();
                }
                else
                {
                    MainForm.myForm.Activate();
                    MessageBox.Show(@"Groove for the face will not be created!
Area si too small.");
                }

                //all catch
            }catch {}
        }