局所座標系での表面メッシュの円範囲選択

amethyst
amethyst New Altair Community Member
edited November 2020 in 質問と回答 (Q&A)

お世話になっております。

 

ボルト穴のサイズを変更するための前処理として、選択した複製先の穴の中心ノードを用いて旧ボルト穴の存在する表面のエレメントをスクリプトで取得したいです。モデルが直交座標系から傾いている場合にその傾きに対応できる円範囲選択の記述方法の質問となります。

使用の場面として取得したelementのマスク後にreverseallすることで表面のメッシュだけを表示し処理します。新ボルト穴の平面と複製先の面は平行であるという前提です。

現在は 'by face'を使わず、createmarkの'by cylinder'をオプションにし、

 	*createmark elem 1 'by cylinder' $X $Y $Z $X $Y [expr $Z + 0.01] 1000 1 inside 1 1 0.01 ;#数値誤差のための厚み0.01 XYZは複製先の穴の中心ノードの座標 	*maskentitymark elems 1 0 ;#マスク

のように複数のノードをforeachで回すたび毎に取得とマスクをしているのですが、この記述では面が直交座標系と平行であるとは限らないため、モデルが傾くと期待通りに取得できません。

そこで局所座標系を用いて、新ボルト穴の面から局所座標を取得して利用するとのことで3点を選択し、

 #局所座標系の作成 *createmark nodes 1 $originPoint *systemcreate 1 0 $originPoint 'x-axis' $Point1 'xy plane' $Point2  #局所座標系へのアサイン foreach node $SelectNodes { *createmark nodes 2 $node *systemsetreference nodes 2 1 *systemsetanalysis nodes 2 1 } 

のように作成して移動先のノードをアサインしました。

その後、局所座標系を利用した場合のoption等をどのように設定すれば傾きに合わせて平面のエレメントを取得できるのか分からず質問させていただきました。

 

Answers

  • Imoto
    Imoto
    Altair Employee
    edited June 2019

    こんにちは、@amethyst

     

    hm_getvalueで取得できる節点のData nameでは、x, y, zが参照座標系からの座標値、globalx, globaly, globalzが全体座標系からの座標値となっていますので、必要に応じて使い分けていただくのが良いかと思われます。

     

    今回、ボルトのモデル化に、1Dページ⇒connectorsパネル⇒bolt機能は利用されていますか?
    コネクターが使われているのであれば、部品のリプレース機能で部品入れ替え後に、コネクターのリアライズ(再接続)を実行するだけで完結できると思われます。

  • amethyst
    amethyst New Altair Community Member
    edited June 2019

    こんにちは、@Imotoさん。

     

    取得した配置先の中心ノードのXYZの値に対して外積を計算して加算することで傾きに対応することができました。

    今回のスクリプトは依頼されたもので、おそらく教えていただいた機能が使われていない場合を想定してのものだと思います。

     

    この度はありがとうございました。