Exemple #1
0
 public void toSketch(MECMOD.Factory2D oFactory2D)
 {
     MECMOD.Line2D oLine2D1 = oFactory2D.CreateLine(p1[0], p1[1], p2[0], p2[1]);
     MECMOD.Line2D oLine2D2 = oFactory2D.CreateLine(p2[0], p2[1], p3[0], p3[1]);
     MECMOD.Line2D oLine2D3 = oFactory2D.CreateLine(p3[0], p3[1], p4[0], p4[1]);
     MECMOD.Line2D oLine2D4 = oFactory2D.CreateLine(p4[0], p4[1], p5[0], p5[1]);
     MECMOD.Line2D oLine2D5 = oFactory2D.CreateLine(p5[0], p5[1], p6[0], p6[1]);
     MECMOD.Line2D oLine2D6 = oFactory2D.CreateLine(p6[0], p6[1], p7[0], p7[1]);
     MECMOD.Line2D oLine2D7 = oFactory2D.CreateLine(p7[0], p7[1], p8[0], p8[1]);
     MECMOD.Line2D oLine2D8 = oFactory2D.CreateLine(p8[0], p8[1], p1[0], p1[1]);
 }
        // Post
        public void TranslateT2C(TransCAD.IStdSketchGeometry tGeom)
        {
            if (tGeom.Type == TransCAD.StdSketchGeometryType.Line) // 일반 Line인 경우
            {
                TransCAD.IStdSketchLine        tLine       = (TransCAD.IStdSketchLine)tGeom;
                TransCAD.StdSketchControlPoint tStartPoint = (TransCAD.StdSketchControlPoint)tLine.StartPoint;
                TransCAD.StdSketchControlPoint tEndPoint   = (TransCAD.StdSketchControlPoint)tLine.EndPoint;

                double         sX          = tStartPoint.X;
                double         sY          = tStartPoint.Y;
                MECMOD.Point2D cStartPoint = SketchManager.cFactory.CreatePoint(sX, sY);
                cStartPoint.ReportName = ++SketchManager.cReportName;

                double         eX        = tEndPoint.X;
                double         eY        = tEndPoint.Y;
                MECMOD.Point2D cEndPoint = SketchManager.cFactory.CreatePoint(eX, eY);
                cEndPoint.ReportName = ++SketchManager.cReportName;

                MECMOD.Line2D cLine = SketchManager.cFactory.CreateLine(sX, sY, eX, eY);
                cLine.StartPoint = cStartPoint;
                cLine.EndPoint   = cEndPoint;

                cLine.ReportName = ++SketchManager.cReportName;
            }
            else if (tGeom.Type == TransCAD.StdSketchGeometryType.Centerline) // Centerline인 경우
            {
                TransCAD.IStdSketchCenterline  tLine       = (TransCAD.IStdSketchCenterline)tGeom;
                TransCAD.StdSketchControlPoint tStartPoint = (TransCAD.StdSketchControlPoint)tLine.StartPoint;
                TransCAD.StdSketchControlPoint tEndPoint   = (TransCAD.StdSketchControlPoint)tLine.EndPoint;

                double         sX          = tStartPoint.X;
                double         sY          = tStartPoint.Y;
                MECMOD.Point2D cStartPoint = SketchManager.cFactory.CreatePoint(sX, sY);
                cStartPoint.ReportName = ++SketchManager.cReportName;

                double         eX        = tEndPoint.X;
                double         eY        = tEndPoint.Y;
                MECMOD.Point2D cEndPoint = SketchManager.cFactory.CreatePoint(eX, eY);
                cEndPoint.ReportName = ++SketchManager.cReportName;

                MECMOD.Line2D cLine = SketchManager.cFactory.CreateLine(sX, sY, eX, eY);
                cLine.StartPoint = cStartPoint;
                cLine.EndPoint   = cEndPoint;

                cLine.ReportName = ++SketchManager.cReportName;

                SketchManager.cCenterLine = cLine;
            }
        }
Exemple #3
0
        public static void createAll(List <myRectangle> myRectanglesList, MECMOD.Sketch oSketch, INFITF.Application catiaInstance)
        {
            MECMOD.Factory2D oFactory2D = oSketch.OpenEdition();
            double           count      = 0;

            foreach (myRectangle obl in myRectanglesList)
            {
                MECMOD.Line2D oLine2D1 = oFactory2D.CreateLine(obl.P1x, obl.P1y, obl.P2x, obl.P1y);
                MECMOD.Line2D oLine2D2 = oFactory2D.CreateLine(obl.P2x, obl.P1y, obl.P2x, obl.P2y);
                MECMOD.Line2D oLine2D3 = oFactory2D.CreateLine(obl.P2x, obl.P2y, obl.P1x, obl.P2y);
                MECMOD.Line2D oLine2D4 = oFactory2D.CreateLine(obl.P1x, obl.P2y, obl.P1x, obl.P1y);

                catiaInstance.set_StatusBar(Math.Round(count / myRectanglesList.Count * 100) + "%");

                count++;
            }

            oSketch.CloseEdition();
        }
        // Pre
        public void TranslateC2T(MECMOD.GeometricElement cGeom)
        {
            MECMOD.Line2D cLine = (MECMOD.Line2D)cGeom;

            object[] StartCoords = new object[2];
            object[] EndCoords   = new object[2];

            string cLineName = cLine.get_Name();

            cLine.StartPoint.GetCoordinates(StartCoords);
            cLine.EndPoint.GetCoordinates(EndCoords);

            if (cLine == SketchManager.cCenterLine) // Centerline인 경우
            {
                SketchManager.tSketchEditor.Create2DCenterline2Points(cLineName, (double)StartCoords.GetValue(0), (double)StartCoords.GetValue(1), (double)EndCoords.GetValue(0), (double)EndCoords.GetValue(1));
            }
            else // 일반 Line인 경우
            {
                SketchManager.tSketchEditor.Create2DLine2Points(cLineName, (double)StartCoords.GetValue(0), (double)StartCoords.GetValue(1), (double)EndCoords.GetValue(0), (double)EndCoords.GetValue(1));
            }
        }
Exemple #5
0
        // Pre
        public void TranslateC2T(MECMOD.Sketch cSketch)
        {
            string sketchName = cSketch.get_Name();

            MECMOD.GeometricElements cGeoms = cSketch.GeometricElements;

            cCenterLine = cSketch.CenterLine;

            object[] cCoords = new object[9];
            cSketch.GetAbsoluteAxisData(cCoords);

            TransCAD.Reference        tSktReference = PartManager.ReferenceManager.GetTransCADSketchReference(cSketch);
            TransCAD.StdSketchFeature tSketch       = PartManager.tFeatures.AddNewSketchFeature(sketchName, tSktReference);

            tSketch.SetCoordinateSystem((double)cCoords.GetValue(0), (double)cCoords.GetValue(1), (double)cCoords.GetValue(2),
                                        (double)cCoords.GetValue(3), (double)cCoords.GetValue(4), (double)cCoords.GetValue(5),
                                        (double)cCoords.GetValue(6), (double)cCoords.GetValue(7), (double)cCoords.GetValue(8));

            tSketchEditor = tSketch.OpenEditorEx(false);

            for (int i = 1; i <= cGeoms.Count; i++)
            {
                MECMOD.GeometricElement cGeom = cGeoms.Item(i);

                if (cGeom.GeometricType == MECMOD.CatGeometricType.catGeoTypeLine2D)
                {
                    SketchLine2D line2D = new SketchLine2D(this);
                    line2D.TranslateC2T(cGeom);
                }
                else if (cGeom.GeometricType == MECMOD.CatGeometricType.catGeoTypeCircle2D)
                {
                    SketchCircle2D circle2D = new SketchCircle2D(this);
                    circle2D.TranslateC2T(cGeom);
                }
            }

            tSketchEditor.Close();

            tReference = PartManager.tPart.SelectObjectByName(sketchName);
        }
Exemple #6
0
        // 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());
        }
Exemple #7
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 {}
        }