Files
wg_cpso/CaeMesh/Nodes/FeNode.cs

76 lines
2.2 KiB
C#
Raw Normal View History

2026-03-25 18:20:24 +08:00
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);
}
}
}