public static List <PLine> splitSelfIntersectionPline(PLine pline) { List <PLine> r = new List <PLine>(); PLine pl = new PLine(); for (int i = 0; i < pline.Count; i++) { pl.CADData = pline.CADData; Edge e = pline[i]; pl.Add(e); int index = pline.findSelfInterPoint(e.EndPoint); if (index >= 0) { r.Add(pl); pl = new PLine(); } } if (pl.Count > 0) { r.Add(pl); } return(r); }
public static List <PLine> ConstructFromUnorderedSegments(List <Edge> unorderedEdges, int relevantDecimals, ref int numberOfPLines, ref int numberOfSegments, ref int zeroLength, bool writeDatabase, bool useProgressMeter, bool eliminateZeroLengthSegments) { Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; ProgressMeter progressMeter = new ProgressMeter(); MessageFilter messageFilter = new MessageFilter(); System.Windows.Forms.Application.AddMessageFilter(messageFilter); List <PLine> list = new List <PLine>(); PLine.edgeVertexList = new EdgeVertexList(); if (useProgressMeter) { ProgressMeter arg_44_0 = progressMeter; int arg_44_1 = unorderedEdges.Count; //int arg_43_0 = unorderedEdges.Count; arg_44_0.SetLimit(arg_44_1); } if (useProgressMeter) { progressMeter.Start("Processing lines"); } List <PLine> result; try { //"0." + "".PadLeft(relevantDecimals, '0'); for (int i = 0; i < unorderedEdges.Count; i++) { if (useProgressMeter && i % 100 == 0) { progressMeter.MeterProgress(); } Edge edge = unorderedEdges[i]; edge.Round(relevantDecimals); PLine.edgeVertexList.Add(edge); } for (int j = 0; j < unorderedEdges.Count; j++) { if (useProgressMeter) { progressMeter.MeterProgress(); } messageFilter.CheckMessageFilter((long)j, 100); if (unorderedEdges[j].Status == Edge.EdgeStatus.NotDefined) { PLine pLine = new PLine(); pLine.caddata = unorderedEdges[j].CADData; List <Edge> list2 = PLine.smethod_0(unorderedEdges[j], pLine); pLine.AddRange(list2); pLine.Add(unorderedEdges[j]); unorderedEdges[j].Status = Edge.EdgeStatus.NotDefined; List <Edge> list3 = PLine.smethod_1(unorderedEdges[j], pLine); pLine.AddRange(list3); double num = Math.Pow(10.0, (double)(-(double)relevantDecimals)); int num2 = 0; if (pLine.Count == 1 && pLine[0].Length < num) { zeroLength++; num2++; if (eliminateZeroLengthSegments) { //goto IL_231; continue; } } else { for (int k = pLine.Count - 2; k >= 0; k--) { if (pLine[k].Length < num) { if (eliminateZeroLengthSegments) { pLine[k + 1].StartPoint = pLine[k].StartPoint; pLine.RemoveAt(k); } zeroLength++; num2++; } } } if (pLine.Count != 0) { List <PLine> pllist = PLine.splitSelfIntersectionPline(pLine); for (int ii = 0; ii < pllist.Count; ii++) { list.Add(pllist[ii]); if (writeDatabase) { PLine.WriteInDatabase(pllist[ii]); } } //list.Add(pLine); if (!eliminateZeroLengthSegments) { num2 = 0; } numberOfSegments += list2.Count + list3.Count - num2 + 1; numberOfPLines++; /*if (writeDatabase) * { * PLine.WriteInDatabase(pLine); * }*/ } } //IL_231:; } if (useProgressMeter) { progressMeter.Stop(); } result = list; } catch (System.Exception ex) { if (useProgressMeter) { progressMeter.Stop(); } throw; } return(result); }