Autodesk Inventor размещает деталь в определенной пользователем позиции

Я пытаюсь создать метод, который будет помещать файл в сборку, и я хочу, чтобы он был таким же, как при выборе размещения файла в Inventor.

Файл выбран по его пути. И теперь его нужно разместить. Я знаю, как разместить файл в координатах, но я хочу, чтобы файл был на курсоре, и пользователь мог выбирать, куда его поместить.

Как вы этого добиваетесь? Я попытался найти помощь в программировании, но я могу найти только информацию о событии и диалоге.

FileDialog.InsertMode() As Boolean

Обычно я просто место и землю, но это не хорошо сейчас..

Public Function Place_and_Ground_Part(ByVal oDef As AssemblyComponentDefinition,
                                   ByVal path As String) As ComponentOccurrence

    ' Set a reference to the assembly component definintion.
    ' This assumes an assembly document is open.

    ' Set a reference to the transient geometry object.
    Dim oTG As TransientGeometry
    oTG = oInvApp.TransientGeometry

    ' Create a matrix.  A new matrix is initialized with an identity matrix.
    Dim oMatrix As Matrix
    oMatrix = oTG.CreateMatrix

    ' Set the translation portion of the matrix so the part will be positioned
    ' at (3,2,1).
    oMatrix.SetTranslation(oTG.CreateVector(0, 0, 0))

    ' Add the occurrence.
    Dim oOcc As ComponentOccurrence
    oOcc = oDef.Occurrences.Add(path, oMatrix)

    ' Make sure the master part is grounded
    oOcc.Grounded = True
    Return oOcc

End Function

1 ответ

Конечно, не очевидно, как выполнить то, что вы хотите, но это возможно, если вы знаете, как. Приведенный ниже код демонстрирует использование метода PostPrivateEvent, в котором вы публикуете имя файла, который хотите вставить во внутреннюю очередь в Inventor. Затем он получает и запускает компонент размещения точно так же, как если бы пользователь должен был запустить команду. Команда сначала проверяет, находится ли имя файла в частной очереди, и если это так, оно берет это имя и пропускает шаг диалога. Это приводит к тому, что пользователь может перетаскивать и позиционировать вхождение.

Public Function Place_and_Ground_Part(ByVal invApp As Application,
                                      ByVal path As String) As ComponentOccurrence

    ' Post the filename to the private event queue.
    invApp.CommandManager.PostPrivateEvent(Inventor.PrivateEventTypeEnum.kFileNameEvent, filename)

    ' Get the control definition for the Place Component command.
    Dim ctrlDef As Inventor.ControlDefinition
    ctrlDef = invApp.CommandManager.ControlDefinitions.Item("AssemblyPlaceComponentCmd")

    ' Execute the command.
    ctrlDef.Execute()

    Return Nothing
End Function

Вы, наверное, заметили, что функция ничего не возвращает. Это проблема при использовании этого подхода, потому что вы выполняете команду, а затем передаете управление Inventor. Можно использовать события, чтобы посмотреть и увидеть, помещается ли новое вхождение, а затем получить его, но это немного усложняет код, поскольку это уже не простая функция.

Другие вопросы по тегам