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

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

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

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

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

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

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

Сопряжение: совпадение локальных систем координат

Автор /|exa_in_da_house, 17.09.21, 07:35:11

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

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

/|exa_in_da_house

Приветствую! Продолжаю осваивать api Компаса и программирование в целом, пытаюсь автоматизировать добавление анкерных болтов в сборку, алгоритм такой:
- В главной сборке находится определённое количество подсборок с именем "Стойка", в каждой стойке есть по 4 отверстия, к каждому из которых "прикреплена" локальная система координат с именем "LCS_12".
- Есть сборка анкерного болта со своей локальной системой координат с именем "LCS";
- Пробегаемся по главной сборке в поисках сборок с именем "Стойка";
- Находим в стойках все ЛКС с имеенм "LCS_12" и добавляем их в список;
- Добавляем в сборку анкерный болт (сколько ЛКС в списке, столько и болтов), находим в нём его ЛКС с именем "LCS";
- Создаём сопряжение совпадение между ЛКС болта и ЛКС из списка.

Вопрос в том, что я запутался в интерфейсах при получении ЛКС у анкерного болта, получаю через iLocalCoordinateSystems.Current объект типа IModelObject, понимаю, что для сопряжения нужен ksEntity  :(

Ну и может есть способ проще, как найти компонент с определённым именем, что б не перебирать все компоненты и сравнивать имя?

Код:

import pythoncom
from win32com.client import Dispatch, gencache

def get_kompas_api7():
        module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
        api = module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
        const = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0)
        return module, api, const.constants

def get_kompas_api5():
        module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
        api = module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(module.KompasObject.CLSID, pythoncom.IID_IDispatch))
        const = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0)
        return module, api, const.constants



try:
    pythoncom.connect('Kompas.Application.5') # Проверка запущен ли КОМПАС
except:
    pass
module_5, kompas_object, const_5 = get_kompas_api5()
module_7,  api, const_7 = get_kompas_api7()

coordinate_system_list = [] # список систем координат для вставки анкеров


app = api.Application # приложение компас
iDocument = app.ActiveDocument #активный документ (должна быть сборка)
iKompasDocument3D = module_7.IKompasDocument3D(iDocument) # интерфейс трёхмерного активного документа
iDocument3D = kompas_object.ActiveDocument3D()
iPart7_Top = iKompasDocument3D.TopPart # интерфейс самого документа
parts = iPart7_Top.Parts # массив входящих в сборку компонентов
parts_count = parts.Count # количество компонентов в сборке

for part in range(parts_count): # для каждого компонента
    current_part = iDocument3D.GetPart(part)
    part_name = current_part.name # имя компонента
    part_marking = current_part.marking # обозначение компонента
    part_visibility = current_part.hidden # скрыт или не скрыт компонент
    part_excluded = current_part.excluded # исключение из расчёта
   

    if part_name.lower() == 'стойка' and part_visibility == 0 and part_excluded == 0: # если имя стойка, видимый и не исключён из расчёта
        part_feature = current_part.GetFeature() # интерфейс объекта дерева текущего компонента
        iFeatureCollection = part_feature.SubFeatureCollection(False, False) # массив объектов, входящих в компонент
        for feature in range(iFeatureCollection.GetCount()):
            current_feature = iFeatureCollection.GetByIndex(feature)
            feature_name = current_feature.name # имя объекта
            if 'lcs' in feature_name.lower():
                LCS = current_feature.GetObject() # получаем указатель на объект системы координат
                coordinate_system_list.append(LCS) # добавляем в словарь систему координат
           

#---------------------------------------Добавление новых компонентов в сборку----------------------------------------
print('Adding new components....')

anchor = parts.AddFromFile('C:\\Users\\Администратор\\Desktop\\Макросы\\Python 3.7\\LCS_test\\БСР.a3d',True,True) # добавить анкер
iAuxiliaryGeomContainer = anchor._oleobj_.QueryInterface(module_7.IAuxiliaryGeomContainer.CLSID, pythoncom.IID_IDispatch)
iAuxiliaryGeomContainer = module_7.IAuxiliaryGeomContainer(iAuxiliaryGeomContainer)
iLocalCoordinateSystems = iAuxiliaryGeomContainer.LocalCoordinateSystems
current_coordinate_system = iLocalCoordinateSystems.Current#.Owner # текущая система координат компонента


print(iDocument3D.AddMateConstraint(0,coordinate_system_list[0],anchorPart7,0,0,0))


/|exa_in_da_house