前回、の「Inventor 2014 API 新機能 更新情報」に続き、Inventor 2014の新しいAPIについてご紹介させていただきます。
1. 2D/3Dスプライン及び2D/3D計算式曲線の作成 並びに3D交差曲線がAPIにより作成可能となります。
' 2D/3Dスプライン及び2D/3D計算式曲線の作成 並びに3D交差曲線の作成。
Public Sub SketchCurves()
' 新規パーツファイルの作成
Dim partDoc As PartDocument
Set partDoc = ThisApplication.Documents.Add(kPartDocumentObject, _
ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject))
Dim partDef As PartComponentDefinition
Set partDef = partDoc.ComponentDefinition
' X-Y平面を使って 2Dスケッチの作成
Dim sketch1 As PlanarSketch
Set sketch1 = partDef.Sketches.Add(partDef.WorkPlanes.Item(3))
Dim tg As TransientGeometry
Set tg = ThisApplication.TransientGeometry
' スプライン構成点群の作成
Dim pnts As ObjectCollection
Set pnts = ThisApplication.TransientObjects.CreateObjectCollection
Call pnts.Add(tg.CreatePoint2d(2, 0))
Call pnts.Add(tg.CreatePoint2d(4, 1))
Call pnts.Add(tg.CreatePoint2d(4, 2))
Call pnts.Add(tg.CreatePoint2d(6, 3))
Call pnts.Add(tg.CreatePoint2d(8, 1))
' スプラインの作成
Dim controlPointSpline As SketchControlPointSpline
Set controlPointSpline = sketch1.SketchControlPointSplines.Add(pnts)
' Y-Z平面を使って 2Dスケッチの作成
Dim sketch2 As PlanarSketch
Set sketch2 = partDef.Sketches.Add(partDef.WorkPlanes.Item(1))
' 2D計算式曲線の作成
Dim equationCurve As SketchEquationCurve
Set equationCurve = sketch2.SketchEquationCurves.Add(kParametric, kCartesian, _
"0.1 * cos(t) * t * 0.1", "0.1 * sin(t) * t * 0.1", 0, 360 * 3)
' 3Dスケッチの作成
Dim sketch3 As sketch3D
Set sketch3 = partDef.Sketches3D.Add
' 3Dスプライン構成点群の作成
Set pnts = ThisApplication.TransientObjects.CreateObjectCollection
Call pnts.Add(tg.CreatePoint(10, 0, 0))
Call pnts.Add(tg.CreatePoint(12, 1, 3))
Call pnts.Add(tg.CreatePoint(12, 2, -5))
Call pnts.Add(tg.CreatePoint(14, 3, 2))
Call pnts.Add(tg.CreatePoint(16, 1, -3))
' 3Dスプラインの作成
Dim controlPointSpline2 As SketchControlPointSpline3D
Set controlPointSpline2 = sketch3.SketchControlPointSplines3D.Add(pnts)
' 3D計算式曲線の作成
Dim equationCurve2 As SketchEquationCurve3D
Set equationCurve2 = sketch3.SketchEquationCurves3D.Add(kCartesian, _
"0.01 * cos(t) * t + 8", "0,01 * sin(t) * t", "0.02 * t", 0, 360 * 3)
ThisApplication.ActiveView.Fit
' X-Y平面として作成した2Dスケッチ上の曲線を使い、押し出しフィーチャーの作成
Dim prof As Profile
Set prof = sketch1.Profiles.AddForSurface(controlPointSpline)
Dim extrudeDef As ExtrudeDefinition
Set extrudeDef = partDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(prof, kSurfaceOperation)
Call extrudeDef.SetDistanceExtent(6, kSymmetricExtentDirection)
Dim extrude1 As ExtrudeFeature
Set extrude1 = partDef.Features.ExtrudeFeatures.Add(extrudeDef)
' 押し出しフィーチャーの「親」のサーフェスを獲得し「半透明」表現を解除
Dim surf As WorkSurface
Set surf = extrude1.SurfaceBodies.Item(1).Parent
surf.Translucent = False
' Y-Z平面として作成した2Dスケッチ上の曲線を使い、押し出しフィーチャーの作成
Set prof = sketch2.Profiles.AddForSurface(equationCurve)
Set extrudeDef = partDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(prof, kSurfaceOperation)
Call extrudeDef.SetDistanceExtent(9, kPositiveExtentDirection)
Dim extrude2 As ExtrudeFeature
Set extrude2 = partDef.Features.ExtrudeFeatures.Add(extrudeDef)
' 3Dスケッチを作成
Dim interSketch As sketch3D
Set interSketch = partDef.Sketches3D.Add
' 押し出し1と押し出し2を使い、3Dスケッチ上に「交点曲線」を作成
Call interSketch.IntersectionCurves.Add(extrude1.SurfaceBodies.Item(1), extrude2.SurfaceBodies.Item(1))
End Sub
2. 2Dスケッチ上にスロットの作成
' 2Dスケッチ上にスロットの作成
Public Sub CreateSlots()
' パーツファイルの新規作成
Dim partDoc As PartDocument
Set partDoc = ThisApplication.Documents.Add(kPartDocumentObject, _
ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject))
Dim partDef As PartComponentDefinition
Set partDef = partDoc.ComponentDefinition
' X-Y平面を使って 2Dスケッチの作成
Dim sketch As PlanarSketch
Set sketch = partDef.Sketches.Add(partDef.WorkPlanes.Item(3))
Dim tg As TransientGeometry
Set tg = ThisApplication.TransientGeometry
Dim pi As Double
pi = Atn(1) * 4
' 2Dスケッチ上に 各スロットの作成
Dim results As SketchEntitiesEnumerator
Set results = sketch.AddArcSlotByCenterPointArc(tg.CreatePoint2d(0, 0), tg.CreatePoint2d(6, 0), pi / 2, 2)
Set results = sketch.AddArcSlotByThreePointArc(tg.CreatePoint2d(15, 0), tg.CreatePoint2d(12.5, 2), tg.CreatePoint2d(10, 0), 2)
Set results = sketch.AddStraightSlotByCenterToCenter(tg.CreatePoint2d(0, 10), tg.CreatePoint2d(6, 10), 2)
Set results = sketch.AddStraightSlotByOverall(tg.CreatePoint2d(10, 10), tg.CreatePoint2d(16, 10), 2)
ThisApplication.ActiveView.Fit
End Sub
3. アセンブリファイル内の2つのボディを使用し、フェースの重なったエッジで分割された新しいサーフェスボディを持つ「パーツファイル」の作成。
Public Sub CreateImprintFromAssembly()
' アクティブなアセンブリドキュメントの確保
Dim asmDoc As AssemblyDocument
Set asmDoc = ThisApplication.ActiveDocument
' アセンブリ内のオカレンスを選択
Dim part1 As ComponentOccurrence
Dim part2 As ComponentOccurrence
Set part1 = ThisApplication.CommandManager.Pick(kAssemblyLeafOccurrenceFilter, "Select part 1")
Set part2 = ThisApplication.CommandManager.Pick(kAssemblyLeafOccurrenceFilter, "Select part 2")
' 関連するオカレンスを得る。
' 尚、このサンプルはImprintBodiesメソッドを使用しているために
' SurfaceBodyProxyオブジェクトで使用する場合は、動作しません。
' これらを回避するために、新たな変換されたボディを作成する事により
' 同等の結果が提供されます。
' 一時的なボディとしてパーツ空間でボディを取得
Dim transBrep As TransientBRep
Set transBrep = ThisApplication.TransientBRep
Dim body1 As SurfaceBody
Dim body2 As SurfaceBody
Set body1 = transBrep.Copy(part1.Definition.SurfaceBodies.Item(1))
Set body2 = transBrep.Copy(part2.Definition.SurfaceBodies.Item(1))
' アセンブリ内で表現できるように、ボディを変換
Call transBrep.Transform(body1, part1.Transformation)
Call transBrep.Transform(body2, part2.Transformation)
' 2つのボディを使って、フェースの領域を見つける。
' フェースが重なったエッジで分割された新しいボディを作成。
Dim newBody1 As SurfaceBody
Dim newBody2 As SurfaceBody
Dim body1OverlapFaces As Faces
Dim body2OverlapFaces As Faces
Dim body1OverlapEdges As Edges
Dim body2OverlapEdges As Edges
Call ThisApplication.TransientBRep.ImprintBodies _
(body1, body2, True, newBody1, newBody2, _
body1OverlapFaces, body2OverlapFaces, _
body1OverlapEdges, body2OverlapEdges)
' 結果を表現する為の新しいパーツファイルを作成
Dim partDoc As PartDocument
Set partDoc = ThisApplication.Documents.Add(kPartDocumentObject, _
ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject))
Dim partDef As PartComponentDefinition
Set partDef = partDoc.ComponentDefinition
' 新しく作成された1つ目のサーフェスボディを使い、
' 新規にNonParametricBaseFeatureオブジェクトの作成
Dim non1 As NonParametricBaseFeature
Set non1 = partDef.Features.NonParametricBaseFeatures.Add(newBody1)
Set newBody1 = non1.SurfaceBodies.Item(1)
' 新しく作成された2つ目のサーフェスボディを使い、
' 新規にNonParametricBaseFeatureオブジェクトの作成
Dim non2 As NonParametricBaseFeature
Set non2 = partDef.Features.NonParametricBaseFeatures.Add(newBody2)
Set newBody2 = non2.SurfaceBodies.Item(1)
End Sub
サンプルは ここ よりダウンロードする事ができます。
(解凍後、C:\TempホルダーにInventor2014_J_Ver1.ivbとSamplePart.ipt"を配置し、「ツール」->「アプリケーションオプション」の「ファイル」タブ内「既存のVBAプロジェクト」に「C:\Temp\Inventor2014_J_Ver1.ivb」と設定する事で動作確認ができます)
次回も、引き続きInventor2014製品の API ついてご案内する予定です。
By Shigekazu Saito.
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。