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

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

найти все блоки, и сохранить их кол-во элементов

Ответ
Поиск в этой теме
Непрочитано 30.05.2007, 09:56 #1
найти все блоки, и сохранить их кол-во элементов
Юрий_2007z
 
1111
Регистрация: 07.05.2007
Сообщений: 3

здраствуйте,
помогите пожалусто с программой.
цель: взять весь список блоков, использованных на чертеже, посчитать количество элементов (сколько копий одного блока),
результаты сохранить в файл в виде ' имя блока = количество ' ...

липсом занимаюсь недавно. :roll:
работать с файлами научился...

столкнулся с проблеммой что не могу согласовать переменныю символьную и имя блока (для подсчета количества).

А очень хотелось бы это автоматизировать...

(defun C:CB1 ( / bname ss)
; создание списка блоков текущего файла
(setq block (tblnext "BLOCK" 1)) ;_ end of setq
(while block
(if (not (setq descr (cdr (assoc 4 block))))
(setq descr "")
) ;_ end of if


; поиск блоков в выделенной области
; ***
(if (and (setq bname (car(entsel "\nУкажите блок: ")))
(setq bname (entget bname))
(= (cdr(assoc 0 bname)) "INSERT")
(setq ss (ssget (list (assoc 2 bname))))
)
(progn
(princ (strcat "\nКоличесво " (cdr(assoc 2 bname)) " = " (itoa (sslength ss))))
(setq ss nil)
)
)
(princ)
; ***
; поиск блоков в выделенной области


(setq result (cons (list (cdr (assoc 2 block)) descr) result))
(setq block (tblnext "BLOCK"))
) ;_ end of while

)
(princ "\nНаберите CB1 ")
Просмотров: 5516
 
Непрочитано 30.05.2007, 10:08
#2
Кулик Алексей aka kpblc
Moderator

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


bcount, по-моему, достаточно будет. Правда, не для динамических блоков...
Хотя, попробуй:
Код:
[Выделить все]
(defun c:cb2 (/ file_name file_handle selset res blk_name *error*)
  (defun *error* (msg)
    (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (close file_handle))))
    (princ msg)
    (princ)
    ) ;_ end of defun
  (if (and (setq file_name (getfiled "Файл результата" "" "txt" 1))
           (setq selset (ssget '((0 . "INSERT"))))
           ) ;_ end of and
    (progn
      (foreach item
               (mapcar 'vlax-ename->vla-object
                       (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
                       ) ;_ end of mapcar
        (setq blk_name (if (vlax-property-available-p item 'effectivename)
                         (vla-get-effectivename item)
                         (vla-get-name item)
                         ) ;_ end of if
              ) ;_ end of setq
          ; (cdr (assoc 2 (entget item))))
        (if (member blk_name (mapcar 'car res))
          (setq res (subst (cons blk_name (1+ (cdr (assoc blk_name res))))
                           (assoc blk_name res)
                           res
                           ) ;_ end of subst
                ) ;_ end of setq
          (setq res (cons (cons blk_name 1) res))
          ) ;_ end of if
        ) ;_ end of foreach
      (setq file_handle (open file_name "w"))
      (foreach item res
        (write-line (strcat (car item) "=" (itoa (cdr item))) file_handle)
        ) ;_ end of foreach
      (close file_handle)
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
P.S. Писал под 2005, если под 2006 будут проблемы, сообщи.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.05.2007, 10:19
#3
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Ещё тут можно глянуть "Диалоговая функция подсчёта вхождений блоков в файле чертежа".
Alaspher вне форума  
 
Непрочитано 30.05.2007, 11:18
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


И тут

**Добавлено**
И тут SBLK — сумма блоков

Последний раз редактировалось VVA, 07.05.2009 в 17:09. Причина: Обновлены ссылки
VVA вне форума  
 
Непрочитано 30.05.2007, 12:37
#5
Rost

Инженер-Архитектор
 
Регистрация: 20.03.2005
Сообщений: 776


"КВИК селект", поиск блока по имени. При этом выделятся все указанные блоки, соответсвенно в свойствах будет указано число. Исчо можно FILTER применить, там тоже самое, исчем блок по имени в заданном районе, в результате блоки выделены и мы видем их число.
Rost вне форума  
 
Непрочитано 30.05.2007, 15:12
#6
Yura

ЦТП, котельные, отопление, вентиляция
 
Регистрация: 21.02.2007
Кишинев
Сообщений: 548
<phrase 1= Отправить сообщение для Yura с помощью Skype™


А eattext разве не считает количество блоков, даже без атрибутов?
Yura вне форума  
 
Автор темы   Непрочитано 30.05.2007, 15:36
#7
Юрий_2007z


 
Регистрация: 07.05.2007
1111
Сообщений: 3


всем спасибо ...
Особенно Алексею , все пошло на ура и то что надо
Юрий_2007z вне форума  
 
Непрочитано 07.05.2009, 16:18
#8
Brendovich

Инженер-конструктор
 
Регистрация: 11.05.2008
Украина, Житомир
Сообщений: 210
Отправить сообщение для Brendovich с помощью Skype™


Воскрешу тему. Попробовал лисп с поста №2.Вначале все работало, радости было много , а через час перезагрузив компьютер лисп отказался работать. Вылазит окошко, чтоб выбрать файл отчета, выделяю планы, нажимаю Enter... а отчет пустой
Чтобы ето могло быть? (Автокад 2008 rus)
Brendovich вне форума  
 
Непрочитано 07.05.2009, 17:12
#9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Обновил ссылки в #4
А так еще
Подсчет блоков в AutoCad2006
Подсчет динамических блоков
По последней ссылке с выводом в Excell
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > найти все блоки, и сохранить их кол-во элементов