Files
Triangle.NET/src/Triangle.Examples/Examples/Example4.cs
T
2022-03-05 20:49:49 +01:00

72 lines
1.9 KiB
C#

namespace TriangleNet.Examples
{
using TriangleNet;
using TriangleNet.Geometry;
using TriangleNet.Meshing;
using TriangleNet.Rendering.Text;
using TriangleNet.Smoothing;
/// <summary>
/// Refine only a part of a polygon mesh by using region pointers and an area constraint.
/// </summary>
public class Example4
{
public static bool Run(bool print = false)
{
// Generate the input geometry.
var poly = CreatePolygon();
// Define regions (first one defines the area constraint).
poly.Regions.Add(new RegionPointer(1.5, 0.0, 1, 0.01));
poly.Regions.Add(new RegionPointer(2.5, 0.0, 2));
// Set quality and constraint options.
var options = new ConstraintOptions()
{
ConformingDelaunay = true
};
var quality = new QualityOptions()
{
MinimumAngle = 25.0,
VariableArea = true
};
//quality.UserTest = (t, area) => t.Label == 1 && area > 0.01;
var mesh = poly.Triangulate(options, quality);
var smoother = new SimpleSmoother();
smoother.Smooth(mesh, 5);
if (print) SvgImage.Save(mesh, "example-4.svg", 500);
return true;
}
public static IPolygon CreatePolygon()
{
// Generate three concentric circles.
var poly = new Polygon();
// Center point.
var center = new Point(0, 0);
// Inner contour (hole).
poly.Add(Generate.Circle(1.0, center, 0.1, 1), center);
// Internal contour.
poly.Add(Generate.Circle(2.0, center, 0.1, 2));
// Outer contour.
poly.Add(Generate.Circle(3.0, center, 0.3, 3));
// Note that the outer contour has a larger segment size!
return poly;
}
}
}