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

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

Lisp: как получить список загруженных шейпов?

Ответ
Поиск в этой теме
Непрочитано 30.01.2013, 09:13 #1
Lisp: как получить список загруженных шейпов?
cj_lex
 
Регистрация: 15.12.2011
Сообщений: 29

Добрый день.
Подскажите, пожалуйста, как программно с помощью лисп получить список загруженный в чертеж шейпов (форм) и как получить детальную информацию о каждом шейпе? Необходимо для анализа типов линий, в которых участвуют шейпы. Заранее спасибо.
Просмотров: 1404
 
Непрочитано 31.01.2013, 14:55
#2
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Может так?
Код:
[Выделить все]
 (defun c:tst  (/ x00 x00 x01 x02 x03)
  (setq x00 "")
  (repeat (setq x02 (vla-get-count (setq x01 (vla-get-linetypes (vla-get-activedocument (vlax-get-acad-object))))))
    (and (setq x04 (cdr (assoc 340 (setq x03 (entget (vlax-vla-object->ename (vla-item x01 (setq x02 (1- x02)))))))))
         (eq ".shx"
             (vl-filename-extension
               (setq x04 (substr (setq x04 (substr (cdr (assoc 3 (entget x04))) 2)) 1 (1- (strlen x04))))))
         (setq x00 (strcat x00 "\n" (cdr (assoc 2 x03)) " - " (vl-filename-base x04) ".shx"))))
  (princ (if (zerop (strlen x00))
           "\nТипы линий в чертеже не используют формы."
           (strcat "\nВ следующих типах линий используются формы:" x00)))
  (princ))
ciril вне форума  
 
Автор темы   Непрочитано 01.02.2013, 14:24
#3
cj_lex


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


Цитата:
Сообщение от ciril Посмотреть сообщение
Может так?
Код:
[Выделить все]
 (defun c:tst  (/ x00 x00 x01 x02 x03)
  (setq x00 "")
  (repeat (setq x02 (vla-get-count (setq x01 (vla-get-linetypes (vla-get-activedocument (vlax-get-acad-object))))))
    (and (setq x04 (cdr (assoc 340 (setq x03 (entget (vlax-vla-object->ename (vla-item x01 (setq x02 (1- x02)))))))))
         (eq ".shx"
             (vl-filename-extension
               (setq x04 (substr (setq x04 (substr (cdr (assoc 3 (entget x04))) 2)) 1 (1- (strlen x04))))))
         (setq x00 (strcat x00 "\n" (cdr (assoc 2 x03)) " - " (vl-filename-base x04) ".shx"))))
  (princ (if (zerop (strlen x00))
           "\nТипы линий в чертеже не используют формы."
           (strcat "\nВ следующих типах линий используются формы:" x00)))
  (princ))
у меня код не заработал, для получения списка загруженных SHX файлов я использовал:
Код:
[Выделить все]
 
(defun get_loaded_shx_files ( / result)
  (vlax-for x (vla-get-TextStyles(vla-get-activedocument (vlax-get-acad-object)))
    (if(= (cdr(assoc 70(entget (vlax-vla-object->ename x))))1)
      (setq result (append result (list(cdr(assoc 3(entget (vlax-vla-object->ename x)))))))
    ); end if
  ); end for
  result
); end defun
а вот для получения имен шейпов и их номеров на net писал программку для чтения бинарных данных из shx файла (на лиспе такого не сделаешь - байт 13 превращается в 10 и т.д. - может кто подскажет как на лиспе такое сделать?) прога на лиспе запускает эту прогу, которая преобразует бинарные данные в hex, и дальше ищет по номеру шейпа его название в shx файле.

shx файл:
0x1c - количество шейпов
0x1e - блоки по 4 байта, 2 байта - номер шейпа, 2 байта - размер блока с описанием конкретного шейпа.
блок с описанием конкретного шейпа начинается с его названия, отделенного от графических данных байтом 00.
адрес блока с описанием конкретного шейпа: 1e + кол-во_шейпов * 4 + сумма_длин_блоков_описания_предыдущих_шейпов

С теми шейпами, что используются у меня на работе, все заработало.
cj_lex вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp: как получить список загруженных шейпов?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить Список файлов в директории (поддиректорий) VBA sf Программирование 2 17.12.2010 12:06
как получить список всех видов в чертеже Димас Программирование 12 22.02.2006 02:29
Можно ли получить список загруженных команд? Кулик Алексей aka kpblc Программирование 8 11.10.2005 09:04
Как получить список открытых файлов? ===AAA=== Программирование 2 26.08.2005 11:55
Можно ли получить список реакторов объекта? kos Программирование 1 13.01.2005 13:28