選択した要素から節点情報を取得する

未分類

例題説明

Jupiter上で選択した要素から、その要素を構成する節点情報を取得します。
本例題を実施する前に、Jupiter上で要素を持つモデルを開いて準備しておいてください、
今回は、TET10要素を持つCubeモデルを使用します。

サンプルコード


# Jupiter上で手操作で選択した要素情報を取得します。
elems = JPT.GetSelectedElems()

# 空の集合を作成し、取得した要素情報から節点情報を取得して集合に追加します。
nodes = set()
for elem in elems:
    for node in elem.nodes:
        nodes.add(node)

# ID順にソートし、節点情報をAPI ウィンドウにprintします。 
sorted_nodes = sorted(nodes, key=lambda node: node.id)
for node in sorted_nodes:
    print(node.id, node.pos.x, node.pos.y, node.pos.z)

サンプルコードの説明

Jupiter上で要素を選択し、要素情報を取得する。

Jupiter上であらかじめ開いていたモデルで、要素を選択します。
本例では、TET10要素(ID:1346)を選択します。

本例で使用するPSJ Utilityは要素を選択した状態で実行する必要があるため、終了までは選択状態を維持してください。

選択中の要素の情報を取得し、それらを変数elemsに代入します。


elems = JPT.GetSelectedElems()

JPT.GetSelectedElems()は、選択中の要素の情報を取得するPSJ Utilityです。
取得した情報は、Jupiter内で使用されるElemVectorというリスト型のクラスオブジェクトで、この中にはDElemというクラスオブジェクトが入っています。

ElemVector、DItemオブジェクトについての詳細はそれぞれリンク先をご参考ください。
 ・ElemVector
 ・DElem

要素情報から節点情報を取得する

変数elems内の接続要素情報から、その要素の持つ節点情報を取得していきます。


nodes = set()
for elem in elems:
    for node in elem.nodes:
        nodes.add(node)

まず、節点情報を格納するための空の集合型nodesを作成します。
次にfor文を組み合わせて、elemsに含まれるDElemオブジェクトの持つnodesというインスタントを対象にとり、elem.nodesに含まれるDNodeオブジェクトをnodesに追加していきます。


sorted_nodes = sorted(nodes, key=lambda node: node.id)

次に、追加したDNodeをID順(昇順)で並べ替えるため、sorted()関数を使用し、ソート後の集合型を変数sorted_nodesとして代入します。
node: node.idを指定することで、node(DNode)の持つインスタントidをもとに節点ID順にnodes内の要素を並べ替えています。
ソート後の集合型に格納されている節点情報は、次のコードで確認が可能です。
節点のID、Jupiter内におけるGlobal座標での節点のX座標、Y座標、Z座標を確認しました。


for node in sorted_nodes:
    print(node.id, node.pos.x, node.pos.y, node.pos.z)

利用しているAPI

JPT.GetSelectedElems()