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

11/06/2014

Обновление выравнивания текста

В ряде случаев выравнивание текста примитива DBText не выполняется. Для того чтобы заставить выполнится выравнивание используется метод DBText.AdjustAlignment. Этот метод для работы использует рабочую базу данных. Таким образом особенно важно указать ему рабочую базу данных, когда DBText еще не добавлен в рабочую базу данных.

Вот пример кода:

Код - C#: [Выделить]
  1. [CommandMethod("TextAlign")]
  2. public void TextAlign()
  3. {
  4.     Document activeDoc = Application.DocumentManager.MdiActiveDocument;
  5.  
  6.     // Для добавления текста с выравниванием в текущий документ
  7.     bool isInMemory = false;
  8.     Database db = activeDoc.Database;
  9.  
  10.     // Для добавления текста в базу в оперативной памяти
  11.     // bool isInMemory = true;
  12.     // Database db = new Database(true, false);
  13.  
  14.     using (Transaction tr = db.TransactionManager.StartTransaction())
  15.     {
  16.         BlockTable bt = tr.GetObject(
  17.                                         db.BlockTableId,
  18.                                         OpenMode.ForRead
  19.                                     ) as BlockTable;
  20.  
  21.         BlockTableRecord mSpace = tr.GetObject
  22.                                 (
  23.                                     bt[BlockTableRecord.ModelSpace],
  24.                                     OpenMode.ForWrite
  25.                                 ) as BlockTableRecord;
  26.  
  27.         DBText dbText = new DBText();
  28.         dbText.SetDatabaseDefaults(db);
  29.  
  30.         dbText.Position = Point3d.Origin;
  31.         dbText.Height = 5.0;
  32.         dbText.TextString = "Autodesk";
  33.         dbText.HorizontalMode = TextHorizontalMode.TextRight;
  34.         dbText.AlignmentPoint = Point3d.Origin;
  35.  
  36.         if (isInMemory)
  37.         {   // Для добавления текста с выравниванием к базе в памяти
  38.             // установим рабочую базу данных перед вызовом AdjustAlignment
  39.             Database prevWorkingDb = HostApplicationServices.WorkingDatabase;
  40.             HostApplicationServices.WorkingDatabase = db;
  41.             dbText.AdjustAlignment(db);
  42.             HostApplicationServices.WorkingDatabase = prevWorkingDb;
  43.         }
  44.         else
  45.         {   // Для добавления текста к текущему документу
  46.             // рабочая база данных уже установлена
  47.             dbText.AdjustAlignment(db);
  48.         }
  49.  
  50.         mSpace.AppendEntity(dbText);
  51.         tr.AddNewlyCreatedDBObject(dbText, true);
  52.  
  53.         tr.Commit();
  54.     }
  55.  
  56.     if (isInMemory)
  57.     {
  58.         db.SaveAs("C:\\Temp\\Test.dwg", DwgVersion.Current);
  59.         db.Dispose();
  60.     }
  61. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/06/updating-text-alignment-.html

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

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