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

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

Как получить список слоев и список текстовых стилей?

Ответ
Поиск в этой теме
Непрочитано 06.07.2006, 06:14 #1
Как получить список слоев и список текстовых стилей?
DANZZ
 
Проектировщик
 
Омск
Регистрация: 05.05.2006
Сообщений: 91

Как с помощью Lisp вытащить список всех слоев в данном чертеже и всех текстовых стилей? :?: и записать в переменные
Просмотров: 6068
 
Непрочитано 06.07.2006, 07:36
#2
_Andre_

механизатор
 
Регистрация: 28.12.2004
Самара
Сообщений: 312
<phrase 1=


Все слои
Код:
[Выделить все]
(defun get-all-layer (/ CUR_LAYER LIST_OF_LAYER )
  (setq list_of_layer (list (cdr (assoc 2 (tblnext "Layer" t)))))
  (while (setq cur_layer (tblnext "Layer"))
    (setq list_of_layer (append list_of_layer (list (cdr (assoc 2 cur_layer)))))
  ) ;_ end of while
)
Все текстовые стили
Код:
[Выделить все]
(defun get-all-textstyle (/ CUR_style LIST_OF_style )
  (setq list_of_style (list (cdr (assoc 2 (tblnext "style" t)))))
  (while (setq cur_style (tblnext "style"))
    (setq list_of_style (append list_of_style (list (cdr (assoc 2 cur_style)))))
  ) ;_ end of while
)
_Andre_ вне форума  
 
Непрочитано 06.07.2006, 09:50
#3
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,169
<phrase 1=


Код:
[Выделить все]
(mapcar	(function (lambda (i / _list)
		    (VLAX-FOR i	(vlax-get-property
				   (vla-get-ActiveDocument
				    (vlax-get-acad-object)
				  )
				   i
				)
		      (setq _list
			     (cons (vla-get-name i) _list)
		      )
		    )
		  )
	)
	(list 'layers 'TextStyles)
)
возвратит список, состоящий из списка имен слоев и списка имен текстовых стилей.
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 06.07.2006, 12:06
#4
Елпанов Евгений

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


Как альтернатива VLA-* ...

Код:
[Выделить все]
(defun lst-layer (i)
  ;(lst-layer  t)
  (if (setq i (tblnext "LAYER" i))
    (cons (cdadr i) (lst-layer nil))
  ) ;_  if
) ;_  defun
(defun lst-Style (i)
  ;(lst-Style  t)
  (if (setq i (tblnext "Style" i))
    (cons (cdadr i) (lst-Style nil))
  ) ;_  if
) ;_  defun
Елпанов Евгений вне форума  
 
Непрочитано 06.07.2006, 12:55
#5
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,241


Можно получать списки блоков, слоев, размерных и текстовых стилей, типов линий, подставив соотв. параметр.
Возвращает список.

Примеры вызовов:
Код:
[Выделить все]
(STtoL "LAYER")
(STtoL "LTYPE")
(STtoL "STYLE")
(STtoL "BLOCK")
Сама функция:
Код:
[Выделить все]
(defun STtoL (t1 / v1 l1 l2);Symbol Tabl to List
(if (setq v1 (tblnext t1 T))
   (progn
      (while v1 (setq l1 (cons (cdr (assoc 2 v1)) l1) v1 (tblnext t1)))
      (cond
         ((= (strcase t1) "BLOCK")
            (foreach v1 l1
               (if (and (not (TinT "*" v1));отсечка блоков размеров
                        (not (TinT "|" v1)));отсечка блоков ссылок
                  (setq l2 (cons v1 l2))))
            (setq l1 (reverse l2)))
      );cond
      (setq tmp0 nil)
      (reverse l1)) nil);if
);STtoL
Pilot вне форума  
 
Непрочитано 06.07.2006, 13:13
#6
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Код:
[Выделить все]
(setq l_list (ai_table "LAYER" 0))
Код:
[Выделить все]
(setq t_list (ai_table "STYLE" 0))
Profan вне форума  
 
Непрочитано 06.07.2006, 16:47
#7
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Из бриллиантов лиспа:
Код:
[Выделить все]
; written by Michael Puckett.
(defun Table (s / d r)
(while (setq d (tblnext s (null d)))
(setq r (append r (list (cdr (assoc 2 d)))))
)
)
;Вызов
 (table "style")
 (table "layer") и тд
~'J'~
fixo вне форума  
 
Непрочитано 08.02.2016, 09:53
#8
CHILD_11


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


так какую порекомендуете в итоге?
автокад 2015.
(хочу получить список всех слоев, что есть в чертеже, в виде текстового файла)

попытался использовать первый лисп, загрузил, пытаюсь вызвать командой "get-all-layer" пишет "неизвестная команда". что-то не так делаю?
_____
понял свою ошибку - не заключил в круглие скобки имя команды.
в итоге - выдало список слоев прямо в командной строке в кавычках. в другом виде, видимо, не получить?
CHILD_11 вне форума  
 
Непрочитано 08.02.2016, 09:58
#9
Сергей812


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


потому что это функция, а не команды. Синтаксис функции в лиспе:
Код:
[Выделить все]
 (defun %имя функции% (%Аргументы% / %Локальные переменные%)
...
)
а команда должна иметь префикс c: и не иметь аргументов
Код:
[Выделить все]
 (defun c:%имя функции% ( / %Локальные переменные%)
...
)
Сергей812 вне форума  
 
Непрочитано 08.02.2016, 10:02
#10
CHILD_11


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


также смущает то, что слои не в алфавитном порядке... так и должно быть, или что-то не так делаю?

Сергей812, да, уже понял свою ошибку)

Последний раз редактировалось CHILD_11, 08.02.2016 в 10:14.
CHILD_11 вне форума  
 
Непрочитано 08.02.2016, 10:38
#11
Сергей812


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


примените к результирующему списку vl-sort после цикла получения списка имен слоев
Сергей812 вне форума  
 
Непрочитано 08.02.2016, 17:35
#12
CHILD_11


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


Цитата:
vl-sort
- это тоже лисп?

я сделал "по-тупому": скопировал результат из командной строки в файл word. в нем произвел замену *" * на *"^p* (чтобы получить имя каждого слоя с новой строки). далее все выделил и вставил в файл excel, где благополучно отсортировал.
CHILD_11 вне форума  
 
Непрочитано 08.02.2016, 18:57
#13
VVA

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


Цитата:
Сообщение от CHILD_11 Посмотреть сообщение
также смущает то, что слои не в алфавитном порядке..
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
примените к результирующему списку vl-sort после цикла получения списка имен слоев
Похожая тема, с примерами Список всех слоёв
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить список слоев и список текстовых стилей?

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

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