Подбор свойства DBText.WidthFactor

Автор Тема: Подбор свойства DBText.WidthFactor  (Прочитано 10792 раз)

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

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Здравствуйте. В чертеже много однострочного текста, который постоянно приходится врукопашную редактировать - подбирать его ширину, чтобы он не пересекался с другими объектами (в основном это линии, полилинии и т. д.). Сначала было пробывал устанавливать значение WidthFactor исходя из длины строки (количество символов массива), потом понял что неблагодарное это дело, много нюансов нужно учитывать (высота, стиль, ...). Сейчас пробую сделать следующее - рекурсивный метод, который проверяет пересекается ли текст с другими объектами, если да, то: WidthFactor = WidthFactor - 0.05. Пробывал использовать этот  код, но что-то пока не получается. Как можно сделать проще, какие методы использовать?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Подбор свойства DBText.WidthFactor
« Ответ #1 : 05-02-2014, 10:21:42 »
А если так:
- получаем текст, находим объекты, с которыми он пересекается
- вычисляем границы этих объектов, находим размер свободного пространства для текста
- делим длину свободного пространства (за вычетом минимальных расстояний от текста до объектов) на длину текста - получаем значение, на которое нужно умножить текущий коэффициент ширины
- умножаем, задаем тексту новый коэффициент

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Re: Подбор свойства DBText.WidthFactor
« Ответ #2 : 05-02-2014, 20:53:47 »
Дмитрий, подскажите как найти объекты с которыми пересекается текст? InterSectWith()?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Подбор свойства DBText.WidthFactor
« Ответ #3 : 05-02-2014, 21:11:55 »
Прочитав первое сообщение, я почему-то подумал, что это уже сделано :)
Я бы, наверное, вычислил габариты текста и выбрал объекты, попадающие в этот габарит секущей рамкой. Метод имеет недостатки, но это самое простое что приходит в голову.

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Re: Подбор свойства DBText.WidthFactor
« Ответ #4 : 05-02-2014, 21:28:57 »
вычислил габариты текста и выбрал объекты
Как это сделать? :-[

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Подбор свойства DBText.WidthFactor
« Ответ #5 : 05-02-2014, 21:37:12 »
вычислил габариты текста и выбрал объекты
Как это сделать? :-[
Как вычислить габариты текста? Метод: Entity.GeometricExtents
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Подбор свойства DBText.WidthFactor
« Ответ #6 : 06-02-2014, 14:47:59 »
Кстати, для проверки пересечения в данном случае можно пользоваться методом Entity.BoundingBoxIntersectWith. Этот метод должен работать быстрее. А вот для уточнения реального пересечения можно использовать Entity.IntersectWith если есть пересечение BoundingBox.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Re: Подбор свойства DBText.WidthFactor
« Ответ #7 : 12-03-2014, 22:08:04 »
Может быть немного не в тему. Но вот ситуация: в чертеже есть много однострочного текста. Среди этого множества есть несколько объектов с одинаковым содержимым (DBText.TextString). какой именно текст нужен для редактирования нахожу сейчас, выделяя его секущей рамкой (программно). Это все хорошо работает, если границы рамки находятся в момент редактирования на экране, как только рамка находится за пределами экрана ей (этой рамкой) ничего не удается выбрать. проблема, в том чтобы найти нужный по содержимому текст (их таких несколько, с одинаковым содержимым), который находится в определенном месте.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Подбор свойства DBText.WidthFactor
« Ответ #8 : 12-03-2014, 23:13:00 »
выделяя его секущей рамкой
в этом корень зла - сек. рамка видит только с проекции экрана (за исключением "выбрать все") - данный "косяк" никак не обойти - либо зумировать экраном, либо использовать другие методы.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Подбор свойства DBText.WidthFactor
« Ответ #9 : 12-03-2014, 23:29:17 »
данный "косяк"
Это было всегда и видимо всегда и будет...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Подбор свойства DBText.WidthFactor
« Ответ #10 : 12-03-2014, 23:44:19 »
да, к сожалению.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: Подбор свойства DBText.WidthFactor
« Ответ #11 : 13-03-2014, 10:52:39 »
to Константин Соков,
...какой именно текст нужен для редактирования нахожу сейчас, выделяя его секущей рамкой (программно)...
Если вопрос только в том что бы найти эти обекты, то наверное можно их пометить транзитной графикой.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Подбор свойства DBText.WidthFactor
« Ответ #12 : 13-03-2014, 10:54:50 »
Вообще-то программно можно выделить текст и фильтрами. Для текста это должно быть не сложно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Константин СоковАвтор темы

  • ADN Club
  • **
  • Сообщений: 56
  • Карма: 0
Re: Подбор свойства DBText.WidthFactor
« Ответ #13 : 13-03-2014, 13:01:56 »
фильтрами
Я правильно понял: нужно шерстить базу чертежа, проверяя при этом некоторые условия. например: что объект является однострочным текстом, что его содержимое равно заданному значению, что его расположение (DBText.Position) равно заданному значению или лежит заданой области? или имеется ввиду какой-то конкретный инструмент?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Подбор свойства DBText.WidthFactor
« Ответ #14 : 13-03-2014, 13:06:31 »
нужно шерстить базу чертежа
Можно и так. А можно использовать SelectionSet с SelectionFilter. И в фильтре использовать фильтрацию по координатом для точки вставки (группа 10).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение