|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
14.02.2018, 16:50 | #1 | |
Определение координат текста в многострочном тексте?
Регистрация: 30.03.2015
Сообщений: 152
|
||
Просмотров: 7897
|
|
||||
зачем искать координаты, если можно найти слово (ва) и подсветить их (поменять цвет на отличный от цвета основого текста).
|
||||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
Цитата:
1) может в одном тексте это красный, другом тесте синий 2) да и потом надо будет скидывать этот цвет слово найти нету никакой сложности (получил текст, скинул форматирование и wcmatch)... надо координаты рамки над словом |
|||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
Я понимаю "условно рамки" например функция acet-geom-textbox
Код:
у тебя возвращает координаты рамки если описать над всем текстом рамку, но у тебя же нет рамки над текстом... а в данном случае мне надо над словом |
|||
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Далась тебе эта рамка.
Ты найди слово и координаты хотя бы его начала, а потом про рамку будешь вещать. Что ты там про однострочный текст писал? Про ПРИМЕРНОЕ расположение слова? А в мультитексте ты хочешь найти ТОЧНОЕ расположение слова? Ладно, не жмись, покажи, как ты определил примерное расположение слова в однострочном тексте. |
|||
|
||||
|
||||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
Цитата:
Код:
При расположении текста в блоке я так не могу поступить: 1) придется взрывать два раза и возвращать два раза 2) блок может быть заблокирован от взрыва и придется снимать этот флаг 3) это занимает больше времени чем получить текст,через активХ , но взорвать я уже не могу (точнее не получилось...как бы выразится взорвать по имени в блоке многострочный, не взрывая блок, а потом вернуть) функция для расположение в многострочном (не в блоке) Код:
Код:
Последний раз редактировалось prajdziswet, 14.02.2018 в 21:51. |
|||
|
||||
а в чём цель? слово нашлось, примерное положение нашлось, зум случился, а дальше что? чем взрывать блок, проще будет создать клон мтекста из блока и его уже взрывать.
|
||||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
насчет клона возможно да, хоть сам взрыв мне не особо нравится (просто хотелось более изячное решение...)
цель найти и зумировать, или тебе не приходилось искать текст по спецификации если длинная (например общая спецификация которая по 10 листов миниум), номер помещения и т.д + поиск по спдс-график (хоть я его не люблю, но строители постоянно пользуюся. Цель просто поиск - а там что тебя надо если подправить, то вручную подправишь; просто найти и посмотреть например сколько кол-во (например по спецификации) и т.д == иногда мно где надо просто найти, или проверить что везде подправил (поиск автокада не везде ищет, например в блоках, во-вторых можно установить маштаб -потому что например автокад =зумирует так что тебе надо иногда отменить поиск, чтобы увидеть более меньшем маштабе ...был инструмент с г-тулс, но он тоже не доконца ищет) Вот и хочется более изячное решение, чем взрывать-создавать и т.д //так как все это отнимает время, автокад начинает проририсовывать и регенерировать... |
|||
|
||||
ясно. насчёт взрыва, согласен, плохо. тогда считать строки, слова и т.д. или можно ещё замудрить например так: клонировать мтекст, искать построково нужное слово, найденную строку передать в дтекст, искать рамку, вычислять координаты рамки.
|
||||
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
Это только формально - ответ. На самом деле этот ответ показывает ущербность манипуляций. Особенно, когда искомое слово будет в тексте содержать ошибки.
Изячного решения здесь не будет. Так же как и изящного. Может получиться только грубое решение одноразового использования. Овчинка выделки не стоит. IMHO. Offtop: Подозреваю, что некоторые гуру сейчас начнут головы ломать и копья. Зря. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
не гуру, но что мешает разбить текст по словам и искать не строгое соответствие, а наиболее вероятное?
В простейшем варианте, это не так сложно: отсеиваем сначала слова по длине, а потом для оставшихся слов считаем коэффициент совпадения положения букв, выбираем слова с Мах коэффициентом. Однако я так и не понял, зачем все это и стоит ли эта стрельба из гаубиц по муравьям тех затрат времени и сил на написание кода. |
|||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
Цитата:
1) не понятно размеры мтекста (я имею введу поля относительно которых оно переносит (наверное где то содержится, но я не знаю.. в dxf-списке я их не заметил) 2) для того, чтобы посчитать туже строку надо разбить по определенному форматированию (будет влиять только тип шрифта,высота шрифта, растяжение и межстрочный интервал) и придется считать все это через textbox ... Цитата:
Спасибо за подсказки (насчет клона того же), пока оставил взырыв только в поиске не в блоке а потом возврат (хоть автокад как то сам ищет в многострочном тексте и позиционирует) а в блоке просто рамку всего текста (что не нравится конечно, но хоть как то укажет что там есть искомый текст) Последний раз редактировалось prajdziswet, 15.02.2018 в 11:54. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Offtop: Вспоминаем про динамическое количество столбцов в MTEXT, возможное назначение ширины, поля, принудительное форматирование и т.п. - и становится очень весело.
ИМХО - создавать анонимный блок, внутрь него - копию MTEXT, и ее уже анализировать. P.S. Это я еще не упоминаю про атрибуты, таблицы и значения тех же размеров...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
Цитата:
Для Вас я попытаюсь расшифровать запись. Можно перестроить работу так, что бы не пришлось пользоваться поиском по мтексту в блоках и тогда можно будет нормально пользоваться штатными функциями автокада. Так ли нужно загонять МТекст в блок. |
|||
|
||||
если каждая строка не содержит <cr> в конце, то это беда, поскольку если есть длинная строка, она же азац, ограниченный штриной мтекста или упаси ещё и колонками, то посчитать строки в таком абзаце та ещё задачка. я думаю для обработки мтекста в автокаде существует выделенный текстовый процессор, который и делает размещение-форматирование текста внутри контейнера мтекта, в тесном сотрудничистве с системным описанием шрифта.
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
prajdziswet, я не понимаю конечной задачи, но объясню причину, по которой я за работу внутри анонимного блока.
1. Работать с его составом можно достаточно легко (правда, acet-* там не сработает). 2. Для обработки блока его необязательно вставлять. 3. Если блок не вставлен, после закрытия файла он уничтожается автоматически.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
я правда думал не про vla-CopyObjects, а про простое думал entmake, entmode
Цитата:
Просто я не сталкивался с анонимными блоками, но думаю что он будет работать как и простой, т.е Например задача выше определить координаты рамки над словом в многострочном тексте = самое простое что я вижу взрыв (да не очень красивое) - и отмена взрыва == но так это значительно быстрее чем вычислить и учесть все форматирование, мтекст взрывается согласно форматированию (скрин-шоты выше приводил) , да может возникнуть например слово разорвет и т.д (но они все решаемы, относительно быстро, да и второй возникает а надо бывает такую задачу решать = не думаю что кто-то будет специально например букву в слове делать другим шрифтом, высотой ...я пишу из своей практики) Мне надо поиск текста - что-то вроде Автокадоского (просто не все есть или работает в автокаде), начал писать эту про- грамму потому что тот же СПДС-график не находит (я его не переношу, а строители пользуются...) ==а значит и мне приходится работать с их поосновой... |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Как бы да
1. Создать описание анонимного блока 2. В него скопировать обрабатываемый текст 3. Взорвать текст, используя vla-explode 4. Пройтись по результатам и вычислить нужные данные (я так понимаю, что для однострочного текста у тебя уже все работает) 5. Вернуть и дальше обрабатывать результаты.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
А почему нет? http://autolisp.ru/2014/07/29/explode-vs-vla-explode/
Слой только разблокировать и разморозить надо - вот и все.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
|
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
А, да, приношу свои извинения. vla-explode на многострочный текст не действует
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
да и сдаётся мне что взорвать мтекст ВНУТРИ блока вообще невозможно
----- добавлено через ~1 мин. ----- двигаемся опять к клонированию) |
||||
|
||||
|
||||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
Спасибо
все теоретически обычными средствами и активХ наверное да, если конечно не входить в блок через командную строку, но тут "клонирование" снова наверное будет в приоритете ==это лучше, потому что скопировл из блока и взорвал ...чем + займет время на прорисовку в блоке и при выходе из блока ________________ Алексей скинь плиз ссылку на создание "анонимного блока", хочу почитать ..ато загуглил, нормальной ссылки что-то не нашел (как их создавать и т.д, на и на формуме поиск как -то криво выдал....может конечно и я сам криво искал...) Последний раз редактировалось prajdziswet, 16.02.2018 в 16:55. |
|||
|
||||
|
||||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
полностью солидарен, я так развлекался когда лисп очень плохо знал и чтобы подсчитать элементы входил лиспом через командную строку )))))
ну честно говоря особо тут разницы не вижу, что через актив что так создавать результат будет один и тот же...удобно конечно через vla-CopyObjects , преимущество только вижу что имена у меня будут вла-объектами... |
|||
|
||||
наверное это дело личных предпочтений, если конечно не заморачиваться на тему проверки быстроты выполнения, но вот сам же говорил привязки там всякие мешают, а в activex они и не мешают вовсе. это я к тому что в activeх как-то меньше зависишь от кучи системных переменных.
|
||||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
Да наверное это еще один + , правда я всеравно привязку отключаю на момент поиска (формирование списка координат по которым просто потом зумирую).
Правда я пока в блоке оставил общую рамку текста (да вопросы там не доконца решил, как оно координаты выдаст скорее всего для блока - а потом их надо будет смещать и маштабировать, поворот не учитываю..), а не в блоке через взрыв сделано.... Клонировать наверное буду пробывать для спдс-таблицы, если мне конечно даст прокси скопировать, да и подозрение что спдс -внутри блока не получиться взорвать ... |
|||
|
||||
однозначно относительно точки вставки блока, которая для блока является своей системой координат. если блок масштабируется и поворачивается, то возможно это можно решить через трансформирующую матрицу.
лучший автокад - это голый автоткад! |
||||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Да все элементарно (пишу без запущенного ACAD'a):
(setq def (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) "*U" (vlax-3d-point '(0. 0. 0.))) Вроде так. Посмотри в справке параметры вызова vla-add для разных случаев - там все описано.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
кажись решил простой математикой (косинусы-синусы и т.д) без матриц ..вроде работает (как и говорил в блоке оставил просто общую рамку мтекста ...работает вроде при маштабировании-смещении-повороте, как оно конечно на практике покажет конечно вопрос = но вроде проверил смаштабировал-повернул-а потом сместил...показало вроде адекватно)
Пока до анонимных блоков не дошел, пока еще допиливаю потихоньку остальное ... п.с потом выкину лисп, что получился... ----- добавлено через ~1 ч. ----- Просветите меня темного, как скопировать объект в образованный аннонимный блок ..что-то я запутался.... Код:
Последний раз редактировалось prajdziswet, 18.02.2018 в 11:16. |
|||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
Как и говорил прикрепляю свой код textfind.lsp а вот файл диалога почему-то не смог загрузить, наверное ограничение на сервере "некорректный файл"...
И еще интересно, как вставить аннонимный блок? Код:
п.с vla-Explode для спдс-объектов не действует, а в блоках не действует если через Код:
Последний раз редактировалось prajdziswet, 18.02.2018 в 17:20. |
|||
|
||||
Цитата:
----- добавлено через ~9 мин. ----- Без пациента трудно что-то посоветовать. Как вариант - единицы блока - парсеки, единицы чертежа - миллиметры. Блок вставляется, но чтобы наблюдать результат нужен телескоп
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 30.03.2015
Сообщений: 152
|
Цитата:
Всем СПАСИБО.... Может примитивно, но как то так.... textfind.ZIP |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ручки в многострочном тексте | Яблоко | AutoCAD | 12 | 20.02.2015 11:55 |
Определение координат динамического блока в среде VBA | ArtemYa | Программирование | 8 | 03.12.2009 13:57 |
Изменение форматированного текста посредством lisp | Tramp | LISP | 4 | 03.03.2006 11:28 |
Бледный русский язык в многострочном тексте | dimoniy | AutoCAD | 8 | 09.11.2005 01:00 |
не работает переключение регистров в многострочном тексте | Nika | AutoCAD | 3 | 20.05.2004 22:26 |