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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как перебрать все текстовые строки в открытом Автокадовском файле используя AutoLISP?

Как перебрать все текстовые строки в открытом Автокадовском файле используя AutoLISP?

Ответ
Поиск в этой теме
Непрочитано 03.08.2009, 11:01 #1
Как перебрать все текстовые строки в открытом Автокадовском файле используя AutoLISP?
lexluther
 
Регистрация: 19.03.2009
Сообщений: 51

Добрый день,

Можете кинуть пожалуйста пример в котором просто циклически перебираются строковые значения всех MTEXT и TEXT объектов, мне нужно в каждой итерации цикла их передавать КОМ объекту (это я уже умею). Осталось только написать цикл для перебора всех текстовых строк на Автокадовском рисунке.

И еще вопрос. Почему следующий код который я нашел в интернете не работает?

(defun c:txtex (/ et)
(setq fl (open "dtext.txt" "w")
et (entnext)
)
(while et
(setq el (entget et)
tp (cdr (assoc 0 el))
)
(if (or (= tp "TEXT") (= tp "MTEXT"))
(write-line (cdr (assoc 1 el)) fl)
)
(setq et (entnext et))
)
(close fl)
)

Там делается приблизительно то что мне нужно (только в файл), но почему то в результате я нигде не могу найти на диске файл dtext.txt. Извините за наверное тупой вопрос. В остальном этот код правильный или надо что то учесть еще?

С уважением.
Просмотров: 2534
 
Непрочитано 03.08.2009, 11:23
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
не могу найти на диске файл dtext.txt.
Код:
[Выделить все]
(setq fl (open "C:\\dtext.txt" "w")) 
 ...
То, что тебе нужно, делается здесь LISP. Замена текстового стиля. Попутно вопросы
1. Что делать с текстами в блоках? (нужны или нет)
2. Если в текст вставлено поле (поля)?
3. Что делать с форматированием MTEXT'a?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 03.08.2009, 13:00
#3
lexluther


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


Спасибо! по поводу вопросов:

Общая задача выглядит так: "проекспортировать все текстовые строки из рисунка"

Теперь непосредственно ответы.

1. Текст в блоке если легко его достать тоже может и нужен, я не совсем понял что такое блок (нужны как я понял только TEXT и MTEXT)
2. По поводу полей меня интерессует только текстовое значение
3. Форматирование не нужно, только текстовое значение.
lexluther вне форума  
 
Непрочитано 03.08.2009, 13:24
#4
Capiton


 
Регистрация: 11.03.2009
Тюмень
Сообщений: 109
<phrase 1=


Для перебора текстов в AutoLISP сформируй набор с помощью функции ssget и перебирай c помощью функции ssname.
Capiton вне форума  
 
Автор темы   Непрочитано 25.08.2009, 14:04
#5
lexluther


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


А можно детальнее про ssget и ssname? Хотя бы маленький пример пожалуйста!
lexluther вне форума  
 
Непрочитано 26.08.2009, 14:44
#6
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Код:
[Выделить все]
 
((lambda (/ sset)
  (if (setq sset (ssget "_X" '((0 . "*TEXT"))))
   (mapcar (function
            (lambda (x) (cdr (assoc '1 (entget x))))
           ) ;_ end of function
           (vl-remove-if
            (function listp)
            (mapcar (function cadr) (ssnamex sset))
           ) ;_ end of vl-remove-if
   ) ;_  mapcar
  ) ;_  if
 ) ;_  lambda
)
Код:
[Выделить все]
 
((lambda (/ sset n name lst)
  (if (setq sset (ssget "_X" '((0 . "*TEXT"))))
   (progn (setq n 0)
          (while (setq name (ssname sset n))
           (setq lst
                 (cons (cdr (assoc '1 (entget name))) lst)
           ) ;_  setq
           (setq n (1+ n))
          ) ;_  while
   ) ;_  progn
  ) ;_  if
 ) ;_  lambda
)

Последний раз редактировалось CB, 26.08.2009 в 17:53. Причина: "_X"
CB вне форума  
 
Непрочитано 26.08.2009, 16:22
#7
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Код:
[Выделить все]
(defun c:test (/ s)
 (if (setq s (ssget "_X" '((0 . "*TEXT"))))
  (foreach str
           (mapcar (function (lambda (x) (cdr (assoc '1 (entget (cadr x)))))) (ssnamex s))
   ;; Здесь делаем все, что необходимо, с переменной STR,
   ;; в ней хранится текст...
   ;; например, отправляем в командную строку на печать:
   (princ (strcat "\n" str))
  ) ;_  foreach
 ) ;_  if
 (princ)
)
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/

Последний раз редактировалось Елпанов Евгений, 26.08.2009 в 16:29.
Елпанов Евгений вне форума  
 
Непрочитано 26.08.2009, 16:25
#8
Кулик Алексей aka kpblc
Moderator

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


CB, Елпанов Евгений, для русской версии выбор ssget с ключом "X" не сработает
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.08.2009, 16:29
#9
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
CB, Елпанов Евгений, для русской версии выбор ssget с ключом "X" не сработает
Спасибо, исправил...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 26.08.2009, 17:37
#10
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


А про группу 3 для MTEXT все уже забыли?
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как перебрать все текстовые строки в открытом Автокадовском файле используя AutoLISP?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Юмор 2007 Огурец Разное 1172 29.12.2007 11:16
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46
БРЕД СИВОЙ КОБЫЛЫ Kryaker Разное 1876 29.12.2006 23:41
как посмотреть все блоки в файле, не откр. его. Александер Программирование 10 03.08.2005 11:10