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

11/10/2013

Расчленение MText, содержащего управляющие коды

Для того, чтобы расчленить примитив MText на фрагменты его текста можно использовать метод "ExplodeFragments". Почитайте эту статью, если вам нужен код для примера: Получение фрагментов текста примитива Mtext

Если использовать этот метод для расчленения примитива MText, содержащего управляющие коды, такие как "%%c", "%%d", тогда фрагмент текста в функции обратного вызова будет также содержать эти управляющие коды, а не спецсимволы, которые их представляют. Простейший способ для получения чистого фрагмента текста заключается в создании временного MText и установке в качестве его содержимого этого фрагмента текста. Вот пример кода:

Код - C#: [Выделить]
  1. public MTextFragmentCallbackStatus MTextCallback
  2.                         (MTextFragment frag, object userData)
  3. {
  4.     Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  5.  
  6.     String fragText = frag.Text;
  7.  
  8.     ed.WriteMessage(String.Format("{0} Fragment : {1}",
  9.                             Environment.NewLine, fragText));
  10.  
  11.     using (MText mt = new MText())
  12.     {
  13.         mt.SetDatabaseDefaults();
  14.         mt.Contents = fragText;
  15.         String mtText = mt.Text;
  16.  
  17.         ed.WriteMessage(String.Format("{0} Fragment : {1}",
  18.                                 Environment.NewLine, mtText));
  19.     }
  20.  
  21.     return MTextFragmentCallbackStatus.Continue;
  22. }
  23.  
  24. [CommandMethod("TestMText")]
  25. public void TestMText()
  26. {
  27.     Document doc = Application.DocumentManager.MdiActiveDocument;
  28.     Database db = doc.Database;
  29.     Editor ed = doc.Editor;
  30.     PromptEntityResult per
  31.                 = ed.GetEntity("Select MText to explode :");
  32.  
  33.     if (per.Status != PromptStatus.OK)
  34.         return;
  35.  
  36.     using (Transaction Tx = db.TransactionManager.StartTransaction())
  37.     {
  38.         MText mtext =
  39.             (MText)Tx.GetObject(per.ObjectId, OpenMode.ForRead);
  40.         mtext.ExplodeFragments(
  41.                     new MTextFragmentCallback(MTextCallback));
  42.         Tx.Commit();
  43.     }
  44. }

А это результат работы этого кода с примитивом MText, содержащим коды %%c и %%d :


Источник: http://adndevblog.typepad.com/autocad/2013/09/exploding-an-mtext-that-uses-control-codes.html

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

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