Home > Tags > SolidWorks

SolidWorks

SolidWorks APIに関する検討 その2

■Solid Works API その2 3次元データの取得

・3次元データの取得

せっかくモデルを作成したのだから、何かに使えないかと思ったのだが、
Solid Worksが保存できるファイル形式はどれも再利用が難しい。
で、いっそ3次元データを自分で取得、ファイル保存すればよいではないか、と。
そこで、再びマクロを使用することになった。

—VBA-Macro———————————————————————————————————

まずお約束の
Dim swApp         As SldWorks.SldWorks
Dim swModel      As SldWorks.ModelDoc2
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

色情報も保存するので
Dim vbaseColor As Variant
vbaseColor = swModel.MaterialPropertyValues
モデルの色情報を取得。

今回はソリッドボディ毎にデータを扱う。
ソリッドボディのデータはBodyFolderオブジェクトにあるらしい。
Dim swBodyFolder As BodyFolder
でBodyFolderオブジェクトを定義。

Dim nFeatNum As Long
nFeatNum = swModel.GetFeatureCount
Dim feat As Feature
Set feat = swModel.FirstFeature
フィーチャーの数、最初のフィーチャーを取得。

For i = 0 To nFeatNum – 1 Step 1
If feat.GetTypeName = “SolidBodyFolder” Then
Set swBodyFolder = feat.GetSpecificFeature2
IsBodyFolder = True
End If
Set feat = feat.GetNextFeature
Next i
フィーチャーを走査しながらタイプネームが”SolidBodyFolder”のものを探す。
で、GetSpecificFeature2でBodyFolderが取得できるらしい。

Dim nBodyCount As Long
Dim vBodies As Variant
nBodyCount = swBodyFolder.GetBodyCount
vBodies = swBodyFolder.GetBodies
BodyFolderからソリッドボディの数とボディデータをごっそり取得。

Dim fileNo As Integer
fileNo = FreeFile
Open “SaveFile” & “.i3d” For Output As #fileNo
次に保存用ファイルの準備。独自形式”.i3d”拡張子でファイルをオープンする。

Dim vBody As Variant
Dim swBody As Body2
Body2オブジェクトを定義。

For Each vBody In vBodies
Set swBody = vBody
Dim nFaceCount As Long
nFaceCount = swBody.GetFaceCount
Dim swFace As Face2
Set swFace = swBody.GetFirstFace

全ボディを走査しつつ、各ボディのフェイスを取得。

Dim faceColor As Variant
For i = 0 To nFaceCount – 1 Step 1
faceColor = swFace.MaterialPropertyValues
フェイスの色情報を取得。この後色情報を持っていたかをチェックして、
なかったらフェイスが属するフィーチャーの色、それもなかったらボディの色、
さらになかったら冒頭で取得した、モデルの色を使用する処理を行う。が、省略。

Print #fileNo, “MATERIAL “;
For j = 0 To 8 Step 1
Print #fileNo, faceColor(j);
If j <> 8 Then
Print #fileNo, “,”;
End If
Next
Print #fileNo, “”
色情報をファイルに書きこみ。

Dim vTri As Variant
vTri = swFace.GetTessTriangles(False)
Dim vNorm As Variant
vNorm = swFace.GetTessNorms
GetTessTrianglesで各面の頂点座標を、GetTessNormsで法線を取得できる。
上記色情報同様これらもファイルに書きこむ。

Set swFace = swFace.GetNextFace
次のフェイスを取得してループ先頭へ。

こんな調子で全フェイス分の色情報、頂点座標、法線データを取得、
ファイル書き込みを行い、モデルデータの独自形式ファイルを作成する。

Close #fileNo
最後にファイルを閉じる。

あとはどうとでも再利用できる。

以上。
ミサイル(SolidWorks画面キャプチャ)
ミサイルポッド(SolidWorks画面キャプチャ)
上図のSolidWorksモデルが、
こうなった。

ちなみにビューアは弊社の猫好きなプログラマが
作成した。

おまけ
上記と同じ手順で、世間でわりと使われているobjファイルなるものを作成してみた。
かぶってる面とか完全無視で記述したので、無駄なデータがかなりあるが、一応一般のビューア等で表示できる。

<download>missile
<download>4missile_pod

  • Comments (Close): 0
  • Trackbacks (Close): 0

ソリッドワークスのモデル公開

社員がソリッドワークスの勉強用にデザインしたモデルデータを3つほど公開します.
キーボード,液晶モニター,タワー型PCです.
興味のある方は,ダウンロードページへどうぞ.

  • Comments (Close): 0
  • Trackbacks (Close): 0

Home > Tags > SolidWorks

Search
Feeds
Meta

Return to page top