Получить ksDocument3D из ksPart

Автор bbb, 12.02.19, 10:32:26

« предыдущая - следующая »

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

bbb

12.02.19, 10:32:26 Последнее редактирование: 12.02.19, 11:12:02 от bbb
Добрый день.
Для того чтобы получить интерфейс ksDocument3D из ksPart я беру ksPart на редактирование так:

ksDocument3D kdoc = (ksDocument3D)part.BeginEdit();

А можно не беря на редактирование конвертнуть интерфейс?

once

KompasObject::Document3D, KompasObject::ActiveDocument3D
Методы описаны в SDK

bbb

Цитата: once от 12.02.19, 10:46:30
KompasObject::Document3D, KompasObject::ActiveDocument3D
Методы описаны в SDK


Он не активный. Это деталь в сборке, активная сборка. А KompasObject::Document3D это новый объект создаст

#programmer

А зачем вам именно ksDocument3D?
Может то, что вы в итоге хотите можно сделать и по другому.
КОМПАС 3D v16.1

bbb

Цитата: #programmer от 12.02.19, 11:51:24
А зачем вам именно ksDocument3D?
Может то, что вы в итоге хотите можно сделать и по другому.


Потому что я хочу вставить деталь в деталь. Я нахожу в сборке деталь типа ksPart и в нее нужно вставить еще одну деталь. А функция SetPartFromFile есть только у ksDocument3D

#programmer

12.02.19, 13:33:38 #5 Последнее редактирование: 12.02.19, 13:44:40 от #programmer
Ок.
Посмотрите интерфейсы IPart7 и IParts7, где есть методы Add и AddFromFile.

Из справки:

От интерфейса 3D-документа IKompasDocument3D может быть получен верхний компо­нент IKompasDocument3D::TopPart, а от полученного верхнего компонента IPart7 может быть получена коллекция компонентов IParts7 с помощью свойства IPart7::Parts. Эле­менты коллекции-компоненты могут быть получены у коллекции с помощью свойства IParts7::Part. Либо с помощью свойства IModelObjects::Item как объекты типа IModelObject с последующим приведением к типу IPart7 через QueryInterface. От каждого элемента коллекции-компонента может быть получена вложенная коллекция компонен­тов c помощью свойства IPart7::Parts. И так далее, пока имеются вложенные коллекции компонентов.
КОМПАС 3D v16.1

bbb


#programmer

Наверное так нельзя, т.е. нельзя получить интерфейс документа не открывая (редактируя) его.
Как по мне так ф-я AddFromFile (LPCTSTR FileName, BOOL ExternalFile, BOOL Redraw) интерфейса
IParts7 делает то же что и SetPartFromFile интерфейса ksDocument3D.
КОМПАС 3D v16.1

bbb

Цитата: #programmer от 12.02.19, 14:01:34
Наверное так нельзя, т.е. нельзя получить интерфейс документа не открывая (редактируя) его.
Как по мне так ф-я AddFromFile (LPCTSTR FileName, BOOL ExternalFile, BOOL Redraw) интерфейса
IParts7 делает то же что и SetPartFromFile интерфейса ksDocument3D.


Да без редактирования нельзя.

Вират Лакх

На примере этого https://forum.ascon.ru/index.php/topic,31982.msg259083.html#msg259083 beginedit должен выдать правильный интерфейс. У вас через редактирование на месте работает добавление детали в деталь? Или в сборку кидает? Если не хотите наблюдать, как включается и выключается редактирование на месте, можно отключить временно обновление дерева и окна: https://forum.ascon.ru/index.php/topic,30640.msg259806.html#msg259806
Писать макросы и программы на Python для Компас может каждый. Могу научить за вознаграждение. Обращаться в ЛС.

bbb

Цитата: Вират Лакх от 13.02.19, 05:34:34
На примере этого https://forum.ascon.ru/index.php/topic,31982.msg259083.html#msg259083 beginedit должен выдать правильный интерфейс. У вас через редактирование на месте работает добавление детали в деталь? Или в сборку кидает? Если не хотите наблюдать, как включается и выключается редактирование на месте, можно отключить временно обновление дерева и окна: https://forum.ascon.ru/index.php/topic,30640.msg259806.html#msg259806

Да сначала в сборку кидало, сейчас разобрался. Спасибо за needRebuild, реально ускоряет быстродействие.