diff --git a/src/Triangle.Examples/Examples/ExamplePar.cs b/src/Triangle.Examples/Examples/ExamplePar.cs
index a98a08e..f047642 100644
--- a/src/Triangle.Examples/Examples/ExamplePar.cs
+++ b/src/Triangle.Examples/Examples/ExamplePar.cs
@@ -48,7 +48,8 @@ namespace TriangleNet.Examples
var config = new Configuration()
{
Predicates = () => predicates,
- TrianglePool = () => pool.Restart()
+ TrianglePool = () => pool.Restart(),
+ RandomSource = () => Random.Shared
};
var triangulator = new Dwyer();
@@ -118,7 +119,8 @@ namespace TriangleNet.Examples
var config = new Configuration()
{
Predicates = () => predicates,
- TrianglePool = () => pool.Restart()
+ TrianglePool = () => pool.Restart(),
+ RandomSource = () => Random.Shared
};
var mesher = new GenericMesher(config);
diff --git a/src/Triangle/Configuration.cs b/src/Triangle/Configuration.cs
index c8add8c..70d7d43 100644
--- a/src/Triangle/Configuration.cs
+++ b/src/Triangle/Configuration.cs
@@ -34,11 +34,12 @@ namespace TriangleNet
/// Initializes a new instance of the class.
///
/// Factory method for .
- /// Factory method for .
+ /// Factory method for .
public Configuration(Func predicates, Func trianglePool)
{
Predicates = predicates;
TrianglePool = trianglePool;
+ RandomSource = () => new Random();
}
///
@@ -47,8 +48,13 @@ namespace TriangleNet
public Func Predicates { get; set; }
///
- /// Gets or sets the factory method for the .
+ /// Gets or sets the factory method for the .
///
public Func TrianglePool { get; set; }
+
+ ///
+ /// Gets or sets the factory method for a source.
+ ///
+ public Func RandomSource { get; set; }
}
}
diff --git a/src/Triangle/Mesh.cs b/src/Triangle/Mesh.cs
index b17cc89..a052768 100644
--- a/src/Triangle/Mesh.cs
+++ b/src/Triangle/Mesh.cs
@@ -214,7 +214,7 @@ namespace TriangleNet
predicates = config.Predicates();
- locator = new TriangleLocator(this, predicates);
+ locator = new TriangleLocator(this, predicates, config.RandomSource());
TransferNodes(points);
}
diff --git a/src/Triangle/TriangleLocator.cs b/src/Triangle/TriangleLocator.cs
index ec6f807..05b2295 100644
--- a/src/Triangle/TriangleLocator.cs
+++ b/src/Triangle/TriangleLocator.cs
@@ -7,6 +7,7 @@
namespace TriangleNet
{
+ using System;
using TriangleNet.Geometry;
using TriangleNet.Topology;
@@ -24,35 +25,26 @@ namespace TriangleNet
///
public class TriangleLocator
{
- TriangleSampler sampler;
- Mesh mesh;
-
- IPredicates predicates;
+ private readonly TriangleSampler sampler;
+ private readonly Mesh mesh;
+ private readonly IPredicates predicates;
// Pointer to a recently visited triangle. Improves point location if
// proximate vertices are inserted sequentially.
internal Otri recenttri;
- ///
- /// Initializes a new instance of the class.
- ///
- /// The mesh.
- public TriangleLocator(Mesh mesh)
- : this(mesh, RobustPredicates.Default)
- {
- }
-
///
/// Initializes a new instance of the class.
///
/// The mesh.
/// The predicates.
- public TriangleLocator(Mesh mesh, IPredicates predicates)
+ /// The random source used in .
+ public TriangleLocator(Mesh mesh, IPredicates predicates, Random random)
{
this.mesh = mesh;
this.predicates = predicates;
- sampler = new TriangleSampler(mesh);
+ sampler = new TriangleSampler(mesh, random);
}
///
diff --git a/src/Triangle/TriangleSampler.cs b/src/Triangle/TriangleSampler.cs
index 519a37a..cf9ab0d 100644
--- a/src/Triangle/TriangleSampler.cs
+++ b/src/Triangle/TriangleSampler.cs
@@ -16,13 +16,11 @@ namespace TriangleNet
///
class TriangleSampler : IEnumerable
{
- private const int RANDOM_SEED = 110503;
-
// Empirically chosen factor.
private const int samplefactor = 11;
- private Random random;
- private Mesh mesh;
+ private readonly Random random;
+ private readonly Mesh mesh;
// Number of random samples for point location (at least 1).
private int samples = 1;
@@ -30,11 +28,6 @@ namespace TriangleNet
// Number of triangles in mesh.
private int triangleCount = 0;
- public TriangleSampler(Mesh mesh)
- : this(mesh, new Random(RANDOM_SEED))
- {
- }
-
public TriangleSampler(Mesh mesh, Random random)
{
this.mesh = mesh;
@@ -46,8 +39,8 @@ namespace TriangleNet
///
public void Reset()
{
- this.samples = 1;
- this.triangleCount = 0;
+ samples = 1;
+ triangleCount = 0;
}
///