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

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

Объединение разбитого на слова текста

Ответ
Поиск в этой теме
Непрочитано 30.11.2007, 14:08 #1
Объединение разбитого на слова текста
Mist
 
Москва
Регистрация: 31.07.2007
Сообщений: 92

Подскажите как сделать так чтобы разбитый на слова текст объеденить в МТекст для нормально редактирования...???
Прислали данные, а весь текст разбит до отдельных слов, точек...
Редактировать замучаешься...
Просмотров: 46546
 
Непрочитано 30.11.2007, 14:29
#2
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,826
<phrase 1=


Цитата:
Сообщение от Mist Посмотреть сообщение
Подскажите как сделать так чтобы разбитый на слова текст объеденить в МТекст для нормально редактирования...???
Прислали данные, а весь текст разбит до отдельных слов, точек...
Редактировать замучаешься...
Команда _txt2mtxt из Express.
Или _DSTP_CVTXT2MT из ToolPac
Правда, если выбирать рамкой то неизвестно в каком порядке будут идти слова и буквы
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 30.11.2007, 14:32
#3
Witalij

AL-остекление, фасадка, оконка
 
Регистрация: 25.07.2007
Москва
Сообщений: 113
<phrase 1=


Цитата:
Сообщение от zenon Посмотреть сообщение
Команда _txt2mtxt из Express.
Или _DSTP_CVTXT2MT из ToolPac
Правда, если выбирать рамкой то неизвестно в каком порядке будут идти слова и буквы
Блин, опередили!

Я _txt2mtxt техусловия объеденял - сохранилось даже форматирование (имею в виду не тип/наклон/размер шрифта, а взаимное визуальное расположение слов на экране.)
__________________
Фасадку черчу...
Witalij вне форума  
 
Непрочитано 30.11.2007, 14:35
#4
Jоhnny

всё что связано с упорядоченным движением заряженных частиц
 
Регистрация: 27.07.2007
М.О.
Сообщений: 1,693


То что разбит не знаю....может это просто не мультитекст а строчный?
Для такого нашёл здесь на форуме приполезнейший лисп, можно редактировать в ворде (чтобы соблюсти перенос по строкам и прочие тонкости) а потом снова через буфер в раскрытый блокнот. Здесь однако надо быть очень аккуратным при выборе последовательности текстов. Прога вообще кульная........автору респект
Вложения
Тип файла: lsp es_texteditor.lsp (8.5 Кб, 1823 просмотров)
Jоhnny вне форума  
 
Непрочитано 30.11.2007, 14:36
#5
stekhov


 
Регистрация: 01.07.2005
Вавилон
Сообщений: 42


Если АКАД начиная от 2006, то Express Tools должны быть включены в дистрибутив и установленны по умолчанию. меню Express=>Text=>Convert Text to MText. Если опять же это отдельные слова, а не буквы взорванные до геометрии.
stekhov вне форума  
 
Непрочитано 30.11.2007, 14:38
#6
Jоhnny

всё что связано с упорядоченным движением заряженных частиц
 
Регистрация: 27.07.2007
М.О.
Сообщений: 1,693


Оперативно, практически онлайн, когда писал ответ думал что буду 1, оказалось 3 с другой стороны что форум так работвает, вот бы и на мои темы так оперативно и главное продуктивно отвечали
Jоhnny вне форума  
 
Непрочитано 30.11.2007, 14:42
#7
Кулик Алексей aka kpblc
Moderator

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


Еще один вариант вроде был тут
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.11.2007, 14:44
#8
stekhov


 
Регистрация: 01.07.2005
Вавилон
Сообщений: 42


Jоhnny
У вас вопросы по-видимому не такие однозначные
stekhov вне форума  
 
Автор темы   Непрочитано 30.11.2007, 14:52
#9
Mist


 
Регистрация: 31.07.2007
Москва
Сообщений: 92


Спасибо большо за ответы!!!! помогло!!!!)))))))))))))
Mist вне форума  
 
Непрочитано 30.11.2007, 15:37
#10
Jоhnny

всё что связано с упорядоченным движением заряженных частиц
 
Регистрация: 27.07.2007
М.О.
Сообщений: 1,693


Цитата:
Сообщение от stekhov Посмотреть сообщение
Jоhnny
У вас вопросы по-видимому не такие однозначные
Зря ты так, можешь посмотреть мои темы и убедиться в обратном....где-то я сам разобрался и побырому сообщил что тему можно закрывать, где-то например как создть библиотеку материалов многие сказали что так и так это слишком глобально это надо долго объяснять и в этом роде....
Jоhnny вне форума  
 
Непрочитано 03.12.2007, 23:28
#11
Денис Флюстиков


 
Регистрация: 20.07.2005
СПб
Сообщений: 89


Цитата:
Сообщение от Mist Посмотреть сообщение
Подскажите как сделать так чтобы разбитый на слова текст объеденить в МТекст для нормально редактирования...???
Прислали данные, а весь текст разбит до отдельных слов, точек...
Редактировать замучаешься...
Как вариант.
Перенос однострочного текста в Microsoft Word
Ядро программы представил VK:
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=10216TV

Добавлено:
1. Очередность полученных строчек как в ACAD'e и
не зависит от способа выбора;
2. Объединение (склейка) строчек, если имеется разбивка на слова
Вложения
Тип файла: rar txt2word_Den.rar (1.0 Кб, 941 просмотров)
Денис Флюстиков вне форума  
 
Непрочитано 09.06.2008, 18:49
#12
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


А возможно ли объединить таким образом мультитексты? Например, по аналогии с командой Join1 из G_Tools.
skkkk вне форума  
 
Непрочитано 09.06.2008, 20:53
#13
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Цитата:
Сообщение от skkkk Посмотреть сообщение
А возможно ли объединить таким образом мультитексты? Например, по аналогии с командой Join1 из G_Tools.
(defun c:mmt (/ first delete second delete1 mtx1 mtx2 mtx ed)
(prompt "\nTo merge two MTEXT entities")
(setq first (entget (car(entsel"\nSelect first MTEXT entity: "))))
(if (= first nil)(exit))
(setq delete1(cdr(assoc -1 first)))
(redraw delete1 3)
(setq second (entget (car(entsel"\nSelect second MTEXT entity: "))))
(if (= second nil)(exit))
(setq delete (cdr(assoc -1 second)))
(redraw delete 3)
(setq mtx1 (cdr (assoc 1 first)))
(setq mtx2 (cdr (assoc 1 second)))
(setq mtx (strcat mtx1 "\\P" mtx2))
(command "erase" delete delete1 "")
(setq ed first)
(setq ed
(subst (cons 1 mtx)
(assoc 1 ed)
ed
)
)
(entmake ed)
(princ)
)
__________________
Сквозь тернии к звездам.... и обратно :yes:
Startrek вне форума  
 
Непрочитано 09.06.2008, 22:34
#14
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Startrek, спасибо огромное за отклик. Протестировал. Объединяя два мтекста, лисп, во-первых, делает их копию, оставляя оригиналы на местах, а во-вторых, второй мтекст в объединенном тексте сносится на следующую строчку, что нежелательно.......И если несложно, хочется, чтобы несколько мтекстов выделять. И чтоб как они были на одной строке несколько, так и остались одной строкой, но уже объединенной
skkkk вне форума  
 
Непрочитано 09.06.2008, 22:50
#15
Кулик Алексей aka kpblc
Moderator

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


Еще один вариант: http://dwg.ru/f/showpost.php?p=162618&postcount=21
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.06.2008, 02:35
#16
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Кулик Алексей aka kpblc, дай Бог тебе здоровья! просто КЛАСС!!!!!! То, что надо. Даже когда вперемешку тексты и мтексты, объединяет как семечки. С горем пополам разобрался с точкой вставки объединенного мтекста. Он, как я заметил, встает в конец рамки редактора первого мтекста. Мне надо, чтоб первый текст остался на месте, а остальные к нему прилипли. Я сдвинул правую рамку редактора до упора влево (первый у меня всегда мтекст) и стало как надо. Даже рамкой можно выделять....!!! Кайф. Только подскажи пожалуйста, что подправить, чтобы вставлял без пробелов
skkkk вне форума  
 
Непрочитано 10.06.2008, 04:06
#17
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Кулик Алексей aka kpblc, уже на втором твоем лиспе замечаю, (первый - для создания групп примитивов, тоже, кстати очень достойный), что после его использования некоторые примитивы в чертеже (а в первом - созданные группы) при наведении на них курсора становятся пунктирными - это, разумеется, нормально, - но и остаются такими после отвода курсора. Это не парит особо, - выделение их и Esc решает проблему, но, может, ты знаешь, что это за такое??
skkkk вне форума  
 
Непрочитано 10.06.2008, 08:30
#18
Кулик Алексей aka kpblc
Moderator

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


> #16 : так там же вроде можно было выбирать точку вставки... Надо будет проверить / вспомнить - где код находится, еще помню, а вот подробности... Писалось под 2005-й, и на нем же тестировалось.
> #17 : смоделировать не удалось. Принудительное изменение "подсветки" использую крайне редко, и обычно нормально сносится в момент завершения лиспа. Погоняю, конечно, еще. Ты только скажи, а версия AutoCAD'a какая у тебя? Только 2008, без "наворотов"?

Добавлю (забыл сначала спросить): не понял, что значит "вставлять без пробелов" (#16). Это как?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 10.06.2008 в 10:10.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.06.2008, 13:02
#19
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Кулик Алексей aka kpblc,
Цитата:
так там же вроде можно было выбирать точку вставки...
не нашел. Зато есть выбор источника свойств объединенного текста
Цитата:
версия AutoCAD'a какая у тебя? Только 2008, без "наворотов"
Ну не знаю, что есть "навороты", стоит VetCAD++, G_tools и еще какая-то прожка для построения продольного профиля, но ее надо снести. AutoCAD русский.
Цитата:
что значит "вставлять без пробелов"
мои тексты-исходники включают ТОЛЬКО символы, без пробелов. А когда объединяются, в новом тексте между ними возникают пробелы, т.е., содержимое исходника1->пробел->содержимое исходника2->пробел и т.д

Последний раз редактировалось skkkk, 10.06.2008 в 17:29.
skkkk вне форума  
 
Непрочитано 11.06.2008, 05:49
#20
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Кулик Алексей aka kpblc, если я перейду на 2007-й, это что-то изменит касательно этого лиспа?? Обнаружил такую канитель, что при открытии моих файлов в 2007-м (который у всех в моей конторе) тексты убегают, разделяются на строки..... Это не из-за этого лиспа, раньше я тоже это замечал, но это было редко, а в новом проекте очень много убежало. Всех на 2008-й перевести - только со временем, поэтому придется прогнуться, наверное. Хотя это единственное несоответствие форматов, которое я наблюдал....Может, знаешь, в чем беда?
skkkk вне форума  
 
Непрочитано 11.06.2008, 08:57
#21
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


в шрифтах. 99.99%
__________________
Век живи, век учись - ...

Последний раз редактировалось Bull, 11.06.2008 в 09:15. Причина: Мудрый человек во всем сомневается, поэтому не 100% :)
Bull вне форума  
 
Непрочитано 11.06.2008, 09:04
#22
Кулик Алексей aka kpblc
Moderator

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


Я сильно подозреваю, что проблема в отсутствии shx-шрифтов... У тебя подкаталоги Fonts в каталогах установки AutoCAD'a одинаковы?
---
Пока с начальством базарил, уже опередили
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.06.2008, 09:58
#23
Черней Иван

Проектирование автомобильных дорог, мостов, аэродромов,изыскания
 
Регистрация: 20.05.2008
Санкт-Петербург
Сообщений: 41
<phrase 1=


Express tools _txt2mtxt
Черней Иван вне форума  
 
Непрочитано 11.06.2008, 10:13
#24
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


Ты сначала тему почитал бы
__________________
Век живи, век учись - ...
Bull вне форума  
 
Непрочитано 11.06.2008, 14:36
#25
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Сделел папки Fonts одинаковыми в обоих КАДах. Многое поправилось . Но не всё. Некоторые тексты, которые в 2008-м были выровнены по левому краю, стали в 2007-м по правому.
skkkk вне форума  
 
Непрочитано 11.06.2008, 14:41
#26
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Кулик Алексей aka kpblc, извиняюсь за назойливость.....Реально ли сделать объединение текстов твоим лиспом без пробелов??
skkkk вне форума  
 
Непрочитано 11.06.2008, 14:52
#27
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Кулик Алексей aka kpblc, извиняюсь за назойливость.....Реально ли сделать объединение текстов твоим лиспом без пробелов??
Запаковывать лениво, забирай так:
Код:
[Выделить все]
(defun c:text2mtext (/
                     *error*
                     *kpblc-activedoc*
                     kpblc-conv-text-to-mtext
                     _kpblc-error-catch
                     _kpblc-error-print
                     _kpblc-get-msg-norm
                     _kpblc-string-replace
                     _kpblc-conv-value-to-string
                     _kpblc-conv-ent-to-ename
                     _kpblc-conv-ent-to-vla
                     _kpblc-conv-selset-to-ename
                     _kpblc-conv-ent-to-vla
                     _kpblc-conv-vla-to-list
                     _kpblc-property-get
                     _kpblc-property-set
                     _kpblc-get-text-point
                     _kpblc-get-boundingbox
                     _kpblc-get-boundingbox-list
                     )

  (defun *error* (msg)
    (vla-endundomark *kpblc-activedoc*)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun _kpblc-get-boundingbox-list (lst / pt_lst maxp minp)
                                     ;|
;**************** lst-getboundingbox.lsp *************
;   Библиотечная функция
;   определения габаритного контейнера
;   для списка VLA объектов
;   Автор  Евгений Елпанов.
;*****************************************************
;   Аргумент lst - список VLA объектов
;   пример получения списка с использованием (ssget) :
(if (setq sset (ssget))
 (setq lst
       (mapcar
        (function vlax-ename->vla-object)
        (vl-remove-if
         (function listp)
         (mapcar (function cadr) (ssnamex sset))
        ) ;_ vl-remove-if
       ) ;_  mapcar
 ) ;_  setq
)
;   Пример вызова:
 (_kpblc-get-boundingbox-list lst)

;   Возвращает список из двух 3d точек
;   '((левая нижняя) (правая верхняя))
|;
    (if (setq lst (cond
                    ((= (type lst) 'list) (mapcar '_kpblc-conv-ent-to-vla lst))
                    ((= (type lst) 'pickset) (_kpblc-conv-selset-to-vla lst))
                    (t nil)
                    ) ;_ end of cond
              ) ;_ end of setq
      (progn
        (setq pt_lst (apply 'append
                            (mapcar '(lambda (x / minp maxp)
                                       (vla-getboundingbox x 'minp 'maxp)
                                       (list (_kpblc-conv-vla-to-list minp)
                                             (_kpblc-conv-vla-to-list maxp)
                                             ) ;_ end of list
                                       ) ;_ end of lambda
                                    lst
                                    ) ;_ end of mapcar
                            ) ;_ end of apply
              ) ;_ end of setq
        (list (list (apply 'min (mapcar 'car pt_lst))
                    (apply 'min (mapcar 'cadr pt_lst))
                    (apply 'min (mapcar 'caddr pt_lst))
                    ) ;_ end of list
              (list (apply 'max (mapcar 'car pt_lst))
                    (apply 'max (mapcar 'cadr pt_lst))
                    (apply 'max (mapcar 'caddr pt_lst))
                    ) ;_ end of list
              ) ;_ end of list
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-get-boundingbox (minpoint maxpoint)
                                ;|
*    Возвращает список из 4 подсписков - точек прямоугольника. Требуется после
* применения (vla-getboundingbox () 'minp 'maxp) для получения полного описания
* прямоугольника. Корректно работает только в мировой системе координат.
*    Возвращает список точек прямоугольника:
*  4---3
*  |   |
*  1---2
*    Параметры вызова:
*	minpoint	variant, полученный от vla-GetBoundingBox
*	maxpoint	то же
*    В задании точек является критичной последовательность передачи параметров.
* Если первой указать не minpoint, a maxpoint, то получится
*  2---1
*  |   |
*  3---4
*    Примеры вызова:
(vla-GetBoundingBox (vlax-ename->vla-object (car (entsel))) 'minp 'maxp)
(_kpblc-get-boundingbox minp maxp)
|;
    (setq minpoint (_kpblc-conv-vla-to-list minpoint)
          maxpoint (_kpblc-conv-vla-to-list maxpoint)
          ) ;_ end of setq
    (list minpoint
          (list (car maxpoint) (cadr minpoint) (caddr minpoint))
          maxpoint
          (list (car minpoint) (cadr maxpoint) (caddr minpoint))
          ) ;_ end of list
    ) ;_ end of defun

  (defun _kpblc-property-set (obj property value / res)
                             ;|
*    Установка значения свойства объекта.
*    Параметры вызова:
*	obj		указатель на объект
*	property	наименование свойства
*	value		устанавливаемое значение
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (if (and obj
                   (vlax-property-available-p
                     (setq obj (_kpblc-conv-ent-to-vla obj))
                     property
                     t
                     ) ;_ end of vlax-property-available-p
                   (vlax-read-enabled-p obj)
                   (vlax-write-enabled-p obj)
                   (not (vlax-erased-p obj))
                   ) ;_ end of and
            (progn
              (vlax-put-property obj property value)
              (setq res (vlax-get-property obj property))
              ) ;_ end of progn
            ) ;_ end of if
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x)
         (_kpblc-error-print
           (strcat
             "_kpblc-property-set :"
             " obj->"
             (_kpblc-conv-value-to-string (_kpblc-property-get obj 'objectname))
             " property->"
             (_kpblc-conv-value-to-string property)
             " value-> "
             (_kpblc-conv-value-to-string value)
             ) ;_ end of strcat
           ) ;_ end of _kpblc-error-print
         ) ;_ end of lambda
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-property-get (obj property / res)
                             ;|
*    Получение значения свойства объекта
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (if (and obj
                   (vlax-property-available-p
                     (setq obj (_kpblc-conv-ent-to-vla obj))
                     property
                     ) ;_ end of vlax-property-available-p
                   ) ;_ end of and
            (setq res (vlax-get-property obj property))
            ) ;_ end of if
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x)
         (_kpblc-error-print
           (strcat "_kpblc-property-get :"
                   " obj->"
                   (_kpblc-conv-value-to-string
                     (if (vlax-property-available-p
                           (setq obj (_kpblc-conv-ent-to-vla obj))
                           'objectname
                           ) ;_ end of vlax-property-available-p
                       (vla-get-objectname obj)
                       obj
                       ) ;_ end of if
                     ) ;_ end of _kpblc-conv-value-to-string
                   " property->"
                   (_kpblc-conv-value-to-string property)
                   ) ;_ end of strcat
           x
           ) ;_ end of _kpblc-error-print
         ) ;_ end of lambda
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-get-text-point (ent / res)
                               ;|
*    Определение точки вставки одно- или многострочного текста
*    Параметры вызова:
*	ent	указатель на примитив
*    Примеры вызова:
(_kpblc-get-text-point (_kpblc-get-ent-with-type "*text" nil))
*    Возвращает точечную пару из DXF-кода и его значения.
|;
    (if
      (and (wcmatch (strcase (_kpblc-property-get ent 'objectname)) "ACDBTEXT")
           (/= (_kpblc-property-get ent 'alignment) 0)
           ) ;_ end of and
       (_kpblc-conv-vla-to-list (_kpblc-property-get ent 'textalignmentpoint))
       (_kpblc-conv-vla-to-list (_kpblc-property-get ent 'insertionpoint))
       ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-conv-vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (setq res (cond
                      ((= (type value) 'variant)
                       (_kpblc-conv-vla-to-list (vlax-variant-value value))
                       )
                      ((= (type value) 'safearray)
                       (if (>= (vlax-safearray-get-u-bound value 1) 0)
                         (vlax-safearray->list value)
                         ) ;_ end of if
                       )
                      (t value)
                      ) ;_ end of cond
                ) ;_ end of setq
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x) (_kpblc-error-print "_kpblc-conv-vla-to-list" x))
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-conv-selset-to-vla (selset)
                                   ;|
*    Функция преобразования набора, полученного через (ssget), в список
* vla-примитивов.
*    Параметры вызова:
*	selset	набор примитивов
*    Примеры вызова:
(_kpblc-conv-selset-to-vla (ssget))
|;
    (if selset
      (mapcar '_kpblc-conv-ent-to-vla
              (_kpblc-conv-selset-to-ename selset)
              ) ;_ end of mapcar
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-conv-selset-to-ename (selset)
                                     ;|
*    Функция преобразования набора, полученного через (ssget), в список
* ename-примитивов.
*    Параметры вызова:
*	selset	набор примитивов
*    Примеры вызова:
(_kpblc-conv-selset-to-ename (ssget))
|;
    (if selset
      (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-vla (ent_value / res)
                                ;|
*    Функция преобразования полученного значения в vla-указатель.
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в указатель. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-vla (entlast))
(_kpblc-conv-ent-to-vla (vlax-ename->vla-object (entlast)))
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (setq
            res
             (cond
               ((= (type ent_value) 'vla-object) ent_value)
               (t
                (vlax-ename->vla-object (_kpblc-conv-ent-to-ename ent_value))
                )
               ) ;_ end of cond
            ) ;_ end of setq
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x) (_kpblc-error-print "_kpblc-conv-ent-to-vla " x))
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-ename (ent_value / res)
                                  ;|
*    Функция преобразования полученного значения в ename
*    Параметры вызова:
*	ent_value	значение, которое надо преобразовать в примитив. Может
*			быть именем примитива, vla-указателем или просто
*			списком.
*			Если не принадлежит ни одному из указанных типов,
*			возвращается nil
*    Примеры вызова:
(_kpblc-conv-ent-to-ename (entlast))
(_kpblc-conv-ent-to-ename (vlax-ename->vla-object (entlast)))
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (setq res (cond
                      ((= (type ent_value) 'vla-object)
                       (vlax-vla-object->ename ent_value)
                       )
                      ((= (type ent_value) 'ename) ent_value)
                      ((= (type ent_value) 'str) (handent ent_value))
                      ((= (type ent_value) 'list) (cdr (assoc -1 ent_value)))
                      (t nil)
                      ) ;_ end of cond
                ) ;_ end of setq
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x) (_kpblc-error-print " _kpblc-conv-ent-to-ename " x))
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-conv-value-to-string (value /)
                                     ;|
*    конвертация значения в строку.
|;
    (if value
      (vl-princ-to-string value)
      ""
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-string-replace (string old_substr new_substr / pos)
                               ;|
*    Функция замены вхождений подстроки в исходную строку на новые.
* Регистрозависимо
*    Параметры вызова:
*	string		исходная строка
*	ols_substr	старая подстрока
*	new_substr	новая подстрока
*    Примеры вызова:
(_kpblc-string-replace "Здесь были ВаВася и ВаВаВаня. Вася" "Ва" "Бу")
	; "Здесь были Буся и Буня. Буся"
|;
    (if (/= old_substr new_substr)
      (while (setq pos (vl-string-search old_substr string))
        (setq string
               (strcat
                 (substr string 1 pos)
                 new_substr
                 (_kpblc-string-replace
                   (substr string (+ (strlen old_substr) pos 1))
                   old_substr
                   new_substr
                   ) ;_ end of _kpblc-string-replace
                 ) ;_ end of strcat
              ) ;_ end of setq
        ) ;_ end of while
      ) ;_ end of if
    string
    ) ;_ end of defun

  (defun _kpblc-get-msg-norm (msg)
                             ;|
*    Нормализация строки запроса для использования в запросах ком.строки
|;
    (vl-string-trim "][ :\n<>" msg)
    ) ;_ end of defun

  (defun _kpblc-error-print (func-name msg)
                            ;|
*    Функция вывода сообщения об ошибке для (_kpblc-error-catch)
*    Параметры вызова:
*	func-name	имя функции, в которой возникла ошибка
*	msg		сообщение об ошибке
|;
    (princ (strcat "\n ** "
                   (_kpblc-get-msg-norm
                     (_kpblc-string-replace
                       (strcase (_kpblc-conv-value-to-string func-name) t)
                       "error"
                       ""
                       ) ;_ end of _kpblc-string-replace
                     ) ;_ end of _kpblc-get-msg-norm
                   " ERROR #"
                   (if msg
                     (strcat
                       (_kpblc-conv-value-to-string (getvar "errno"))
                       ": "
                       (_kpblc-conv-value-to-string msg)
                       ) ;_ end of strcat
                     ": undefined"
                     ) ;_ end of if
                   "\n"
                   ) ;_ end of strcat
           ) ;_ end of princ
    (princ)
    ) ;_ end of defun

  (defun _kpblc-error-catch (protected-function
                             on-error-function
                             /
                             catch_error_result
                             )
                            ;|
*** Функция взята из книжной версии ruCAD'a без каких бы то ни было переделок,
*** кроме переименования.
*    Оболочка отлова ошибок.
*    Параметры вызова:
*	protected-function	- "защищаемая" функция
*	on-error-function	- функция, выполняемая в случае ошибки
|;
    (setq catch_error_result (vl-catch-all-apply protected-function))
    (if (and (vl-catch-all-error-p catch_error_result)
             on-error-function
             ) ;_ end of and
      (apply on-error-function
             (list (vl-catch-all-error-message catch_error_result))
             ) ;_ end of apply
      catch_error_result
      ) ;_ end of if
    ) ;_ end of defun

  (defun kpblc-conv-text-to-mtext (/ selset str mtext minp maxp source *error*)
                                  ;|
*    Функция преобразовывает несколько объектов однострочного и многострочного
* текста в один многострочный (форматирование многострочных текстов оставляется
* на месте).
* Порядок выбора примитивов роли не играет. Выравнивание однострочных текстов
* также не имеет значения.
*    Вставка нового примитива выполняется на текущий слой, с текущими установками.
*    Функция сделана для работы в мировой системе координат.
*    Параметры вызова:
*	нет
*    Примеры вызова:
(kpblc-conv-text-to-mtext)
|;

    (vla-startundomark *kpblc-activedoc*)
    (_kpblc-error-catch
      (function
        (lambda ()
          (if
            (setq
              selset (_kpblc-conv-selset-to-vla (ssget '((0 . "TEXT,MTEXT"))))
              ) ;_ end of setq
             (progn
               ;; Сортируем выбранные примитивы
               ;; Но перед сортировкой им надо сделать нормальные точки
               ;; вставки - меняем y для них по следующей методике:
               ;; Берем 1 элемент, с него получаем контрольную точку и
               ;; проверяем на совпадение у с остальными с точностью до
               ;; высоты текста. Потом то же самое со вторым, третьим и т.п.
               ;; Проходим только по следующим за "отбираемым примитивом".
               (foreach item selset
                 (foreach subitem (cdr (member item selset))
                   (if (equal
                         (cadr (_kpblc-get-text-point item))
                         (cadr (_kpblc-get-text-point subitem))
                         (vla-get-height item)
                         ) ;_ end of equal
                     ;; Меняем эту точку
                     (vla-put-insertionpoint
                       subitem
                       (vlax-3d-point
                         (list (car (_kpblc-get-text-point subitem))
                               (cadr (_kpblc-get-text-point item))
                               (caddr (_kpblc-get-text-point subitem))
                               ) ;_ end of list
                         ) ;_ end of vlax-3d-point
                       ) ;_ end of vla-put-InsertionPoint
                     ) ;_ end of if
                   ) ;_ end of foreach
                 ) ;_ end of foreach
               (setq selset (vl-sort
                              (vl-sort selset
                                       '(lambda (c d)
                                          (< (car (_kpblc-get-text-point c))
                                             (car (_kpblc-get-text-point d))
                                             ) ;_ end of <
                                          ) ;_ end of lambda
                                       ) ;_ end of vl-sort
                              '(lambda (a b)
                                 (> (cadr (_kpblc-get-text-point a))
                                    (cadr (_kpblc-get-text-point b))
                                    ) ;_ end of <
                                 ) ;_ end of lambda
                              ) ;_ end of vl-sort
                     ) ;_ end of setq
               (foreach item selset
                 (if (= (length selset) (length (member item selset)))
                   (setq str (vla-get-textstring item))
                   (setq str
                          (strcat
                            str
                            (if
                              (=
                                (cadr (_kpblc-get-text-point item))
                                (cadr
                                  (_kpblc-get-text-point
                                    (nth
                                      (1-
                                        (- (length selset)
                                           (length (member item selset))
                                           ) ;_ end of -
                                        ) ;_ end of 1-
                                      selset
                                      ) ;_ end of nth
                                    ) ;_ end of _kpblc-get-text-point
                                  ) ;_ end of caddr
                                ) ;_ end of =
                               "" ; вот здесь была вставка пробела
                               "\\P" ; а здесь вставка переноса абзаца. Не надо - сноси
                               ) ;_ end of if
                            (vla-get-textstring item)
                            ) ;_ end of strcat
                         ) ;_ end of setq
                   ) ;_ end of if
                 ) ;_ end of foreach
               (vla-getboundingbox (car selset) 'minp 'maxp)
               (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
                 ) ;_ end of setq
               (vla-put-visible mtext :vlax-false)
               (setq source
                      ((lambda (/ tmp)
                         (if
                           (and (not (vl-catch-all-error-p
                                       (vl-catch-all-apply
                                         '(lambda ()
                                            (setq tmp
                                                   (car
                                                     (entsel
                                                       "\nИсточник свойств <Первый элемент набора> : "
                                                       ) ;_ end of entsel
                                                     ) ;_ end of car
                                                  ) ;_ end of setq
                                            ) ;_ end of lambda
                                         ) ;_ end of vl-catch-all-apply
                                       ) ;_ end of VL-CATCH-ALL-ERROR-P
                                     ) ;_ end of not
                                tmp
                                (wcmatch (cdr (assoc 0 (entget tmp))) "*TEXT")
                                ) ;_ end of and
                            tmp
                            (car selset)
                            ) ;_ end of if
                         ) ;_ end of lambda
                       )
                     ) ;_ end of setq
               (foreach prop '("Alignment"         "Backward"
                               "Color"             "elevation"
                               "Fit"               "Height"
                               "HorizontalAlignment"
                               "HorizontalTextPosition"
                               "Invisible"         "Layer"
                               "Linetype"          "LinetypeScale"
                               "Lineweight"        "Normal"
                               "ObliqueAngle"      "ScaleFactor"
                               "StyleName"         "TextColor"
                               "TextGap"           "TextGenerationFlag"
                               "TextHeight"        "TextInside"
                               "TextInsideAlign"   "TextMovement"
                               "TextStyle"         "Thickness"
                               "Type"              "UpsideDown"
                               "Verify"            "VerticalAlignment"
                               "VerticalTextPosition"
                               "Visible"
                               )
                 (_kpblc-property-set
                   mtext
                   prop
                   (_kpblc-property-get source prop)
                   ) ;_ end of _kpblc-property-set
                 ) ;_ end of foreach
               (vla-put-visible mtext :vlax-true)
               (foreach item selset
                 (vla-erase item)
                 ) ;_ end of foreach
               ) ;_ end of progn
             ) ;_ end of if
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x)
         (if mtext
           (vla-erase mtext)
           ) ;_ end of if
         (_kpblc-error-print "kpblc-conv-text-to-mtext" x)
         ) ;_ end of lambda
      ) ;_ end of _kpblc-error-catch
    (vla-endundomark *kpblc-activedoc*)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
  (kpblc-conv-text-to-mtext)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.06.2008, 19:05
#28
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Суперкайф!!!!! Отлично работает. Огрооооомное спасибо Буду в Питере с меня ящик
skkkk вне форума  
 
Непрочитано 18.06.2008, 01:36
#29
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Алексей aka kpblc, обнаружил такую вещь: вертикальные мтексты в одну строку при объединении становятся горизонтальными и в несколько срок. Сложно поправить? Ну и, конечно, хочется, чтоб остальные тексты присоединялись к первому, а он оставался на месте. И думаю, в Готовые программы ему путь должен лежать....Славный лиспик
skkkk вне форума  
 
Непрочитано 19.06.2008, 01:15
#30
Кулик Алексей aka kpblc
Moderator

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


Образец бы (исходник + чего надо в результате)... А то я с трудом соображаю последнее время. Такого могу наваять, что потом фиг разберешь.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.06.2008, 03:28
#31
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Вот образец с пояснениями внутри
Вложения
Тип файла: dwg
DWG 2007
Чертеж.dwg (66.5 Кб, 1373 просмотров)
skkkk вне форума  
 
Непрочитано 20.06.2008, 00:59
#32
Кулик Алексей aka kpblc
Moderator

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


Просмотрел. Честно говоря, у меня сейчас головы не хватает на такую проработку Суть в том, что все выбранные тексты сортируются по точке вставки - сначала выбираются те, которые имеют одинаковую координату Y, и предполагается, что это одна строка. Все, что имеет Y меньше, является следующей строкой. То, что не учитывается угол поворота текста, в общем-то вытекает отсюда же (добавить можно, но результат будет неверным в общем случае). Надо по идее дополнительно выполнять анализ на угол поворота текста, но тут моментально вопрос: а что делать, если попало несколько текстов с разными углами поворота (например, 3 штуки с углом 30 градусов, 2 - с 90 градусами и 16 - с 0)?
Вторую часть увидеть увидел, но пока "как победить", еще не придумал. Спать сильно хочется
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.08.2008, 17:46
#33
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Алексей, а реально ли в принципе таким же образом, как в #27 объединять атрибуты внутри блока?
skkkk вне форума  
 
Непрочитано 11.08.2008, 22:36
#34
Кулик Алексей aka kpblc
Moderator

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


Это как?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.08.2008, 23:09
#35
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Выбираешь несколько атрибутов и превращаешь их в один. С именем первого, с содержимым из всех исходных....Ну или превратить их в один мтекст. Во вложении три красных объекта-текста (но лучше мтексты, т.к. мне нужно использовать индексы-степени). Каждый из них обрабатывается отдельно разными командами, а потом, в целях соблюдения нужных интервалов (количество знаков ведь может изменяться), их надо объединить в один текст. С помощью твоей программы я так и делал, но таскать эти куски неудобно, к тому же верхний связан с выноской. С группами тоже много движений. А вот выноска с блоком и атрибутами была бы удобнее на мой взгляд.
Я плохо знаю свойства атрибутов, и интересно, можно ли с ними проделать такие махинации?
Вложения
Тип файла: dwg
DWG 2007
Шаблон выноски.dwg (63.0 Кб, 1320 просмотров)
skkkk вне форума  
 
Непрочитано 17.08.2008, 04:26
#36
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


kpblc, лисп с #27 стал всегда теперь сдвигать объединенный текст (см. пример во вложении из #31, часть 2) Не подскажешь, что делать??
skkkk вне форума  
 
Непрочитано 18.08.2008, 21:48
#37
Кулик Алексей aka kpblc
Moderator

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


skkkk, а в каком конкретном месте? Скорее всего, дело в том, что мтексты имеют выравнивание не TopLetf вкупе с переналожением точек вставки.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.08.2008, 22:20
#38
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Раньше он корректно делал тот, что во вложении с пометкой "правильно", а теперь и его перестал (самый верхний в части 2, а результат обведен желтым кругом)
skkkk вне форума  
 
Непрочитано 18.08.2008, 22:23
#39
Кулик Алексей aka kpblc
Moderator

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


Ясно... Проблема в том, что надо, похоже, перепрописывать сортировку. Сейчас попробую...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.08.2008, 22:25
#40
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


А можешь туда еще добавить функцию смены цвета текста-результата?? Пожалуйста
skkkk вне форума  
 
Непрочитано 18.08.2008, 22:29
#41
Кулик Алексей aka kpblc
Moderator

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


Я не снимал изменение примитивов (если честно, думать лениво). Как вариант - аттач.
Вложения
Тип файла: lsp text2mtext.lsp (25.2 Кб, 256 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.08.2008, 05:42
#42
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


....сдвигаются...
skkkk вне форума  
 
Непрочитано 28.01.2014, 16:52
#43
AlexRudz

Конструктор
 
Регистрация: 02.10.2009
Сообщений: 122


Цитата:
Сообщение от zenon Посмотреть сообщение
Команда _txt2mtxt из Express.
Или _DSTP_CVTXT2MT из ToolPac
Правда, если выбирать рамкой то неизвестно в каком порядке будут идти слова и буквы
В 2013 автокаде команду _txt2mtxt убрали?
__________________
Свая, как и коса, не всегда находит на камень(с)
AlexRudz вне форума  
 
Непрочитано 28.01.2014, 16:54
1 | #44
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


Цитата:
Сообщение от AlexRudz Посмотреть сообщение
В 2013 автокаде команду _txt2mtxt убрали?
Эта команда из ExpressTools. Соответственно не зависит от версии, а только от наличия ET в дистрибутиве. У меня в 2013-м есть.
__________________
Век живи, век учись - ...
Bull вне форума  
 
Непрочитано 24.05.2020, 18:24
#45
nwepon


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я не снимал изменение примитивов (если честно, думать лениво). Как вариант - аттач.
Вложения text2mtext.lsp
При запуске команды Автокад 2014 пишет:
"Команда: TEXT2MTEXT
нет определения функции: VLA-ENDUNDOMARK"
Что делать?
nwepon вне форума  
 
Непрочитано 24.05.2020, 20:16
#46
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от nwepon Посмотреть сообщение
При запуске команды Автокад 2014 пишет:
"Команда: TEXT2MTEXT
нет определения функции: VLA-ENDUNDOMARK"
Что делать?
https://autolisp.ru/2010/06/09/no-fu...t-acad-object/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.05.2020, 21:08
#47
nwepon


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
https://autolisp.ru/2010/06/09/no-fu...t-acad-object/
Спасибо, но не помогает. Тоже самое пишет - нет определения функции
nwepon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Объединение разбитого на слова текста

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Привязка текста в размерах Piton AutoCAD 30 05.01.2017 00:58
Редактирование текста в AutoCAD2008 kkiak AutoCAD 7 01.10.2009 12:29
нужен лисп с заменой текста Rwb LISP 28 03.08.2008 23:57
Изменение форматированного текста посредством lisp Tramp LISP 4 03.03.2006 11:28