EXCEL VBAを使ってFEMAPのカーブ(ライン)を2点のポイントから作成する方法

EXCEL×FEMAP

はじめに

こんにちは!今回は、Excel VBAを使ってFemapでカーブを2点のポイントから作成する方法ご紹介します。FemapのAPIを使うことで、手動で行っていた作業を効率化できますよ!

カーブ(ライン)を作成するコード

それでは、2点のポイントからカーブを作成するためのコードを紹介します。以下のコードをVBAエディタに貼り付けてください。
注意点として、下記のコードはポイントIDが1と2である2点のポイントが必要になります。
ポイントの作成はこちらの記事をご覧ください。

VB
Sub CreateCurveLineInFemap()

  'Femap model オブジェクトの生成
  Dim f As Object
  Set f = GetObject(,"femap.model")
  
  'カーブオブジェクトの生成
  Dim cu As Object
  Set cu = f.feCurve
  
  'カーブ(ライン)の設定
  cu.Type = 0. 'カーブのタイプ。0を代入するとラインになる。
  cu.stdPoint(0) = 1 'カーブの始点となるポイントID。この場合1となる。
  cu.stdPoint(1) = 2 'カーブの終点となるポイントID。この場合2となる。
  
  'カーブの作成
  cu.put(1) '登録するカーブIDの入力。この場合ID=1となる。
  
  MsgBox "カーブ(ライン)を作成しました。"
  
  'オブジェクト開放
  Set cu = Nothing
  Set f = Nothing
  
End Sub

コードの解説
このコードはFemapのAPIを利用してポイントID=1, ポイントID=2 間のカーブを作成しています。

  • 4~5行目はFemapオブジェクトの作成です。FEMAPを起動していないときにこのコードを実行するとエラーとなるので注意が必要です。
  • 8~9行目でカーブオブジェクトを生成しています。
  • 12行目でカーブの種類を数字で指定します。今回はラインなので0を代入します。
  • 13~14行目で作成するカーブの端点となるポイントのIDをLong型で代入します。
  • 19行目のコードが、2点のポイントからカーブを作成するための肝となる部分です。

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

エクセルシートに入力したポイントIDでカーブを作成する場合

エクセルで次のようなシートを準備します。
A2~C2に指定したいIDを入力してください。

上記シートに入力した各値カーブを作成するコードは次のようになります。

VB
Sub CreateCurveLineInFemap()

  'Femap model オブジェクトの生成
  Dim f As Object
  Set f = GetObject(,"femap.model")
  
  'カーブオブジェクトの生成
  Dim cu As Object
  Set cu = f.feCurve
  
  'カーブ(ライン)の設定
  cu.Type = 0. 'カーブのタイプ。0を代入するとラインになる。
  cu.stdPoint(0) = Cells(2, 2) 'カーブの始点となるポイントID。
  cu.stdPoint(1) = Cells(2, 3)  'カーブの終点となるポイントID。
  
  'カーブの作成
  cu.put(Cells(2, 1)) '登録するカーブIDの入力。
  
  MsgBox "カーブ(ライン)を作成しました。"
  
  'オブジェクト開放
  Set cu = Nothing
  Set f = Nothing
  
End Sub

もし、セルから値を取得する際にエラーが出る場合は、セルで値を取得する部分をLong型ならCLng(Cells(2,1))などのように型を指定すると良いです。

カーブ情報をエクセルに出力する場合

エクセルで次のようなシートを準備します。
データを取り出したいカーブIDをA2に入力します。

上記シートに入力したラインカーブIDの始点と終点のポイントIDを取得するコードは次のようになります。

VB
Sub GetCurveLineInFemap()

  'Femap model オブジェクトの生成
  Dim f As Object
  Set f = GetObject(,"femap.model")
  
  'カーブオブジェクトの生成
  Dim cu As Object
  Set cu = f.feCurve
  
  'カーブ(ライン)の取得
  cu.Get(Cells(2, 1))  'ここで指定したカーブIDの情報を取得する。
  
  '各値の出力
  If cu.Type = 0 Then  'カーブのタイプが0(=ライン)の場合
    if cu.stdPoint(0) <> 0 And cu.stdPoint(1) <> 0 Then  '始点と終点0が存在する場合
      Cells(2, 2) = cu.stdPoint(0) 'カーブの始点となるポイントID。
      Cells(2, 3) = cu.stdPoint(1) 'カーブの終点となるポイントID。
      MsgBox "指定したIDのカーブ情報を取得しました。"
    Else
      MsgBox "指定したIDのカーブは存在しません。"
    End If
  Else
    MsgBox "指定したIDのカーブはラインではありません。"
  End If
  
  'オブジェクト開放
  Set cu = Nothing
  Set f = Nothing
  
End Sub
  • 12行目 cu.get(ID)で番号IDのデータを取得します。カッコ内のIDはLong型で記入します。セルの値を取得する際はCLong(Cells(1,2))などのように、型を変換してあげると、エラーの可能性を減らせます。
  • このコードを実行すれば、エクセルシートにカーブ情報を出力させることが出来ます。
  • 15行目のIf文で、カーブがラインの場合のみの処理にしています。
  • 16行目のIf文は、カーブが存在しているかどうかを判断しています。カーブが存在しない場合は始点と終点のポイントIDが0になります。

おわりに

いかがでしたか?今回の記事では、Excel VBAを使ってFemapのカーブを作成する方法と、情報を取得する方法をご紹介しました。普段のFemapの操作にExcelを組み合わせることで、手作業では手間のかかる作業を自動化できたり、複数の操作を一気に処理出来たりと、作業効率をぐっと上げることができます。ぜひチャレンジしてみてください。

なぜFemapのラインは仲良しなの?
みんなで「繋がり」を大切にしているからさ。

コメント

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