|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
24.10.2005, 14:08 | #1 | |
Преобразование однострочного текста в многострочный
инженер-проектировщик
Регистрация: 10.03.2005
Сообщений: 54
|
||
Просмотров: 98451
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Только эта команда не отслеживает нескольких вещей:
1. Переводы строк - сносятся. 2. Текст добавляется в процессе выбора, а не по точкам вставки. Можно, наверное, и свое написать, только некогда
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 09.08.2005
Питер
Сообщений: 302
|
Я обычно пользуюсь в таких случаях замечательной программкой, которая была здесь на форуме: MtmdEdit 2.2. Можно задавать шаг строк по высоте и менять высоту шрифта. Она удобна еще и тем, что сразу видишь на экране результаты правки. Пользуюсь случаем сказать спасибо Автору (Правда, кажется, работает под ACAD 2002 и 2004).
Надо выделить всю тучу одиночных строк и править текст полностью. Можно тупо выстроить весь текст в одну строку и enter'ом разбивать так, как надо (как в Word). Правда, текст все равно будет однострочным, любую строку после правки можно удалять и править отдельно. Примитивно, конечно, но иногда это единственный выход. |
|||
|
||||
Регистрация: 20.07.2005
СПб
Сообщений: 89
|
Посмотри:
http://dwg.ru/dwl/250 где есть функция перевода Текст в МТекст с учетом высоты букв, цвета каждой строчки и дистанции между ними. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
> Хмурый : Хехе, и я теперь на эти грабли наступил - напрочь забыв о ком.строке
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.03.2011
СПб
Сообщений: 101
|
апну темку.
пользуюсь TXT2MTXT вопрос: можно ли сделать так, чтобы при выделении нескольких надписей простого текста они преобразовывались в такое же количество надписей многострочного текста? а данная команда объединит их в одну многострочную надпись. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Эта команда использует Express Tools
Скорее всего, он у тебя не установлен. Набери в командной строке txt2mtxt. Работает? PS. Проверил #13 на AutoCAD 2015 SP2. Код рабочий Еще ссылки на команды преобразования текста в МТЕКСТ Text2MText Upgraded Help with TEXT Convert selected texts to Mtexts individually Improved Text to Mtext
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Один из вариантов, без использования ET : http://forum.dwg.ru/showpost.php?p=162618&postcount=21
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Цитата:
Цитата:
Еще версия от Dotsoft (без проверки) Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Она в ЕТ уже как минимум с 2000 версии.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Не проверял, но если она такая же, как была и в ЕТ, то чертовски неудобная штука.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
... И чем оно отличается от стандартного? По-моему, точно так же последовательность выбора определяет последовательность добавления строк. И вот чего я не увидел - так это того, что будет с новым объектом, если количество символов превысит 255.
Очень давно я сделал альтернативу: https://forum.dwg.ru/showpost.php?p=162618&postcount=21 - но, по-моему, она никому нафиг не упала.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,095
|
Цитата:
Только что попробовал, работает. Разумеется, поля должны ссылаться на какие-то сторонние объекты, а не на исходные однострочные тексты, из которых клеится Мтекст. И которые после склейки удаляются. |
|||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Цитата:
а вот к вложению в #23 это можно как нить присандалить? а то в #24 - это аналог, я так понял, экспрессовской команды - она заливает все в один мтекст. Но только экспрессовкая мне больше удобна, если нужно ее именно использование кстати в каком файле находится txt2mtxt в составе экпресса, не подскажете? но иногда надо чтобы делались отдельные мтексты из отдельных однострочных текстов во вложении лисп, который так делает, но в нем нету vla-get-textstring Последний раз редактировалось allar8, 26.07.2019 в 11:19. |
|||
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,095
|
Цитата:
переписать полностью на базе Vla-функций. Наверное, проще как-то перебрать ЛИСП из #24, но заменой одной функции на другую это не ограничится, сам алгоритм работы менять надо. |
|||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Цитата:
----- добавлено через ~3 мин. ----- Цитата:
----- добавлено через ~12 мин. ----- Кстати в #13 аналог #23 на базе txt2mtxt Осталось только присандалить vla-fieldcode к txt2mtxt) Найти бы только киде она и есть ли в ней vla-get-textstring) ----- добавлено через ~5 мин. ----- Нашел - но печалька - она в leaderex.arx((( Последний раз редактировалось allar8, 26.07.2019 в 12:20. |
|||
|
||||
Последний раз редактировалось koMon, 30.07.2019 в 17:42. |
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
|
|||
|
||||
То есть нужно чтобы был выбор:
1. Каждый выбранный однострочный из набора в многострочный 2. Весь набор однострочных в один многострочный ? |
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Да, и чтоб не по отдельности тыкать, а рамкой выбрать или из набора все однострочные превратить в отдельные мтексты на том же месте. Аналогично в #23, но там поля убиваются.
- нет - это как раз у Вас уже и реализовано - т.е выбираю рамкой и все выбранные в один мтекст превращаются Последний раз редактировалось allar8, 26.07.2019 в 20:27. |
|||
|
||||
Ну программа же должна быть в каком-то роде универсальной. То есть пользователь запускает программу и выбирает либо 1 либо 2. Да вот ещё нужно добавить опцию сортировки по Y и каретку/пробел для 2.
Всё реализуемо на след. неделе) |
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Цитата:
Ту что вы уже выложили - она свою задачу с заливкой в один мтекст прекрасно выполняет И нужна еще отдельная программа по п.1 по принципу действия в #23 было бы идеально, если получится Если у Вас получится - заранее премного благодарен ----- добавлено через ~23 мин. ----- А что мне в этой программе понравилось - дык это то что она заливает по порядку выбора - это важно. И главное манипуляций минимум Последний раз редактировалось allar8, 26.07.2019 в 20:56. |
|||
|
||||
Да как оно может не получиться!? Хотя я строго за униаерсальность!)))
Я тут попробовал вставить мтекст, разбить его и соединить своей программой. Это пипец. Как они его взрывают, не понятно. А выбирать дцать строк по порядку ваще не айс. |
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Цитата:
Но лично для моих задач в рамках разных комманд я бы выделил 3 полезных вида пока для меня. 1) Аналог #23 с сохранением полей 2) Ваш вариант - что вы выложили с учетом порядка выбора + если выбирать по отдельности и не заливать в один позиция мтекста сохраняется. в #23 кстати чуть чуть смещается, а в #24 сильно смещается. 3) #24 - быстрая заливка в один мтекст с выбором рамкой и сохранением исходного порядка исходных однострочных текстов ----- добавлено через ~2 мин. ----- #24 для этой задачи подходит на мой взгляд. Если с полями то с учетом #26 - замены vla-get-textstring на vla-fieldcode. Последний раз редактировалось allar8, 26.07.2019 в 22:07. |
|||
|
||||
allar8, для написания не китайской программы нужно какое-никакое тз. Без отсылок на существующие программы. Так например в моей программе текст конвертируется в мтекст с сохранением исходного форматирования первого, в то время как в #13 каждому тексту предварительно принудительно присвается левое выравнивание. Ну и т. д. Напишите по пунктам что нужно сделать из чего по каким критериям.
|
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Цитата:
1) Да согласен в вашей уже программе огромный плюс это сохранение - форматирования и позиции исходного однострочного текста. Не хватает только выбора рамкой и преобразования каждого однострочного текста в отдельный мтекст. При выборе рамкой у вас все заливается в один мтекст, причем в обратном порядке - смысл этого мне если честно не понятен, но я ж говорю может у меня просто таких задач нет Резюмирую. Хотелось бы чтоб программа умела следующее: Выбранные рамкой или выбранные любым другим методом однострочные тексты (например быстрым выбором) в одно нажатие превращались каждый в свой мтекст с сохранением позиции и чтоб поля неубивались. Кстати как раз с сохранением позиции и форматирования в вашей прежней программе нет проблем и это очень круто. Поясню почему ссылался на #23 Та программа делает то что мне нужно, но убивает поля и немного смещает текст. В вашей программе уже решены проблемы с полями и сохранением позиции исходного текста, - нету только главного - выбора рамкой и в одно нажатие преобразования каждый однострочный текст в отдельный мтекст В одно нажатие - имеется ввиду настрою вашу команду на кнопку |
|||
|
||||
Это я чего-то косякнул)
Я понял. При выборе секрамкой или рамкой выбор идёт не по ходу пересечения их секрамкой например, а по стеку их в базе. Соответственно при таком выборе и при заливке выбранных текстов в один мтекст сортировка по Y необходима. Ну это вообще не вопрос) |
||||
|
||||
allar8, обновил #30
|
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Спасибище огромное! - вот это круто. Проверил - то что надо
Можно сказать то о чем мечтал) - Оценил - то что Работает с предварительно выбранными объектами Так же оценил универсальность с последовательным выбором и заливкой в один мтекст - супер. Действительно - очень полезная и нужная программа Последний раз редактировалось allar8, 29.07.2019 в 12:36. |
|||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Заметил один небольшой недостаток, но это вопрос больше не к вашей программе а к автокаду наверно
Я так понимаю ваша программа как то вычисляет ширину однострочного текста и как и должно быть - присваивает это значение пользовательской ширине результирующего мтекста Но автокад почему то не умещает все в одну строку и начинает переносить (см. во вложениии) Можно как нить добавить 1 мм к пользовательской ширине результирующего многострочного текста. Я проверил - этого вроде достаточно. Или может просто подскажете где и что можно дописать, если немного чтоб - исключить этот "баг") автокада. Или погодите проблема видимо в файле моем В чистом файле вроде нет проблем ----- добавлено через ~4 мин. ----- Хотя нет - проблема с однострочниками состоящими из нескольких слов Последний раз редактировалось allar8, 29.07.2019 в 13:48. |
|||
|
||||
это косяк лисп функции textbox, особенно с текстами с деформированными стилями shx.
#30 корректировал красным. |
||||
|
||||
тег красноты не счёлся с синтаксисом, поставил комментарий
|
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
ок, спасибо!
----- добавлено через ~38 мин. ----- Вот на это mtext_width (+ 1.0 (caadr (textbox text_dxf))) ;ширина мтекста подменил, но чет нет эффекта мож еще киде надо? ----- добавлено через ~10 мин. ----- Сори - все гуд) Последний раз редактировалось allar8, 29.07.2019 в 15:02. |
|||
|
||||
Цитата:
----- добавлено через ~2 мин. ----- а вообще зачем эти манипуляции текст->мтекст, наоборот. не проще сразу генерить нужные мтексты с полями?... |
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Цитата:
----- добавлено через ~4 мин. ----- Согласен, но говорю ж уже что то понаделано было, а потом надо было преобразовать. Вот собственно ваша программа и кстати. И потом подуше мине больше однострочный текст. Но иногда нужен и многострочный, например чтоб искать текст в полях хотя бы через фильтр. Но есно можно и дальше пойти задуматься о написании программы супер поиска - который бы умел и поля искать. Но пока таких не было. Да и если честно пора уже самому начинать ковыряться - а то все попрошайничаю да попрошайничаю) Последний раз редактировалось allar8, 29.07.2019 в 16:58. |
|||
|
||||
закомментировать 273, 304 в #30
;(entmod (subst (cons 41 mtext_width) (cons 41 0.0) (entget (vlax-vla-object->ename mtext_object)))) Последний раз редактировалось koMon, 29.07.2019 в 17:33. |
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
|
|||
|
||||
я думал об этом, но пока ломает
|
||||
|
||||
Boxa, you would have never known, how much have I missed you)))
это лб провокация? если ты вниматеотно пройдёшься по разным темам, то эта "пушкинская" тема тебе встретится многожды, потому забей и наслаждайся только чтением! Кстати у меня сегодня была мысль спросить, как тебе? Видимо она долетела до тебя!? |
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Понимаю)
----- добавлено через ~2 мин. ----- Цитата:
Последний раз редактировалось allar8, 29.07.2019 в 22:47. |
|||
|
||||
|
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Ну честно признаться как то неудобно - все время попрошайничать) - вы время свое потратили и все такое. Но однозначно замечу, что ваша программа очень полезная и думаю не один я буду Вам благодарен.
|
|||
|
||||
Offtop: Пока вас только ДВОЕ!
|
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Да проблема есть - мало людей кто интересуется такими деталями. Довольствуются тем что есть и не парятся по поводу рутины. Меня рутина убивает если честно.
Многие просто не знают, что автокад можно так скать усовершенствовать благодаря его открытости. Я тут поделился вашей прогой с коллегами - тем кому тоже все это интересно и те кто понимают в этом всем суть. Передаю и ихнюю Вам благодарность тоже! А сам лично тож хочу хоть немного научиться "усовершенствовать" автокад - начал по тихому почитывать про енто - мине тут посоветовали. Это ишо интересней - чем тупо пользоваться чужими наработками |
|||
|
||||
|
||||
|
||||
Offtop: но интерес как и энтузиазм - продукты скоропортящиеся(
|
||||
|
||||
Обновил #30. +углы
|
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Спасибо огромное, не устаю Вам говорить.!!!
----- добавлено через ~1 ч. ----- Вы талант - понравилась отдельно фишка с фильтрованным выбором только однострочников - круто. Спасибо ишо раз! ----- добавлено через ~11 ч. ----- Offtop: Интерес ишо не пропал у Вас? А то у меня ишо есть идея, но в "обратной" теме). Преобразование многострочного по аналогичному принципу в однострочный с сохранением полей))). ----- добавлено через ~12 ч. ----- Offtop: Или если для вас это уже не больно интересно - мож подскажете, что из вашего кода можно использовать для этого, если принцип кардинально не отличается) - сам буду вставать на путь истинный) Последний раз редактировалось allar8, 31.07.2019 в 08:51. |
|||
|
||||
Цитата:
если задача частная. а именно многострочник - одна строка с полями и без форматирования во встроенном редакторе, то скорее всего её можно решить по-простому. код в общем смысле использовать можно, только нужно переделать функции и тело команды. |
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
А можно сделать так, чтоб при объединении в один мтекст разделяла запятыми. Ща вижу разделяет пробелами, т.е. как я понимаю можно киде то в программе этот пробел заменить на запятую, но есно вопрос киде) - не подскажете, заранее премного благодарен!
----- добавлено через ~1 мин. ----- Это я понял - у меня такие тож кнопки есть на каждый объект - но приятно что это тут присандалено) - сам бы мож и недогадался) - рутинил бы чуть-чуть) ----- добавлено через ~9 мин. ----- Цитата:
Если у Вас интереса не появится - запишу это в копилку своих идей) для дальнейшей самостоятельной реализации в будущем) ----- добавлено через ~12 мин. ----- да именно это - просто чтоб также как взорвать но сохранить поля. Как можно по простому? - сориентируйте плиз. Или тут именно то, что Ваш код надо перебирать, и не обойтись парой строчек на кнопке в макросе?) Последний раз редактировалось allar8, 31.07.2019 в 14:26. |
|||
|
||||
|
||||
|
||||
|
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Понял
----- добавлено через ~5 мин. ----- Цитата:
Мне точно пригодится. Спасибо! ----- добавлено через ~28 мин. ----- Начал вкуривать - сделал под себя - убрал Space, Enterром ставлю запятую - для моей задачи мине это в самый раз Спасибо! ----- добавлено через ~1 ч. ----- Цитата:
Поколдавал (если это так можно назвать - для меня это пока колдовство)))) с вашим первоначальным вариантом - где выбор рамкой собирал в один мтекст. Но там программа в при выборе рамкой, например, вертикальных один под другим однострочников собирала их в обратном порядке (первый нижний, последний верхний) или, вроде, по алфавиту). Собственно - частично вроде получил что хотел для этой задачи - выбор рамкой вертикальных однострочников (один под одним) и сбор всего выбранного в один мтекст и разделение запятой в одно нажатие без выбора разделителя. Но как понимаете в обратном порядке))). Подскажите плиз, чтоб было по порядку - начиная с верхнего и оканчивая нижним. Заранее спасибо! Я про ентот Ваш код (переименовал команду)) Код:
Или может с кодом из #24 проще - та упорядочивает как надо - но там не похожий видимо принцип с Вашей программой - я еще не знаю куда там поставить разделитель запятую))) Последний раз редактировалось allar8, 31.07.2019 в 16:32. |
|||
|
||||
если нужен фиксированный разделитель и всё это вешать на кнопку, можно сделать к команде параметр и тогда на кнопку вешать лисп вида (c:text_to_mtext ", ").
или сделать вместо команды функцию и вешать на кнопку (text_to_mtext ", ") и так для каждого разделителя |
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Цитата:
первые две решаются с помощью вашей последней программы из #30: 1 - выбор рамкой и создание отдельных мтекстов на своих местах 2 - последовательный выбор - т.е. выбор в нужном порядке каждого односточника и сбор в один мтекст в соответствии с последовательностью выбора 3 - выбор рамкой и сбор в один мтекст Поподробней о 3: выбор рамкой вертикально расположенных друг над другом однострочников и сбор в один мтекст в последовательности сверху вниз через запятую. третий тип задач с помошью text_to_mtext ", ") я так понимаю требует также последовательного выбора каждого однострочника, а хотелось бы рамкой Т.е. 3 тип задач не получится включить в Вашу программу, т.к. при выборе рамкой программа решает 1-ую задачу, т.е. отдельные мтексты на своих местах Поэтому я и вспомнил о вашем первоначальном коде - там как раз был выбор рамкой, и сбор всего в один мтекст, но была проблема с упорядочиванием (по алфавиту), а хотелось бы чтоб программа упорядочивала и разделялал запятой в порядке слева направо согласно уменьшению координаты Y исходных однострочников, т.е. как бы аналог транспонирования. Вот пример: Исходные однострочники: 1111 2222 3333 5555 9999 4444 Результат, собранного мтекста, при выборе рамкой или через бвыбор исходных однострочников: 1111, 2222, 3333, 5555, 9999, 4444 ----- добавлено через ~58 мин. ----- Близок к цели) - нашел таки в #24 "\\P" - заменил на ", " Осталось там найти как сделать нулевой ширину результирующего мтекста там и можно ли? ----- добавлено через ~18 мин. ----- Не ща пока сам не разберусь - нужна подсказка. Подскажите кто нить как в #24 результат сделать с нулевой шириной?) Последний раз редактировалось allar8, 31.07.2019 в 20:32. |
|||
|
||||
(setq
mtext (vla-addmtext (vla-objectidtoobject *kpblc-activedoc* (_kpblc-property-get (car selset) 'ownerid) ) ;_ end of vla-ObjectIDToObject (vlax-3d-point (caddr (_kpblc-get-boundingbox minp maxp)) ) ;_ end of vlax-3d-point (abs (- (caadr (_kpblc-get-boundingbox-list selset)) (caar (_kpblc-get-boundingbox-list selset)) ) ;_ end of - ) ;_ end of abs str ) ;_ end of vla-addmtext ) выделенное красным заменить на 0 |
||||
|
||||
Регистрация: 12.03.2013
Сообщений: 650
|
Спасибо! Счастье есть - его не может не быть)))
Последний раз редактировалось allar8, 31.07.2019 в 22:21. |
|||