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

10/08/2015

Установка положения MText для каждого из масштабов аннотаций

Для аннотативного MText его положение можно менять при помощи ручек. Это положение специфическое для каждого из масштабов аннотаций чертежа. В данный момент не существует публичного API для установки положения аннотативного примитива для каждого масштаба программным путём. В качестве альтернативного метода можно использовать установку масштаба перед установкой положения. Этот пример кода проходит по коллекции масштабов и устанавливает позицию MText для каждого из масштабов.

Код - C#: [Выделить]
  1. Document doc =
  2.  Application.DocumentManager.MdiActiveDocument;
  3.  Database db = doc.Database;
  4.  Editor ed = doc.Editor;
  5.  
  6.  PromptEntityOptions peo
  7.  = new  PromptEntityOptions("\nВыберите MText : " );
  8.  peo.SetRejectMessage("\nДолжен быть MText ..." );
  9.  peo.AddAllowedClass(typeof (MText), true );
  10.  
  11.  PromptEntityResult per = ed.GetEntity(peo);
  12.  
  13.  if  (per.Status != PromptStatus.OK)
  14.      return ;
  15.  
  16.  ObjectId mtId = per.ObjectId;
  17.  
  18.  ObjectContextManager ocm = db.ObjectContextManager;
  19.  ObjectContextCollection occ
  20.  = ocm.GetContextCollection("ACDB_ANNOTATIONSCALES" );
  21.  
  22.  if  (ocm == null )
  23.      return ;
  24.  
  25.  foreach  (ObjectContext oc in  occ)
  26.  {
  27.      using  (Transaction tr
  28.          = db.TransactionManager.StartTransaction())
  29.      {
  30.          MText mt
  31.          = tr.GetObject(mtId, OpenMode.ForRead) as  MText;
  32.          Point3d pos = mt.Location;
  33.          if  (mt.HasContext(oc))
  34.          {
  35.              AnnotationScale annoScale
  36.              = oc as  AnnotationScale;
  37.             
  38.              if  (annoScale != null )
  39.                  db.Cannoscale = annoScale;
  40.  
  41.              mt.UpgradeOpen();
  42.             
  43.              mt.Location = pos
  44.              + Vector3d.XAxis * 3
  45.              + Vector3d.YAxis * 3;
  46.          }
  47.          tr.Commit();
  48.      }
  49.  }

 

Вот две картинки показывающие зависящие от масштаба позиции текстов до и после изменения:


 

 

Источник: http://adndevblog.typepad.com/autocad/2015/07/setting-position-of-an-mtext-for-each-annotation-scale-.html

Автор перевода: Александр Ривилис

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

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