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

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

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

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

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

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

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

Странности с содержимым макрообъекта - баг или фича?

Автор Антон Чумаков, 06.02.22, 00:37:02

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

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

Антон Чумаков

Создаю во фрагменте макрообъект и получаю через API координаты каких-либо опорных точек (например, центр окружности). Всё идёт по плану. Но стоит перенести этот макрообъект в другое место, как API начинает сбоить - выводит прежние координаты объектов, игнорируя перемещение.
При этом после разрушения макрообъекта и повторного создания нового из получившихся объектов координаты выводятся снова правильные.
Что это - особенность API или моя криворукость? И как нужно делать, чтобы всегда получать правильные координаты?

Пример кода для получения координат:
# -*- coding: utf-8 -*-
from win32com.client import Dispatch, gencache
KAPI7 = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0)
iApplication = Dispatch('Kompas.Application.7')

iDoc2D = KAPI7.IKompasDocument2D(iApplication.ActiveDocument)
iView = iDoc2D.ViewsAndLayersManager.Views.ActiveView
iDrawingContainer = KAPI7.IDrawingContainer(iView)

iMacroses = iDrawingContainer.MacroObjects
iMacro1 = iMacroses.MacroObject(0)    # 2 одинаковых макрообъекта с разными координатами
iMacro2 = iMacroses.MacroObject(1)

iDCM1 = KAPI7.IDrawingContainer(iMacro1)
iDCM2 = KAPI7.IDrawingContainer(iMacro2)

iC1ircles1 = iDCM1.Circles    # окружность из 1-го макрообъекта
iCircle1 = iC1ircles1.Circle(0)
print('Circle 1: [%s, %s] mm' %(iCircle1.Xc, iCircle1.Yc))

iC1ircles1 = iDCM2.Circles    # ... 2-го ...
iCircle2 = iC1ircles1.Circle(0)
print('Circle 2: [%s, %s] mm' %(iCircle2.Xc, iCircle2.Yc))    # после перемещения макро координаты выдаются старые

Slaviation


Vi2

GetPlacement - Получить точку привязки и угол поворота системы координат макроэлемента. Я думаю, что определение фигур в составе комплекса и расположение самого комплекса развязаны.
+ Благодарностей: 1

Антон Чумаков

Да, в этом дело оказалось. Благодарю!
Очевидно, у макрообъекта в момент его создания СК совпадает с СК активного вида, но всякие трансформации действуют и на СК макрообъекта, поэтому и получается вот эти странности.