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

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

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

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

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

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

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

Программное создание макрообъекта 2D API7

Автор Alexander982, 05.05.21, 20:20:26

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

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

Alexander982

Пытаюсь сделать макрообъект программно c помощью API7:
IDrawingContainer dc = GetDrawingContainer();
if (dc == null) return;
IMacroObjects macs = dc.MacroObjects;
if (macs == null) kompas.ksMessage("macro object container is null");
IMacroObject mac = macs.Add();
if (mac == null) kompas.ksMessage("macrobject is null");
if (mac.Valid == false) kompas.ksMessage("macrobject not valid here");

ILineSegments lss = dc.LineSegments;
ILineSegment ls = lss.Add();
ls.X1 = -5.0; ls.X2 = 5.0; ls.Y1 = 0.0; ls.Y2 = 0.0;
ls.Style = (int)ksCurveStyleEnum.ksCSThin;
ls.Update();
mac.AddObjects(ls);

ls = lss.Add();
ls.X1 = 0.0; ls.X2 = 0.0; ls.Y1 = 5.0; ls.Y2 = -5.0;
ls.Style = (int)ksCurveStyleEnum.ksCSThin;
ls.Update();

mac.AddObjects(ls);
mac.Name = "Отверстие 1";
mac.Update();
if (mac.Valid == false) kompas.ksMessage("macrobject not valid here too");

Функция GetDrawingContainer() получает IDrawingContainer через интерфейс IView.

Данный код успешно рисует две линии, но не создает макрообъекта. Выводятся сообщения "macrobject not valid here" и "macrobject not valid here too". И при выходе из функции еще одно "сообщение библиотеки" - "Вырожденный объект".

Как создать невырожденный макрообъект?

Alexander982

Не смог найти решения как создать макроэлемент чисто на API7. Получилось только на API5, но в API5 нет методов которые есть в API7. Поэтому дополнительно воспользовался KompasObject.TransferReference чтобы преобразовать в API7.

ksDocument2D doc5 = kompas.ActiveDocument2D();
doc5.ksMacro(1);
doc5.ksLineSeg(-5.0, 0.0, 5.0, 0.0, (int)ksCurveStyleEnum.ksCSThin);
doc5.ksLineSeg(0.0, 5.0, 0.0, -5.0, (int)ksCurveStyleEnum.ksCSThin);
reference mac5 = doc5.ksEndObj();
IMacroObject mac7 = kompas.TransferReference(mac5, 0);
mac7.AddDefaultHotPoint(0.0, 0.0);
mac7.Name = "Hole 1";
mac7.Update();

Нормально ли это переключаться между версиями API?


Slaviation

Добрый день.
Во вложении пример на одном API7.

Alexander982

Большое спасибо) Так работает.
Хотя теперь непонятно почему AddObjects() не срабатывал в моём коде. Вроде эффект должен был быть тот же.