/// <inheritdoc /> public IMesh Triangulate(IPolygon polygon, ConstraintOptions options, QualityOptions quality) { var mesh = (Mesh)triangulator.Triangulate(polygon.Points, config); var cmesher = new ConstraintMesher(mesh, config); var qmesher = new QualityMesher(mesh, config); mesh.SetQualityMesher(qmesher); // Insert segments. cmesher.Apply(polygon, options); // Refine mesh. qmesher.Apply(quality); return(mesh); }
/// <inheritdoc /> public IMesh Triangulate(IPolygon polygon, ConstraintOptions options, QualityOptions quality) { var mesh = (Mesh)triangulator.Triangulate(polygon.Points, config); var cmesher = new ConstraintMesher(mesh, config); var qmesher = new QualityMesher(mesh, config); mesh.SetQualityMesher(qmesher); // Insert segments. cmesher.Apply(polygon, options); // Refine mesh. qmesher.Apply(quality); return mesh; }
/// <summary> /// Set QualityMesher for mesh refinement. /// </summary> /// <param name="qmesher"></param> internal void SetQualityMesher(QualityMesher qmesher) { qualityMesher = qmesher; }
public void Refine(QualityOptions quality, bool delaunay = false) { invertices = vertices.Count; if (behavior.Poly) { insegments = behavior.useSegments ? subsegs.Count : hullsize; } Reset(); if (qualityMesher == null) { qualityMesher = new QualityMesher(this, new Configuration()); } // Enforce angle and area constraints. qualityMesher.Apply(quality, delaunay); }