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

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 04-09-2017, 20:12:30

Название: Поворот Mtext в объекте MLeader
Отправлено: Алексей (IdeaSoft) от 04-09-2017, 20:12:30
Подскажите,
как с помощью AutoCAD API
правильно повернуть Mtext в объекте MLeader?
Название: Re: Поворот Mtext в объекте MLeader
Отправлено: Алексей (IdeaSoft) от 04-09-2017, 20:46:34
А вот нашел пример

Код - C# [Выбрать]
  1. using (Transaction trans = doc.TransactionManager.StartTransaction())
  2. {
  3.         MLeader ml = (MLeader)trans.GetObject(mlObjectId, OpenMode.ForWrite);
  4.  
  5.         if (ml.HasContent())
  6.         {
  7.                 if (ml.ContentType == ContentType.MTextContent)
  8.                 {
  9.                         MText mt = ml.MText.Clone() as MText;
  10.  
  11.                         mt.Rotation = 0.0d;
  12.                         ml.MText = mt;
  13.                 }
  14.                 else if (ml.ContentType == ContentType.BlockContent)
  15.                 {
  16.                         ml.BlockRotation = 0.0d; // Does nothing since BlockRotation is already 0.0d.
  17.                 }
  18.         }
  19.         trans.Commit();
  20. }
Название: Re: Поворот Mtext в объекте MLeader
Отправлено: Александр Ривилис от 04-09-2017, 21:07:26
mt потом неплохо бы освободить (mt.Dispose), а то будет утечка памяти.
Название: Re: Поворот Mtext в объекте MLeader
Отправлено: Дмитрий Загорулькин от 05-09-2017, 12:11:35
Код - F# [Выбрать]
  1. MText mt = ml.MText.Clone() as MText;
А тут случаем не 2 раза создаётся MText?
Название: Re: Поворот Mtext в объекте MLeader
Отправлено: Александр Ривилис от 05-09-2017, 12:21:56
А тут случаем не 2 раза создаётся MText?
Таки ДА судя по этой информации из документации:

(https://farm5.staticflickr.com/4347/36232393243_563d560125_o.png)



Название: Re: Поворот Mtext в объекте MLeader
Отправлено: Дмитрий Загорулькин от 05-09-2017, 12:43:35
Ей-богу, лучше бы они сделали два отдельных метода типа: ExtractMText() и PutMText(MText). Создание нового объекта-клона при обращении к свойству - это так неочевидно! Вроде как, я тоже на эти грабли наступал уже не раз.
Название: Re: Поворот Mtext в объекте MLeader
Отправлено: Александр Ривилис от 05-09-2017, 12:46:10
Ей-богу, лучше бы они сделали два отдельных метода типа: ExtractMText() и PutMText(MText). Создание нового объекта-клона при обращении к свойству - это так неочевидно! Вроде как, я тоже на эти грабли наступал уже не раз.
В ObjectARX - это два различных метода: mtext() и setMText()
Название: Re: Поворот Mtext в объекте MLeader
Отправлено: avc от 05-09-2017, 13:16:43
Простите, а при присвоении ml.MText = mt , что тоже клон создается? Или все таки используется тот MText, который я только что специально для этого создал?
Название: Re: Поворот Mtext в объекте MLeader
Отправлено: Александр Ривилис от 05-09-2017, 13:19:43
Простите, а при присвоении ml.MText = mt , что тоже клон создается?
Нет конечно.
Название: Re: Поворот Mtext в объекте MLeader
Отправлено: avc от 05-09-2017, 13:22:08
mt потом неплохо бы освободить (mt.Dispose), а то будет утечка памяти.
таки получается что не нужно диспозить, ведь mt теперь сохранен в MLeader
Название: Re: Поворот Mtext в объекте MLeader
Отправлено: Александр Ривилис от 05-09-2017, 13:27:08
таки получается что не нужно диспозить, ведь mt теперь сохранен в MLeader
Сохранён не он сам, а информация из него:

(https://farm5.staticflickr.com/4437/36206091544_a85e72511d_o.png)

А то, что его следует "диспозить" четко написано в ObjectARX SDK Docs:

(https://farm5.staticflickr.com/4337/36852799376_8afc17cf99_o.png)

Название: Re: Поворот Mtext в объекте MLeader
Отправлено: avc от 05-09-2017, 15:09:14
Ок, бум диспозить :)
Итоговый код для записи текста в мультивыноску я закинул суда http://adn-cis.org/forum/index.php?topic=1013 (http://adn-cis.org/forum/index.php?topic=1013)