Программно получить размер вида IAssociationView

Автор AlinaM, 09.02.23, 15:52:15

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

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

AlinaM

Всем привет!
Подскажите, пожалуйста, возможно ли программно получить габариты(Высота, Ширина) вида чертежа IAssociationView?

p3452

09.02.23, 22:04:02 #1 Последнее редактирование: 09.02.23, 22:16:40 от p3452
Знаю три варианта:, но может быть есть и еще...
- плясать от 3D габаритов,
- передавать размеры Летали, Сборки переменными,
- перебирать все примитивы вида и считать минимальные и максимальные координаты.

Но, может быть, есть и другие!?

Дополнение:

В API5 есть функция:
ksDocument2D::ksGetObjGabaritRect(pObj, pRectParam);
Входные параметры:
pObj  - указатель на объект,
pRectParam  - указатель на структуру размеров габаритного прямоугольника RectParam.

если в качестве объекта передать Вид, может и получится

p3452

Ну вот, как доказательство, что Поиск на Форуме здорово помогает.
Была тема Компас API 2D Чертежи.
См. пост №3 от Дмитрий22 и там исходный код двух вариантов...
("Спасибо" говорить автору кода)
+ Благодарностей: 1

lavgirb

Цитата: p3452 от 09.02.23, 22:34:15См. пост №3 от Дмитрий22 и там исходный код двух вариантов...
("Спасибо" говорить автору кода)
Второй код от Дмитрий22 позволяет получить габариты вида, но эти габариты включают абсолютно все объекты, присутствующие на виде.
Хотелось бы узнать размеры самого ассоциативного вида. По границам, показанным на скриншоте. Без учета всего, что выходит за эти границы.

ViewBounds.png

Есть способ. Убираем все объекты вида на выключенный слой.
Дальше кодом от Дмитрийй22...
Работает хорошо, но очень медленно.
Потому что объекты переносятся на слой по одному и по одному возвращаются потом с выключенного слоя.
Даже для обычных видов время не приемлемое.
Отсюда вопросы:
1 Есть ли способ перенести на слой группу объектов за один шаг?
2 Есть ли способ отделить объекты, определяемые моделью, от объектов, построенных на виде?
Чтобы не переносить на выключенный слой модельные объекты не влияющие на вычисление габаритных размеров.

Nipal

Получить массив объектов, выделить и получить габарит группы селектированния.

lavgirb

Цитата: Nipal от 25.01.24, 11:01:34Получить массив объектов, выделить и получить габарит группы селектированния.
1 На виде, применительно к задаче, два отдельных массива объектов: модельные объекты, изображающие 3D-модель, и чертежные (размеры, выноски и т.п.. Могут быть и линии и т.п.)
Есть ли возможность получить один из них? Как?
2 А как получить габарит группы селектирования?


lavgirb


lavgirb

Цитата: Nipal от 25.01.24, 11:12:50https://help.ascon.ru/KOMPAS_SDK/22/ru-RU/iassociationview_associationobjects.html
Посмотрел. Не понял пока где взять ModelObject при работе с чертежом. Надо загрузить модель?

ModelObject.JPG


Nipal

Из файла источника.
Можно попробовать передать 0.
Компьютера нет, чтобы экспериментировать.

lavgirb

Цитата: Nipal от 26.01.24, 07:10:06Из файла источника.
Можно попробовать передать 0.
Компьютера нет, чтобы экспериментировать.
1 С 0 не идет. Требует объект. С Nothing возвращает Nothing
2 Кстати, у меня для выделенных объектов габарит не определяется с помощью GetObjGabaritRect(0,RectParam). Возвращает нули.

Пока остановился на
- перенос на невидимый слоя только объектов, которые потенциально могут увеличивать габарит вида: размеры, выноски, тексты, линии видов и некоторые др.
- скрытие и обновление невидимого слоя - один раз после переноса на него объектов.
В принципе, время стало приемлемым и точность вычисления центра вида, с большой вероятностью будет высокой.

Nipal, подскажите, пожалуйста, а есть ли штатные способы замораживать окно чертежа на время работы с ним?
Кроме стандартного WidowsLockUpdate из WinAPI.