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

ADN Club => Inventor API => Тема начата: Павел Тер-Микаэлян от 02-12-2014, 11:52:08

Название: Прокси объект текущей сборки
Отправлено: Павел Тер-Микаэлян от 02-12-2014, 11:52:08
Здравствуйте! Подскажите пожалуйста, как создать прокси объект текущей сборки, делаю так
Код - 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
Название: Re: Прокси объект текущей сборки
Отправлено: Владимир Ананьев от 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
Обратите внимание, что напечатанные имена совпадают.  Прокси-объекты имеют тот же набор свойств, что и их родители.
Название: Re: Прокси объект текущей сборки
Отправлено: Павел Тер-Микаэлян от 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 делая зависимость плоскости подсборки с плоскостью основной сборки?
Название: Re: Прокси объект текущей сборки
Отправлено: Владимир Ананьев от 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 (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)
Название: Re: Прокси объект текущей сборки
Отправлено: Павел Тер-Микаэлян от 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 (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)
если мне нужно в главной сборке создать прокси плоскость...
Название: Re: Прокси объект текущей сборки
Отправлено: Владимир Ананьев от 02-12-2014, 16:40:33
Компонент (деталь) имеет рабочую плоскость, которая определена в контексте документа детали.  Сборка ничего не знает о внутреннем устройстве детали.  Чтобы эту рабочую плоскость использовать для создания сборочной зависимости, следует у данного компонента вызвать метод ComponentOccurrence.CreateGeometryProxy() с соответствующими аргументами.  Результатом будет прокси-плоскость, определенная в контексте сборки.  Именно эта прокси-плоскость и используется для создания зависимости.
Название: Re: Прокси объект текущей сборки
Отправлено: Павел Тер-Микаэлян от 02-12-2014, 17:37:24
Компонент (деталь) имеет рабочую плоскость, которая определена в контексте документа детали.  Сборка ничего не знает о внутреннем устройстве детали.  Чтобы эту рабочую плоскость использовать для создания сборочной зависимости, следует у данного компонента вызвать метод ComponentOccurrence.CreateGeometryProxy() с соответствующими аргументами.  Результатом будет прокси-плоскость, определенная в контексте сборки.  Именно эта прокси-плоскость и используется для создания зависимости.
Это я понимаю, я совмещаю две прокси плоскости, ПЕРВАЯ прокси плоскость создается из плоскости детали, но ВТОРАЯ прокси плоскость - плоскость основной(текущей) сборки, с которой мне необходимо совместить первую прокси плоскость, вот ее как создать?
Название: Re: Прокси объект текущей сборки
Отправлено: Владимир Ананьев от 02-12-2014, 18:22:53
Цитировать
ВТОРАЯ прокси плоскость - плоскость основной(текущей) сборки, с которой мне необходимо совместить первую прокси плоскость, вот ее как создать?
Если эта вторая плоскость создана непосредственно в сборке (скажем, это одна из ее базовых плоскостей), то прокси объект создавать и не надо. Пользуйтесь непосредственно объектом WorkPlane.
Название: Re: Прокси объект текущей сборки
Отправлено: Павел Тер-Микаэлян от 03-12-2014, 12:01:41
Цитировать
ВТОРАЯ прокси плоскость - плоскость основной(текущей) сборки, с которой мне необходимо совместить первую прокси плоскость, вот ее как создать?
Если эта вторая плоскость создана непосредственно в сборке (скажем, это одна из ее базовых плоскостей), то прокси объект создавать и не надо. Пользуйтесь непосредственно объектом WorkPlane.
ааа)... теперь я понял)... а я то думал что всегда прокси объект нужно создавать для создания зависимостей)... Спасибо за консультацию))
Название: Re: Прокси объект текущей сборки
Отправлено: Павел Тер-Микаэлян от 03-12-2014, 12:28:40
А подскажите еще пожалуйста! Я использую метод AddMateConstraint для создания зависимостей, но у него почему то нету свойства Solution (то есть заподлицо или совмещение), а как тогда управлять этим свойством у созданной зависимости?
Название: Re: Прокси объект текущей сборки
Отправлено: Владимир Ананьев от 03-12-2014, 13:04:48
AddMateConstraint предполагает ориентацию нормалей навстречу друг другу - "морда к морде".
Если нужно получить сонаправленные нормали, используется метод  AddFlushConstraint.
Название: Re: Прокси объект текущей сборки
Отправлено: Павел Тер-Микаэлян от 03-12-2014, 13:54:05
AddMateConstraint предполагает ориентацию нормалей навстречу друг другу - "морда к морде".
Если нужно получить сонаправленные нормали, используется метод  AddFlushConstraint.

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