public void SplitToMaxEdgeLength(double fMaxLen) { var queue = new List <int>(); int NE = Graph.MaxEdgeID; for (int eid = 0; eid < NE; ++eid) { if (!Graph.IsEdge(eid)) { continue; } if (FixedEdgeFilterF(eid)) { continue; } Index2i ev = Graph.GetEdgeV(eid); double dist = Graph.GetVertex(ev.a).Distance(Graph.GetVertex(ev.b)); if (dist > fMaxLen) { DGraph2.EdgeSplitInfo splitInfo; if (Graph.SplitEdge(eid, out splitInfo) == MeshResult.Ok && dist > 2 * fMaxLen) { queue.Add(eid); queue.Add(splitInfo.eNewBN); } } } while (queue.Count > 0) { int eid = queue[queue.Count - 1]; queue.RemoveAt(queue.Count - 1); if (!Graph.IsEdge(eid)) { continue; } Index2i ev = Graph.GetEdgeV(eid); double dist = Graph.GetVertex(ev.a).Distance(Graph.GetVertex(ev.b)); if (dist > fMaxLen) { DGraph2.EdgeSplitInfo splitInfo; if (Graph.SplitEdge(eid, out splitInfo) == MeshResult.Ok && dist > 2 * fMaxLen) { queue.Add(eid); queue.Add(splitInfo.eNewBN); } } } }