ADN Open CIS
Сообщество программистов Autodesk в СНГ

15/10/2013

Получение всех полей (field) примитива AutoCAD

Такие примитивы AutoCAD как MText и Text могут содержать более одного поля. Чтобы получить доступ к этим полям нужно использовать метод “GetChildren”. Код ниже показывает каким образом следует использовать метод “GetChildren”. Чтобы получить объект Field используется метод “GetField” (без параметров).

Код - C#: [Выделить]
  1. [CommandMethod("GetAllFields")]
  2. public void GetAllFields()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.  
  8.     PromptEntityOptions options =
  9.             new PromptEntityOptions("\nВыберите Mtext ");
  10.     options.SetRejectMessage("\nВыбран не Mtext ");
  11.     options.AddAllowedClass(typeof(MText), false);
  12.  
  13.     PromptEntityResult acSSPrompt = ed.GetEntity(options);
  14.  
  15.     if (acSSPrompt.Status != PromptStatus.OK)
  16.         return;
  17.  
  18.     using (Transaction Tx = db.TransactionManager.StartTransaction())
  19.     {
  20.         // Получаем Mtext
  21.         MText mtext = Tx.GetObject(acSSPrompt.ObjectId,
  22.                                    OpenMode.ForRead) as MText;
  23.  
  24.         if (!mtext.HasFields)
  25.         {
  26.             ed.WriteMessage("\nУ примитива нет полей.");
  27.             return;
  28.         }
  29.  
  30.         ObjectId id = mtext.GetField();
  31.         Field field = Tx.GetObject(id, OpenMode.ForRead) as Field;
  32.  
  33.         Field[] fields = field.GetChildren();
  34.  
  35.         foreach (Field childField in fields)
  36.         {
  37.             string fldCode = childField.GetFieldCode(
  38.                 FieldCodeFlags.AddMarkers| FieldCodeFlags.FieldCode);
  39.             ed.WriteMessage("\nКод поля: " + fldCode);
  40.         }
  41.  
  42.         Tx.Commit();
  43.     }
  44. }

Источник: http://adndevblog.typepad.com/autocad/2012/07/retrieve-all-the-fields-from-the-autocad-object.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=261

Опубликовано 15.10.2013