EXCEL VBAを使ってFEMAPの2つのノード間にビームのラインエレメントを作成する方法

はじめに

Femapを使った解析モデルの作成では、ノード間にビームなどのラインエレメントを配置する作業が頻繁に発生しますね。しかし、この作業を手で繰り返すのは時間がかかり、ミスの原因にもなりがちです。そこで、Excel VBAを使って作業を自動化し効率を大幅に向上させましょう。この記事では、FemapのAPIを活用し、2つのノード間にビーム要素を自動生成する方法を解説します。

2つのノード間にビーム要素を作成するコード

以下は、2つのノード間にビーム要素を作成するコードの例です。
この例ではノードID1とノードID2を端点とし、ビームプロパティIDが1であるビーム要素(要素ID=1)を作成しています。

VB
Sub CreateBeamElementInFemap()
  'Femap model オブジェクトの生成
  Dim f As Object
  Set f = GetObject(,"femap.model")
  
  '要素オブジェクトの生成
  Dim el As Object
  Set el = f.feElem
  
  '線形ビームエレメントの作成
  el.Type = 5 '線形ビームの場合は5に代入
  el.propID = 1 ' 作成するビーム要素のプロパティID
  el.topology = 0 '要素の形状 ラインの場合は0を代入
  el.orientID = 0 '要素がバーやビームなどの場合のオリエンテーションノードID。0を入力するとorientプロパティで方向ベクトルの指定をする。
  el.orient(0) = -1 'バー要素やビーム要素の方向ベクトル。Doube型。
  el.orient(1) = -1 'バー要素やビーム要素の方向ベクトル。Doube型。
  el.orient(2) = 0  'バー要素やビーム要素の方向ベクトル。Doube型。
  el.Node(0) = 1 '始点のノードIDの代入。
  el.Node(1) = 2 '終点のノードIDの代入。
  el.Put(1) '要素の作成、上書き(カッコ内に作成したい要素のIDを入力)
  
  'オブジェクト開放
  Set el = Nothing
  Set f = Nothing
  
End Sub
  • 4~5行目はFemapオブジェクトの作成です。FEMAPを起動していないときにこのコードを実行するとエラーとなるので注意が必要です。
  • 8~9行目でEntityオブジェクトのエレメント(要素)オブジェクトを生成しています。
  • 11行目は要素タイプの指定です。Long型で入力します。線形ビーム要素の場合は”5″にします。
  • 12行目でプロパティIDの指定です。
  • 13行目はエレメント形状の設定です。0でライン(線)になります。
  • 14~17行目はエレメントのオリエンテーション方向の入力です。ノードで指定する場合はorientIDにIDを入力し、ノードで指定しない場合はorientID=0としてorient配列に各値を入力します。
  • 18~19行目でビーム要素の始点と終点となるノードIDの指定です。
  • 20行目、.Put()メソッドで要素の新規作成、上書きを実行します。

エクセルシートと連携させる例

エクセルシートに入力した値からビーム要素を作成する例

エクセルで次のような表を準備しましょう。
A2~D2までが入力欄です。

VB
Sub CreateBeamElementInFemap()
  'Femap model オブジェクトの生成
  Dim f As Object
  Set f = GetObject(,"femap.model")
  
  '要素オブジェクトの生成
  Dim el As Object
  Set el = f.feElem
  
  '線形ビームエレメントの作成
  el.Type = 5 '線形ビームの場合は5に代入。
  el.propID = Cells(2, 2) ' 作成するビーム要素のプロパティID
  el.topology = 0 '要素の形状 ラインの場合は0を代入
  el.orientID = 0 '要素がバーやビームなどの場合のオリエンテーションノードID。0を入力するとorientプロパティで方向ベクトルの指定をする。
  el.orient(0) = -1 'バー要素やビーム要素の方向ベクトル。Doube型。
  el.orient(1) = -1 'バー要素やビーム要素の方向ベクトル。Doube型。
  el.orient(2) = 0  'バー要素やビーム要素の方向ベクトル。Doube型。
  el.Node(0) = Cells(2, 3) '始点のノードIDの代入。
  el.Node(1) = Cells(2, 4) '終点のノードIDの代入。
  el.Put(Cells(2, 1)) '要素の作成、上書き(カッコ内に作成したい要素のIDを入力)
  
  'オブジェクト開放
  Set el = Nothing
  Set f = Nothing
  
End Sub

ビーム要素の情報をエクセルシートに出力する例

エクセルで次のような表を準備しましょう。
A2が入力欄。B2~D2が取得した値が記入される欄です。

VB
Sub GetBeamElementInFemap()
  'Femap model オブジェクトの生成
  Dim f As Object
  Set f = GetObject(,"femap.model")
  
  '要素オブジェクトの生成
  Dim el As Object
  Set el = f.feElem

  '線形ビームエレメントの取得
  el.Get(Cells(2, 1)) '取得したい要素ID
  Cells(2, 2) = el.propID '要素のプロパティIDの取得
  Cells(2, 3) = el.Node(0) '始点のノードIDの取得。
  Cells(2, 4) = el.Node(1) '終点のノードIDの取得。
  
  'オブジェクト開放
  Set el = Nothing
  Set f = Nothing
  
End Sub

おわりに

この記事では、EXCEL VBAを使ってFemapの2つのノード間に線形ビーム要素を作成する方法を紹介しました。コードを利用することで、手動作業の手間を大幅に削減できるだけでなく、ミスの防止にも役立ちます。ぜひこのコードを応用して、より効率的な解析モデルの作成に挑戦してみてください!

ノードをつないでビームを作る?これぞまさに絆の力!

コメント

タイトルとURLをコピーしました