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

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

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

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

Такая проблема. Прислали проект, в котором записка , выполненная многострочным текстом взорвана и, естественно, тест стал однострочным. Сейчас необходимо записку править-в виде однострочного текста-проще пойти застрелиться. Отсюда вопрос: каким образом однострочный текст вернуть в многострочный или переконвертировать в любой текстовый редактор?
Просмотров: 98451
 
Непрочитано 24.10.2005, 14:22
1 | #2
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,337


Команда "Convert Text to Mtext" из Express Tools
с командной строки
Код:
....
Хмурый вне форума  
 
Непрочитано 24.10.2005, 14:32
#3
Кулик Алексей aka kpblc
Moderator

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


Только эта команда не отслеживает нескольких вещей:
1. Переводы строк - сносятся.
2. Текст добавляется в процессе выбора, а не по точкам вставки.
Можно, наверное, и свое написать, только некогда
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.10.2005, 14:33 Преобразование однострочного текста в многострочный
#4
Sergk

инженер-проектировщик
 
Регистрация: 10.03.2005
Сообщений: 54


Огромное спасибо, а про Express Tools забыл, стыдно
Sergk вне форума  
 
Непрочитано 24.10.2005, 14:34
#5
alisa


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


Я обычно пользуюсь в таких случаях замечательной программкой, которая была здесь на форуме: MtmdEdit 2.2. Можно задавать шаг строк по высоте и менять высоту шрифта. Она удобна еще и тем, что сразу видишь на экране результаты правки. Пользуюсь случаем сказать спасибо Автору (Правда, кажется, работает под ACAD 2002 и 2004).
Надо выделить всю тучу одиночных строк и править текст полностью. Можно тупо выстроить весь текст в одну строку и enter'ом разбивать так, как надо (как в Word). Правда, текст все равно будет однострочным, любую строку после правки можно удалять и править отдельно. Примитивно, конечно, но иногда это единственный выход.
alisa вне форума  
 
Автор темы   Непрочитано 24.10.2005, 14:40
#6
Sergk

инженер-проектировщик
 
Регистрация: 10.03.2005
Сообщений: 54


Переводы строк уже не такая большая проблема, это все лечится просто. Кад- 2005, да и текст мы редактируем в Word, потом в кад вставляем. Спасибо всем, кто откликнулся.
Sergk вне форума  
 
Непрочитано 24.10.2005, 14:44
#7
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,337


А вот переводы строк и порядок следования строк- можно выбрать из контекстного меню . Вызываешь программу
Цитата:
_TXT2MTXT
и затем правой клавишей мыши или "Enter" открываешь опции команды... (в 2004-ом)
Хмурый вне форума  
 
Непрочитано 24.10.2005, 14:51
#8
Денис Флюстиков


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


Посмотри:
http://dwg.ru/dwl/250
где есть функция перевода Текст в МТекст с учетом высоты букв, цвета каждой строчки и дистанции между ними.
Денис Флюстиков вне форума  
 
Непрочитано 24.10.2005, 15:04
#9
Кулик Алексей aka kpblc
Moderator

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


> Хмурый : Хехе, и я теперь на эти грабли наступил - напрочь забыв о ком.строке
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.10.2005, 15:05
#10
Sergk

инженер-проектировщик
 
Регистрация: 10.03.2005
Сообщений: 54


Про контекстное меню спасибо, если честно не знал, в 2005 каде работает великолепно, теперь проблем нет совсем.
Sergk вне форума  
 
Непрочитано 02.04.2012, 12:37
#11
CHILD_11


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


апну темку.

пользуюсь TXT2MTXT

вопрос: можно ли сделать так, чтобы при выделении нескольких надписей простого текста они преобразовывались в такое же количество надписей многострочного текста?

а данная команда объединит их в одну многострочную надпись.
CHILD_11 вне форума  
 
Непрочитано 12.05.2012, 05:10
#12
evgeny-86


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


поддержу CHILD_11. Иногда бывает нужно именно раздельное преобразование текста в мтекст. ждем-с реализации.
evgeny-86 вне форума  
 
Непрочитано 12.05.2012, 16:42
4 | #13
VVA

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


Цитата:
Сообщение от evgeny-86 Посмотреть сообщение
ждем-с реализации.
Используя Express'овский TXT2MTXT
Код:
[Выделить все]
(defun c:T2MT (/ ss cnt )
  ;;;Convert each text to mtext use express tools command txt2mtxt
  (and
  (setq cnt -1 ss (ssget '((0 . "text"))))
  (repeat (sslength ss)
     (command "_.txt2mtxt" (ssname ss (setq cnt (1+ cnt))) "")
    )
  (command "_draworder" ss "" "_f")
  )
  (princ)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.12.2014, 10:04
#14
Rudic

Инженер ТГВ
 
Регистрация: 30.04.2013
Чебоксары
Сообщений: 3
<phrase 1=


Доброго дня! Вставил я этот код.
Команда Т2МТ срабатывает и предлагает выбрать объекты, но после нажатия ентер не происходит преобразования. Пишет: Имя объекта: FFA701F0.
Я может что-то делаю неправильно?
Rudic вне форума  
 
Непрочитано 29.12.2014, 10:37
#15
VVA

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


Цитата:
Сообщение от Rudic Посмотреть сообщение
но после нажатия ентер не происходит преобразования
Эта команда использует Express Tools
Скорее всего, он у тебя не установлен. Набери в командной строке txt2mtxt. Работает?
PS. Проверил #13 на AutoCAD 2015 SP2. Код рабочий
Еще ссылки на команды преобразования текста в МТЕКСТ
Text2MText Upgraded
Help with TEXT
Convert selected texts to Mtexts individually
Improved Text to Mtext
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.12.2014, 10:59
#16
Rudic

Инженер ТГВ
 
Регистрация: 30.04.2013
Чебоксары
Сообщений: 3
<phrase 1=


Я установил Express Tools. Все команды есть, но именно команды txt2mtxt нету. Что делать я не знаю.
Может попробовать вытащить tools с другого автокада?
Rudic вне форума  
 
Непрочитано 29.12.2014, 11:25
#17
Кулик Алексей aka kpblc
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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.12.2014, 20:35
#18
VVA

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


Цитата:
Сообщение от Rudic Посмотреть сообщение
Я установил Express Tools. Все команды есть, но именно команды txt2mtxt нету. Что делать я не знаю.
Может попробовать вытащить tools с другого автокада?
из справки
Цитата:
Express menu: Text Convert Text to Mtext
Command Command line: TXT2MTXT
Files Files: leaderex.arx
Поищи leaderex.arx для своей версии Автокада
Еще версия от Dotsoft (без проверки)
Код:
[Выделить все]
; ----------------------------------------------------------------------
;                   (Converts Stack of TEXT to MTEXT)
;            Copyright (C) 1998 DotSoft, All Rights Reserved
;                      Website: www.dotsoft.com
; ----------------------------------------------------------------------
; DISCLAIMER:  DotSoft Disclaims any and all liability for any damages
; arising out of the use or operation, or inability to use the software.
; FURTHERMORE, User agrees to hold DotSoft harmless from such claims.
; DotSoft makes no warranty, either expressed or implied, as to the
; fitness of this product for a particular purpose.  All materials are
; to be considered ‘as-is’, and use of this software should be
; considered as AT YOUR OWN RISK.
; ----------------------------------------------------------------------

(defun col2str (inp)
  (cond
    ((= inp nil)(setq ret "BYLAYER"))
    ((= inp 256)(setq ret "BYLAYER"))
    ((= inp 0)(setq ret "BYBLOCK"))
    ((and (> inp 0)(< inp 255))(setq ret (itoa inp)))
    (t nil)
  )
)

(defun savprop ()
  (setq clayer (getvar "CLAYER"))
  (setq cecolor (getvar "CECOLOR"))
  (setvar "CECOLOR" "BYLAYER")
  (setq celtype (getvar "CELTYPE"))
  (setvar "CELTYPE" "BYLAYER")
  (setq thickness (getvar "THICKNESS"))
  (setvar "THICKNESS" 0)
  (if (>= (atoi (getvar "ACADVER")) 13)
    (progn
      (setq celtscale (getvar "CELTSCALE"))
      (setvar "CELTSCALE" 1.0)
    )
  )
)

(defun resprop ()
  (if (>= (atoi (getvar "ACADVER")) 13)
    (setvar "CELTSCALE" celtscale)
  )
  (setvar "THICKNESS" thickness)
  (setvar "CELTYPE" celtype)
  (setvar "CECOLOR" cecolor)
  (setvar "CLAYER" clayer)
)

(defun textrect (tent / ang sinrot cosrot t1 t2 p1 p2 p3 p4)
  (setq p0 (cdr (assoc 10 tent))
    ang (cdr (assoc 50 tent))
    sinrot (sin ang)
    cosrot (cos ang)
    t1 (car (textbox tent))
    t2 (cadr (textbox tent))
    p1 (list (+ (car p0)
       (- (* (car t1) cosrot) (* (cadr t1) sinrot)))
       (+ (cadr p0)
       (+ (* (car t1) sinrot) (* (cadr t1) cosrot))))
    p2 (list (+ (car p0)
       (- (* (car t2) cosrot) (* (cadr t1) sinrot)))
       (+ (cadr p0)
       (+ (* (car t2) sinrot) (* (cadr t1) cosrot))))
    p3 (list (+ (car p0)
       (- (* (car t2) cosrot) (* (cadr t2) sinrot)))
       (+ (cadr p0)
       (+ (* (car t2) sinrot) (* (cadr t2) cosrot))))
    p4 (list (+ (car p0)
       (- (* (car t1) cosrot) (* (cadr t2) sinrot)))
       (+ (cadr p0)
       (+ (* (car t1) sinrot) (* (cadr t2) cosrot))))
  )
  (list p1 p2 p3 p4)
)

(defun C:TXT2MTXT ( / mwid dset ibrk bitm bent sset rect mlay mcol mlst
                      bins bang tang nins num ndis chnd cent nhnd nstr
                      str pt1 pt2 pt3 dis dvx dvy dvz new)
  (if (< (atoi (getvar "ACADVER")) 13)
    (alert "This Function Requires\nRelease 13 or Higher")
    (progn
      (setq cmdecho (getvar "CMDECHO"))
      (setvar "CMDECHO" 0)
      (command "_.UNDO" "_G")
      (setq mwid 0.0)
      (setq dset (ssadd))
      ;
      (initget "Y N")
      (setq tmp (getkword "\nDS> Include Line Breaks <Y>/N: "))
      (if (/= tmp "N")(setq ibrk "Y")(setq ibrk "N"))
      ;
      (setq bitm (car (entsel "\nDS> Pick Base String: ")))
      (setq bent (entget bitm))
      (setq rect (textrect bent))
      (setq chk (distance (car rect)(cadr rect)))
      (if (> chk mwid)(setq mwid chk))
      ;
      (if (= "TEXT" (cdr (assoc 0 bent))) 
        (progn
          (redraw bitm 3)
          (princ "\nDS> Select Remaining Text: ")
          (setq sset (ssget '((0 . "TEXT"))))
          (if sset
            (progn
              (setq rect (textrect bent))
              (setq orig rect)
              (setq mlay (cdr (assoc 8 bent)))
              (setq mcol (cdr (assoc 62 bent)))
              (setq mlst (list (cdr (assoc 1 bent))))
              ;
              (if (> (cdr (assoc 72 bent)) 0)
                (setq bins (cdr (assoc 11 bent)))
                (setq bins (cdr (assoc 10 bent)))
              )
              (setq bang (cdr (assoc 50 bent)))
              (setq tang (- bang (/ PI 2)))
              (setq nins bins)
              (ssdel bitm sset)
              (while (> (sslength sset) 0)
                (setq num (sslength sset) itm 0)
                (setq ndis 99999999.9)
                (while (< itm num)
                  (setq chnd (ssname sset itm))
                  (setq cent (entget chnd))
                  (if (> (cdr (assoc 72 cent)) 0)
                    (setq cins (cdr (assoc 11 cent)))
                    (setq cins (cdr (assoc 10 cent)))
                  )
                  (setq cdis (distance bins cins))
                  (if (< cdis ndis)
                    (setq ndis cdis nhnd chnd nent cent)
                  )
                  (setq itm (1+ itm))
                )
                (setq dset (ssadd nhnd dset))
                (ssdel nhnd sset)
                ;
                (setq rect (textrect nent))
                (setq chk (distance (car rect)(cadr rect)))
                (if (> chk mwid)(setq mwid chk))
                ;
                (setq nstr (cdr (assoc 1 nent)))
                (setq mlst (append mlst (list nstr)))
              )
              ;
              (entdel bitm)
              (setq num (sslength dset) itm 0)
              (while (< itm num)
                (setq hnd (ssname dset itm))
                (entdel hnd)
                (setq itm (1+ itm))
              )
              ;
              (savprop)
              (setvar "CLAYER" mlay)
              (if (/= mcol nil)
                (setvar "CECOLOR" (col2str mcol))
              )
              (setq mwid (+ mwid (* mwid 0.025)))
              (setq pt1 (car orig))
              (setq pt2 (cadr orig))
              (setq dis (distance pt1 pt2))
              (setq dvx (/ (- (car pt2)(car pt1)) dis))
              (setq dvy (/ (- (cadr pt2)(cadr pt1)) dis))
              (setq pt3 (list dvx dvy 0.0))
              (setq nins (list (car (cadddr orig))
                         (cadr (cadddr orig))
                         (nth 2 (cdr (assoc 10 bent)))))
              ;
              (setq new '((0 . "MTEXT")(100 . "AcDbEntity")(100 . "AcDbMText")))
              (setq new (append new (list (assoc 7 bent))))
              (setq new (append new (list (assoc 8 bent))))
              (setq new (append new (list (cons 10 nins))))
              (setq new (append new (list (cons 11 pt3))))
              (foreach lin mlst
                (if (= ibrk "Y")
                  (if (/= lin (last mlst))
                    (setq lin (strcat lin "\\P"))
                  )
                  (setq lin (strcat lin " "))
                )
                (setq new (append new (list (cons 1 lin))))
              )
              (setq new (append new (list (assoc 40 bent))))
              (setq new (append new (list (cons 41 mwid))))
              (setq new (append new (list (cons 71 1))))
              (setq new (append new (list (cons 72 1))))
              (entmake new)
              (resprop)
              ;
              (setq sset nil)
              (setq dset nil)
              (setq lst nil)
              (command "_.UNDO" "_E")
              (setvar "CMDECHO" cmdecho)
            )
            (redraw bitm 4)
          )
        )
      )
    )
  )
  (setq sset nil)
  (setq mlst nil)
  (princ)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.05.2017, 10:39
#19
alex2214


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


В 2018 автокаде появилась команда объединить текствмтекст
alex2214 вне форума  
 
Непрочитано 26.05.2017, 10:48
#20
Кулик Алексей aka kpblc
Moderator

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


Она в ЕТ уже как минимум с 2000 версии.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.05.2017, 11:15
#21
alex2214


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Она в ЕТ уже как минимум с 2000 версии.
Это то понятно, а сейчас она в базовой версии, без установки ET. Удобно
alex2214 вне форума  
 
Непрочитано 26.05.2017, 11:16
#22
Кулик Алексей aka kpblc
Moderator

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


Не проверял, но если она такая же, как была и в ЕТ, то чертовски неудобная штука.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.02.2019, 15:45
#23
allar8


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


вот тоже нормальный лиспик
Вложения
Тип файла: lsp t2m.lsp (849 байт, 133 просмотров)
allar8 вне форума  
 
Непрочитано 19.02.2019, 16:53
2 | #24
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от allar8 Посмотреть сообщение
вот тоже нормальный лиспик
... И чем оно отличается от стандартного? По-моему, точно так же последовательность выбора определяет последовательность добавления строк. И вот чего я не увидел - так это того, что будет с новым объектом, если количество символов превысит 255.
Очень давно я сделал альтернативу: https://forum.dwg.ru/showpost.php?p=162618&postcount=21 - но, по-моему, она никому нафиг не упала.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.07.2019, 08:37
#25
allar8


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


Лиспы тут хорошие, но есть у них у всех один недостаток - поля убивают. Мож озадачивался кто этим тоже?
allar8 вне форума  
 
Непрочитано 26.07.2019, 10:31
1 | #26
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
Сообщение от allar8 Посмотреть сообщение
Лиспы тут хорошие, но есть у них у всех один недостаток - поля убивают. Мож озадачивался кто этим тоже?
в ЛИСПе по ссылке из #24 заменить все vla-get-textstring на vla-fieldcode.
Только что попробовал, работает. Разумеется, поля должны ссылаться на какие-то сторонние объекты, а не на исходные однострочные тексты, из которых клеится Мтекст. И которые после склейки удаляются.
kp+ вне форума  
 
Непрочитано 26.07.2019, 11:02
#27
allar8


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
в ЛИСПе по ссылке из #24 заменить все vla-get-textstring на vla-fieldcode.
Только что попробовал, работает. Разумеется, поля должны ссылаться на какие-то сторонние объекты, а не на исходные однострочные тексты, из которых клеится Мтекст. И которые после склейки удаляются.
Спасибо большое!
а вот к вложению в #23 это можно как нить присандалить?
а то в #24 - это аналог, я так понял, экспрессовской команды - она заливает все в один мтекст. Но только экспрессовкая мне больше удобна, если нужно ее именно использование
кстати в каком файле находится txt2mtxt в составе экпресса, не подскажете?
но иногда надо чтобы делались отдельные мтексты из отдельных однострочных текстов
во вложении лисп, который так делает, но в нем нету vla-get-textstring

Последний раз редактировалось allar8, 26.07.2019 в 11:19.
allar8 вне форума  
 
Непрочитано 26.07.2019, 11:18
1 | #28
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
Сообщение от allar8 Посмотреть сообщение
во вложении лисп, который делает отдельные мтексты из отдельных однострочных текстов, но в нем нету vla-get-textstring
Нету, потому что задача решена другими средствами.

Цитата:
Сообщение от allar8 Посмотреть сообщение
а вот к вложению в #23 это можно как нить присандалить?...
переписать полностью на базе Vla-функций. Наверное, проще как-то перебрать ЛИСП из #24, но заменой одной функции на другую это не ограничится, сам алгоритм работы менять надо.
kp+ вне форума  
 
Непрочитано 26.07.2019, 11:20
#29
allar8


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
переписать полностью на базе Vla-функций. Наверное, проще как-то перебрать ЛИСП из #24, но заменой одной функции на другую это не ограничится, сам алгоритм работы менять надо.
Ну или так, Понял. Лан мож разберусь как нить. Спасибо

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от kp+ Посмотреть сообщение
переписать полностью на базе Vla-функций. Наверное, проще как-то перебрать ЛИСП из #24, но заменой одной функции на другую это не ограничится, сам алгоритм работы менять надо.
Мож со стандартной txt2mtxt (она мне больше по душе чем из #24) в составе экпресса такое провернуть? не подскажете в каком файле она находится? - чет не могу найти

----- добавлено через ~12 мин. -----
Кстати в #13 аналог #23 на базе txt2mtxt
Осталось только присандалить vla-fieldcode к txt2mtxt)
Найти бы только киде она и есть ли в ней vla-get-textstring)

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
Найти бы только киде она и есть ли в ней vla-get-textstring)
Нашел - но печалька - она в leaderex.arx(((

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


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
переписать полностью на базе Vla-функций.
Код:
[Выделить все]
 
;*******************************************************************************************************************************
;												    Команда TEXT_TO_MTEXT

;							  	Конвертирует выбранные Текст(ы) в Мультитекст(ы).
;							  	Конвертация определяется выбором текстов. Работает с предварительно
;								выбранными объектами.
;							  	В один многострочный текст ковертируются следующие наборы:
;							  	1. Один текст выбранный указанием на него (он определяет параметры
;							  	   многострочного текста) при остальных, выбранных рамкой/секрамкой.
;                                  Тексты сортируются по дистанции перпендикуляра к напрвлению 
;								   ключевого текста.
;							  	2. Поочерёдно выбранные указанием несколько текстов, при отсутствии
;							  	   в наборе текстов выбранных рамкой/секрамкой. Параметры
;							  	   многострочного текста определяет первый выбранный текст.
;                                  Тексты составляют Мтекст в порядке их выбора.
;							  	Во всех остальных случаях все выбранные тексты конвертируются
;							  	в отдельные Мтексты.

;											  koMon, всё ещё июль 2019, привет Вохе!

;*******************************************************************************************************************************
						  						       (vl-load-com)
;*******************************************************************************************************************************

(defun ssget_text ()
	(while
		(progn
			(setq text_sset (vl-catch-all-apply 'ssget (list "_:L" (list (cons 0 "TEXT")))))
			(cond
				(
				   	(null text_sset)
						t
				)
				(
				   	(vl-catch-all-error-p text_sset)
				   		(setq command_is_active nil)
				)
				(
				   	text_sset
				   		nil
				)
			)
		)
	)
	(if (vl-catch-all-error-p text_sset)
		nil
		text_sset
	)
)

;*******************************************************************************************************************************

(defun sort_text_list (text_list / )
	(foreach text_selected (reverse text_list)
		(cond
		  	(
		  		(= 1 (car text_selected))
		  		   	(setq picked_text_list (cons (cadr text_selected) picked_text_list))
		  	)
		  	(
		  		(not (minusp (car text_selected)))
		  		   	(setq otherwise_selected_text_list (cons (cadr text_selected) otherwise_selected_text_list))
		  	)
		  	(
		  		t
		  	)
		)
	)
)

;*******************************************************************************************************************************

(defun make_text_list (text_sset)
	(setq text_list (vl-remove-if-not '(lambda (list_element)
								     				(and
										  				(not (minusp (car list_element)))
										  				(= "TEXT" (cdr (assoc 0 (entget (cadr list_element)))))
													)
								   			   )
						  		   			   (ssnamex text_sset)
							)
	)
)

;*******************************************************************************************************************************

(defun setting_mtext (text_primitive mtext_object / text_alignment)
	(setq text_object (vlax-ename->vla-object text_primitive)
		  current_text_insertionpoint (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint text_object)))
		  current_text_rotation (vla-get-rotation text_object)
		  current_text_height (vla-get-height text_object)
		  current_text_length (- (caadr (textbox (entget text_primitive))) (caar (textbox (entget text_primitive))))
	)
	(cond
		(
		   	(member (setq text_alignment (vla-get-alignment text_object)) '(0 3 4 5 6))
		   			(vla-put-attachmentpoint mtext_object 1)
		   			(vla-put-insertionpoint mtext_object (vlax-3d-point (polar current_text_insertionpoint (+ (* 0.5 pi) current_text_rotation) current_text_height)))
		)
		(
		   	(member text_alignment '(1))
		   			(vla-put-attachmentpoint mtext_object (cdr (assoc text_alignment '((1 . 2)))))
		   			(setq current_text_alignmentpoint (vlax-safearray->list (vlax-variant-value (vla-get-textalignmentpoint text_object))))
		   			(vla-put-insertionpoint mtext_object (vlax-3d-point (polar current_text_alignmentpoint (+ (* 0.5 pi) current_text_rotation) current_text_height)))
		)
		(
		   	(member text_alignment '(2 8))
		   			(vla-put-attachmentpoint mtext_object 3)
		   			(vla-put-insertionpoint mtext_object (vlax-3d-point (polar
																				(polar current_text_insertionpoint current_text_rotation current_text_length)
																				(+ (* 0.5 pi) current_text_rotation)
																				current_text_height
																		)
		   												  )
		   			)
		)
		(
		   	(member text_alignment '(7 9 10 11))
		   			(vla-put-attachmentpoint mtext_object (cdr (assoc text_alignment '((7 . 2) (9 . 4) (10 . 5) (11 . 6)))))
		   			(vla-put-insertionpoint mtext_object (vla-get-textalignmentpoint text_object))
		)
		(
		   	(member text_alignment '(12))
		   			(vla-put-attachmentpoint mtext_object 7)
		   			(vla-put-insertionpoint mtext_object (vla-get-insertionpoint text_object))
		)
		(
		   	(member text_alignment '(13))
		   			(vla-put-attachmentpoint mtext_object 8)
		   			(vla-put-insertionpoint mtext_object (vlax-3d-point (polar current_text_insertionpoint current_text_rotation (/ current_text_length 2.0))))
		)
		(
		   	(member text_alignment '(14))
		   			(vla-put-attachmentpoint mtext_object 9)
		   			(vla-put-insertionpoint mtext_object (vlax-3d-point (polar current_text_insertionpoint current_text_rotation current_text_length)))
		)
	)
)

;*******************************************************************************************************************************
(defun c:text_to_mtext ( /
										Command_Is_Active Mtext_Dxf_Size Mtext_Dxf_Style Mtext_Object Mtext_Width
										Otherwise_Selected_Text_List Picked_Text_List String_List Text_Dxf Text_List Text_Object Text_Sset
										Current_Text_Height Current_Text_Insertionpoint Half_Current_Text_Length
										Current_Text_Alignmentpoint
										setting_delimiter text_delimiter
										comparison_point
					   )
	(vla-startUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
	(setq picked_text_list '()
		  otherwise_selected_text_list '()
		  command_is_active t
	)
	(cond
	  	(
	  		(setq text_sset (cadr (ssgetfirst)))				;есть предварительный выбор
	  	 		(if (zerop (length (make_text_list text_sset)))
	  				(progn										;в предварительном выборе нет примитивов TEXT
	  					(sssetfirst)
	  					(if (setq text_sset (ssget_text))
	  						(sort_text_list (make_text_list text_sset))
							(setq command_is_active nil)
	  					)
	  				)
	  				(progn										;в предварительном выборе есть примитивы TEXT
	  					(sssetfirst)
	  					(sort_text_list text_list)
	  				)
	  			 )
	  	)
	  	(
	  		t													;нет предварительного выбора
	  			(if (setq text_sset (ssget_text))
	  				(sort_text_list (make_text_list text_sset))
	  			)
	  	)
	)
	(cond
		(
			command_is_active
				(cond
					(
						(or
							(and
								picked_text_list
								(= 1 (length picked_text_list))
								(< 0 (length otherwise_selected_text_list))
							)
							(and
								(< 1 (length picked_text_list))
								(= 0 (length otherwise_selected_text_list))
							)
						)
			   				(setq mtext_width 0.0
			   					  mtext_dxf_size (assoc 40 (entget (car picked_text_list)))
			   					  mtext_dxf_style (assoc 7 (entget (car picked_text_list)))
								  string_list '()
			   				)

							;*******************************************************************************************************************************************

							(if
								(and
									picked_text_list
									(= 1 (length picked_text_list))
									(< 0 (length otherwise_selected_text_list))
								)
									(setq comparison_point (polar (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint (vlax-ename->vla-object (car picked_text_list)))))
																  (+ (* 0.5 pi) (vla-get-rotation (vlax-ename->vla-object (car picked_text_list))))
																  1e8
														   )
										  otherwise_selected_text_list (vl-sort otherwise_selected_text_list
																				'(lambda (text_1 text_2)
																					(>
																						(distance
																						    comparison_point
																							(inters (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint (vlax-ename->vla-object text_2))))
																									(polar (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint (vlax-ename->vla-object text_2))))
																										(vla-get-rotation (vlax-ename->vla-object text_2))
																										1.0
																									)
																									comparison_point
																									(polar comparison_point
																										   (+ (* 0.5 pi) (vla-get-rotation (vlax-ename->vla-object text_2)))
																										   1.0
																									)
																									nil
																							)
																						)
																						(distance
																						    comparison_point
																							(inters (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint (vlax-ename->vla-object text_1))))
																									(polar (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint (vlax-ename->vla-object text_1))))
																										(vla-get-rotation (vlax-ename->vla-object text_1))
																										1.0
																									)
																									comparison_point
																									(polar comparison_point
																										   (+ (* 0.5 pi) (vla-get-rotation (vlax-ename->vla-object text_1)))
																										   1.0
																									)
																									nil
																							)
																						)
																					)
																			)
																	   )
									)
							)

							;*******************************************************************************************************************************************

							(prompt "Нажмите на разделитель текстов. <Enter> или <Space>")
							(while (null setting_delimiter)
								(setq error_ocurred (if (vl-catch-all-error-p (setq gread_data (vl-catch-all-apply 'grread (list t 8 0)))) t nil))
    							(cond
									(
										error_ocurred           																;Esc is pressed
									)
									(
										(equal gread_data (quote (2 32)))  														; delimiter is set to <Space>
											(setq setting_delimiter t
												  text_delimiter " "
											)
									)
									(
										(equal gread_data (quote (2 13)))  														; delimiter is set to <Carrige Return>
											(setq setting_delimiter t
												  text_delimiter "\\P"
											)
									)
									(
										t
									)
								)
							)

							;*******************************************************************************************************************************************

			   				(foreach text_entity (append picked_text_list otherwise_selected_text_list)
			   					(setq string_list (cons (vla-fieldcode (vlax-ename->vla-object text_entity)) string_list)
			   						  string_list (cons text_delimiter string_list)												; putting text delimiter
			   						  text_dxf (subst mtext_dxf_size (assoc 40 (entget text_entity)) (entget text_entity))
			   						  text_dxf (subst mtext_dxf_style (assoc 7 text_dxf) text_dxf)
			   						  mtext_width (max mtext_width (caadr (textbox text_dxf)))                                  ; ширина Мтекста
			   					)
			   				)
			   				(setq string_list (reverse (cdr string_list))
			   					  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))
			   				)

							;**************************************************
							(setting_mtext (car picked_text_list) mtext_object)
							;**************************************************

			   				(foreach apply_property '(layer linetype lineweight linetypescale truecolor stylename height rotation)
			   					(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 (append picked_text_list otherwise_selected_text_list)
			   					(vla-erase (vlax-ename->vla-object text_entity))
			   				)
			   				(vlax-release-object Mtext_Object)
			   				(vlax-release-object Text_Object)
		   					(if (= 1 (length (append picked_text_list otherwise_selected_text_list)))
								(princ "\nТекст конвертирован")
								(princ "\nТексты конвертированы")
							)
					)
					(
						t
							(foreach text_entity (append picked_text_list otherwise_selected_text_list)
			   					(setq mtext_dxf_size (assoc 40 (entget text_entity))
			   						  mtext_dxf_style (assoc 7 (entget text_entity))
			   						  text_dxf (subst mtext_dxf_size (assoc 40 (entget text_entity)) (entget text_entity))
			   						  text_dxf (subst mtext_dxf_style (assoc 7 text_dxf) text_dxf)
			   						  mtext_width (+ 1.0 (caadr (textbox text_dxf)))											; ширина Мтекста
			   					  	  mtext_object (vla-addmtext (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point '(0 0 0)) 0 (vla-fieldcode (vlax-ename->vla-object text_entity)))
			   					)

								;***************************************
								(setting_mtext text_entity mtext_object)
								;***************************************

			   					(foreach apply_property '(layer linetype lineweight linetypescale truecolor stylename height rotation)
			   						(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))))
								(vla-erase (vlax-ename->vla-object text_entity))
							)
			   				(vlax-release-object Mtext_Object)
			   				(vlax-release-object Text_Object)
		   					(if (= 1 (length (append picked_text_list otherwise_selected_text_list)))
								(princ "\nТекст конвертирован")
								(princ "\nТексты конвертированы")
							)
					)
				)
		)
		(
			t
			   	(princ "\nВыполнение команды прекращено")
		)
	)
	(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
	(princ)
)

Последний раз редактировалось koMon, 30.07.2019 в 17:42.
koMon вне форума  
 
Непрочитано 26.07.2019, 18:26
#31
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Команда TEXT_TO_MTEXT
Спасибо!
жаль только она не работает с #13. Т.е. аналога #23 c полями пока не получилось. В #23 однострочные выбираются рамкой и каждая строка превращается а отдельный мтекст на том же месте
allar8 вне форума  
 
Непрочитано 26.07.2019, 20:02
#32
koMon


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


То есть нужно чтобы был выбор:
1. Каждый выбранный однострочный из набора в многострочный
2. Весь набор однострочных в один многострочный
?
koMon вне форума  
 
Непрочитано 26.07.2019, 20:05
#33
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
1. Каждый выбранный однострочный из набора в многострочный
Да, и чтоб не по отдельности тыкать, а рамкой выбрать или из набора все однострочные превратить в отдельные мтексты на том же месте. Аналогично в #23, но там поля убиваются.

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

Последний раз редактировалось allar8, 26.07.2019 в 20:27.
allar8 вне форума  
 
Непрочитано 26.07.2019, 20:28
#34
koMon


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


Ну программа же должна быть в каком-то роде универсальной. То есть пользователь запускает программу и выбирает либо 1 либо 2. Да вот ещё нужно добавить опцию сортировки по Y и каретку/пробел для 2.
Всё реализуемо на след. неделе)
koMon вне форума  
 
Непрочитано 26.07.2019, 20:33
#35
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Ну программа же должна быть в каком-то роде универсальной. То есть пользователь запускает программу и выбирает либо 1 либо 2. Да вот ещё нужно добавить опцию сортировки по Y и каретку/пробел для 2.
Всё реализуемо на след. неделе)
На мой взгляд тут универсальность не нужна - выбор это лишние манипуляции. Лучше две отдельные программы - каждая на свою кнопку будет назначена(вот он выбор)
Ту что вы уже выложили - она свою задачу с заливкой в один мтекст прекрасно выполняет
И нужна еще отдельная программа по п.1 по принципу действия в #23 было бы идеально, если получится
Если у Вас получится - заранее премного благодарен

----- добавлено через ~23 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
TEXT_TO_MTEXT
А что мне в этой программе понравилось - дык это то что она заливает по порядку выбора - это важно. И главное манипуляций минимум

Последний раз редактировалось allar8, 26.07.2019 в 20:56.
allar8 вне форума  
 
Непрочитано 26.07.2019, 21:08
#36
koMon


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


Да как оно может не получиться!? Хотя я строго за униаерсальность!)))
Я тут попробовал вставить мтекст, разбить его и соединить своей программой. Это пипец. Как они его взрывают, не понятно. А выбирать дцать строк по порядку ваще не айс.
koMon вне форума  
 
Непрочитано 26.07.2019, 21:20
#37
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Да как оно может не получиться!? Хотя я строго за униаерсальность!)))
Я тут попробовал вставить мтекст, разбить его и соединить своей программой. Это пипец. Как они его взрывают, не понятно. А выбирать дцать строк по порядку ваще не айс.
Не спорю но для каких то задач и универсальность нужна.
Но лично для моих задач в рамках разных комманд я бы выделил 3 полезных вида пока для меня.
1) Аналог #23 с сохранением полей
2) Ваш вариант - что вы выложили с учетом порядка выбора + если выбирать по отдельности и не заливать в один позиция мтекста сохраняется. в #23 кстати чуть чуть смещается, а в #24 сильно смещается.
3) #24 - быстрая заливка в один мтекст с выбором рамкой и сохранением исходного порядка исходных однострочных текстов

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
Я тут попробовал вставить мтекст, разбить его и соединить своей программой. Это пипец. Как они его взрывают, не понятно. А выбирать дцать строк по порядку ваще не айс.
#24 для этой задачи подходит на мой взгляд. Если с полями то с учетом #26 - замены vla-get-textstring на vla-fieldcode.

Последний раз редактировалось allar8, 26.07.2019 в 22:07.
allar8 вне форума  
 
Непрочитано 27.07.2019, 10:37
#38
koMon


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


allar8, для написания не китайской программы нужно какое-никакое тз. Без отсылок на существующие программы. Так например в моей программе текст конвертируется в мтекст с сохранением исходного форматирования первого, в то время как в #13 каждому тексту предварительно принудительно присвается левое выравнивание. Ну и т. д. Напишите по пунктам что нужно сделать из чего по каким критериям.
koMon вне форума  
 
Непрочитано 27.07.2019, 13:40
#39
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
allar8, для написания не китайской программы нужно какое-никакое тз. Без отсылок на существующие программы. Так например в моей программе текст конвертируется в мтекст с сохранением исходного форматирования первого, в то время как в #13 каждому тексту предварительно принудительно присвается левое выравнивание. Ну и т. д. Напишите по пунктам что нужно сделать из чего по каким критериям.
Только я говорил не про #13 а про #23.
1) Да согласен в вашей уже программе огромный плюс это сохранение - форматирования и позиции исходного однострочного текста.
Не хватает только выбора рамкой и преобразования каждого однострочного текста в отдельный мтекст.
При выборе рамкой у вас все заливается в один мтекст, причем в обратном порядке - смысл этого мне если честно не понятен, но я ж говорю может у меня просто таких задач нет
Резюмирую.
Хотелось бы чтоб программа умела следующее:
Выбранные рамкой или выбранные любым другим методом однострочные тексты (например быстрым выбором) в одно нажатие превращались каждый в свой мтекст с сохранением позиции и чтоб поля неубивались.
Кстати как раз с сохранением позиции и форматирования в вашей прежней программе нет проблем и это очень круто.
Поясню почему ссылался на #23
Та программа делает то что мне нужно, но убивает поля и немного смещает текст.
В вашей программе уже решены проблемы с полями и сохранением позиции исходного текста, - нету только главного - выбора рамкой и в одно нажатие преобразования каждый однострочный текст в отдельный мтекст
В одно нажатие - имеется ввиду настрою вашу команду на кнопку
allar8 вне форума  
 
Непрочитано 27.07.2019, 18:26
#40
koMon


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


Цитата:
Сообщение от allar8 Посмотреть сообщение
Только я говорил не про #13 а про #23.
Это я чего-то косякнул)
Цитата:
Сообщение от allar8 Посмотреть сообщение
При выборе рамкой у вас все заливается в один мтекст
Я понял. При выборе секрамкой или рамкой выбор идёт не по ходу пересечения их секрамкой например, а по стеку их в базе. Соответственно при таком выборе и при заливке
выбранных текстов в один мтекст сортировка по Y необходима.
Цитата:
Сообщение от allar8 Посмотреть сообщение
нету только главного - выбора рамкой
Ну это вообще не вопрос)
koMon вне форума  
 
Непрочитано 27.07.2019, 19:07
#41
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Ну это вообще не вопрос)
Повторюсь - буду Вам премного благодарен.
allar8 вне форума  
 
Непрочитано 29.07.2019, 11:46
1 | #42
koMon


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


allar8, обновил #30
koMon вне форума  
 
Непрочитано 29.07.2019, 12:28
#43
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
allar8, обновил #30
Спасибище огромное! - вот это круто. Проверил - то что надо
Можно сказать то о чем мечтал) - Оценил - то что Работает с предварительно выбранными объектами
Так же оценил универсальность с последовательным выбором и заливкой в один мтекст - супер.
Действительно - очень полезная и нужная программа

Последний раз редактировалось allar8, 29.07.2019 в 12:36.
allar8 вне форума  
 
Непрочитано 29.07.2019, 13:31
#44
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
allar8, обновил #30
Заметил один небольшой недостаток, но это вопрос больше не к вашей программе а к автокаду наверно
Я так понимаю ваша программа как то вычисляет ширину однострочного текста и как и должно быть - присваивает это значение пользовательской ширине результирующего мтекста
Но автокад почему то не умещает все в одну строку и начинает переносить (см. во вложениии)
Можно как нить добавить 1 мм к пользовательской ширине результирующего многострочного текста. Я проверил - этого вроде достаточно.
Или может просто подскажете где и что можно дописать, если немного чтоб - исключить этот "баг") автокада.

Или погодите проблема видимо в файле моем
В чистом файле вроде нет проблем

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
Или погодите проблема видимо в файле моем
В чистом файле вроде нет проблем
Хотя нет - проблема с однострочниками состоящими из нескольких слов
Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 40
Размер:	13.2 Кб
ID:	216308  

Последний раз редактировалось allar8, 29.07.2019 в 13:48.
allar8 вне форума  
 
Непрочитано 29.07.2019, 13:53
1 | #45
koMon


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


это косяк лисп функции textbox, особенно с текстами с деформированными стилями shx.
#30 корректировал красным.
koMon вне форума  
 
Непрочитано 29.07.2019, 13:57
| 1 #46
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
это косяк лисп функции textbox, особенно с текстами с деформированными стилями shx.
#30 корректировал красным.
Спасибо!
allar8 вне форума  
 
Непрочитано 29.07.2019, 13:58
1 | #47
koMon


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


тег красноты не счёлся с синтаксисом, поставил комментарий
koMon вне форума  
 
Непрочитано 29.07.2019, 14:24
#48
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
тег красноты не счёлся с синтаксисом, поставил комментарий
ок, спасибо!

----- добавлено через ~38 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
тег красноты не счёлся с синтаксисом, поставил комментарий
Вот на это
mtext_width (+ 1.0 (caadr (textbox text_dxf))) ;ширина мтекста
подменил, но чет нет эффекта мож еще киде надо?

----- добавлено через ~10 мин. -----
Цитата:
Сообщение от allar8 Посмотреть сообщение
подменил, но чет нет эффекта мож еще киде надо?
Сори - все гуд)

Последний раз редактировалось allar8, 29.07.2019 в 15:02.
allar8 вне форума  
 
Непрочитано 29.07.2019, 16:49
#49
koMon


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


Цитата:
Сообщение от allar8 Посмотреть сообщение
Заметил один небольшой недостаток, но это вопрос больше не к вашей программе а к автокаду наверно
Я так понимаю ваша программа как то вычисляет ширину однострочного текста
если отсутствие ручек ширины и высоты мтекста не напрягает, то можно оставлять ширину мтекста нулевой, в этом случае подобной проблемы не будет, но однострочный мтекст будет очень похож при выборе на текст)

----- добавлено через ~2 мин. -----
а вообще зачем эти манипуляции текст->мтекст, наоборот. не проще сразу генерить нужные мтексты с полями?...
koMon вне форума  
 
Непрочитано 29.07.2019, 16:52
#50
allar8


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


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

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

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


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


закомментировать 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.
koMon вне форума  
 
Непрочитано 29.07.2019, 17:09
#52
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
закомментировать 243, 274
;(entmod (subst (cons 41 mtext_width) (cons 41 0.0) (entget (vlax-vla-object->ename mtext_object))))
Спасибо огромное!
И еще чуток понаглею). Сори. Можно если не сложно это, чтоб программка ишо и угол поворота учитывала?)
allar8 вне форума  
 
Непрочитано 29.07.2019, 17:13
#53
koMon


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


я думал об этом, но пока ломает
koMon вне форума  
 
Непрочитано 29.07.2019, 18:51
| 2 #54
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589


Прям классические: «Дайте воды попить, а то так есть хочется, что переночевать негде!». Наблюдать интересно, спасибо.
Boxa вне форума  
 
Непрочитано 29.07.2019, 20:49
#55
koMon


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


Boxa, you would have never known, how much have I missed you)))
это лб провокация? если ты вниматеотно пройдёшься по разным темам, то эта "пушкинская" тема тебе встретится многожды, потому забей и наслаждайся только чтением!
Кстати у меня сегодня была мысль спросить, как тебе? Видимо она долетела до тебя!?
koMon вне форума  
 
Непрочитано 29.07.2019, 22:41
#56
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
я думал об этом, но пока ломает
Понимаю)

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Boxa Посмотреть сообщение
Прям классические: «Дайте воды попить, а то так есть хочется, что переночевать негде!». Наблюдать интересно, спасибо.
Цитата:
Сообщение от koMon Посмотреть сообщение
если ты вниматеотно пройдёшься по разным темам, то эта "пушкинская" тема тебе встретится многожды, потому забей и наслаждайся только чтением!
Тоже понимаю.) Стыдно, и метод вашей развлекухи, признаться, цепляет - т.е. не оставляет равнодушным.)

Последний раз редактировалось allar8, 29.07.2019 в 22:47.
allar8 вне форума  
 
Непрочитано 30.07.2019, 09:08
1 | #57
koMon


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


Цитата:
Сообщение от allar8 Посмотреть сообщение
Тоже понимаю.) Стыдно
Здесь не что стыдиться). К тому же есть железобетонное правило: "За спрос не бьют". А для темы висящей ~14 лет ещё один лисп лишним не будет, имхо. Как-то так.
koMon вне форума  
 
Непрочитано 30.07.2019, 09:13
#58
allar8


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Здесь не что стыдиться). К тому же есть железобетонное правило: "За спрос не бьют". А для темы висящей ~14 лет ещё один лисп лишним не будет, имхо. Как-то так.
Ну честно признаться как то неудобно - все время попрошайничать) - вы время свое потратили и все такое. Но однозначно замечу, что ваша программа очень полезная и думаю не один я буду Вам благодарен.
allar8 вне форума  
 
Непрочитано 30.07.2019, 09:15
| 1 #59
koMon


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


Offtop: Пока вас только ДВОЕ!
koMon вне форума  
 
Непрочитано 30.07.2019, 09:21
#60
allar8


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


Да проблема есть - мало людей кто интересуется такими деталями. Довольствуются тем что есть и не парятся по поводу рутины. Меня рутина убивает если честно.
Многие просто не знают, что автокад можно так скать усовершенствовать благодаря его открытости.
Я тут поделился вашей прогой с коллегами - тем кому тоже все это интересно и те кто понимают в этом всем суть. Передаю и ихнюю Вам благодарность тоже!
А сам лично тож хочу хоть немного научиться "усовершенствовать" автокад - начал по тихому почитывать про енто - мине тут посоветовали.
Это ишо интересней - чем тупо пользоваться чужими наработками
allar8 вне форума  
 
Непрочитано 30.07.2019, 09:33
| 1 #61
koMon


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


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


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


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


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


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


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



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


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


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


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


Цитата:
Сообщение от 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,681


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


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


Цитата:
Сообщение от 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,681


Цитата:
Сообщение от 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
Сообщений: 650


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

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


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


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


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


Цитата:
Сообщение от 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,681


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


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


Цитата:
Сообщение от 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,681


Цитата:
Сообщение от 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
Сообщений: 650


Цитата:
Сообщение от 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
Сообщений: 650


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

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