Переключение пространства
Редактировать модель из пространства листа невозможно. Чтобы получить доступ к модели для данного ВЭ Viewport , переключитесь из пространства листа в пространство модели, используя методы SwitchToModelSpace и SwitchToPaperSpace класса Editor. В результате вы сможете работать с моделью, сохраняя при этом видимым лист. В видовых экранах Viewport возможности редактирования и изменения настроек вида практически такие же, как и в объектах ViewportTableRecord.
Тем не менее, редактируя настройки ВЭ, у вас больше возможностей: например, вы можете замораживать или размораживать слои в некоторых видовых экранах, не затрагивая остальные экраны, включать или выключать отображение геометрии в видовом окне (альтернатива команды ON_OFF_Viewport).
При работе в объекте видового экрана вы можете находиться либо в пространстве модели, либо в пространстве листа. Определить, работаете ли вы в пространстве модели, можно, проверив текущие значения системных переменных TILEMODE и CVPORT. Если TILEMODE равно 0, а CVPORT имеет значение, отличное от 2, вы работаете в пространстве листа; если TILEMODE равно 0, а CVPORT равно 2, вы работаете в пространстве модели. Если TILEMODE равно 1, вы работаете в пространстве модели с видовым экраном по умолчанию в единственном числе.
Примечание: Перед переключением в пространство модели из листа необходимо установить свойство "On = true" хотя бы для одного объекта Viewport на листе. Пример ниже содержит код, инвертирующий активное пространство чертежа (пространство модели меняется на область листа и наоборот).
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
[CommandMethod("ToggleSpace")]
public static void ToggleSpace()
{
// Get the current document
Document acDoc = Application.DocumentManager.MdiActiveDocument;
// Get the current values of CVPORT and TILEMODE
object oCvports = Application.GetSystemVariable("CVPORT");
object oTilemode = Application.GetSystemVariable("TILEMODE");
// Check to see if the Model layout is active, TILEMODE is 1 when
// the Model layout is active
if (System.Convert.ToInt16(oTilemode) == 0)
{
// Check to see if Model space is active in a viewport,
// CVPORT is 2 if Model space is active
if (System.Convert.ToInt16(oCvports) == 2)
{
acDoc.Editor.SwitchToPaperSpace();
}
else
{
acDoc.Editor.SwitchToModelSpace();
}
}
else
{
// Switch to the previous Paper space layout
Application.SetSystemVariable("TILEMODE", 0);
}
}