• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Внешние объекты спецификации

Автор Freddy, 22.04.11, 16:34:25

« назад - далее »

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

Freddy

Здравствуйте!

Подскажите, как программно достать внешние объекты спецификации у сборки?

На форуме мне встретился похожий топик, датированый 2006-2007 годом. Там сказано, что в API этого нет. Что-нибудь изменилось? Кто-нибудь знает?

ainis

Можно."достать" внешние объекты. Используйте итератор.

Dim iKompas As Kompas6API5.KompasObject = Marshal.GetActiveObject("KOMPAS.Application.5")
Dim iDoc3D As Kompas6API5.ksDocument3D = iKompas.ActiveDocument3D
Dim SpecOb As Kompas6API5.ksSpecification = Doc3D.GetSpecification()
Dim iSpecIter As Kompas6API5.Iterator = iKompas.GetIterator
iSpecIter.ksCreateSpcIterator("", 0, 3) 'итератор для работы с объектами спецификации
If iSpecIter IsNot Nothing Then
Dim Obj As Integer 'Указатель на объект спецификации
Obj = iSpecIter.ksMoveIterator("F") 'Встаем на первый объект спецификации
If Obj <> 0 Then 'проверяем существование объекта
   Do 'перебираем объекты спецификации
     Dim iParObjSpec As Kompas6API5.ksSpcObjParam = _
     iKompas.GetParamStruct(Kompas6Constants.StructType2DEnum.ko_SpcObjParam) 'Интерфейс параметров объекта спецификации
     iParObjSpec.Init()
     Doc3D.ksGetObjParam(Obj, iParObjSpec)
     Dim Name As String = "" 'наименование объекта
     Name = SpecOb.ksGetSpcObjectColumnText(Obj, _
                 Kompas6Constants.ksSpecificationColumnTypeEnum.ksSColumnName, 1, 0)
     ' и т. д....

    Obj = iSpecIter.ksMoveIterator("N") ' Встаем на следующий объект спецификации
   Loop Until Obj = 0
  iSpecIter.ksDeleteIterator()
End If


Вот как-то так.  :)

Freddy

Не помогло.

iterator.ksCreateSpcIterator("", 0, 3);
int SpcObject = iterator.ksMoveIterator("F");
 

вот тут SpcObject сразу 0 возвращает

Указываю имя библиотеки и стиль выполнения спецификации в ksCreateSpcIterator - тоже самое, встаю на первый элемент, возвращает 0.
Как я понимаю этот итератор работает по внутренним объектам спецификации (в сборке), а по внешним не проходит

ainis

Странно. Я проверял на сборке в Компасе V 10. Добавил в сборку внешний объект и получил его параметры.
Если можете, сбросьте сборку, в которой у Вас не удалось получить внешний объект. я проверю его на своей программе.

Можете посмотреть пример 10 в SDK, там и комментарии есть.

Freddy

Спасибо, пока не получилось.
Буду разбираться.

333

В API7 см ISpecificationDescription::DelegateMode = TRUE
После этого  ISpecificationDescription::BaseObjects работает с внешними объектами