Динамическое изменение ширины атрибута

Автор Тема: Динамическое изменение ширины атрибута  (Прочитано 10889 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!
Нужно установить атрибут блока, чтобы текст автоматически менял ширину в зависимости от своей длины. Поставил Justify в fit, после этого значение атрибута не отображается совсем. В чем я ошибаюсь?
Код - C# [Выбрать]
  1. internal override void DrawMark(string itemNumber, Transaction tr, BlockTable bt, BlockTableRecord btr)
  2.           {
  3.                Circle circle = new Circle( );
  4.                circle.Radius = 8;
  5.                circle.LineWeight = LineWeight.LineWeight060;
  6.                circle.Layer = "-10-ItemMarks";
  7.                btr.AppendEntity(circle);
  8.                tr.AddNewlyCreatedDBObject(circle, true);
  9.                using (AttributeDefinition itemNo = new AttributeDefinition( ))
  10.                {
  11.                     itemNo.SetDatabaseDefaults(bt.Database);
  12.                     itemNo.Verifiable = true;
  13.                     itemNo.Prompt = "Item Number";
  14.                     itemNo.Tag = "ItemNumber";
  15.                     itemNo.TextString = itemNumber;
  16.                     itemNo.WidthFactor = 0.8;
  17.                     itemNo.Height = 0.75 * circle.Radius;
  18.                     itemNo.Justify = AttachmentPoint.BaseFit;
  19.                     itemNo.Position = new Point3d(0, 0, 0);
  20.                     itemNo.AlignmentPoint = new Point3d(0, 0, 0);
  21.                     itemNo.AdjustAlignment(bt.Database);
  22.                     itemNo.Layer = "0";
  23.                     btr.AppendEntity(itemNo);
  24.                }
  25.           }

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Atomohod,
Исправь форматирование кода.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
В чем я ошибаюсь?
Ошибаешься в понимании того:
1. Что такое выравнивание AttachmentPoint.BaseFit.
2. Что такое когда совпадают Position и AlignmentPoint.
У меня такое впечатление, что тебе нужно выравнивание по центру: BottomMid или MiddleMid
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Да, для однострочного текста выравнивание по ширине бессмысленно, т.к. у него нет свойства ширины.
После создания блока и атрибута, можно вычислить сужение текста по GeometricExtents, но для этого нужно создать временный AttributeReference  :o, вот пример:
Извините, вам запрещён просмотр содержимого спойлеров.

AttributeDefinition должен быть добавлен в базу чертежа.
Только, начальный WidthFactor = 1 сделать нужно.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Да, для однострочного текста выравнивание по ширине бессмысленно, т.к. у него нет свойства ширины.
Свойства нет. Но если у него выравнивание AttachmentPoint.BaseFit, то ширина - это расстояние между Position и AlignmentPoint:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
О, вот это круто. Спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
О, вот это круто. Спасибо.
Хм. Ну это же азы...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Так азы эти познаются, только боем. Нигде не описаны.

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Да, и выравнивание по ширине, нельзя задать для однострочного текста в интерфейсе самого автокада. Выдает ошибку.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Да, и выравнивание по ширине, нельзя задать для однострочного текста в интерфейсе самого автокада. Выдает ошибку.
Это как? Что-то ты недоговариваешь...
А это что?

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Для однострочного текста выбираю выравнивание по ширине и выдает такую ошибку:

В атрибуте блока, тоже нельзя задать выравнивание по ширине.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Для однострочного текста выбираю выравнивание по ширине и выдает такую ошибку:

В атрибуте блока, тоже нельзя задать выравнивание по ширине.

Похоже на баг. Возможно это связано с аннототивностью текста/текстового стиля.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот так в русском AutoCAD 2019:

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Да, точно, если стиль аннотативный, то сходу не дает менять выранивание по ширине.  :(

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
У меня такое впечатление, что тебе нужно выравнивание по центру: BottomMid или MiddleMid
Не совсем. выравнивание по центру быть должно, но данные записываемые в атрибут, разной длины от 5 до 15 символов, и нужно чтобы они всегда влезали в жестко заданный круг.