Тема: AutoCAD 2004. Как настроить кодировку в скрипте?
Написал скрипт, который заменяет английский текст Date русским Дата, но после его запуска появился текст Äàòà. Как сделать чтоб скрипт работал правильно?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Приемы работы → Текст (MTEXT) и шрифты → AutoCAD 2004. Как настроить кодировку в скрипте?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Написал скрипт, который заменяет английский текст Date русским Дата, но после его запуска появился текст Äàòà. Как сделать чтоб скрипт работал правильно?
Желательно ответ получить как можно быстрее. У меня AutoCAD 2004.
Может, в коде ошибка. А может, дело в фонте не юникодовском. А может, еще в чем.
Где меняет-то? Во всех вхождениях одностроычных и (или) многострочных текстов, в полях, в значениях атрибутов? Вот тебе код, который многострочники и однострочники обработает:
;|============================================================================= * Обработка однострочных и многострочных текстов в выборе. Не обрабатываются * вхождения в блоки и значения атрибутов. Заменяемые слова регистрозависимы. * Параметры вызова: * eng-word заменяемое слово * rus-word слово, которое ставится * Примеры вызова: (ch-eng-to-rus "Date" "Дата") ; замена вхождений слова "Date" на "Дата". Слова ; "date", "dAte" и т.п. не заменяются =============================================================================|; (defun ch-eng-to-rus (eng-word rus-word / selset item) (vl-load-com) (if (not *kpblc-activedoc*) (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))) ) ;_ end of if (vla-startundomark *kpblc-activedoc*) (setq selset (ssget '((0 . "TEXT,MTEXT")))) (while (and selset (> (sslength selset 0)) ) ;_ end of and (setq item (ssname selset 0)) (ssdel item selset) (setq item (vlax-ename->vla-object item)) (if (vlax-property-available-p item 'textstring t) (vla-put-textstring item (vl-string-subst rus-word eng-word (vla-get-textstring item)) ) ;_ end of vla-put-TextString ) ;_ end of if ) ;_ end of while (vla-endundomark *kpblc-activedoc*) ) ;_ end of defun
P.S. Можно и повежливее себя вести. И поиск посмотреть - не далее как сегодня тема с аналогичными задачами была. Радуйся, что я нашел время.
> kpblc
я Работаю с Автокадом сегодня первый раз. Надо сделать замену еще нескольких слов. Куда вводить эту процедуру и чтобы можно было прогнать ее для многих файлов - около 200. И реально ли еще чтобы можно было для разных слов, которые заменяются менять и размер шрифта?
Для замены нескольких слов:
(defun c:chw (/ rus eng) (setq eng (getstring t "\nВведите слово, которое надо поменять <Отмена> : ")) (if eng (progn (setq rus (getstring t (strcat "\nУкажите слово, на которое надо менять " eng " : ") ) ;_ end of getstring ) ;_ end of setq (if rus (progn (ch-eng-to-rus eng rus) ) ;_ end of progn ) ;_ end of if ) ;_ end of progn ) ;_ end of if ) ;_ end of defun
То же самое, но в цикле:
(defun c:cchw (/ rus eng) (while (setq eng (getstring t "\nВведите слово, которое надо поменять <Отмена> : ") ) ;_ end of setq (setq rus (getstring t (strcat "\nУкажите слово, на которое надо менять " eng " : ") ) ;_ end of getstring ) ;_ end of setq (if rus (progn (ch-eng-to-rus eng rus) ) ;_ end of progn ) ;_ end of if ) ;_ end of while ) ;_ end of defun
По поводу "как подгружать и куда записывать":
https://www.caduser.ru/oldlink/faq/?part=44
https://www.caduser.ru/oldlink/faq/?part=023
> kpblc
Чего-то не запускается процедура. сохранил ее как lsp файл и добавил в папку Support.
(chw Date Дата)
; error: no function definition: CHW
Надо просто chw, слова она сама запросит. Все коды для простоты закинуть в один файлик и загружать.
делаю один файл
(defun ch-eng-to-rus (eng-word rus-word / selset item) (vl-load-com) (if (not *kpblc-activedoc*) (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))) ) ;_ end of if (vla-startundomark *kpblc-activedoc*) (setq selset (ssget '((0 . "TEXT,MTEXT")))) (while (and selset (> (sslength selset 0)) ) ;_ end of and (setq item (ssname selset 0)) (ssdel item selset) (setq item (vlax-ename->vla-object item)) (if (vlax-property-available-p item 'textstring t) (vla-put-textstring item (vl-string-subst rus-word eng-word (vla-get-textstring item)) ) ;_ end of vla-put-TextString ) ;_ end of if ) ;_ end of while (vla-endundomark *kpblc-activedoc*) ) ;_ end of defun (defun c:chw (/ rus eng) (setq eng (getstring t "\nВведите слово, которое надо поменять <Отмена> : ")) (if eng (progn (setq rus (getstring t (strcat "\nУкажите слово, на которое надо менять " eng " : ") ) ;_ end of getstring ) ;_ end of setq (if rus (progn (ch-eng-to-rus eng rus) ) ;_ end of progn ) ;_ end of if ) ;_ end of progn ) ;_ end of if ) ;_ end of defun (defun c:cchw (/ rus eng) (while (setq eng (getstring t "\nВведите слово, которое надо поменять <Отмена> : ") ) ;_ end of setq (setq rus (getstring t (strcat "\nУкажите слово, на которое надо менять " eng " : ") ) ;_ end of getstring ) ;_ end of setq (if rus (progn (ch-eng-to-rus eng rus) ) ;_ end of progn ) ;_ end of if ) ;_ end of while ) ;_ end of defun
через Tools-Load Application подгружаю его. (автоматом не грузиться)
Command: chw
Введите слово, которое надо поменять <Отмена> : Date
Укажите слово, на которое надо менять Date : Дата
Select objects: 1 found здесь я выбрал объект - блок
1 was filtered out.
Надо чтобы текст менялся в блоках и объектах MTEXT
Так я ж в самом начале предупредил:
* Обработка однострочных и многострочных текстов в выборе. Не обрабатываются вхождения в блоки и значения атрибутов. Заменяемые слова регистрозависимы.
а как сделать чтоб и в блоках заменялись слова?
подойдет и другая процедура - только чтоб заменялись слова в блоках и чтобы еще можно было размер текста при этом изменить
Заходить внутрь блока и проверять там. Сейчас времени уже нет
Я же говорю что работаю только первый раз с AutoCAD и не знаю ничего в LISP. Это же наверно не сложно?:)
Иначе мне придется вручную изменять одни и те же фразы в каждом из 200 файлов.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Приемы работы → Текст (MTEXT) и шрифты → AutoCAD 2004. Как настроить кодировку в скрипте?
Форум работает на PunBB, при поддержке Informer Technologies, Inc