【スクリプト】関連のないソリッドジオメトリの中の節点を選びたい

imoto
imoto
Altair Employee
edited November 2020 in 質問と回答 (Q&A)

通常、HyperMeshでは、節点はサーフェスやソリッドジオメトリと関連性を持っています。

関連が付いている場合は、エンティティ選択時の選択オプションの'by geoms'でサーフェスやソリッドジオメトリに関連する節点/要素を簡単に選ぶことができます。

<?xml version="1.0" encoding="UTF-8"?>bygeoms.jpg

 

ただ、節点とジオメトリの関連が全く無い場合には、この方法で選ぶことが出来ません。

 

節点とジオメトリの関連が無い状態でも、ソリッドジオメトリの中にある節点を選びたいという時には、指定した座標値がソリッドジオメトリの内外かを返してくれる「hm_ispointinsidesolid」コマンドが便利です。

 

この「hm_ispointinsidesolid」コマンドを活用して、例えばユーザーが選択した節点群とソリッドジオメトリから、ソリッドの中にある節点だけを抽出したい場合は、下記のような記述で可能です。

 

set inlist '';
*createentitypanel solids 'Select a solid';
set solidid [hm_info lastselectedentity solids];
*createmarkpanel nodes 1 'Select nodes';
foreach nodeid [hm_getmark nodes 1] {
 lassign [hm_getvalue nodes id=$nodeid dataname=coordinates] X Y Z;
 if {[hm_ispointinsidesolid $X $Y $Z $solidid] == '1'} {
  lappend inlist $nodeid;
 }
}
if {[llength $inlist] == '0'} {
 tk_messageBox -message 'There is no node in selected solid geometry.';
} else {
 tk_messageBox -message 'Found the [llength $inlist] nodes,\nYou can call from retrieve option.';
 hm_createmark nodes 1 'by id' $inlist;
 *marktousermark nodes 1;
}
hm_markclearall 1;

※ファイルに保存して、'File→Run→Tcl/Tk Script'から実行できます。

※ダウンロードには、必ずフォーラムへのサインインが必要です。

 

Unable to find an attachment - read this blog

Answers

  • imoto
    imoto
    Altair Employee
    edited April 2019

    同じく、「hm_ispointinsidesolid」コマンドを活用して、要素中心座標がソリッドジオメトリの中に入っていれば選択するという内容のスクリプトも投稿します。

     

    基本的な使い方は同じです。選択された結果は、選択オプションの「retrieve」で呼び出し可能です。

    ※ダウンロードには、必ずフォーラムへのサインインが必要です。

    Unable to find an attachment - read this blog