4.2.3. Использование именованных видов

Источник здесь.[перевод не проверен];[перевёл Андрей Бушман]
 
    Те виды, которые вы хотите использовать повторно, можно сохранять, присваивая им различные имена. Если в процессе работы потребности в сохранённом виде больше нет - его можно удалить.
Именованные виды сохраняются в таблице видов (View table), являющейся одной из именованных символьных таблиц в базе данных чертежа. Именованный вид созданный методом Add (Добавить) добавляется в таблицу видов. Когда в эту таблицу вы добавляете новый именованный вид, по умолчанию создаётся вид пространства модели.

    При создании вида вы присваиваете ему имя, которое должно быть не длиннее 255 символов и может состоять только из букв, цифр и специальных символов, таких как $ (знак доллара), - (дефис) и _ (символ подчёркивания).
В случае необходимости, именованный вид может быть легко удалён из таблицы видов с помощью метода Erase (Стереть) объекта ViewTableRecord.

Добавление именованного вида и установка его текущим

Следующий пример демонстрирует добавление именованного вида в чертёж и установку его текущим.

Код VB.NET

   1:  '' Объявление используемых пространств имён
   2:  Imports Autodesk.AutoCAD.ApplicationServices
   3:  Imports Autodesk.AutoCAD.DatabaseServices
   4:  Imports Autodesk.AutoCAD.Runtime 
   5:   
   6:  ''С помощью атрибута CommandMethod определяем имя команды в AutoCAD
   7:  <CommandMethod("CreateNamedView")> _
   8:  Public Sub CreateNamedView()
   9:   
  10:    '' Получение текущей базы данных
  11:    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  12:    Dim acCurDb As Database = acDoc.Database 
  13:   
  14:    '' Запуск транзакции
  15:    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() 
  16:   
  17:        '' Открытие таблицы видов для чтения
  18:        Dim acViewTbl As ViewTable
  19:   
  20:        acViewTbl = acTrans.GetObject(acCurDb.ViewTableId, OpenMode.ForRead) 
  21:   
  22:        '' Проверка на наличие в таблице вида под именем 'View1'
  23:        If (acViewTbl.Has("View1") = False) Then
  24:   
  25:            '' Открытие таблицы видов для записи
  26:            acViewTbl.UpgradeOpen() 
  27:   
  28:            '' Создание новой записи таблицы видов под именем "View1"
  29:            Dim acViewTblRec As ViewTableRecord = New ViewTableRecord()
  30:   
  31:            acViewTblRec.Name = "View1" 
  32:   
  33:            '' Добавление новой записи таблицы видов в саму таблицу видов и в транзакцию
  34:            acViewTbl.Add(acViewTblRec)
  35:   
  36:            acTrans.AddNewlyCreatedDBObject(acViewTblRec, True) 
  37:   
  38:            '' Установка именованного вида 'View1' текущим
  39:            acDoc.Editor.SetCurrentView(acViewTblRec) 
  40:   
  41:            '' Выполнение изложенных выше в блоке "using" изменений
  42:            acTrans.Commit()
  43:   
  44:        End If 
  45:   
  46:        '' Ликвидация объекта транзакции
  47:    End Using
  48:  End Sub

Код C#

   1:  //Объявление используемых пространств имён
   2:  using Autodesk.AutoCAD.ApplicationServices;
   3:  using Autodesk.AutoCAD.DatabaseServices;
   4:  using Autodesk.AutoCAD.Runtime; 
   5:   
   6:  //С помощью атрибута CommandMethod определяем имя команды в AutoCAD
   7:  [CommandMethod("CreateNamedView")]
   8:  public static void CreateNamedView()
   9:   
  10:  {
  11:    // Получение текущей базы данных
  12:    Document acDoc = Application.DocumentManager.MdiActiveDocument;
  13:    Database acCurDb = acDoc.Database; 
  14:   
  15:    // Запуск транзакции
  16:    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  17:    {
  18:        // Открытие таблицы видов для чтения
  19:        ViewTable acViewTbl;
  20:        acViewTbl = acTrans.GetObject(acCurDb.ViewTableId,
  21:                                      OpenMode.ForRead) as ViewTable; 
  22:   
  23:        // Проверка на наличие в таблице вида под именем 'View1'
  24:        if (acViewTbl.Has("View1") == false)
  25:        {
  26:            // Открытие таблицы видов для записи
  27:            acViewTbl.UpgradeOpen(); 
  28:   
  29:            // Создание новой записи таблицы видов под именем 'View1'
  30:            ViewTableRecord acViewTblRec = new ViewTableRecord();
  31:            acViewTblRec.Name = "View1"; 
  32:   
  33:            // Добавление новой записи таблицы видов в саму таблицу и в транзакцию
  34:            acViewTbl.Add(acViewTblRec);
  35:            acTrans.AddNewlyCreatedDBObject(acViewTblRec, true); 
  36:   
  37:            // Установка вида 'View1' текущим
  38:            acDoc.Editor.SetCurrentView(acViewTblRec); 
  39:   
  40:            // Выполнение изложенных выше в блоке "using" изменений
  41:            acTrans.Commit();
  42:        }
  43:        // Ликвидация объекта транзакции
  44:    }
  45:  }

Код VBA / ActiveX

   1:  Sub CreateNamedView()
   2:      ' Добавление именованного вида в коллекцию видов
   3:      Dim viewObj As AcadView
   4:      Set viewObj = ThisDrawing.Views.Add("View1")
   5:      ThisDrawing.ActiveViewport.SetView viewObj
   6:  End Sub

Удаление именованного вида

Следующий код удаляет именованный вид из чертежа

Код VB.NET

   1:  '' Объявление используемых пространств имён
   2:  Imports Autodesk.AutoCAD.ApplicationServices
   3:  Imports Autodesk.AutoCAD.DatabaseServices
   4:  Imports Autodesk.AutoCAD.Runtime 
   5:   
   6:  <CommandMethod("EraseNamedView")> _
   7:  Public Sub EraseNamedView()
   8:   
   9:    '' Получение текущей базы данных
  10:    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  11:    Dim acCurDb As Database = acDoc.Database 
  12:   
  13:    '' Запуск транзакции
  14:    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() 
  15:   
  16:        '' Открытие таблицы видов для чтения
  17:        Dim acViewTbl As ViewTable
  18:        acViewTbl = acTrans.GetObject(acCurDb.ViewTableId, OpenMode.ForRead) 
  19:   
  20:        '' Проверка на наличие в таблице вида с именем 'View1'
  21:        If (acViewTbl.Has("View1") = True) Then
  22:            '' Открытие таблицы видов для записи
  23:            acViewTbl.UpgradeOpen() 
  24:   
  25:            '' Получение именованного вида
  26:            Dim acViewTblRec As ViewTableRecord
  27:            acViewTblRec = acTrans.GetObject(acViewTbl("View1"), OpenMode.ForWrite) 
  28:   
  29:            '' Удаление именованного вида из таблицы видов
  30:            acViewTblRec.Erase() 
  31:   
  32:            '' Выполнение изложенных выше в блоке "using" изменений
  33:            acTrans.Commit()
  34:        End If
  35:   
  36:        '' Ликвидация объекта транзакции
  37:    End Using
  38:  End Sub

Код C#

   1:  //Объявление используемых пространств имён
   2:  using Autodesk.AutoCAD.ApplicationServices;
   3:  using Autodesk.AutoCAD.DatabaseServices;
   4:  using Autodesk.AutoCAD.Runtime; 
   5:   
   6:  [CommandMethod("EraseNamedView")]
   7:  public static void EraseNamedView()
   8:  {
   9:    // Получение объекта текущей базы данных
  10:    Document acDoc = Application.DocumentManager.MdiActiveDocument;
  11:    Database acCurDb = acDoc.Database; 
  12:   
  13:    // Запуск транзакции
  14:    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  15:    {
  16:        // Открытие таблицы видов для чтения
  17:        ViewTable acViewTbl;
  18:        acViewTbl = acTrans.GetObject(acCurDb.ViewTableId,
  19:                                      OpenMode.ForRead) as ViewTable; 
  20:   
  21:        // Проверка на наличие в таблице видов записи (именованного вида) под именем 'View1'
  22:        if (acViewTbl.Has("View1") == true)
  23:        {
  24:            // Открытие таблицы видов для записи
  25:            acViewTbl.UpgradeOpen(); 
  26:   
  27:            // Получение нужного именованного вида
  28:            ViewTableRecord acViewTblRec;
  29:            acViewTblRec = acTrans.GetObject(acViewTbl["View1"],
  30:                                             OpenMode.ForWrite) as ViewTableRecord; 
  31:   
  32:            // Удаление записи именованного вида из таблицы видов
  33:            acViewTblRec.Erase(); 
  34:   
  35:            // Выполнение изложенных выше в блоке "using" изменений
  36:            acTrans.Commit();
  37:        }
  38:        // Ликвидация объекта транзакции
  39:    }
  40:  }

Код VBA / ActiveX

   1:  Sub EraseNamedView()
   2:      On Error Resume Next
   3:      Dim viewObj As AcadView
   4:      Set viewObj = ThisDrawing.Views("View1") 
   5:      If Err = 0 Then
   6:        ' Удаление вида
   7:        viewObj.Delete
   8:      End If
   9:  End Sub

Comments