|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Автоматический подбор высоты текста
Programming, automation, CADs, GISs. "Теплоком"
Россия, Санкт-Петербург
Регистрация: 02.02.2007
Сообщений: 306
|
||
Просмотров: 14747
|
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
Может, подскажет кто хотя бы где копать?
dxf, activex? или, может, я плохо хелп смотрел. Что-то никак ничего похожего не найду. Или самому считать, умножая кол-во символов в тексте на их среднюю ширину? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Используй textbox - имхо самое то.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
В смысле наподобие:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
> Alaspher : для многострочного надо просто полный список задавать, достаточный для entmakex - как правило, срабатывает
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
webcad.pro Регистрация: 06.01.2005
Московская обл.
Сообщений: 501
|
С mtext у меня через textbox что-то не получается как Алексей предлагает. А с boundingbox тоже засада. Если width у mtext не равна нулю то boundingbox возвращает прямоугольник с шириной равной width даже если слово, которое не перенеслось, выходит за эти габариты. А если width приравнять нулю то текст может разъехаться, когда переносы строк установлены не жестко, и результат все равно будет не корректный (разве что обязать пользователя расставлять переносы строк).
Как идея: может взрывать mtext и анализировать набор однострочных текстов? Кстати, что касается textbox недавно столкнулся с одной особенностью - если в начале текста есть пробелы или что-то вроде "%%u ля-ля-ля " (у меня был именно такой вариант) то функция игорирует такие вещи и не понятно как привязать ее результат "на местности". boundingbox - в отличии от textbox работает более корректно и результат дает сразу "с привязкой к месту", но имеет дело только с реальными объектами - вот и выбирай, как говорится. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Alaspher, как всегда, прав. Код
Код:
P.S. Проверял на ADT 2k5 Eng +SP1, ADT 2k6 Rus + SP1. Запуск ADT как ACADa проблему не решает. Кошмар...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Варианты в порядке бреда:
1. копировать mtext в укромное место, там взрывать и брать textbox'ы того, что осталось. Правда потеряется, если есть, форматирование. 2. создать блок (можно анонимный), скопировать в него mtext и попробывать определить boundingbox блока. Все на основе догадок, без проверок и гарантий |
|||
![]() |
|
||||
webcad.pro Регистрация: 06.01.2005
Московская обл.
Сообщений: 501
|
>VVA
Действительно mtext обрабатывется корректно в отличии от boundingbox (хотя рамка получается чуть больше, но это, пожалуй, несущесвенно). А вот простой текст содержащий такую строку "%%u asdfsdf " обрабабатывается не корректно в отличии от того же boundingbox. Как написал Крыс - Кошмар... ps Выходит сами писатели автокадовские используют ACET-GEOM-OBJECT-POINT-LIST, а простым смертным глючный boundingbox подсовывают. Молодцы, молодцы... |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Тоже сталкивался с тем, что acet-* ф-ции работают иногда более корректно. Правда почитать что-нубудь негде.
Нашел описания здесь http://www.theswamp.org/index.php?topic=13719.0 но там только названия. Там есть еще ACET-GEOM-TXTBOX. правда не знаю что ей скармливать в качестве аргументов. |
|||
![]() |
|
||||
webcad.pro Регистрация: 06.01.2005
Московская обл.
Сообщений: 501
|
ACET-GEOM-TXTBOX - даже лучше работает с mtext, однако с однострочным текстом проблемы остаются. Впрочем как, показали тесты проблемы с перфиксными пробелами имеются только у ttf-шрифтов; shx - обрабатываются корректно.
Короче, вывод - наиболее корректны следующие связки: Mtext - (ACET-GEOM-TXTBOX ...) [ExpressTools] Text - (vla-GetBoundingBox ...) |
|||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
:shock:
Парни, я с трудом поспеваю за ходом ваших мыслей! У меня такая проблема. В чертеже есть несколько mtext'ов. Пользователь редактирует mtext. Не работают вот эти варианты: Код:
Код:
Зато вариант Код:
В чем проблеме, никак не догоню. |
|||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
Еще раз перечитал. Не в том ли проблема, что textbox анализирует текст виртуальный, в смысле строку, передаваемую ей в качестве аргумента, и никак не связана с текстом на чертеже?
|
|||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
ACET-GEOM-TXTBOX - это уже кажись то шо ну. Спасибо огромное!!!
Кстати, я в Питере буду в середине августа. Хочу отблагодарить господ учаснтиков форума например пивом. Как бы это сделать? |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
> Ax3
1. Да 2. Нет 3. Узнать хотя бы названия ф-ций можно по ссылке из поста № 16 Далее я делаю так: В папке express tools в файлах *.lsp ищу с помошью total comander'a (Atl+F7) файлs, в которых встречается упоминание заинтересовавшей меня ф-ции. Анализируя код, узнаю количество и порядок передаваемых ей аргументов. Если нет, то пробую поискать в google. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Я не помню, кто меня ткнул носом (каюсь, виноват) в ссылку http://afralisp.net/lisp/acet-utils.htm
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
Хорошая страничка, дельная.
То есть с точки зрения программиста эти функции можно рассматривать как встроенные в лисп и соответственно без проблем ими пользоваться (при наличии ET, конечно)? >VVA В Минске буду в командировке когда-нибудь. Надеюсь. |
|||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
Кстати, еще вопрос, не хочу в отдельную тему выносить:
Можно ли средствами автокада в описание примитива или блока или вообще объекта засунуть указание на другой объект, с которым он связан? То есть чтобы пользователю это не было видно, а лиспик знал, с каким именно прямоугольником связан данный текст. Смысл в том, что блок делать неохота, потому что в нем mtext не меняется, а многострочных атрибутов я чего-то не встретил на своем пути. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Цитата:
![]() Цитата:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
>Кулик Алексей aka kpblc ссылка хорошая, у меня давно живет в избранных, но неполная :cry:
> Ax3 Я использую связку Расширенных Данных (РД)+ ldata Расширенные данные можно выбирать через ssget Для твоего случая выриант с РД Метка примитива = хэндл Код:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Справка по функциям. Правда, устаревшая, но помогает. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Xdata - extended object data или расширенные данные (РД), хранятся в описании примитива в группе -3 в соответствии со своим кодом подгруппы (строка -1000, целое - 1070 и т.д.) Где почитать подробнее и минусы см. у Алексея http://www.arcada.com.ua/forum/viewt...418f41ab9e777c
Код:
Цитата:
(в моем примере в команде TEST1) Цитата:
В РД используются только строковые поля (1000), чтобы не "захломлять", так как 16 кб делятся на всех. Но у нас появляется возможность фильтровать примитивы с помощью ssget. В моем примере записываются 2 строковых поля: первое - метка (хэндл) примитива, на который ссылаемся второе - метка (хэндл) самого примитива. Это нужно для того, чтобы отсечь скопированный (если нужно) примитив. Т.к. в этом случае запомненная метка примитива и метка самого примитива не будут совпадать. Остальные данные можно хранить в X-records (X-записях) самого примитива. Тут тоже есть варианты. 1. Использовать встроенные ф-ции vlax-ldata-* 2. Посмотреть ф-ции Пётра В. Лоскутова Набор функций для хранения данных в словарях, версия: 0.95 Вообще настоятельно рекомендую две вещи: 1. Найти книгу, о которой говорит Алексей. (Приобрести уже навряд ли) 2. Тщательно проработать файл из Express Tools xdata.lsp (Пример работы с РД, команда XDATA) Уф, думаю для первого раза достаточно Последний раз редактировалось VVA, 22.08.2010 в 13:24. Причина: изменена ссылка ф-ций Пётра Лоскутова на dnl dwg.ru |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
> VVA : Как ни парадоксально, книга еще продается
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
Я понял, спасибо. Тему эту изучу, а пока остановлюсь все-таки на xdata, потому что уже научился с ними работать :-). И в условиях моей задачи в каждом объекте будут храниться ссылки максимум на 4-5 других объектов, так что 16к должно хватить.
|
|||
![]() |
|
|||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
Цитата:
![]() Цитата:
Цитата:
![]() |
||||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
Цитата:
![]() ![]() ![]() ![]() Очень забавно! Alaspher, я учту твою рекомендацию. Просто хотелось схалтурить немножко ![]() ![]() |
|||
![]() |