3.3.2. Добавление нового объекта в коллекцию

Источник здесь. [перевод не проверен];[перевёл Андрей Бушман]
    Добавление в коллекцию нового члена осуществляется посредством метода Add1. Например, в следующем коде создаётся новый слой и добавляется в таблицу слоёв:

Код VB.NET

   1:  Imports Autodesk.AutoCAD.Runtime
   2:  Imports Autodesk.AutoCAD.ApplicationServices
   3:  Imports Autodesk.AutoCAD.DatabaseServices 
   4:   
   5:  <CommandMethod("AddMyLayer")> _
   6:  Public Sub AddMyLayer()
   7:   
   8:    '' Получение текущего документа с его базой данных, и запуск транзакции
   9:    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  10:    Dim acCurDb As Database = acDoc.Database 
  11:    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
  12:   
  13:        '' Возвращение таблицы слоёв базы данных текущего документа
  14:        Dim acLyrTbl As LayerTable
  15:        acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, _
  16:                                     OpenMode.ForRead) 
  17:        '' Проверяем, имеется ли в таблице слоёв слой с именем "MyLayer"
  18:        If Not acLyrTbl.Has("MyLayer") Then
  19:            '' Открываем таблицу слоёв для записи
  20:            acLyrTbl.UpgradeOpen() 
  21:   
  22:            '' Создаём новую запись таблицы слоёв и присваиваем новому слою имя "MyLayer"
  23:            Dim acLyrTblRec As LayerTableRecord = New LayerTableRecord
  24:            acLyrTblRec.Name = "MyLayer" 
  25:   
  26:            '' Добавление в таблицу слоёв и в транзакцию созданной нами записи нового слоя
  27:            acLyrTbl.Add(acLyrTblRec)
  28:            acTrans.AddNewlyCreatedDBObject(acLyrTblRec, True) 
  29:   
  30:            '' Фиксируем выполненные нами изменения
  31:            acTrans.Commit()
  32:        End If 
  33:   
  34:        '' Здесь происходит уничтожение объекта транзакции
  35:    End Using
  36:  End Sub

Код C#

   1:  using Autodesk.AutoCAD.Runtime;
   2:  using Autodesk.AutoCAD.ApplicationServices;
   3:  using Autodesk.AutoCAD.DatabaseServices; 
   4:   
   5:  [CommandMethod("AddMyLayer")]
   6:  public static void AddMyLayer()
   7:  {
   8:    // Получение текущего документа и его базы данных с последующим запуском транзакции
   9:    Document acDoc = Application.DocumentManager.MdiActiveDocument;
  10:    Database acCurDb = acDoc.Database; 
  11:   
  12:    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  13:    {
  14:        // Получаем таблицу слоёв базы данных текущего документа
  15:        LayerTable acLyrTbl;
  16:        acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId,
  17:                                     OpenMode.ForRead) as LayerTable; 
  18:   
  19:        // Проверяем, имеется ли слой с именем "MyLayer" в нашей таблице слоёв
  20:        if (acLyrTbl.Has("MyLayer") != true)
  21:        {
  22:            // Открываем таблицу слоёв для записи
  23:            acLyrTbl.UpgradeOpen(); 
  24:   
  25:            // Создаём новую запись таблицы слоёв и присваиваем создаваемому нами слою имя "MyLayer"
  26:            LayerTableRecord acLyrTblRec = new LayerTableRecord();
  27:            acLyrTblRec.Name = "MyLayer";
  28:   
  29:            // Добавляем нашу новую запись таблицы слоёв в саму таблицу слоёв, а так же в транзакцию
  30:            acLyrTbl.Add(acLyrTblRec);
  31:            acTrans.AddNewlyCreatedDBObject(acLyrTblRec, true); 
  32:   
  33:            // Фиксируем выполненные нами изменения
  34:            acTrans.Commit();
  35:        }
  36:        // Здесь происходит уничтожение объекта транзакции
  37:    }
  38:  }

Код VBA / ActiveX

   1:  Sub AddMyLayer()
   2:      Dim newLayer as AcadLayer
   3:      Set newLayer = ThisDrawing.Layers.Add("MyLayer")
   4:  End Sub

Примечания:
1 - прим. переводчика: экземплярный (т.е. не статический) метод коллекции.


Comments