CAD БИБЛИОТЕКА
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

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

Lisp для редактирования нескольких мтекстов сразу

Ответ
Поиск в этой теме
Непрочитано 16.03.2008, 19:07 #1
Lisp для редактирования нескольких мтекстов сразу
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,977

Иногда бывает нужно поменять содержимое сразу нескольких мтекстов. Нашел только программу по копированию из одного мтекста в другие, но это не совсем то, если вдруг промахнутся команда срывается. Может есть идеи у программистов?
Представляю лисп так.
-Ввод команды
-Выделяем нужные мтексты
-enter
-Выходит редактор мтекста.
-Пишем что надо
-Выходим из редактора
Все.

P.S. команда может охватывать кроме мтекстов еще тексты и размеры.
Просмотров: 2198
 
Непрочитано 16.03.2008, 23:33
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


Если делать как ты описал - у меня в голове начинаються запутки с изменением формата мтекста в простой текст (если это не просто одна строчка) - сделать можно, но геморойно, на поcмотри "навскидочный" вариант - понравиться хорошо, нет по настроению - может соберусь по твоему напишу - но не обещаю:
Код:
[Выделить все]
(defun c:editall ( / X string obj lst)
(setq obj 0 string (getstring T "Введите желаемою строку "))
(while (/= obj nil)
(setq 	obj (entget (car (entsel "Выбирайте тексты ")))
	X (cdr (assoc 0 obj)))
(if (or (= X "TEXT") (or (= X "MTEXT") (= X "DIMENSION")))
(progn
(setq obj (subst (cons 1 string) (assoc 1 obj) obj))
(entmod obj)
);end of progn
):end of if
);end of while
);end of defun
P.S. Вызывать командой "editall".
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Кулик Алексей aka kpblc, 16.03.2008 в 23:46.
Дима_ вне форума  
 
Непрочитано 17.03.2008, 06:49
#3
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,268


Интересно, слышал ли интерисующийся о команде Search&Replace, ибо команда сия делает как раз то, что искомо. Конечно, если хочестя заменить целые абзацы, то это - совсем другое дело.
Лентяй вне форума  
 
Автор темы   Непрочитано 17.03.2008, 09:38
#4
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,977
Отправить сообщение для Red Nova с помощью Skype™


Дима_, Программка интересная, хотя не совсем о чем я говорил. Опять таки жаль что если промахнуться программа вылетает.
Лентяй, Find and Replace это не то что нужно. там ведь надо знать что содержится в исходных мтекстах, а там может всякое быть (насколько я знаю). В Tooplac есть более удобная find and replace, там можно все объекты сразу отметить и в ком строке написать на что их менять. Минус в том что редактор мтекста не выходит. Из ком строки не все задать можно.
Red Nova вне форума  
 
Непрочитано 17.03.2008, 12:06
#5
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 307


>> Red Nova
В комстроке как раз все можно прописать, если правильно указать знаки форматирования и символы. Хотя могу и ошибаться.

Немного переделал программу из 2-го поста:
Код:
[Выделить все]
;;;		CR-EditText  ver 1.0
;;;
;;; All rights reserved including right of reproduction in whole or in part in ang form.
;;; Данная функция заменяет содержимое текстов, мультитекстов и размеров на ранее указанную строку.
;;; Чтобы заменить стандартный запрос "Seleck objects:" на собственный, снять комментарий со
;;; строк с (princ) и (setvar).
;;; Макрос на кнопку: ^C^C^P(if (not C:CR-EditText)(load "CR-EditText.lsp")) CR-EditText

(defun C:CR-EditText (/ newstring nabor number)
  (setq newstring (getstring T "Введите новый текст <Выход>: "))
  (if (not (null newstring))
    (progn
      ; (princ "Выберите изменяемые тексты: ")
      ; (setvar "NOMUTT" 1)
      (setq nabor nil number 0 nabor (ssget '(( 0 . "*TEXT,*DIMENSION"))))
      ; (setvar "NOMUTT" 0)
      (while (< number (sslength nabor))
	(entmod (subst (cons 1 newstring) (assoc 1 (entget (ssname nabor number))) (entget (ssname nabor number))))
	(setq number (1+ number))
      ) ; while(number<nabor)
    ) ; progn
  ) ; if(newstring=T)
  (setq newstring nil nabor nil number nil)
) ; defun
Проверено на AutoCAD 2006 и ZWCAD 2008, работает.

Почему-то при создании группы 1, вводя в комстроке "\\A1;{\\fArialNarrow|b0|i0|c204|p34;Слой руб\\H0.7x;\\S/ероида;\\H1.429x; на битумной мастике}" и изменяя текст entmod'ом получается текст, какой указан в {}, форматирования не происходит.
Если гуру заинтересуются, может подскажут чего. Единственный вариант - копировать в буфер строку из редактора текста, потом перебирать объекты, по одному открывая в редакторе и вставляя текст.

-----------------
А, разобрался. Надо в комстроке задавать текстовую строку без дополнительных слэшей "\A1;{\fArialNarrow|b0|i0|c204|p34;Слой руб\H0.7x;\S/ероида;\H1.429x; на битумной мастике}"). Так что из комстроки вводить такой текст точно можно.

Последний раз редактировалось Олег К., 17.03.2008 в 13:35.
Олег К. вне форума  
 
Автор темы   Непрочитано 17.03.2008, 21:28
#6
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,977
Отправить сообщение для Red Nova с помощью Skype™


Олег К., Так получше, жаль что без редактора, но с выбором рамкой без вылетания в случае промоха попал в точку
Red Nova вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp для редактирования нескольких мтекстов сразу

Система Техэксперт дает уверенность в правильности и эффективности принимаемых инженерных решений!
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен LISP для суммы длин отрезков линни ilka_t LISP 219 10.09.2019 10:22
Нужен LISP для разрыва линий в точках пересечений ilka_t LISP 18 15.03.2013 16:35
Lisp для текста Vova LISP 11 13.05.2004 17:39
Нужен LISP для заливки отверстий ilka_t AutoCAD 20 24.03.2004 16:06