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

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

Преобразование однострочного текста в многострочный

Ответ
Поиск в этой теме
Непрочитано 24.10.2005, 14:08
Преобразование однострочного текста в многострочный
Sergk
 
инженер-проектировщик
 
Регистрация: 10.03.2005
Сообщений: 54

Такая проблема. Прислали проект, в котором записка , выполненная многострочным текстом взорвана и, естественно, тест стал однострочным. Сейчас необходимо записку править-в виде однострочного текста-проще пойти застрелиться. Отсюда вопрос: каким образом однострочный текст вернуть в многострочный или переконвертировать в любой текстовый редактор?
Просмотров: 110921
 
Непрочитано 30.07.2019, 09:33
| 1 #61
koMon


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


Цитата:
Сообщение от allar8 Посмотреть сообщение
Это ишо интересней - чем тупо пользоваться чужими наработками
Вот ключевая фраза! Мне написание этого лиспа было интересно)
koMon вне форума  
 
Непрочитано 30.07.2019, 09:34
#62
allar8


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


----- добавлено через 18 сек. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
Вот ключевая фраза! Мне написание этого лиспа было интересно)
Понимаю, Вас
allar8 вне форума  
 
Непрочитано 30.07.2019, 09:36
| 1 #63
koMon


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


Offtop: но интерес как и энтузиазм - продукты скоропортящиеся(
koMon вне форума  
 
Непрочитано 30.07.2019, 09:52
#64
allar8


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



Цитата:
Сообщение от koMon Посмотреть сообщение
Offtop: но интерес как и энтузиазм - продукты скоропортящиеся(
Это да
allar8 вне форума  
 
Непрочитано 30.07.2019, 17:43
1 | #65
koMon


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


Обновил #30. +углы
koMon вне форума  
 
Непрочитано 30.07.2019, 20:58
#66
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Обновил #30. +углы
Спасибо огромное, не устаю Вам говорить.!!!

----- добавлено через ~1 ч. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
Обновил #30
Вы талант - понравилась отдельно фишка с фильтрованным выбором только однострочников - круто. Спасибо ишо раз!

----- добавлено через ~11 ч. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
Обновил #30
Offtop: Интерес ишо не пропал у Вас? А то у меня ишо есть идея, но в "обратной" теме). Преобразование многострочного по аналогичному принципу в однострочный с сохранением полей))).

----- добавлено через ~12 ч. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
Offtop: Интерес ишо не пропал у Вас? А то у меня ишо есть идея, но в "обратной" теме). Преобразование многострочного по аналогичному принципу в однострочный с сохранением полей))).
Offtop: Или если для вас это уже не больно интересно - мож подскажете, что из вашего кода можно использовать для этого, если принцип кардинально не отличается) - сам буду вставать на путь истинный)

Последний раз редактировалось allar8, 31.07.2019 в 08:51.
allar8 вне форума  
 
Непрочитано 31.07.2019, 14:10
1 | #67
koMon


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


Цитата:
Сообщение от allar8 Посмотреть сообщение
понравилась отдельно фишка с фильтрованным выбором только однострочников - круто.
да это и не фишка - обычный ssget с аргументами)
Цитата:
Сообщение от allar8 Посмотреть сообщение
Интерес ишо не пропал у Вас? А то у меня ишо есть идея, но в "обратной" теме). Преобразование многострочного по аналогичному принципу в однострочный с сохранением полей))).
если задача частная. а именно многострочник - одна строка с полями и без форматирования во встроенном редакторе, то скорее всего её можно решить по-простому. код в общем смысле использовать можно, только нужно переделать функции и тело команды.
koMon вне форума  
 
Непрочитано 31.07.2019, 14:10
#68
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Обновил #30
А можно сделать так, чтоб при объединении в один мтекст разделяла запятыми. Ща вижу разделяет пробелами, т.е. как я понимаю можно киде то в программе этот пробел заменить на запятую, но есно вопрос киде) - не подскажете, заранее премного благодарен!

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
да это и не фишка - обычный ssget с аргументами)
Это я понял - у меня такие тож кнопки есть на каждый объект - но приятно что это тут присандалено) - сам бы мож и недогадался) - рутинил бы чуть-чуть)

----- добавлено через ~9 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
если задача частная. а именно многострочник - одна строка с полями и без форматирования во встроенном редакторе, то скорее всего её можно решить по-простому. код в общем смысле использовать можно, только нужно переделать функции и тело команды.
Вобщем ясно - надо поразбираться.
Если у Вас интереса не появится - запишу это в копилку своих идей) для дальнейшей самостоятельной реализации в будущем)

----- добавлено через ~12 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
а именно многострочник - одна строка с полями и без форматирования во встроенном редакторе, то скорее всего её можно решить по-простому.
да именно это - просто чтоб также как взорвать но сохранить поля. Как можно по простому? - сориентируйте плиз. Или тут именно то, что Ваш код надо перебирать, и не обойтись парой строчек на кнопке в макросе?)

Последний раз редактировалось allar8, 31.07.2019 в 14:26.
allar8 вне форума  
 
Непрочитано 31.07.2019, 14:27
1 | #69
koMon


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


Цитата:
Сообщение от allar8 Посмотреть сообщение
А можно сделать так, чтоб при объединении в один мтекст разделяла запятыми.
заменить что было на
Код:
[Выделить все]
 (prompt "Нажмите на разделитель текстов. <Enter>, <Space> <,>")
добавить после
Код:
[Выделить все]
 									
(
										(equal gread_data (quote (2 13)))  														; delimiter is set to <Carrige Return>
											(setq setting_delimiter t
												  text_delimiter "\\P"
											)
									)
Код:
[Выделить все]
 (
										(equal gread_data (quote (2 44)))  														; delimiter is set to <Comma>
											(setq setting_delimiter t
												  text_delimiter ", "
											)
									)
koMon вне форума  
 
Непрочитано 31.07.2019, 14:30
#70
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
заменить что было на

Цитата:
Сообщение от koMon Посмотреть сообщение
добавить после
Спасибо!
allar8 вне форума  
 
Непрочитано 31.07.2019, 14:33
#71
koMon


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


Цитата:
Сообщение от allar8 Посмотреть сообщение
Как можно по простому? - сориентируйте плиз
надо посмотреть
koMon вне форума  
 
Непрочитано 31.07.2019, 14:35
#72
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
надо посмотреть
Понял

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
view sourceprint?1(prompt "Нажмите на разделитель текстов. <Enter>, <Space> <,>")
Кстати - тока ща - обратил внимание на эту фишку с выбором разделителя, до этого бездумно и без понимания щелкал spacе) - терь с пониманием буду делать - тож круто.
Мне точно пригодится. Спасибо!

----- добавлено через ~28 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
(prompt "Нажмите на разделитель текстов. <Enter>, <Space> <,>")
Начал вкуривать - сделал под себя - убрал Space, Enterром ставлю запятую - для моей задачи мине это в самый раз
Спасибо!

----- добавлено через ~1 ч. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
Начал вкуривать - сделал под себя - убрал Space, Enterром ставлю запятую - для моей задачи мине это в самый раз
Спасибо!
Вообще конечно мине бы надо и без ентера) - для минимизации операций и нажатий).
Поколдавал (если это так можно назвать - для меня это пока колдовство)))) с вашим первоначальным вариантом - где выбор рамкой собирал в один мтекст.
Но там программа в при выборе рамкой, например, вертикальных один под другим однострочников собирала их в обратном порядке (первый нижний, последний верхний) или, вроде, по алфавиту).
Собственно - частично вроде получил что хотел для этой задачи -
выбор рамкой вертикальных однострочников (один под одним) и сбор всего выбранного в один мтекст и разделение запятой в одно нажатие без выбора разделителя.
Но как понимаете в обратном порядке))).
Подскажите плиз, чтоб было по порядку - начиная с верхнего и оканчивая нижним. Заранее спасибо!
Я про ентот Ваш код (переименовал команду))
Код:
[Выделить все]
 ;**************************************************************************************************************************************************************
;                                                               Команда t3m
;                                                 Конвертирует выбранные горизонтальные Текст(ы) в мультитекст(ы).
;                                                 Каждый выбранный текст - строка мультитекста.
;                                                 Параметры мультитекста задаются по первому выбранному тексту.
;                                                                  koMon, июль 2019
;**************************************************************************************************************************************************************
                                                                 (vl-load-com)
;**************************************************************************************************************************************************************
(defun c:t3m ( /
                            Command_On command_not_cancelled Current_Text_Alignmentpoint Current_Text_Height Current_Text_Insertionpoint Half_Current_Text_Length
                            Mtext_Dxt_Size Mtext_Dxt_Style Mtext_Object Mtext_Width String_List Text_Alignment Text_Dxf Text_List Text_Object Text_Sset
                       )
    (setq command_not_cancelled t)
    (while (and command_not_cancelled
                (progn
                        (setq text_sset (vl-catch-all-apply 'ssget (list (list (cons 0 "TEXT")))))
                        (cond
                            (
                                (null text_sset)
                                    (setq command_on nil)
                            )
                            (
                                (vl-catch-all-error-p text_sset)
                                    (setq command_on nil
                                          command_not_cancelled nil
                                    )
                            )
                            (
                                text_sset
                                    (setq text_list (vl-remove-if '(lambda (list_member)
                                                                                (/= 'ename (type list_member))
                                                                   )
                                                                   (mapcar 'cadr (ssnamex text_sset))
                                                    )
                                          command_on t
                                    )
                                    nil
                            )
                        )
                        ;********************************************************************
                        (cond
                            (
                                command_on
                                    (setq mtext_width 0.0
                                          mtext_dxt_size (assoc 40 (entget (car text_list)))
                                          mtext_dxt_style (assoc 7 (entget (car text_list)))
                                          string_list '()
                                   )
                                    (foreach text_entity text_list
                                        (setq string_list (cons (vla-fieldcode (vlax-ename->vla-object text_entity)) string_list)
                                              string_list (cons ", " string_list)
                                              text_dxf (subst mtext_dxt_size (assoc 40 (entget text_entity)) (entget text_entity))
                                              text_dxf (subst mtext_dxt_style (assoc 7 text_dxf) text_dxf)
                                              mtext_width (max mtext_width (caadr (textbox text_dxf)))
                                        )
                                    )
                                    (setq string_list (reverse (cdr string_list))
                                          text_object (vlax-ename->vla-object (car text_list))
                                          current_text_insertionpoint (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint text_object)))
                                          current_text_height (vla-get-height text_object)
                                          half_current_text_length (/ (- (caadr (textbox (entget (car text_list)))) (caar (textbox (entget (car text_list))))) 2.0)
                                          mtext_object (vla-addmtext (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point '(0 0 0)) 0 "")
                                    )
                                    (foreach string string_list
                                        (vla-put-textstring mtext_object (strcat (vla-fieldcode mtext_object) string))
                                    )
                                    (cond
                                        (
                                            (member (setq text_alignment (vla-get-alignment text_object)) '(0))
                                                    (vla-put-attachmentpoint mtext_object (1+ text_alignment))
                                                    (vla-put-insertionpoint mtext_object (vlax-3d-point (list (+ (car current_text_insertionpoint) (caar (textbox (entget (car text_list)))))
                                                                                                              (+ current_text_height (cadr current_text_insertionpoint))
                                                                                                              0.0
                                                                                                         )
                                                                                          )
                                                    )
                                        )
                                        (
                                            (member text_alignment '(1 2))
                                                    (vla-put-attachmentpoint mtext_object (cdr (assoc text_alignment '((1 . 2) (2 . 3)))))
                                                    (setq current_text_alignmentpoint (vlax-safearray->list (vlax-variant-value (vla-get-textalignmentpoint text_object))))
                                                    (vla-put-insertionpoint mtext_object (vlax-3d-point (list (car current_text_alignmentpoint)
                                                                                                              (+ current_text_height (cadr current_text_alignmentpoint))
                                                                                                              0.0
                                                                                                        )
                                                                                          )
                                                    )
                                        )
                                        (
                                            (member (setq text_alignment (vla-get-alignment text_object)) '(3 4 5 6))
                                                    (vla-put-attachmentpoint mtext_object 1)
                                                    (vla-put-insertionpoint mtext_object (vlax-3d-point (list (+ (car current_text_insertionpoint) (caar (textbox (entget (car text_list)))))
                                                                                                              (+ current_text_height (cadr current_text_insertionpoint))
                                                                                                              0.0
                                                                                                        )
                                                                                          )
                                                    )
                                        )
                                        (
                                            (member text_alignment '(7 8 9 10 11))
                                                    (vla-put-attachmentpoint mtext_object (cdr (assoc text_alignment '((7 . 2) (8 . 3) (9 . 4) (10 . 5) (11 . 6)))))
                                                    (setq current_text_alignmentpoint (vlax-safearray->list (vlax-variant-value (vla-get-textalignmentpoint text_object))))
                                                    (vla-put-insertionpoint mtext_object (vlax-3d-point (list (car current_text_alignmentpoint)
                                                                                                              (cadr current_text_alignmentpoint)
                                                                                                              0.0
                                                                                                        )
                                                                                          )
                                                    )
                                        )
                                        (
                                            (member text_alignment '(12 13 14))
                                                    (setq current_text_alignmentpoint (vlax-safearray->list (vlax-variant-value (vla-get-textalignmentpoint text_object))))
                                                    (vla-put-attachmentpoint mtext_object (cdr (assoc text_alignment '((12 . 7) (13 . 8) (14 . 9)))))
                                                    (vla-put-insertionpoint mtext_object (vlax-3d-point (list (car current_text_alignmentpoint)
                                                                                                              (cadr current_text_insertionpoint)
                                                                                                              0.0
                                                                                                        )
                                                                                          )
                                                    )
                                        )
                                    )
                                    (foreach apply_property '(layer linetype lineweight linetypescale truecolor stylename height)
                                        (vl-catch-all-apply (read (strcat "vla-put-" (vl-princ-to-string apply_property)))
                                                            (list mtext_object (eval (list (read (strcat "vla-get-" (vl-princ-to-string apply_property))) text_object)))
                                        )
                                    )
;                                    (entmod (subst (cons 41 mtext_width) (cons 41 0.0) (entget (vlax-vla-object->ename mtext_object))))
                                    (foreach text_entity text_list
                                        (vla-erase (vlax-ename->vla-object text_entity))
                                    )
                                    (vlax-release-object Mtext_Object)
                                    (vlax-release-object Text_Object)
                                    (if (= 1 (length text_list))
                                        (princ "\nТекст конвертирован")
                                        (princ "\nТексты конвертированы")
                                    )
                            )
                            (
                                t
                                    (if (null text_sset)
                                        (princ "\nНичего не выбрано")
                                        (princ "\nВыполнение команды прекращено")
                                    )
                            )
                        )
                        ;********************************************************************
                    )
            )
    )
    (princ)
)
;**************************************************************************************************************************************************************
----- добавлено через ~27 мин. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
Я про ентот Ваш код (переименовал команду))
Или может с кодом из #24 проще - та упорядочивает как надо - но там не похожий видимо принцип с Вашей программой - я еще не знаю куда там поставить разделитель запятую)))

Последний раз редактировалось allar8, 31.07.2019 в 16:32.
allar8 вне форума  
 
Непрочитано 31.07.2019, 17:52
1 | #73
koMon


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


если нужен фиксированный разделитель и всё это вешать на кнопку, можно сделать к команде параметр и тогда на кнопку вешать лисп вида (c:text_to_mtext ", ").
или сделать вместо команды функцию и вешать на кнопку (text_to_mtext ", ") и так для каждого разделителя
koMon вне форума  
 
Непрочитано 31.07.2019, 18:59
#74
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
если нужен фиксированный разделитель и всё это вешать на кнопку, можно сделать к команде параметр и тогда на кнопку вешать лисп вида (c:text_to_mtext ", ").
или сделать вместо команды функцию и вешать на кнопку (text_to_mtext ", ") и так для каждого разделителя
Но еще есть у меня один тип задач.
первые две решаются с помощью вашей последней программы из #30:
1 - выбор рамкой и создание отдельных мтекстов на своих местах
2 - последовательный выбор - т.е. выбор в нужном порядке каждого односточника и сбор в один мтекст в соответствии с последовательностью выбора
3 - выбор рамкой и сбор в один мтекст
Поподробней о 3:
выбор рамкой вертикально расположенных друг над другом однострочников и сбор в один мтекст в последовательности сверху вниз через запятую.

третий тип задач с помошью text_to_mtext ", ") я так понимаю требует также последовательного выбора каждого однострочника, а хотелось бы рамкой
Т.е. 3 тип задач не получится включить в Вашу программу, т.к. при выборе рамкой программа решает 1-ую задачу, т.е. отдельные мтексты на своих местах
Поэтому я и вспомнил о вашем первоначальном коде - там как раз был выбор рамкой, и сбор всего в один мтекст, но была проблема с упорядочиванием (по алфавиту),
а хотелось бы чтоб программа упорядочивала и разделялал запятой в порядке слева направо согласно уменьшению координаты Y исходных однострочников, т.е. как бы аналог транспонирования.
Вот пример:
Исходные однострочники:
1111
2222
3333
5555
9999
4444

Результат, собранного мтекста, при выборе рамкой или через бвыбор исходных однострочников:
1111, 2222, 3333, 5555, 9999, 4444

----- добавлено через ~58 мин. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
3 - выбор рамкой и сбор в один мтекст
Близок к цели) - нашел таки в #24 "\\P" - заменил на ", "
Осталось там найти как сделать нулевой ширину результирующего мтекста там и можно ли?

----- добавлено через ~18 мин. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
Осталось там найти как сделать нулевой ширину результирующего мтекста там и можно ли?
Не ща пока сам не разберусь - нужна подсказка. Подскажите кто нить как в #24 результат сделать с нулевой шириной?)

Последний раз редактировалось allar8, 31.07.2019 в 20:32.
allar8 вне форума  
 
Непрочитано 31.07.2019, 22:12
1 | #75
koMon


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


Цитата:
Сообщение от allar8 Посмотреть сообщение
как в #24 результат сделать с нулевой шириной?)
(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
koMon вне форума  
 
Непрочитано 31.07.2019, 22:13
#76
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
(abs (- (caadr (_kpblc-get-boundingbox-list selset))
(caar (_kpblc-get-boundingbox-list selset))
) ;_ end of -
) ;_ end of abs
выделенное красным заменить на 0
Спасибо! Счастье есть - его не может не быть)))

Последний раз редактировалось allar8, 31.07.2019 в 22:21.
allar8 вне форума  
 
Непрочитано 06.09.2019, 13:07
#77
allar8


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


Цитата:
Сообщение от allar8 Посмотреть сообщение
Спасибо! Счастье есть - его не может не быть)))
Оказывается код в #24 ишо и отдельные многострочные в один многострочный умеет собирать.
Ишо раз спасибо Кулику Алексею!
allar8 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Преобразование однострочного текста в многострочный

Реклама i