Прокси объект текущей сборки

Автор Тема: Прокси объект текущей сборки  (Прочитано 7533 раз)

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

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

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Здравствуйте! Подскажите пожалуйста, как создать прокси объект текущей сборки, делаю так
Код - Visual Basic [Выбрать]
  1.  
  2.         Dim oApp As Inventor.Application
  3.         Set oApp = ThisApplication
  4.         Dim oDoc As Inventor.Document
  5.         Set oDoc = oApp.ActiveDocument
  6.  
  7.     Dim oACompDef As AssemblyComponentDefinition
  8.     Set oACompDef = oDoc.ComponentDefinition
  9.  
  10. Dim oPartPlane1 As WorkPlane
  11. Dim oAsmPlane1 As WorkPlaneProxy
  12.  
  13. Set oPartPlane1 = oACompDef.WorkPlanes.Item(3)
  14. Call oACompDef.ActiveOccurrence.CreateGeometryProxy(oPartPlane1, oAsmPlane1)
  15.  
но выдает ошибку : Object variable or With block variable not set
« Последнее редактирование: 02-12-2014, 12:12:09 от Александр Ривилис »

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

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Прокси объект текущей сборки
« Ответ #1 : 02-12-2014, 13:09:02 »
У вас ссылка на рабочую плоскость создается не из того определения.  Им должно быть не определение главной сборки, а  определение её компонента.  Вот корректный пример:
Код - Visual Basic [Выбрать]
  1. Sub Proxy_Test_1()
  2.     Dim oAsmDoc As AssemblyDocument
  3.     Set oAsmDoc = ThisApplication.ActiveDocument
  4.     Dim oAsmDef As AssemblyComponentDefinition
  5.     Set oAsmDef = oAsmDoc.ComponentDefinition
  6.    
  7.     'ссылка на вхождение
  8.    Dim oOcc As ComponentOccurrence
  9.     Set oOcc = oAsmDef.Occurrences.Item(1)
  10.    
  11.     'ссылка на "настоящую" плоскость в документе детали/подсборки
  12.    Dim oWP As WorkPlane
  13.     Set oWP = oOcc.Definition.WorkPlanes.Item(4)
  14.     Debug.Print oWP.Name
  15.    
  16.     'создание прокси-объекта рабочей плоскости
  17.    Dim oWP_proxy As WorkPlaneProxy
  18.     Set oWP_proxy = Nothing
  19.     Call oOcc.CreateGeometryProxy(oWP, oWP_proxy)
  20.     Debug.Print oWP_proxy.Name
  21. End Sub
Обратите внимание, что напечатанные имена совпадают.  Прокси-объекты имеют тот же набор свойств, что и их родители.

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Прокси объект текущей сборки
« Ответ #2 : 02-12-2014, 13:32:11 »
У вас ссылка на рабочую плоскость создается не из того определения.  Им должно быть не определение главной сборки, а  определение её компонента.  Вот корректный пример:
Код - Visual Basic [Выбрать]
  1. Sub Proxy_Test_1()
  2.     Dim oAsmDoc As AssemblyDocument
  3.     Set oAsmDoc = ThisApplication.ActiveDocument
  4.     Dim oAsmDef As AssemblyComponentDefinition
  5.     Set oAsmDef = oAsmDoc.ComponentDefinition
  6.    
  7.     'ссылка на вхождение
  8.    Dim oOcc As ComponentOccurrence
  9.     Set oOcc = oAsmDef.Occurrences.Item(1)
  10.    
  11.     'ссылка на "настоящую" плоскость в документе детали/подсборки
  12.    Dim oWP As WorkPlane
  13.     Set oWP = oOcc.Definition.WorkPlanes.Item(4)
  14.     Debug.Print oWP.Name
  15.    
  16.     'создание прокси-объекта рабочей плоскости
  17.    Dim oWP_proxy As WorkPlaneProxy
  18.     Set oWP_proxy = Nothing
  19.     Call oOcc.CreateGeometryProxy(oWP, oWP_proxy)
  20.     Debug.Print oWP_proxy.Name
  21. End Sub
Обратите внимание, что напечатанные имена совпадают.  Прокси-объекты имеют тот же набор свойств, что и их родители.
Спасибо за ответ, просто мне нужно создать прокси объект именно плоскости в главной сборке, иначе как использовать AddMateConstraint делая зависимость плоскости подсборки с плоскостью основной сборки?

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

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Прокси объект текущей сборки
« Ответ #3 : 02-12-2014, 14:54:20 »
Прокси-плоскость создается объектом ComponentOccurrence на его уровне иерархии в главной сборке. Собственно, именно это и нужно для создания сборочных зависимостей. 
Кое-что о прокси-объектах есть тут: http://ru.wikibooks.org/wiki/Autodesk_Inventor_API._%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B5_%D1%88%D0%B0%D0%B3%D0%B8/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_Assembly#.D0.9F.D1.80.D0.BE.D0.BA.D1.81.D0.B8-.D0.BE.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D1.8B_.28Proxy.29

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Прокси объект текущей сборки
« Ответ #4 : 02-12-2014, 16:20:01 »
Прокси-плоскость создается объектом ComponentOccurrence на его уровне иерархии в главной сборке. Собственно, именно это и нужно для создания сборочных зависимостей. 
Кое-что о прокси-объектах есть тут: http://ru.wikibooks.org/wiki/Autodesk_Inventor_API._%D0%9F%D0%B5%D1%80%D0%B2%D1%8B%D0%B5_%D1%88%D0%B0%D0%B3%D0%B8/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_Assembly#.D0.9F.D1.80.D0.BE.D0.BA.D1.81.D0.B8-.D0.BE.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D1.8B_.28Proxy.29
я просто так и не понял, что именно должно стоять заместо "oOcc" в этой строчке:
 Call oOcc.CreateGeometryProxy(oWP, oWP_proxy)
если мне нужно в главной сборке создать прокси плоскость...

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

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Прокси объект текущей сборки
« Ответ #5 : 02-12-2014, 16:40:33 »
Компонент (деталь) имеет рабочую плоскость, которая определена в контексте документа детали.  Сборка ничего не знает о внутреннем устройстве детали.  Чтобы эту рабочую плоскость использовать для создания сборочной зависимости, следует у данного компонента вызвать метод ComponentOccurrence.CreateGeometryProxy() с соответствующими аргументами.  Результатом будет прокси-плоскость, определенная в контексте сборки.  Именно эта прокси-плоскость и используется для создания зависимости.

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Прокси объект текущей сборки
« Ответ #6 : 02-12-2014, 17:37:24 »
Компонент (деталь) имеет рабочую плоскость, которая определена в контексте документа детали.  Сборка ничего не знает о внутреннем устройстве детали.  Чтобы эту рабочую плоскость использовать для создания сборочной зависимости, следует у данного компонента вызвать метод ComponentOccurrence.CreateGeometryProxy() с соответствующими аргументами.  Результатом будет прокси-плоскость, определенная в контексте сборки.  Именно эта прокси-плоскость и используется для создания зависимости.
Это я понимаю, я совмещаю две прокси плоскости, ПЕРВАЯ прокси плоскость создается из плоскости детали, но ВТОРАЯ прокси плоскость - плоскость основной(текущей) сборки, с которой мне необходимо совместить первую прокси плоскость, вот ее как создать?

Отмечено как Решение Павел Тер-Микаэлян 03-12-2014, 11:59:11

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

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Прокси объект текущей сборки
« Ответ #7 : 02-12-2014, 18:22:53 »
Цитировать
ВТОРАЯ прокси плоскость - плоскость основной(текущей) сборки, с которой мне необходимо совместить первую прокси плоскость, вот ее как создать?
Если эта вторая плоскость создана непосредственно в сборке (скажем, это одна из ее базовых плоскостей), то прокси объект создавать и не надо. Пользуйтесь непосредственно объектом WorkPlane.

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Прокси объект текущей сборки
« Ответ #8 : 03-12-2014, 12:01:41 »
Цитировать
ВТОРАЯ прокси плоскость - плоскость основной(текущей) сборки, с которой мне необходимо совместить первую прокси плоскость, вот ее как создать?
Если эта вторая плоскость создана непосредственно в сборке (скажем, это одна из ее базовых плоскостей), то прокси объект создавать и не надо. Пользуйтесь непосредственно объектом WorkPlane.
ааа)... теперь я понял)... а я то думал что всегда прокси объект нужно создавать для создания зависимостей)... Спасибо за консультацию))

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Прокси объект текущей сборки
« Ответ #9 : 03-12-2014, 12:28:40 »
А подскажите еще пожалуйста! Я использую метод AddMateConstraint для создания зависимостей, но у него почему то нету свойства Solution (то есть заподлицо или совмещение), а как тогда управлять этим свойством у созданной зависимости?

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

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Прокси объект текущей сборки
« Ответ #10 : 03-12-2014, 13:04:48 »
AddMateConstraint предполагает ориентацию нормалей навстречу друг другу - "морда к морде".
Если нужно получить сонаправленные нормали, используется метод  AddFlushConstraint.

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Прокси объект текущей сборки
« Ответ #11 : 03-12-2014, 13:54:05 »
AddMateConstraint предполагает ориентацию нормалей навстречу друг другу - "морда к морде".
Если нужно получить сонаправленные нормали, используется метод  AddFlushConstraint.

я понял) Спасибо большое)