15/10/2013
Получение всех полей (field) примитива AutoCAD
Такие примитивы AutoCAD как MText и Text могут содержать более одного поля. Чтобы получить доступ к этим полям нужно использовать метод “GetChildren”. Код ниже показывает каким образом следует использовать метод “GetChildren”. Чтобы получить объект Field используется метод “GetField” (без параметров).
Код - C#: [Выделить]
- [CommandMethod("GetAllFields")]
- public void GetAllFields()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- PromptEntityOptions options =
- new PromptEntityOptions("\nВыберите Mtext ");
- options.SetRejectMessage("\nВыбран не Mtext ");
- options.AddAllowedClass(typeof(MText), false);
- PromptEntityResult acSSPrompt = ed.GetEntity(options);
- if (acSSPrompt.Status != PromptStatus.OK)
- return;
- using (Transaction Tx = db.TransactionManager.StartTransaction())
- {
- // Получаем Mtext
- MText mtext = Tx.GetObject(acSSPrompt.ObjectId,
- OpenMode.ForRead) as MText;
- if (!mtext.HasFields)
- {
- ed.WriteMessage("\nУ примитива нет полей.");
- return;
- }
- ObjectId id = mtext.GetField();
- Field field = Tx.GetObject(id, OpenMode.ForRead) as Field;
- Field[] fields = field.GetChildren();
- foreach (Field childField in fields)
- {
- string fldCode = childField.GetFieldCode(
- FieldCodeFlags.AddMarkers| FieldCodeFlags.FieldCode);
- ed.WriteMessage("\nКод поля: " + fldCode);
- }
- Tx.Commit();
- }
- }
Источник: 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