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

ADN Club => AutoCAD .NET API => Тема начата: Gul от 09-09-2015, 11:23:08

Название: Улетает MTextAttribute
Отправлено: Gul от 09-09-2015, 11:23:08
У меня в блоке есть многострочный атрибут с заданными границами ширины и высоты текста атрибута по умолчанию.

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

Как мне определить актуальный GeometricExtents или AlignmentPoint, что бы вписать текст в ячейку?
Название: Re: Улетает MTextAttribute
Отправлено: Андрей Бушман от 09-09-2015, 11:28:26
Я думаю, что имеет смысл выложить текст исходного кода и DWG файл с блоком, на котором обозначенную тобой проблему можно воспроизвести.
Название: Re: Улетает MTextAttribute
Отправлено: Александр Ривилис от 09-09-2015, 12:01:23
Gul
Приветствую на форуме! Кроме того, что указал Андрей Бушман, укажи еще и версию AutoCAD и как идёт работа с чертежом (т.е. он открыт в редакторе AutoCAD или при помощи Database.ReadDwgFile), блок простой или динамический?
Название: Re: Улетает MTextAttribute
Отправлено: Gul от 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

Название: Re: Улетает MTextAttribute
Отправлено: Андрей Бушман от 09-09-2015, 12:22:22
В подписи А.Н. Ривилиса присутствует ссылка на мультик по теме того, как правильно форматировать исходный код в сообщениях на данном форуме.
Название: Re: Улетает MTextAttribute
Отправлено: Александр Ривилис от 09-09-2015, 12:28:06
Gul
Проверь код с чертежом, открытом в редакторе AutoCAD.
P.S.: В приведенном чертеже есть вставка блока у которого есть определения атрибутов, но она вставлена без атрибутов. Соответственно с ним код вообще работать не будет - не найдёт атрибуты.
Название: Re: Улетает MTextAttribute
Отправлено: Александр Ривилис от 09-09-2015, 13:45:21
P.S.: Еще одно очень существенное замечание на будущее. Если используешь в коде нестандартные расширения, то приводи код полностью (выкладывай готовый проект) или переписывай его так, чтобы не требовалось выискивать чем ты еще воспользовался. Код должен компилироваться без дополнительных телодвижений, которыми никто заниматься не будут.
Название: Re: Улетает MTextAttribute
Отправлено: Gul от 10-09-2015, 08:01:19
Перенес код в тестовый проект, там все заработало. Буду разбираться, спасибо за помощь.
Название: Re: Улетает MTextAttribute
Отправлено: Александр Ривилис от 10-09-2015, 08:53:06
Перенес код в тестовый проект, там все заработало.
Интересно в чем была причина. Одна из причин, по которой сбивается выравнивание MText/MTextAttribute - работа с ним из базы незагруженной в редактор AutoCAD. В этом случае помогает временное переключение HostApplicationServices.WorkingDatabase на эту базу.