Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: Elfilagas от 06-06-2016, 09:49:39

Название: а можно ли задать точку вставки кликом мыши по месту вставки?
Отправлено: Elfilagas от 06-06-2016, 09:49:39
Еще вопрос по этой же теме - точку вставки как задать вручную понятно, а можно ли задать точку вставки кликом мыши по месту вставки?
Название: Re: а можно ли задать точку вставки кликом мыши по месту вставки?
Отправлено: Алексей Романов от 06-06-2016, 16:05:54
У меня только пример на VBA, посмотри, думаю его не сложно перевести на VB.NET.
В папке Modelus создаем модуль, в нем этот код:
Код - Visual Basic [Выбрать]
  1. Public myFlag As Boolean
  2. Public myPart As MovePart
  3. Sub InsertMPart()
  4.     myFlag = True
  5.     Set myPart = New MovePart
  6.  
  7.     Do While myFlag = True
  8.         DoEvents
  9.     Loop
  10.  
  11.     Set myPart = Nothing
  12.  
  13. End Sub
В папке Class Modelus создаем модуль, обзываем его MovePart, копируем этот код:
Код - Visual Basic [Выбрать]
  1. Option Explicit
  2.  
  3. Private WithEvents oInteraction As InteractionEvents
  4. Private WithEvents omouseEvent As MouseEvents
  5. Private oTransform As Matrix
  6. Private oAsmCompDef As AssemblyComponentDefinition
  7. Private CompOccur As ComponentOccurrence
  8. Private partPatch As String
  9.  
  10. Private Sub Class_Initialize()
  11.     partPatch = "D:\Part1.ipt"
  12.    
  13.     Set oAsmCompDef = ThisApplication.ActiveDocument.ComponentDefinition
  14.  
  15.     Set oTransform = ThisApplication.TransientGeometry.CreateMatrix
  16.    
  17.     Set CompOccur = oAsmCompDef.Occurrences.Add(partPatch, oTransform)
  18.    
  19.     Set oInteraction = ThisApplication.CommandManager.CreateInteractionEvents
  20.     Set omouseEvent = oInteraction.MouseEvents
  21.     omouseEvent.MouseMoveEnabled = True
  22.     oInteraction.Start
  23.  
  24. End Sub
  25.  
  26. Private Sub Class_Terminate()
  27. On Error Resume Next
  28. If Not oInteraction Is Nothing Then
  29.     oInteraction.Stop
  30.     omouseEvent = Nothing
  31.     CompOccur = Nothing
  32.     myFlag = False
  33. End If
  34.  
  35. End Sub
  36.  
  37. Private Sub omouseEvent_OnMouseClick(ByVal Button As MouseButtonEnum, ByVal ShiftKeys As ShiftStateEnum, _
  38.         ByVal ModelPosition As Point, ByVal ViewPosition As Point2d, ByVal View As View)
  39.  
  40. If Not oInteraction Is Nothing Then
  41.     oInteraction.Stop
  42.     Set omouseEvent = Nothing
  43.     Set oInteraction = Nothing
  44.    
  45.     Call oTransform.SetTranslation(ThisApplication.TransientGeometry.CreateVector(ModelPosition.x, _
  46.                     ModelPosition.y, ModelPosition.Z))
  47.     Dim i As Integer
  48.     For i = 0 To 5
  49.         Set CompOccur = oAsmCompDef.Occurrences.Add(partPatch, oTransform)
  50.     Next
  51.     Set CompOccur = Nothing
  52.     myFlag = False
  53. End If
  54. End Sub
  55.  
  56. Private Sub omouseEvent_OnMouseMove(ByVal Button As MouseButtonEnum, ByVal ShiftKeys As ShiftStateEnum, _
  57.         ByVal ModelPosition As Point, ByVal ViewPosition As Point2d, ByVal View As View)
  58.  
  59. Call oTransform.SetTranslation(ThisApplication.TransientGeometry.CreateVector(ModelPosition.x, _
  60.         ModelPosition.y, ModelPosition.Z))
  61. CompOccur.Transformation = oTransform
  62. View.Update
  63.  
  64. End Sub
Здесь вставляется деталь, перемещается за мышью, клик ЛКМ добавляет еще детали...
Название: Re: а можно ли задать точку вставки кликом мыши по месту вставки?
Отправлено: Elfilagas от 07-06-2016, 09:40:41
Спасибо, попробую.
Название: Re: а можно ли задать точку вставки кликом мыши по месту вставки?
Отправлено: Elfilagas от 08-06-2016, 15:35:39
Что то не получается, но это скорее я криворукий. ) А в Инвенторе нет такой команды как GetPoint в автокаде, или чего то подобного, когда процесс останавливался и ждал клика от пользователя, а возвращал координаты х,у,z? По сути нужно только задать координаты начала матрицы.
Название: Re: а можно ли задать точку вставки кликом мыши по месту вставки?
Отправлено: Алексей Романов от 08-06-2016, 18:27:15
Дак это тоже самое, можно не вставлять деталь, пустой курсор таскать по экрану, но так наглядней для пользователя... В общем виде должно быть типа такого:
Код - vb.net [Выбрать]
  1. <ProgIdAttribute("InventorAddInProperties.StandardAddInServer"), _
  2.     GuidAttribute("4eb54bb0-81e0-4cd3-aeb0-e00c5beb5ef6")> _
  3.     Public Class StandardAddInServer
  4.         Implements Inventor.ApplicationAddInServer
  5.         ' Inventor application object.
  6.         Private m_inventorApplication As Inventor.Application
  7.         Private WithEvents oInteraction As InteractionEvents
  8.         Private WithEvents omouseEvent As MouseEvents
  9.         Private oTransform As Matrix
  10.         Private oAsmCompDef As AssemblyComponentDefinition
  11.         Private CompOccur As ComponentOccurrence
  12.         Private partPatch As String
  13.  
  14. Private Sub m_Button_OnExecute(ByVal Context As Inventor.NameValueMap) Handles m_Button.OnExecute
  15.         partPatch = "D:\Part1.ipt"
  16.         oAsmCompDef = m_inventorApplication.ActiveDocument.ComponentDefinition
  17.         oTransform = m_inventorApplication.TransientGeometry.CreateMatrix
  18.         CompOccur = oAsmCompDef.Occurrences.Add(partPatch, oTransform)
  19.  
  20.         oInteraction = m_inventorApplication.CommandManager.CreateInteractionEvents
  21.         omouseEvent = oInteraction.MouseEvents
  22.         omouseEvent.MouseMoveEnabled = True
  23.         oInteraction.Start()
  24. End Sub
  25. Private Sub omouseEvent_OnMouseClick(ByVal Button As Inventor.MouseButtonEnum, _
  26.                                              ByVal ShiftKeys As Inventor.ShiftStateEnum, _
  27.                                              ByVal ModelPosition As Inventor.Point, _
  28.                                              ByVal ViewPosition As Inventor.Point2d, _
  29.                                              ByVal View As Inventor.View) Handles omouseEvent.OnMouseClick
  30.             If Not oInteraction Is Nothing Then
  31.                 oInteraction.Stop()
  32.                 omouseEvent = Nothing
  33.                 oInteraction = Nothing
  34.  
  35.                 oTransform.SetTranslation(m_inventorApplication.TransientGeometry.CreateVector(ModelPosition.X, _
  36.                                 ModelPosition.Y, ModelPosition.Z))
  37.                 Dim i As Integer
  38.                 For i = 0 To 5
  39.                     CompOccur = oAsmCompDef.Occurrences.Add(partPatch, oTransform)
  40.                 Next
  41.                 CompOccur = Nothing
  42.  
  43.             End If
  44. End Sub
Отслеживание мыши запускаете по нажатию кнопки, По клику мыши прекращаете
Отслеживание движения я тут не включил, но оно тоже должно быть...
Название: Re: а можно ли задать точку вставки кликом мыши по месту вставки?
Отправлено: Elfilagas от 09-06-2016, 14:01:40
Большое спасибо. Теперь работает так, как планировалось. )
Название: Re: а можно ли задать точку вставки кликом мыши по месту вставки?
Отправлено: Александр Ривилис от 09-06-2016, 19:25:36
Большое спасибо. Теперь работает так, как планировалось. )
Тогда отметь сообщение Алексея как "Решение".