| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Определение координат текста в многострочном тексте?

Определение координат текста в многострочном тексте?

Ответ
Поиск в этой теме
Непрочитано 14.02.2018, 16:50
Определение координат текста в многострочном тексте?
prajdziswet
 
Регистрация: 30.03.2015
Сообщений: 152

Определение координат текста в многострочном тексте?
можно ли найти координаты рамки описанного вокруг слова в многострочном тексте?
___________________________________________________________________
textbox - работает с однострочным текстом (в однострочном можно реализовать указаную выше задачу)
acet-geom-textbox - работает с многострочным текстом, но почему то он обрабатывает по имени а не по списку (даю разные dxf-списки c текстом оригинальным и dxf со словом укороченным - и выдает одинаковый результат)
vla-GetBoundingBox - работает с имененем через активХ, и выдаст рамку оригинального текста а не слова...

Можно конечно с какой то погрешностью релизовать через взрыв, а по однострочным текстам найти ПРИМЕРНОЕ расположнение слова.
А можно без взрыва "Определенить координаты текста в многострочном тексте? "

Заранее благодарю за подсказки?

п.с сама задача хочу реализовать поиск слов в многострочном тексте в блоках (или может уже кто-то реализовал)...
Просмотров: 7960
 
Непрочитано 16.02.2018, 06:54
#21
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Цитата:
Сообщение от prajdziswet Посмотреть сообщение
(правда я только команду Explode пробывал, а не vla-Explode в блоке..но вроде в блоке и она не даст взорвать мтекст + имеет смысл взрыв, что он разбивает текст в зависимости от форматирование и текст (теоретически остается на том же месте)
Почитай про vla-CopyObjects. Мтекст можно скопировать из пространства блока в пространство модели (или текущее пространство) без explode блока
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 16.02.2018, 12:42
#22
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


Цитата:
Сообщение от VVA Посмотреть сообщение
Мтекст можно скопировать из пространства блока в пространство модели
я правда думал не про vla-CopyObjects, а про простое думал entmake, entmode

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
я не понимаю конечной задачи, но объясню причину, по которой я за работу внутри анонимного блока.
Впринципе про анонимные блоки я слышал, может из твоей какой-то странички, но честно не разбирался..как что и как создавать ==НАДО как то мне до них будет долезть, очень полезная штука. Спасибо...

Просто я не сталкивался с анонимными блоками, но думаю что он будет работать как и простой, т.е
Например задача выше определить координаты рамки над словом в многострочном тексте = самое простое что я вижу взрыв (да не очень красивое) - и отмена взрыва
== но так это значительно быстрее чем вычислить и учесть все форматирование, мтекст взрывается согласно форматированию (скрин-шоты выше приводил) , да может возникнуть например слово разорвет и т.д (но они все решаемы, относительно быстро, да и второй возникает а надо бывает такую задачу решать = не думаю что кто-то будет специально например букву в слове делать другим шрифтом, высотой ...я пишу из своей практики)

Мне надо поиск текста - что-то вроде Автокадоского (просто не все есть или работает в автокаде), начал писать эту про-
грамму потому что тот же СПДС-график не находит (я его не переношу, а строители пользуются...) ==а значит и мне приходится работать с их поосновой...
prajdziswet вне форума  
 
Непрочитано 16.02.2018, 13:26
#23
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Цитата:
Сообщение от prajdziswet Посмотреть сообщение
он будет работать как и простой
Как бы да
1. Создать описание анонимного блока
2. В него скопировать обрабатываемый текст
3. Взорвать текст, используя vla-explode
4. Пройтись по результатам и вычислить нужные данные (я так понимаю, что для однострочного текста у тебя уже все работает)
5. Вернуть и дальше обрабатывать результаты.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.02.2018, 14:18
#24
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
2. В него скопировать обрабатываемый текст
3. Взорвать текст, используя vla-explode
а удастся ли взорвать мтекст в блоке?
koMon вне форума  
 
Непрочитано 16.02.2018, 14:59
#25
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


А почему нет? http://autolisp.ru/2014/07/29/explode-vs-vla-explode/
Слой только разблокировать и разморозить надо - вот и все.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.02.2018, 15:25
#26
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А почему нет?
ну уж точно не vla-explode
koMon вне форума  
 
Непрочитано 16.02.2018, 15:33
#27
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


А, да, приношу свои извинения. vla-explode на многострочный текст не действует
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.02.2018, 15:34
#28
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


да и сдаётся мне что взорвать мтекст ВНУТРИ блока вообще невозможно

----- добавлено через ~1 мин. -----
двигаемся опять к клонированию)
koMon вне форума  
 
Автор темы   Непрочитано 16.02.2018, 15:41
#29
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


вы пока тут обсуждали я опробывал ...

наверное vla-Explode не работает на многострочном тесксте Нажмите на изображение для увеличения
Название: 03.png
Просмотров: 11
Размер:	45.2 Кб
ID:	199267
выдает "; ошибка: ActiveX Server возвратил ошибку: неизвестное имя: Explode"
что в простом блоке, что просто в модели...

да и
Код:
[Выделить все]
 (vlax-method-applicable-p name 'Explode)
выдало nil
prajdziswet вне форума  
 
Непрочитано 16.02.2018, 15:48
1 | #30
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


Цитата:
Сообщение от prajdziswet Посмотреть сообщение
вы пока тут обсуждали я опробывал ...
практика - великое дело!
koMon вне форума  
 
Автор темы   Непрочитано 16.02.2018, 15:49
#31
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


Спасибо
Цитата:
Сообщение от koMon Посмотреть сообщение
да и сдаётся мне что взорвать мтекст ВНУТРИ блока вообще невозможно
все теоретически обычными средствами и активХ наверное да, если конечно не входить в блок через командную строку, но тут "клонирование" снова наверное будет в приоритете ==это лучше, потому что скопировл из блока и взорвал ...чем + займет время на прорисовку в блоке и при выходе из блока

________________
Алексей скинь плиз ссылку на создание "анонимного блока", хочу почитать ..ато загуглил, нормальной ссылки что-то не нашел (как их создавать и т.д, на и на формуме поиск как -то криво выдал....может конечно и я сам криво искал...)

Последний раз редактировалось prajdziswet, 16.02.2018 в 16:55.
prajdziswet вне форума  
 
Непрочитано 16.02.2018, 15:52
#32
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


Цитата:
Сообщение от prajdziswet Посмотреть сообщение
если конечно не входить в блок через командную строку
это как-то не по-программистки что-ли)))
однозначно клонирование мтекста, но конечно же не ent* функциями
koMon вне форума  
 
Автор темы   Непрочитано 16.02.2018, 16:02
#33
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


Цитата:
Сообщение от koMon Посмотреть сообщение
это как-то не по-программистки что-ли)))
полностью солидарен, я так развлекался когда лисп очень плохо знал и чтобы подсчитать элементы входил лиспом через командную строку )))))

Цитата:
Сообщение от koMon Посмотреть сообщение
не ent* функциями
ну честно говоря особо тут разницы не вижу, что через актив что так создавать результат будет один и тот же...удобно конечно через vla-CopyObjects , преимущество только вижу что имена у меня будут вла-объектами...
prajdziswet вне форума  
 
Непрочитано 16.02.2018, 16:29
#34
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


наверное это дело личных предпочтений, если конечно не заморачиваться на тему проверки быстроты выполнения, но вот сам же говорил привязки там всякие мешают, а в activex они и не мешают вовсе. это я к тому что в activeх как-то меньше зависишь от кучи системных переменных.
koMon вне форума  
 
Автор темы   Непрочитано 16.02.2018, 16:55
#35
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


Да наверное это еще один + , правда я всеравно привязку отключаю на момент поиска (формирование списка координат по которым просто потом зумирую).
Правда я пока в блоке оставил общую рамку текста (да вопросы там не доконца решил, как оно координаты выдаст скорее всего для блока - а потом их надо будет смещать и маштабировать, поворот не учитываю..), а не в блоке через взрыв сделано.... Клонировать наверное буду пробывать для спдс-таблицы, если мне конечно даст прокси скопировать, да и подозрение что спдс -внутри блока не получиться взорвать ...
prajdziswet вне форума  
 
Непрочитано 16.02.2018, 17:11
#36
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


Цитата:
Сообщение от prajdziswet Посмотреть сообщение
как оно координаты выдаст скорее всего для блока
однозначно относительно точки вставки блока, которая для блока является своей системой координат. если блок масштабируется и поворачивается, то возможно это можно решить через трансформирующую матрицу.

Цитата:
Сообщение от prajdziswet Посмотреть сообщение
…если мне конечно даст прокси скопировать …спдс -внутри блока не получиться взорвать
лучший автокад - это голый автоткад!
koMon вне форума  
 
Автор темы   Непрочитано 16.02.2018, 17:15
#37
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


Цитата:
Сообщение от koMon Посмотреть сообщение
лучший автокад - это голый автоткад!
это да, как наш системный администратор автокад в шутку называет автогад = на что я ему, ты автокад не трогай )))
prajdziswet вне форума  
 
Непрочитано 16.02.2018, 17:26
#38
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Цитата:
Сообщение от prajdziswet Посмотреть сообщение
ссылку на создание "анонимного блока"
Да все элементарно (пишу без запущенного 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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.02.2018, 09:57
#39
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


Цитата:
Сообщение от koMon Посмотреть сообщение
то возможно это можно решить через трансформирующую матрицу
кажись решил простой математикой (косинусы-синусы и т.д) без матриц ..вроде работает (как и говорил в блоке оставил просто общую рамку мтекста ...работает вроде при маштабировании-смещении-повороте, как оно конечно на практике покажет конечно вопрос = но вроде проверил смаштабировал-повернул-а потом сместил...показало вроде адекватно)

Пока до анонимных блоков не дошел, пока еще допиливаю потихоньку остальное ...

п.с потом выкину лисп, что получился...

----- добавлено через ~1 ч. -----
Просветите меня темного, как скопировать объект в образованный аннонимный блок ..что-то я запутался....
Код:
[Выделить все]
 
;создаем аннонимный блок
(setq def (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point '(0. 0. 0.)) "*U"))
;получаем вла-обект
(setq obj (vlax-ename->vla-object (ssname (ssget) 0)))
;создаем безопастный массив из одного элемента
(setq mass (vlax-make-safearray vlax-vbObject '(1 . 1)))
(vlax-safearray-put-element mass 1 obj)
;копируем? что -не то
(setq bl (vla-CopyObjects (vla-get-activedocument
               (vlax-get-acad-object)
             ) mass def)
       )
       )

Последний раз редактировалось prajdziswet, 18.02.2018 в 11:16.
prajdziswet вне форума  
 
Непрочитано 18.02.2018, 15:18
1 | #40
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


obj - список vla объектов
Пример отсюда
Код:
[Выделить все]
(vla-copyobjects (vla-get-activedocument (vlax-get-acad-object))
              (vlax-make-variant (vlax-safearray-fill
                  (vlax-make-safearray vlax-vbobject (cons 0 (1- (length obj))))
                  obj)) unnamed_block)))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Определение координат текста в многострочном тексте?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ручки в многострочном тексте Яблоко 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