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

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

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

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

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

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

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

Перенос окружностей заданного диаметра на другой слой

Автор 31010, 28.12.22, 20:58:35

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

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

31010

Всем привет!
Как во фрагменте с помощью макроса можно перенести все окружности по заданным свойствам (диаметр равен, больше или меньше...) на другой слой?
И второй вопрос, какие значения параметра iLayerParam.color соответствуют цветам RGB?

31010

Пока сделал вот это:
from win32com.client import Dispatch, gencache # библиотека API Windows

def X_Y(Object): # обработка

    if iSelectedObject.DrawingObjectType == 2: # тип графических объектов (2 - окружность, см. DrawingObjectTypeEnum)
        X1 =  Object.Radius  # Радиус окружности

        X1 = X1 * 2    # Диаметр окружности
        if X1 == 7:
            print(X1) # печатаем значения
            #iDocument2D.ksChangeObjectLayer(iSelectedObject,1)


KompasAPI7 = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0) # API7 КОМПАСа
iApplication = Dispatch('Kompas.Application.7') # интерфейс приложения КОМПАС-3D.

iKompasDocument = iApplication.ActiveDocument # базовый класс документов КОМПАС
iKompasDocument2D1 = KompasAPI7.IKompasDocument2D1(iKompasDocument) # дополнительный интерфейс IKompasDocument2D
iDocument2D = kompas_object.ActiveDocument2D()
iSelectionManager = iKompasDocument2D1.SelectionManager # менеджер выделенных объектов
iSelectedObjects = iSelectionManager.SelectedObjects # массив выделенных объектов в виде SAFEARRAY | VT_DISPATCH

if isinstance(iSelectedObjects, tuple): # если выбрано несколько объектов (кортеж объектов)
    for iSelectedObject in iSelectedObjects: # перебор всех выделенных объектов
        X_Y(iSelectedObject) # обработка

else:
    X_Y(iSelectedObject) # обработка

Осталось только перенести на нужный слой. Что у меня не получается.
Код iDocument2D.ksChangeObjectLayer(iSelectedObject,1) дает ошибку:
TypeError: int() argument must be a string or a number,
not 'ICircle'

Кто подскажет, что надо сделать?

Михаил88

Цитата: 31010 от 29.12.22, 17:57:03Код iDocument2D.ksChangeObjectLayer(iSelectedObject,1) дает ошибку:

нужно так

iDocument2D.ksChangeObjectLayer(iSelectedObject.Reference, 1)
+ Благодарностей: 1

31010

Цитата: Михаил88 от 29.12.22, 20:26:46iDocument2D.ksChangeObjectLayer(iSelectedObject.Reference, 1)

Спасибо, Михаил, огромное!
Вроде заработало!!!
Дальше уже сам, надеюсь, разберусь!