а можно ли задать точку вставки кликом мыши по месту вставки?

Автор Тема: а можно ли задать точку вставки кликом мыши по месту вставки?  (Прочитано 5585 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн ElfilagasАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Еще вопрос по этой же теме - точку вставки как задать вручную понятно, а можно ли задать точку вставки кликом мыши по месту вставки?
« Последнее редактирование: 09-06-2016, 22:11:10 от Elfilagas »

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
У меня только пример на 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
Здесь вставляется деталь, перемещается за мышью, клик ЛКМ добавляет еще детали...

Оффлайн ElfilagasАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Спасибо, попробую.

Оффлайн ElfilagasАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Что то не получается, но это скорее я криворукий. ) А в Инвенторе нет такой команды как GetPoint в автокаде, или чего то подобного, когда процесс останавливался и ждал клика от пользователя, а возвращал координаты х,у,z? По сути нужно только задать координаты начала матрицы.

Отмечено как Решение Elfilagas 09-06-2016, 22:09:59

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Дак это тоже самое, можно не вставлять деталь, пустой курсор таскать по экрану, но так наглядней для пользователя... В общем виде должно быть типа такого:
Код - 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
Отслеживание мыши запускаете по нажатию кнопки, По клику мыши прекращаете
Отслеживание движения я тут не включил, но оно тоже должно быть...

Оффлайн ElfilagasАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Большое спасибо. Теперь работает так, как планировалось. )

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Большое спасибо. Теперь работает так, как планировалось. )
Тогда отметь сообщение Алексея как "Решение".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение