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

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

Подсчет простых и динамических блоков

Ответ
Поиск в этой теме
Непрочитано 21.12.2009, 09:49 #1
Подсчет простых и динамических блоков
gizmo_zx
 
Проектировщик ЭО,ЭМ, ЭОС
 
Нижний Новгород
Регистрация: 18.07.2007
Сообщений: 246

Добрый день.
Есть програмка подсчета простых блоков.
- укажите блок
- выберите объекты
результат.
Но она не работает с динамическими блоками.
Подсобите кто може, а то я в лиспе никак...

Код:
[Выделить все]
(defun c:bcount-by-pick (/ ent selset name fun_get-name def)

  (defun fun_get-name (ent)
    (cond
      ((vlax-property-available-p ent 'effectivename)
       (vla-get-effectivename ent)
       )
      ((vlax-property-available-p ent 'name) (vla-get-name ent))
      (t nil)
      ) ;_ end of cond
    ) ;_ end of defun

  (vl-load-com)
  (if
    (and
      (= (type (setq
                 ent (vl-catch-all-apply
                       '(lambda () (car (entsel "\nУкажите блок <Отмена> : ")))
                       ) ;_ end of vl-catch-all-apply
                 ) ;_ end of setq
               ) ;_ end of type
         'ename
         ) ;_ end of =
      (= (cdr (assoc 0 (entget ent))) "INSERT")
      (setq ent (vlax-ename->vla-object ent))
      (setq
        def
         (vla-item
           (vla-get-blocks
             (vla-get-activedocument (vlax-get-acad-object))
             ) ;_ end of vla-get-blocks
           (fun_get-name ent)
           ) ;_ end of vla-item
        ) ;_ end of setq
      (setq name (fun_get-name ent))
      (equal (vla-get-isxref def) :vlax-false)
      ) ;_ end of and
     (progn
       (setq selset (ssadd))
       (vlax-for sub (vla-objectidtoobject
                       (vla-get-activedocument (vlax-get-acad-object))
                       (vla-get-ownerid ent)
                       ) ;_ end of vla-ObjectIDToObject
         (if (and (fun_get-name sub)
                  (= (strcase (fun_get-name sub)) (strcase name))
                  ) ;_ end of and
           (setq selset (ssadd (vlax-vla-object->ename sub) selset))
           ) ;_ end of if
         ) ;_ end of vlax-for
       (if selset
         (progn
           (princ (strcat "\nНормальное имя блока : "
                          (fun_get-name ent)
                          "\nКоличество блоков в текущем пространстве : "
                          (vl-princ-to-string (sslength selset))
                          ) ;_ end of strcat
                  ) ;_ end of princ
           (sssetfirst selset selset)
           ) ;_ end of progn
         ) ;_ end of if
       ) ;_ end of progn
     ) ;_ end of if
  (princ)
  ) ;_ end of defun
Просмотров: 7333
 
Непрочитано 21.12.2009, 10:19
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Проверил - работает с динамическими, но спотыкается на wipeout почему-то. Пример блока бы, с которым не работает.
Do$ вне форума  
 
Непрочитано 21.12.2009, 10:20
#3
VVA

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


найти все блоки, и сохранить их кол-во элементов
подсчет динамических блоков
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.12.2009, 11:11
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Лучше действительно другую готовую программку взять.
В этой, как я понял, перебираются ВСЕ объекты текущей вкладки на соответствие свойства "EffectiveName" или "Name" с выбранным блоком. Поэтому возникают проблемы:
  • У wipeout есть свойство "Name", но при попытке его прочитать, возникает ошибка.
  • Если во вкладке много объектов, программа сильно тормозит.
Do$ вне форума  
 
Непрочитано 21.12.2009, 12:05
#5
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,199


ObjectARX. SelSim — выбор по образцу

[IMG]http://i017.***********/0912/92/9f36c0b38c7c.jpg[/IMG]

Последний раз редактировалось Nike, 21.12.2009 в 12:13.
Nike вне форума  
 
Непрочитано 24.12.2009, 16:46
#6
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 409


вот мой вариант

Код:
[Выделить все]
(defun c:zod10 (/ d_block_name ss1)
(vl-load-com)
(princ "выделение аналогичных динамических блоков")
(setq d_block_name (vla-get-EffectiveName(vlax-ename->vla-object(car (entsel "Укажите нужный блок: ")))))
(setq ss1 (ssget '((0 . "INSERT"))))

(mapcar
          '(lambda (name)(if (/= (vl-catch-all-apply 'vla-get-EffectiveName (list(vlax-ename->vla-object name))) d_block_name)
			     (ssdel name ss1)
			     
			 )
	   )
	(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss1))) 
)
(sssetfirst nil ss1)
(princ)

);_end_of_defun
а обычные блоки я считаю стандартной коммандой _filter

Последний раз редактировалось Composter, 25.12.2009 в 13:22. Причина: забыл дописать
Composter вне форума  
 
Непрочитано 20.01.2010, 21:37
#7
IgorSYS

ПГС
 
Регистрация: 09.03.2006
Москва
Сообщений: 199
<phrase 1=


2 Nike а какой командой в автокаде запускается эта программа?
IgorSYS вне форума  
 
Непрочитано 20.01.2010, 21:41
#8
Кулик Алексей aka kpblc
Moderator

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


http://dwg.ru/art/8
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.01.2010, 22:17
1 | #9
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,199


Цитата:
Сообщение от IgorSYS Посмотреть сообщение
2 Nike а какой командой в автокаде запускается эта программа?
Выбор примитивов по образцу - _SelSim
Выбор примитивов по образцу из выбранного - SelSimSel
Настройка выбора по образцу - _SelSimOptions
Команда выбора по образцу появлется в контекстном меню.
[IMG]http://s002.***********/i197/1001/de/1c38ec03ec1e.jpg[/IMG]

http://www.caduser.ru/forum/index.ph...D=44&TID=38009
Nike вне форума  
 
Непрочитано 21.01.2010, 23:02
#10
IgorSYS

ПГС
 
Регистрация: 09.03.2006
Москва
Сообщений: 199
<phrase 1=


Всем большое спасибо!!!
IgorSYS вне форума  
 
Непрочитано 07.09.2010, 12:39
#11
ZZ_top

конструктор
 
Регистрация: 04.06.2010
Санкт-Петербург
Сообщений: 11


Ребят, можно ли сделать так, чтобы в "Field" в Mtext отображалось количество блоков с именем "Унитаз-1"?
Спасибо
ZZ_top вне форума  
 
Непрочитано 08.09.2010, 03:39
#12
DimAS]/[K

конструктор
 
Регистрация: 11.11.2006
Находка
Сообщений: 99
Отправить сообщение для DimAS]/[K с помощью Skype™


можно сделать извлечение данных в табличку со всеми блоками (которые могут понадобиться в спецификациях и т. д.). А потом уже полем ссылаться на ячейку этой таблицы с извлеченными данными.
DimAS]/[K вне форума  
 
Непрочитано 08.09.2010, 16:04
#13
ZZ_top

конструктор
 
Регистрация: 04.06.2010
Санкт-Петербург
Сообщений: 11


Можете поподробней? это очень актуально. А лучше маааленький пример.. )
ZZ_top вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подсчет простых и динамических блоков

Система Техэксперт дает уверенность в правильности и эффективности принимаемых инженерных решений!
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сквозная нумерация динамических блоков zenon Программирование 214 28.08.2020 08:45
Руководство по созданию динамических блоков tanushka_ch Динамические блоки 20 25.11.2015 20:46
подсчет динамических блоков AAI Программирование 37 25.06.2012 15:05
Проблема вставки Динамических блоков Владимир М Программирование 11 12.09.2007 15:42
Игра -Пятнашки- С использованием динамических блоков Gig Динамические блоки 1 11.12.2006 10:32