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

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

Подсчет количества блоков

Ответ
Поиск в этой теме
Непрочитано 17.07.2008, 12:16
Подсчет количества блоков
Seryj_Wolk
 
Инженер-электрик
 
Псков
Регистрация: 04.03.2008
Сообщений: 59

Знаю что таких тем уже хватает, но изучив их, то что нужно найти не смог. Нашел по ссылке в этой теме лисп:
Код:
[Выделить все]
(defun c:bcount (/ curEnt dxfList blName Count)
  (if
  (setq curEnt(entsel "*** Select sample block "))
  (progn
   (setq dxfList(entget(car curEnt)))
  (terpri)
  (if(= "INSERT"(cdr(assoc 0 dxfList)))
    (progn
    (setq blName(cdr(assoc 2 dxfList))
          Count(sslength(ssget "_X"
    (list(assoc 2 dxfList))))
    ); end setq
    (princ(strcat "*** Block name: " blName
      "\n*** Blocks in drawing: "(itoa Count)))
    );end progn
    (princ "\n*** This don't block!\n ")
    ); end if
  ); end progn
  (princ "\n*** Nothing selected!\n ")
  ); end if
  (princ)
  ); end bstat
Может кто-нить подкорректировать его так, чтобы при тыканьи в блок не только подсчитывалось количество блоков данного типа, но и еще они бы выделялись. Буду очень признателен
Просмотров: 12750
 
Автор темы   Непрочитано 17.07.2008, 15:23
#21
Seryj_Wolk

Инженер-электрик
 
Регистрация: 04.03.2008
Псков
Сообщений: 59


Елпанов Евгений, работает шустро, но как и в предыдущей версии есть косяк.
Если выбран какой то элемент то команда не работает. И если не сбросить выделения после использования команды, то опять же лисп перестает работать. До тех пор пока не выберешь какой-либо элемент и не сбросишь с него выделение или не используешь какую-либо другую команду. Вот, как смог, объяснил..
Seryj_Wolk вне форума  
 
Непрочитано 17.07.2008, 15:26
#22
Елпанов Евгений

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


Цитата:
Сообщение от Seryj_Wolk Посмотреть сообщение
Елпанов Евгений, работает шустро, но как и в предыдущей версии есть косяк.
Если выбран какой то элемент то команда не работает. И если не сбросить выделения после использования команды, то опять же лисп перестает работать. До тех пор пока не выберешь какой-либо элемент и не сбросишь с него выделение или не используешь какую-либо другую команду. Вот, как смог, объяснил..
пожалуйста, убрал выделение, а заодно лишнюю переменную...
Код:
[Выделить все]
(defun c:bcount (/ a)
 (sssetfirst nil)
 (print "*** Select sample block ")
 (if (setq a (ssget "_+.:S" '((0 . "INSERT"))))
  (princ (strcat (itoa (sslength (cadr (sssetfirst
                                        nil
                                        (ssget "_x"
                                               (list (cons 2
                                                           (setq a
                                                                 (cond
                                                                  ((vlax-property-available-p
                                                                    (setq a (vlax-ename->vla-object (ssname a 0)))
                                                                    'effectivename
                                                                   ) ;_  vlax-property-available-p
                                                                   (vla-get-effectivename a)
                                                                  )
                                                                  ((vlax-property-available-p a 'name) (vla-get-name a))
                                                                  (t nil)
                                                                 ) ;_  cond
                                                           ) ;_  setq
                                                     ) ;_  cons
                                               ) ;_  list
                                        ) ;_  ssget
                                       ) ;_  sssetfirst
                                 ) ;_  cadr
                       ) ;_  sslength
                 ) ;_  itoa
                 " : "
                 a
         ) ;_  strcat
  ) ;_  princ
 ) ;_  if
 (princ)
)
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 17.07.2008, 15:38
#23
Seryj_Wolk

Инженер-электрик
 
Регистрация: 04.03.2008
Псков
Сообщений: 59


Елпанов Евгений
вот теперь все отлично.
Только результат немного криво выводиться
2 : Ящик с понижающим трансформатором
Переделай пожалуйста чтобы было так
Ящик с понижающим трансформатором: 2
Seryj_Wolk вне форума  
 
Непрочитано 17.07.2008, 15:41
#24
Елпанов Евгений

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


Цитата:
Сообщение от Seryj_Wolk Посмотреть сообщение
Елпанов Евгений
вот теперь все отлично.
Только результат немного криво выводиться
2 : Ящик с понижающим трансформатором
Переделай пожалуйста чтобы было так
Ящик с понижающим трансформатором: 2
не, переделывать не буду, даже добавлю, код не работает на динамических блоках
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 17.07.2008, 16:14
#25
Seryj_Wolk

Инженер-электрик
 
Регистрация: 04.03.2008
Псков
Сообщений: 59


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
не, переделывать не буду, даже добавлю, код не работает на динамических блоках
жаль, хороший лисп был...
Seryj_Wolk вне форума  
 
Непрочитано 17.07.2008, 16:27
#26
Елпанов Евгений

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


Цитата:
Сообщение от Seryj_Wolk Посмотреть сообщение
жаль, хороший лисп был...
тестируй...
Код:
[Выделить все]
(defun c:bcount (/ A S)
 (sssetfirst nil)
 (print "*** Select sample block ")
 (if (setq s (ssget "_+.:S" '((0 . "INSERT"))))
  (progn
   (cond
    ((vlax-property-available-p
      (setq a (vlax-ename->vla-object (ssname s 0)))
      'effectivename
     )
     (princ
      (strcat
       "\""
       (setq a (vla-get-effectivename a))
       "\" : "
       (itoa
        (sslength
         (cadr
          (sssetfirst
           nil
           (foreach x
                    (vl-remove-if-not
                     '(lambda (x)
                       (and
                        (vlax-property-available-p x 'effectivename)
                        (= (vla-get-effectivename x) a)
                       ) ;_  and
                      ) ;_  lambda
                     (mapcar
                      'vlax-ename->vla-object
                      (mapcar 'cadr
                              (ssnamex (ssget "_x" '((0 . "INSERT"))))
                      ) ;_  mapcar
                     ) ;_  mapcar
                    ) ;_  vl-remove-if-not
            (ssadd (vlax-vla-object->ename x) s)
           ) ;_  foreach
          ) ;_  sssetfirst
         ) ;_  cadr
        ) ;_  sslength
       ) ;_  itoa
      ) ;_  strcat
     ) ;_  princ
    )
    ((vlax-property-available-p a 'name)
     (princ
      (strcat
       (vla-get-name a)
       " : "
       (itoa
        (sslength (cadr (sssetfirst
                         nil
                         (ssget "_x" (list (cons 2 (vla-get-name a))))
                        ) ;_  sssetfirst
                  ) ;_  cadr
        ) ;_  sslength
       ) ;_  itoa
      ) ;_  strcat
     ) ;_  princ
    )
    (t nil)
   ) ;_  cond
  ) ;_  progn
 ) ;_  if
 (princ)
)
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 17.07.2008, 16:43
#27
Seryj_Wolk

Инженер-электрик
 
Регистрация: 04.03.2008
Псков
Сообщений: 59


В принципе все работает, но скорость потерялась.
Насчет динамических блоков не знаю, я с ними мало работаю. Не мог бы сделать упрощенный вариант для обычных блоков. И при выводе блока можно убрать кавычки с названия блока, ну это уже мелочь
Seryj_Wolk вне форума  
 
Непрочитано 12.01.2012, 11:26
#28
Rainbow.dgw

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


Очень полезная программа, жалко только, что динамические блоки разных размеров не разделяет.(((
Rainbow.dgw вне форума  
 
Непрочитано 12.01.2012, 12:37
#29
VVA

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


Цитата:
Сообщение от Rainbow.dgw Посмотреть сообщение
жалко только, что динамические блоки разных размеров не разделяет.(((
Это видел?
как выбрать динамические блоки по состоянию видимости?
Подсчет простых и динамических блоков
подсчет динамических блоков
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подсчет количества блоков

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет блоков в AutoCad2006 Natan AutoCAD 44 02.10.2019 12:32
подсчет динамических блоков AAI Программирование 37 25.06.2012 15:05
Изменить параметры у всех объектов внутри блоков 800x600 AutoCAD 5 25.03.2008 14:21
Подсчет количества блоков juri AutoCAD 9 10.10.2004 20:06