[S8506] 閾値以上の節点力を持つ節点の結果テーブルを出力するスクリプト

 

閾値以上の節点力を持つ節点の結果テーブルを出力するスクリプトを例示します。

# 出力するファイルを指定

output_path = r"D:/test.csv"

# 閾値の設定

threshold_value = 10

app = designer.GetApplication()

# 表示しているスタディを取得

study = app.GetCurrentStudy()

# 節点力の時刻歴を取得するためのプローブを作成

objProbe = study.CreateProbe(u"Check")

# プローブの自動更新を行うかのフラグ(0:OFF、1:ON)

objProbe.SetAutoRecalculate(0)

# 結果のタイプ

objProbe.SetResultType(u"NodalForce", u"")

# 参照座標系

objProbe.SetResultCoordinate(u"Global Rectangular")

# 評価座標系

objProbe.SetLocationCoordinate(u"Global Rectangular")

# 成分

objProbe.SetComponent(u"Absolute")

# [タイプ]フラグ(0:座標指定、1:節点ID指定)

objProbe.SetProbeType(1)

# すべての測定位置を削除

objProbe.ClearPoints()

# 節点を選択するための準備

view = app.View()

# メッシュ表示

view.ShowMesh()

# 節点選択モードに変更

view.SelectElementVertex()

# 選択を解除

view.ClearSelect()

# 全節点数を取得

num_vertices = study.GetReport().NumVertices()

# 閾値を超えた節点を格納するリスト

exceeding_nodes = []

for node_id in range(1, num_vertices + 1):

   # プローブに節点番号を設定

   objProbe.SetId(0, node_id)

   # プローブのデータの更新

   objProbe.Build()

   # プローブの取得結果の点列データ(DataSet)を取得

   objData = objProbe.GetDataSet()

   objProbe.SetAutoRecalculate(0)

   flag_exceed = False

   # 時刻のループ

   for val in objData.GetColumn(1):

       if val >= threshold_value:

           flag_exceed = True

           break  # 閾値を超えたらループを抜ける

   # 閾値を超えた節点を選択リストに追加

   if flag_exceed:

       exceeding_nodes.append(node_id)

       # ビュー上で節点を選択

       view.SelectByID(node_id)

if exceeding_nodes:

   # 選択された節点の結果テーブルを作成

   parameter = study.CreateTableDefinition()

   # 解析結果タイプ

   parameter.SetResultType(u"NodalForce")

   # 参照座標系

   parameter.SetCoordinate(u"Global Rectangular")

   # 成分

   parameter.SetComponent(u"Absolute")

   # ステップ

   parameter.SetAllSteps()

   # 最大/最小値を表示する

   parameter.SetIsShownMinMaxInfo(False)

   # 位置情報を表示する

   parameter.SetIsShownPositionInfo(True)

   # ファイルを出力する

   study.ExportTable(parameter, output_path, 0)

else:

   print(u"閾値を超えた節点は見つかりませんでした。")

ファイルご利用の注意点

JMAGスクリプトライブラリをご利用されるに際し、以下の利用規約をよくお読みいただき、ご同意の上ご利用下さるようお願い申し上げます。