我正在使用 C# 在 Rhino/Grasshopper 中进行 FEA(有限元分析)程序。我有线(FD)和网格三角形面(NFD)作为输入,每个都有它们的节点坐标。我正在尝试获取这些坐标并将它们恢复到列表中以索引每个节点。
由于线和网格面可以共享相同的节点,我做了以下尝试避免重复信息:
public void NodeIndex()
{
List<Point3d> coord = new List<Point3d>();
//Add all nodes
foreach (NFD nfdens in nfd)
{
foreach (Node node in nfdens.nodes)
{
coord.Add(node.point);
}
}
foreach (FD fdens in fd)
{
foreach (Node node in fdens.nodes)
{
coord.Add(node.point);
}
}
//Remove Duplicates
// 0.1 Stands for distance tolerance
Point3d[] coordf = Point3d.CullDuplicates(coord, 0.1);
coord = new List<Point3d>();
foreach (Point3d pt in coordf)
{
coord.Add(pt);
}
//Set indexes
int id = 0;
foreach (Point3d pt in coordf)
{
nodes.Add(new Node(pt, id));
id++;
}
foreach (NFD nfdens in nfd)
{
foreach (Node node in nfdens.nodes)
{
node.SetIndex(nodes);
}
}
foreach (FD fdens in fd)
{
foreach (Node node in fdens.nodes)
{
node.SetIndex(nodes);
}
}
foreach (Pload load in pointload)
{
load.node.SetIndex(nodes);
}
foreach (Supp sup in supports)
{
sup.node.SetIndex(nodes);
}
}
public void SetIndex(List<Node> nodes)
{
foreach (Node node in nodes)
{
double dist = point.DistanceTo(node.point);
if (dist < 0.1)
{
index = node.index;
}
}
}
但是,当我构建项目时,我仍然会收到重复的信息。网格面重复消失了,但代码复制了线条的索引。(例如,一个 9 个节点的问题给了我 13 个节点,有时是 14 或 15 个。查看网格索引,所有内容都低于 9,但在行中不是 [介于 9 和 13 之间])。
我该如何解决?
谢谢,
马尔西奥