Inventor2014製品の「ロフト」コマンドでは「断面」と「レール」を指定して「ロフトフィーチャー」が作成できますが、APIを使って「断面」と「レール」が一緒のプロファイル化ではエラーとなり「ロフトフィーチャー」が作成できません。
これはAPIの内部動作仕様から、Profile3Dを作成するために3Dスケッチでスケッチエンティティを指定しても、プロファイル作成時のProfiles3D.AddOpenは常に最初のスケッチ曲線を使用している振る舞いにありますので、一旦ロフトフィーチャーを作成する際に「更新用のスケッチ3D」を準備した状態で「断面」だけの情報で作成し、その後に一旦作成したロフトフィーチャーを用いて「レール」のプロファイル情報を指定し、「断面」+「レール」情報によるロフトフィーチャーを作成する方法になります。
Public Sub CreateLoftFeature()
Dim oDoc As PartDocument
Set oDoc = ThisApplication.ActiveDocument
' 「断面」のスケッチ3Dの確保<br />
Dim oSk3dCrossSectionOrg As Sketch3D
Set oSk3dCrossSectionOrg = oDoc.ComponentDefinition.Sketches3D.Item(2)
‘ 「断面」のプロファイル化
Dim oProfile1 As Profile3D
Set oProfile1 = oSk3dCrossSectionOrg.Profiles3D.AddOpen
' スケッチ3Dの作成<br />
Dim oSk3dCrossSectionOrg1 As Sketch3D
Set oSk3dCrossSectionOrg1 = oDoc.ComponentDefinition.Sketches3D.Add
‘ 更新用のスケッチ3Dとして準備
Call oSk3dCrossSectionOrg1.Include(oSk3dCrossSectionOrg.SketchLines3D.Item(3))
‘ 更新用のスケッチをプロファイル化
Dim oProfile2 As Profile3D
Set oProfile2 = oSk3dCrossSectionOrg1.Profiles3D.AddOpen
' オブジェクトコレクションを作成<br />
Dim oSections As ObjectCollection
Set oSections = ThisApplication.TransientObjects.CreateObjectCollection
Call oSections.Add(oProfile1)
Call oSections.Add(oProfile2)
' 一旦、「断面」だけの情報でロフトフィーチャーを作成する<br />
Dim oLoftDefinition As LoftDefinition
Set oLoftDefinition = oDoc.ComponentDefinition.Features.LoftFeatures.CreateLoftDefinition(oSections, kSurfaceOperation)
'「レール」のスケッチ3Dの確保<br />
Dim oSk3dRailOrg As Sketch3D
Set oSk3dRailOrg = oDoc.ComponentDefinition.Sketches3D.Item(1)
‘ 「レール」のプロファイル化
Dim oRail As Profile3D
Set oRail = oSk3dRailOrg.Profiles3D.AddOpen
' 「断面」だけの情報で作成したロフトフィーチャーに「レール」を指定<br />
oLoftDefinition.LoftRails.Add oRail
' 「断面」+「レール」情報によるロフトフィーチャーの作成<br />
Call oDoc.ComponentDefinition.Features.LoftFeatures.Add(oLoftDefinition)
End Sub
サンプルファイルは ここ よりダウンロードできます。
by Shigekazu Saito
