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

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

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

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

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

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

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

Пустая строка обозначения "marking"

Автор zeratul, 02.10.13, 16:18:32

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

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

zeratul

Есть код подключения на 1с 8.2

API 7
kompas=Новый COMОбъект("Kompas.Application.7");
ActiveDoc = kompas.Documents.Open(Объект.Path,True,False);
FieldMark = ActiveDoc.TopPart.Marking;
MassObject = Окр(ActiveDoc.TopPart.Mass/1000,3);
Materials = ActiveDoc.TopPart.Material;
DetailName = ActiveDoc.TopPart.Name;
kompas.Quit();
Сообщить("Обознаение "+FieldMark+", Масса "+Строка(MassObject)+", Материалы "+Materials+", Имя детали "+DetailName);

под api7 все хорошо считывает все данные детали, но значение массива PartsEx = Неопределено (не знаю почему)

API 5
kompas=Новый COMОбъект("Kompas.Application.5");
Active = kompas.Document3d.open(Объект.Path,False);
If Active Then
doc3D = kompas.ActiveDocument3D;
PColl = doc3D.PartCollection(True);
jj = PColl.GetCount();
Для j = 0 По PColl.GetCount() - 1 Цикл
   iPart = doc3D.GetPart(j);
   //ReDim Preserve PathList(j)
   //PathList(j) = iPart.fileName;
   ll = iPart.name;
КонецЦикла;   
здесь наоборот отлично считываются детали сборки, кроме самой сборки, обозначения пустые...не могу разобраться почему..
если есть примеры на delphi пожалуйста напишите :)

Цитироватьпод api7 все хорошо считывает все данные детали, но значение массива PartsEx = Неопределено (не знаю почему)
А можно посмотреть строку кода, как Вы его получаете.
ЦитироватьiPart = doc3D.GetPart(j);
Для API5 iPart нужно получать от коллекции.
iPart = PColl.GetByIndex(j);

zeratul


#3
Не правильно, откройте SDK и посмотрите, что возвращает PartsEx.
iParts = ActiveDoc.TopPart.PartsEx
Должна выглядеть так  iParts = ActiveDoc.TopPart.PartsEx[ksAllParts] или так iParts = ActiveDoc.TopPart.PartsEx[ksUniqueParts],
в зависимости, что Вы хотите получить, где iParts:OleVariant - вариантный массив интерфейсов IDispatch.

zeratul


Примерчика нет, здесь http://forum.ascon.ru/index.php/topic,24894.msg180294.html#msg180294 есть картинка, как работать с вариантным массивом, проверка, что он не пустой, интерфейсы IDispatch внутри массива  нужно будет привести к IPart7.

zeratul

Спасибо, а как быть в API 5? Не получается считать обозначение

Попробуйте преобразовать документ из API5 в API7.
Doc3D:=IUnknown(ksTransferInterface(LtDefine.PIUnknown(Doc3DAPI5),ksAPI7Dual,0)) as IKompasDocument3D;
Part7:=Doc3D.TopPart;
FieldMark:=Part7.Marking;