Перемещение точки SketchPoint3DProxy

Автор Тема: Перемещение точки SketchPoint3DProxy  (Прочитано 8909 раз)

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

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Для перемещения точки SketchPoint3DProxy следует использовать метод MoveTo?
Использую следующий макрос:
Sub MovePoint()
    Dim oDoc As Document
    Set oDoc = ThisApplication.ActiveDocument
    Dim oPoint As SketchPoint3DProxy
    Dim nPoint As Point
    Set oPoint = ThisApplication.ActiveDocument.SelectSet.Item(1)
    Dim oTG As TransientGeometry
    Set oTG = ThisApplication.TransientGeometry
    Set nPoint = oTG.CreatePoint(10, 10, 10)
    Call oPoint.MoveTo(nPoint)
End Sub
Макрос проходитбез ошибок, но чтоостается на месте... Может я не тот метод использую?

Оффлайн Владимир Ананьев

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Перемещение точки SketchPoint3DProxy
« Ответ #1 : 07-05-2014, 14:14:33 »
Объект Point – «бестелесная сущность», просто абстрактная координатная точка.  В 3D-эскизе она не существует,  Инвентор ее не отображает,  юзер выделить её средствами UI не может никак.

Судя по коду, вы работаете в контексте документа сборки.
Следовательно, выделяя эскизную точку в 3D-эскизе, вы получаете ссылку на объект типа SketchPoint3DProxy.  Его и надо перемещать.
Попробуйте вот так:
Sub MoveSketchPoint3D_Corrected()
    Dim oTG As TransientGeometry
    Set oTG = ThisApplication.TransientGeometry
    Dim oAsmDoc As AssemblyDocument
    Set oAsmDoc = ThisApplication.ActiveDocument
   
    ' ссылка на эскизную точку в 3D-эскизе
    Dim oSketchPoint3DProxy As SketchPoint3DProxy
    Set oSketchPoint3DProxy = ThisApplication.ActiveDocument.SelectSet.Item(1)
   
    ' создание координатной точки (куда хотим попасть)
    Dim oPoint As Point
    Set oPoint = oTG.CreatePoint(10, 10, 10)
   
    ' перемещение выделенного объекта oSketchPoint3DProxy
    Call oSketchPoint3DProxy.MoveTo(oPoint)
    Beep
End Sub

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Перемещение точки SketchPoint3DProxy
« Ответ #2 : 07-05-2014, 15:25:16 »
После этого кода тоже ничего не происходит - точка остается на месте...
Я должен более детально пояснить, что это за точка: в сборке выполняется разводка кабелей, при активации внутри самой сборки сборки Harness становятся доступные точки, по которым строятся кабели. После выделения точки, я посмотрел тип объекта и увидел, что это SketchPoint3DProxy. Вот теперь никак не могу добится ее перемещения с помощью API.

Оффлайн Владимир Ананьев

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Перемещение точки SketchPoint3DProxy
« Ответ #3 : 07-05-2014, 16:41:13 »
У этого addin нет API.  :(  В общем случае, это серьезно осложняет жизнь.
Самый простой способ - двигать точку размерами посредством параметров. 

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Перемещение точки SketchPoint3DProxy
« Ответ #4 : 08-05-2014, 10:28:54 »
То что API нет под работу с кабелями это понятно, но я думал, что если макрос видет понятный ему элемент, то с ним можно работать... Параметры это не вариант: если точек под сотню, то параметры вручную забивать замучаешься, а потом в них легко запутаться...

Оффлайн Владимир Ананьев

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Перемещение точки SketchPoint3DProxy
« Ответ #5 : 08-05-2014, 10:34:56 »
Скинь мне, пожалуйста, в почту наипростейшую модель твоего типа для тестов "на кубиках".
Надо изучить тему подробнее.  Спасибо.

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Перемещение точки SketchPoint3DProxy
« Ответ #6 : 08-05-2014, 11:30:29 »
Вот модель. Нужно переместить точку Work Point5 в кабеле Segment1.

Оффлайн Владимир Ананьев

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Перемещение точки SketchPoint3DProxy
« Ответ #7 : 14-05-2014, 16:49:35 »
Вот пример перемещения рабочей точки сегмента на заданный вектор.  Можно поставить ее и в конкретную координатную точку.  Как разрулить изломы на наконечниках, еще не понял :(
Надо как-то сделать сплайн гладким.
Код - Visual Basic [Выбрать]
  1. Sub RedefineWkPt_Simple()
  2.     Dim oTG As TransientGeometry
  3.     Set oTG = ThisApplication.TransientGeometry
  4.    
  5.     Dim oAssy As AssemblyDocument
  6.     Set oAssy = ThisApplication.ActiveDocument
  7.     Dim oAssyDef As AssemblyComponentDefinition
  8.     Set oAssyDef = oAssy.ComponentDefinition
  9.    
  10.     ' Get the Harness assembly
  11.    Dim oCHAssy As AssemblyDocument
  12.     Set oCHAssy = oAssyDef.Occurrences(3).Definition.Document
  13.     ' Get the Harness part
  14.    Dim oCHPart As PartDocument
  15.     Set oCHPart = oCHAssy.ComponentDefinition.Occurrences(1).Definition.Document
  16.    
  17.     ' Get the work point that should be moved
  18.    ' Here we use its name
  19.    Dim oWkPt As WorkPoint
  20.     Set oWkPt = oCHPart.ComponentDefinition.WorkPoints("Work Point5")
  21.    
  22.     'get current position of the workpoint
  23.    Dim oNewPt As Point
  24.     Set oNewPt = oWkPt.Point
  25.    
  26.     'define target position moving the Point object by vector
  27.    'new position can be set directly by (x,y,z) coordinates as well
  28.    Dim oVector As Vector
  29.     Set oVector = oTG.CreateVector(0, -1, 0)
  30.     Call oNewPt.TranslateBy(oVector)
  31.    
  32.     'redefine workpoint position
  33.    Call oWkPt.SetFixed(oNewPt)
  34.  
  35.     oAssy.Update2
  36.     Beep
  37. End Sub
  38.  

Пока вот так.  Надеюсь, это поможет продвинуться.
« Последнее редактирование: 14-05-2014, 18:55:47 от Александр Ривилис »

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Перемещение точки SketchPoint3DProxy
« Ответ #8 : 26-05-2014, 15:12:02 »
Да, данный код полностью работоспособный, только я столкнулся с проблемой несоответствия типов объектов:
Используя ThisApplication.ActiveDocument.SelectSet я выделяю объект типа SketchPoint3DProxy, а приведенный выше код работает с WorkPoint...
Мне нужно переобращаться по имени точки? Даже не по имени (имя выделенной точки увидеть пока не получается...), а через сравнение (совпадение) координат?

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Перемещение точки SketchPoint3DProxy
« Ответ #9 : 26-05-2014, 15:22:00 »
Я попробовал использовать равенство Set oWkPt = ThisApplication.ActiveDocument.SelectSet.Item(1).Constraints3D.Item(1).WorkPoint , но оно почему-то вызывает ошибку на Call oWkPt.SetFixed(oNewPt) ?

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Перемещение точки SketchPoint3DProxy
« Ответ #10 : 26-05-2014, 15:27:48 »
Да, приходится использовать цикл поиска по имени точки... Может быть есть все-таки более простой способ?

Оффлайн Владимир Ананьев

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Перемещение точки SketchPoint3DProxy
« Ответ #11 : 26-05-2014, 18:39:37 »
Пожалуй, лучше искать не по именам, а по совпадению точек в пространстве:
Sub WorkPoint_By_SketchPoint3D()
    'selected point
    Dim oSketchPoint3DProxy As SketchPoint3DProxy
    Set oSketchPoint3DProxy = ThisApplication.ActiveDocument.SelectSet.Item(1)
           
    ' Get the Harness assembly
    Dim oCHAssy As AssemblyDocument
    Set oCHAssy = ThisApplication.ActiveEditDocument
    ' Get the Harness part
    Dim oCHPart As PartDocument
    Set oCHPart = oCHAssy.ComponentDefinition.Occurrences(1).Definition.Document
   
    Dim wp As WorkPoint
    For Each wp In oCHPart.ComponentDefinition.WorkPoints
      If wp.Point.IsEqualTo(oSketchPoint3DProxy.Geometry) Then
        Beep
        MsgBox ("Found !!!")
      End If
    Next
    MsgBox "Done"
End Sub

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Перемещение точки SketchPoint3DProxy
« Ответ #12 : 10-06-2014, 13:06:33 »
В развитии этой темы
Столкнулся с такой проблемой: в сборке есть большой жгут, но при просмотре содержания (во время выполнения макроса) переменной oCHPart.ComponentDefinition.WorkPoints вижу только одну центральную точку (см. скин), а точек жгута в ней нет. где они еще могут находится?

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Перемещение точки SketchPoint3DProxy
« Ответ #13 : 10-06-2014, 14:13:59 »
Разобрался в чем проблема: нельзя использовать строку Set oCHAssy = oAssyDef.Occurrences(3).Definition.Document как записано в коде! Это строка выведена на основании примера, в котором было всего несколько деталей. В больших сборках деталей намного больше и вместо "3" нужно использовать обращение к той детали, в которой располагаются точки.

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Перемещение точки SketchPoint3DProxy
« Ответ #14 : 20-11-2015, 10:47:40 »
Код - Visual Basic [Выбрать]
  1. 'redefine workpoint position
  2. Call oWkPt.SetFixed(oNewPt)
Почему эта команда не хочет работать с некоторыми точками в сборке? После выполнения кода перед этой строкой в переменной oNewPt находятся новые координаты точки, но после выполнения команды точка oWkPt остается на прежнем месте и не перемещается в заданные координаты!?