2

VBA スクリプトを使用して、Autodesk Inventor で 2 つのソリッド モデル プロファイルを接続しようとしています。後でプロファイルとして機能するはずの3Dラインを描くところまで来ました。スクリプトによる描画が終了したら、2 つのループを選択し、GUI のロフト操作を使用してそれらを接続します。スクリプトからも可能だと思いますが、方法がわかりません。これまでの私のスクリプトは次のとおりです。

Sub loft()

  Set oDoc = ThisApplication.Documents.Add(kPartDocumentObject, , True)
  Set oPartDef = oDoc.ComponentDefinition

  Dim osketch3D As Sketch3D
  Set osketch3D = oPartDef.Sketches3D.Add()

  Set oTG = ThisApplication.TransientGeometry
  Dim wire(198) As SketchLine3D

  Set wire(0) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(0, 0, 0), oTG.CreatePoint(10, 0, 0))
  Set wire(1) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(10, 0, 0), oTG.CreatePoint(10, 10, 1))
  Set wire(2) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(10, 10, 1), oTG.CreatePoint(0, 10, 0))
  Set wire(3) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(0, 10, 0), oTG.CreatePoint(0, 0, 0))

  Set wire(4) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(0, 0, 5), oTG.CreatePoint(10, 0, 5))
  Set wire(5) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(10, 0, 5), oTG.CreatePoint(10, 10, 5))
  Set wire(6) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(10, 10, 5), oTG.CreatePoint(0, 10, 5))
  Set wire(7) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(0, 10, 5), oTG.CreatePoint(0, 0, 5))

' .....    
' Select wires 0-3 and 4-7 as profiles, put them in an object collection and call the loft op.

End Sub
4

1 に答える 1

1
Sub loft()

    'Declare PartDocument to activate Intellisense
    Dim oDoc As PartDocument

    Set oDoc = ThisApplication.Documents.Add(kPartDocumentObject, , True)
    Set oPartDef = oDoc.ComponentDefinition

    Dim osketch3D As Sketch3D
    Set osketch3D = oPartDef.Sketches3D.Add()

    Set oTG = ThisApplication.TransientGeometry
    Dim wire(198) As SketchLine3D

    Set wire(0) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(0, 0, 0), oTG.CreatePoint(10, 0, 0))
    Set wire(1) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(10, 0, 0), oTG.CreatePoint(10, 10, 1))
    Set wire(2) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(10, 10, 1), oTG.CreatePoint(0, 10, 0))
    Set wire(3) = osketch3D.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(0, 10, 0), oTG.CreatePoint(0, 0, 0))

    'Declare Profile3D to regroup wires.
    Dim oProfile1 As Profile3D
    Set oProfile1 = osketch3D.Profiles3D.AddOpen

    'Declare another sketch to be able to catch 2 differents profiles.
    Dim osketch3D2 As Sketch3D
    Set osketch3D2 = oPartDef.Sketches3D.Add()

    Set wire(4) = osketch3D2.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(0, 0, 5), oTG.CreatePoint(10, 0, 5))
    Set wire(5) = osketch3D2.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(10, 0, 5), oTG.CreatePoint(10, 10, 5))
    Set wire(6) = osketch3D2.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(10, 10, 5), oTG.CreatePoint(0, 10, 5))
    Set wire(7) = osketch3D2.SketchLines3D().AddByTwoPoints(oTG.CreatePoint(0, 10, 5), oTG.CreatePoint(0, 0, 5))

    'Declare second Profile3D to regroup wires.
    Dim oProfile2 As Profile3D
    Set oProfile2 = osketch3D2.Profiles3D.AddOpen

    'Create object collection need by Inventor functions.
    Dim oCollection As ObjectCollection
    Set oCollection = ThisApplication.TransientObjects.CreateObjectCollection

    'Add profiles to collection.
    oCollection.Add oProfile1
    oCollection.Add oProfile2

    'Create loft definition needed by Loft function.
    Dim oLoftDef As LoftDefinition
    Set oLoftDef = oDoc.ComponentDefinition.Features.LoftFeatures.CreateLoftDefinition(oCollection, kSurfaceOperation)

    'Creating loft.
    Dim oLoftFeat As LoftFeature
    Set oLoftFeat = oDoc.ComponentDefinition.Features.LoftFeatures.Add(oLoftDef)



End Sub
于 2015-08-26T16:24:46.827 に答える