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

24/10/2013

Добавление поля, содержащего данные другого примитива

Следующий код показывает как можно добавить поле, которое показывает данные другого примитива (в данном случае площадь полилинии). От пользователя требуется выбрать полилинию и местоположение, в котором создается примитив MText. Этот MText и будет показывать площадь выбранной полилинии.

Код - C#: [Выделить]
  1. [CommandMethod("AddAreaField")]
  2. public void AddAreaField()
  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Выберите полилинию ");
  10.     options.SetRejectMessage("\nЭто не полилиния ");
  11.     options.AddAllowedClass(
  12.        typeof(Autodesk.AutoCAD.DatabaseServices.Polyline), false);
  13.  
  14.     PromptEntityResult acSSPrompt = ed.GetEntity(options);
  15.  
  16.     if (acSSPrompt.Status != PromptStatus.OK)
  17.         return;
  18.  
  19.     PromptPointOptions ppo = new
  20.                 PromptPointOptions("\nУкажите точку вставки: ");
  21.  
  22.     PromptPointResult ppr = ed.GetPoint(ppo);
  23.  
  24.     if (ppr.Status != PromptStatus.OK)
  25.         return;
  26.  
  27.     using (Transaction Tx = db.TransactionManager.StartTransaction())
  28.     {
  29.        //%<\AcObjProp Object(%<\_ObjId 2128995688>%).Area \f "%lu2">%
  30.         string strId = acSSPrompt.ObjectId.OldIdPtr.ToString();
  31.         string str1 = "%<\\AcObjProp Object(%<\\_ObjId ";
  32.         string str2 = ">%).Area \\f \"%lu2\">%";
  33.         string format = str1 + strId + str2;
  34.  
  35.         MText text = new MText();
  36.         text.Location = ppr.Value;
  37.         ObjectId ModelSpaceId =
  38.             SymbolUtilityServices.GetBlockModelSpaceId(db);
  39.  
  40.         BlockTableRecord record = Tx.GetObject(ModelSpaceId,
  41.                              OpenMode.ForWrite) as BlockTableRecord;
  42.         record.AppendEntity(text);
  43.         Tx.AddNewlyCreatedDBObject(text, true);
  44.         Field entField =
  45.            new Field(format);
  46.         entField.Evaluate();
  47.         text.SetField(entField);
  48.         Tx.AddNewlyCreatedDBObject(entField, true);
  49.  
  50.         Tx.Commit();
  51.     }
  52. }

Источник: http://adndevblog.typepad.com/autocad/2012/07/adding-field-with-entity-data.html

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

Опубликовано 24.10.2013
Отредактировано 25.10.2013 в 02:22:31