Улетает MTextAttribute

Автор Тема: Улетает MTextAttribute  (Прочитано 4673 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн GulАвтор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 1
Улетает MTextAttribute
« : 09-09-2015, 11:23:08 »
У меня в блоке есть многострочный атрибут с заданными границами ширины и высоты текста атрибута по умолчанию.

Если поменять высоту текста атрибута, то текст улетает за пределы ячейки, при этом свойства GeometricExtents и AlignmentPoint возвращают значения, как будто текст вписан в ячейку.

Как мне определить актуальный GeometricExtents или AlignmentPoint, что бы вписать текст в ячейку?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Улетает MTextAttribute
« Ответ #1 : 09-09-2015, 11:28:26 »
Я думаю, что имеет смысл выложить текст исходного кода и DWG файл с блоком, на котором обозначенную тобой проблему можно воспроизвести.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Улетает MTextAttribute
« Ответ #2 : 09-09-2015, 12:01:23 »
Gul
Приветствую на форуме! Кроме того, что указал Андрей Бушман, укажи еще и версию AutoCAD и как идёт работа с чертежом (т.е. он открыт в редакторе AutoCAD или при помощи Database.ReadDwgFile), блок простой или динамический?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GulАвтор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 1
Re: Улетает MTextAttribute
« Ответ #3 : 09-09-2015, 12:15:43 »
Изменение атрибута:

Код - C# [Выбрать]
  1. internal void SetBlockAttributes(ObjectId id, List<Attribute> attributes)
  2.         {
  3.             using (var blockReference = id.GetObject<BlockReference>())
  4.             {
  5.                 blockReference.UpgradeOpen();
  6.  
  7.                 foreach (ObjectId attributeId in blockReference.AttributeCollection)
  8.                 {
  9.                     if (!attributeId.IsErased)
  10.                     {
  11.                         var attributeReference = attributeId.GetObject<AttributeReference>();
  12.  
  13.                         attributeReference.UpgradeOpen();
  14.  
  15.                         var attribute = attributes.FirstOrDefault(o => o.Name.Equals(attributeReference.Tag));
  16.  
  17.                         if (attribute != null)
  18.                         {
  19.                             if (attributeReference.IsMTextAttribute)
  20.                             {
  21.                                 attributeReference.MTextAttribute.Contents =
  22.                                     "Потускула изотермично нагревает ил. Дефляция, если принять во внимание воздействие фактора времени, латерально растягивает потенциал почвенной влаги. Элементарная почвенная частица стекает в вязкий ил. К.К.Гедройцем было показано, что почвообразовательный процесс отражает грунт, хотя этот факт нуждается в дальнейшей тщательной экспериментальной проверке.";
  23.  
  24.                                 attributeReference.Height = 1.5;
  25.                                 attributeReference.UpdateMTextAttribute();
  26.                             }
  27.                             else
  28.                             {
  29.                                 attributeReference.TextString = attribute.Value;
  30.  
  31.                                 SetRealDbTextHeight(attributeReference, attribute);
  32.                             }
  33.                         }
  34.  
  35.                         attributeReference.DowngradeOpen();
  36.                     }
  37.                 }
  38.                
  39.                 blockReference.DowngradeOpen();
  40.             }
  41.         }
  42.  

AutoCAD 2014 работаю при помощи Database.ReadDwgFile

« Последнее редактирование: 09-09-2015, 13:42:00 от Александр Ривилис »

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Улетает MTextAttribute
« Ответ #4 : 09-09-2015, 12:22:22 »
В подписи А.Н. Ривилиса присутствует ссылка на мультик по теме того, как правильно форматировать исходный код в сообщениях на данном форуме.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Улетает MTextAttribute
« Ответ #5 : 09-09-2015, 12:28:06 »
Gul
Проверь код с чертежом, открытом в редакторе AutoCAD.
P.S.: В приведенном чертеже есть вставка блока у которого есть определения атрибутов, но она вставлена без атрибутов. Соответственно с ним код вообще работать не будет - не найдёт атрибуты.
« Последнее редактирование: 09-09-2015, 16:04:48 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Улетает MTextAttribute
« Ответ #6 : 09-09-2015, 13:45:21 »
P.S.: Еще одно очень существенное замечание на будущее. Если используешь в коде нестандартные расширения, то приводи код полностью (выкладывай готовый проект) или переписывай его так, чтобы не требовалось выискивать чем ты еще воспользовался. Код должен компилироваться без дополнительных телодвижений, которыми никто заниматься не будут.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GulАвтор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 1
Re: Улетает MTextAttribute
« Ответ #7 : 10-09-2015, 08:01:19 »
Перенес код в тестовый проект, там все заработало. Буду разбираться, спасибо за помощь.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Улетает MTextAttribute
« Ответ #8 : 10-09-2015, 08:53:06 »
Перенес код в тестовый проект, там все заработало.
Интересно в чем была причина. Одна из причин, по которой сбивается выравнивание MText/MTextAttribute - работа с ним из базы незагруженной в редактор AutoCAD. В этом случае помогает временное переключение HostApplicationServices.WorkingDatabase на эту базу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение