Всем привет. Как обычно последние мои надежды на форум ))
В общем такая задача:
Имеем чертеж в котором несколько листов (layout). В листах есть видовые экраны. Нужно "пройти" по всем листам и по всем видовым экранам в листах и получить данные из объектов, которые "показаны" в этих видовых экранах
После многочисленных попыток получилось так сделать только в одном листе, который будучи активный. Как я увидел решение - происходит перебор листов и каждый лист делается активным, затем выполняется уже работа с видовыми экранами (на мысль меня натолкнула Публикация).Но вот опыта работы с видовыми экранами нет вообще и у меня ничего не получилось
Сделал тестовый проект и тестовый чертеж. К теме прикладываю и то и другое. В тексте тоже код напишу для дискуссий
Функция состоит из одного окошка с кнопкой. Вызов функции:
public class Class1
{
// Вызов функции
Win _mpTotals;
[CommandMethod("VPtest", CommandFlags.Modal)]
public void Main()
{
if (_mpTotals == null)
{
_mpTotals = new Win();
_mpTotals.Closed += win_Closed;
}
if (_mpTotals.IsLoaded)
_mpTotals.Activate();
else
AcApp.ShowModelessWindow(AcApp.MainWindow.Handle, _mpTotals);
}
void win_Closed(object sender, EventArgs e)
{
_mpTotals = null;
Utils.SetFocusToDwgView();
}
}
Обработка нажатия кнопки:
Извините, вам запрещён просмотр содержимого спойлеров.
Список листов специально так сделан в списке потому что код выдергивал из большого проекта
Работа с листом:
Извините, вам запрещён просмотр содержимого спойлеров.
Код выбора объектов в модели брал
тут. Мне кажется, что он косячный....
В общем на строчке
ed.SwitchToModelSpace(); ловится ошибка
eCannotChangeActiveViewport, а в командной строек пишется
Нет активных видовых экранов в пространстве модели. Ошибка ловится, если я нахожусь, например, на Лист1, а видовой экран на Лист2. Если в момент запуска функции я буду на Лист2, то все сработает
Возможно к вечеру у меня уже каша в голове....