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

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

Нужен Lisp для перевода однострочного в многострочный текст

Ответ
Поиск в этой теме
Непрочитано 21.09.2015, 07:05
Нужен Lisp для перевода однострочного в многострочный текст
Wonderland
 
Регистрация: 17.09.2015
Сообщений: 10

Нужно, чтобы каждый объект из однострочного текста преобразовывался в отдельный объект многострочного текста. В интернете есть подобные утилиты, но они объекты однострочного текста группируют в единый объект многострочного, как, например, в Autocad в панели инструментов Express - "Convert Text To Mtext" или утилита Lee-Mac - "Text2MTextV2-0".
Просмотров: 7123
 
Непрочитано 24.09.2015, 14:00
#21
anton1989


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


В Express Tools есть такая команда, работает отлично
anton1989 вне форума  
 
Автор темы   Непрочитано 25.09.2015, 08:34
#22
Wonderland


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


Использую ваш код.
К примеру, при переводе множества объектов однострочного текста с разными коэффициентами сжатия в многострочный, - у всех объектов коэффициент сжатия будет 1 и вручную переделать коэф сжатия на изначальные крайне напряжно.
Wonderland вне форума  
 
Непрочитано 15.10.2015, 23:24
2 | #23
Shourick


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


Если вопрос ещё актуальный можете попробовать:
Код:
[Выделить все]
 
(defun c:t2mt (/ ename ssents)
;;;**********************************************************************************************************************
  (defun text2mtext (ssents   /	     elist-mt ename    elist	dxf-62	 lc	  lc-x	   lc-y	    uc	     uc-x
		   uc-y	    dxf-50   dxf-51   dxf-10   dxf-11	dxf-12	 x	  y	   z	    dxf-72   dxf-73
		   k	    dxf-41   ssents-mt
		  )
  (setq ssents-mt (ssadd))
  (repeat (sslength ssents)
    (setq ename	   (ssname ssents 0)
	  elist	   (entget ename)
	  dxf-62   (assoc 62 elist)
	  elist-mt '((0 . "MTEXT") (100 . "AcDbEntity"))
	  elist-mt (if dxf-62
		     (append elist-mt (list (assoc 67 elist) (assoc 8 elist) dxf-62 '(100 . "AcDbMText")))
		     (append elist-mt (list (assoc 67 elist) (assoc 8 elist) '(100 . "AcDbMText")))
		   )
	  lc	   (car (textbox elist))
	  lc-x	   (car lc)
	  lc-y	   (cadr lc)
	  uc	   (cadr (textbox elist))
	  uc-x	   (car uc)
	  uc-y	   (cadr uc)
	  dxf-50   (cdr (assoc 50 elist))
	  dxf-51   (+ dxf-50 (/ pi 2.0))
	  dxf-10   (cdr (assoc 10 elist))
	  dxf-11   (polar dxf-10 dxf-50 (* uc-x 0.5))
	  dxf-12   (polar dxf-10 dxf-50 uc-x)
	  x	   (car dxf-10)
	  y	   (cadr dxf-10)
	  z	   (last dxf-10)
	  dxf-10   (list (+ lc-x x) y z)
	  dxf-72   (cdr (assoc 72 elist))
	  dxf-73   (cdr (assoc 73 elist))
	  k	   (+ 10 dxf-72 (* -3 dxf-73))
    )
    (cond ((= k 1) (setq dxf-10 (cons 10 (polar dxf-10 dxf-51 uc-y))))
	  ((= k 2) (setq dxf-10 (cons 10 (polar dxf-11 dxf-51 uc-y))))
	  ((= k 3) (setq dxf-10 (cons 10 (polar dxf-12 dxf-51 uc-y))))
	  ((= k 4) (setq dxf-10 (cons 10 (polar dxf-10 dxf-51 (* (+ uc-y lc-y) 0.5)))))
	  ((or (= k 5) (= k 14))
	   (setq k	5
		 dxf-10	(cons 10 (polar dxf-11 dxf-51 (* (+ uc-y lc-y) 0.5)))
	   )
	  )
	  ((= k 6) (setq dxf-10 (cons 10 (polar dxf-12 dxf-51 (* (+ uc-y lc-y) 0.5)))))
	  ((or (= k 7) (= k 10) (= k 13) (= k 15))
	   (setq k	7
		 dxf-10	(cons 10 (polar dxf-10 dxf-51 lc-y))
	   )
	  )
	  ((or (= k 8) (= k 11))
	   (setq k	8
		 dxf-10	(cons 10 (polar dxf-11 dxf-51 lc-y))
	   )
	  )
	  ((or (= k 9) (= k 12))
	   (setq k	9
		 dxf-10	(cons 10 (polar dxf-12 dxf-51 lc-y))
	   )
	  )
    )
    (setq dxf-41 (cdr (assoc 41 elist))
	  dxf-51 (cdr (assoc 51 elist))
	  dxf-1	 (cdr (assoc 1 elist))
    )
    (if	(/= dxf-41 1.0)
      (setq dxf-1 (strcat "\\W" (rtos dxf-41 2 4) ";" dxf-1))
    )
    (if	(/= dxf-51 0.0)
      (setq dxf-1 (strcat "\\Q" (rtos (dtr dxf-51 1) 2 1) ";" dxf-1))
    )
    (setq elist-mt (append elist-mt
			   (list (cons 10 (trans (cdr dxf-10) ename 0))
				 (assoc 40 elist)
				 (cons 71 k)
				 (cons 1 dxf-1)
			   )
			   (list (assoc 7 elist)
				 (assoc 210 elist)
				 (cons 11 (trans (polar '(0.0 0.0 0.0) dxf-50 1.0) ename 0))
			   )
		   )
	  ssents   (ssdel ename ssents)
    )
    (entmake)
    (entmake elist-mt)
    (entmake)
    (setq ssents-mt (ssadd (entlast) ssents-mt))
    (entdel ename)
  )
  ssents-mt
)
;;;**********************************************************************************************************************
  (setvar "cmdecho" 0)
  (command "undo" "be")
  (setq ssents (ssget '((0 . "TEXT"))))
  (if ssents
    (text2mtext ssents)
  )
  (command "undo" "e")
  (setvar "cmdecho" 0)
  (princ)
)
Текст после преобразования должен оставаться таким же как и прежде.
Есть ещё программки для объединения нескольких mtext в один.
Shourick вне форума  
 
Автор темы   Непрочитано 23.10.2015, 14:20
#24
Wonderland


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


Shourick, огромное спасибо! То что надо
Wonderland вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нужен Lisp для перевода однострочного в многострочный текст

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевернутый при редактировании многострочный текст k-r AutoCAD 7 19.06.2014 11:57
Многострочный текст, при редактировании меняет отображение шрифта, хотя он на самом деле не изменялся??? xmelika AutoCAD 11 29.10.2013 08:13
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
LISP. Прочитать .cui-файл. Проблема - русский текст (юникод?) Ax3 LISP 4 13.10.2010 12:31
Программа оболочка на многострочный текст? Russik AutoCAD 16 16.09.2010 00:01