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. Можно использовать события, чтобы посмотреть и увидеть, помещается ли новое вхождение, а затем получить его, но это немного усложняет код, поскольку это уже не простая функция.