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]); }
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(); }
// 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()); }
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(); }
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(); }
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 {} }