私はC#を使用しているRhino/Grasshopper内部のFEA(有限要素解析)手順で作業しています。私は入力として線(FDs)とメッシュの三角面(NFDs)を持っていて、それぞれがノード座標を持っています。私はこれらの座標を取得し、各ノードをインデックスするためのリストでそれらを再開しようとしています。線として座標からのノードのインデックス
とメッシュ面は私が重複する情報を避けようとして次のことをやった同じノードを共有することができます。私は、プロジェクトをビルドするとき
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の間ではありません)。
どうすれば解決できますか?あなたが予想以上のノードがある場合
おかげで、
マルシオ
どのようにこれを乗り越えましたか? –