using System; #pragma warning disable IDE0130 // ReSharper disable once CheckNamespace namespace CaeMesh { [Serializable] public struct FeNode { // Variables public int Id; public double X; public double Y; public double Z; // Constructors public FeNode(int id, double x, double y, double z) { Id = id; X = x; Y = y; Z = z; } public FeNode(int id, double[] coor) : this(id, coor[0], coor[1], coor[2]) { } public FeNode(FeNode node) : this(node.Id, node.X, node.Y, node.Z) { } // Methods public void SetCoor(double x, double y, double z) { X = x; Y = y; Z = z; } public double[] Coor { get { return new[] { X, Y, Z }; } set { X = value[0]; Y = value[1]; Z = value[2]; } } public bool IsEqual(FeNode node, double epsilon = 1E-6) { //int div = 10000; // The <= sign solves the problem when a coordinate equals 0 //if (Id == node.Id && Math.Abs(X - node.X) <= Math.Abs(X / div) && // Math.Abs(Y - node.Y) <= Math.Abs(Y / div) && // Math.Abs(Z - node.Z) <= Math.Abs(Z / div)) if (Id == node.Id && Math.Abs(X - node.X) <= epsilon && Math.Abs(Y - node.Y) <= epsilon && Math.Abs(Z - node.Z) <= epsilon) return true; else return false; } public FeNode DeepCopy() { return new FeNode(Id, X, Y, Z); } } }