Home > Tags > SolidWorks
SolidWorks
SolidWorks APIに関する検討 その2
- 2009-07-26 (日)
- 技術
■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モデルが、
こうなった。
ちなみにビューアは弊社の猫好きなプログラマが
作成した。
おまけ
上記と同じ手順で、世間でわりと使われているobjファイルなるものを作成してみた。
かぶってる面とか完全無視で記述したので、無駄なデータがかなりあるが、一応一般のビューア等で表示できる。
- Comments (Close): 0
- Trackbacks (Close): 0
ソリッドワークスのモデル公開
社員がソリッドワークスの勉強用にデザインしたモデルデータを3つほど公開します.
キーボード,液晶モニター,タワー型PCです.
興味のある方は,ダウンロードページへどうぞ.
- Comments (Close): 0
- Trackbacks (Close): 0
Home > Tags > SolidWorks