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

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

как узнать сколько блоков в чертеже определенного имени?

Ответ
Поиск в этой теме
Непрочитано 21.07.2005, 15:32 #1
как узнать сколько блоков в чертеже определенного имени?
ilka_t
 
Москва
Регистрация: 20.01.2004
Сообщений: 154

Сейчас пользуюсь Quick Select но не очень удобно... возни много

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

или абщий лист блоков с количеством
Просмотров: 7585
 
Непрочитано 21.07.2005, 16:02
#2
Amzid


 
Регистрация: 09.06.2005
Москва
Сообщений: 100


Может _filter поможет.
Можно сохранить “шаблон фильтра” в файл, а в нужный момент его загрузить.
Amzid вне форума  
 
Непрочитано 21.07.2005, 16:19
#3
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Тулпаковская DSTP_BLKSUMREP сделает табличку с блоками и их количеством в чертеже. очень удобно
zamtmn вне форума  
 
Непрочитано 21.07.2005, 16:19
#4
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Самый простой способ - это применить bcount из ExpressTools,
но еще проще применить поис по этой и по autocad.ry конфам.
Тема обсуждалась неоднократно и были очень красивые решения!
Alan вне форума  
 
Непрочитано 21.07.2005, 16:42 Re: как узнать сколько блоков в чертеже определенного имени?
#5
k168


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


Цитата:
Сообщение от ilka_t
как сделать что бы щелкнул на блок и он тебе показал какое их количество имеется в чертеже, или в выделенном фрагментене

или абщий лист блоков с количеством
В СПДС 3.0 есть такая функция, используется для сбора данных в таблицу. Но можно и отредактировать значение атрибутов через "Properties" Автокада
[ATTACH]1121949730.gif[/ATTACH]
k168 вне форума  
 
Непрочитано 21.07.2005, 17:58
#6
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Сначала выбираешь примитивы в слоях где нужно считать блоки (для выбора слоёв), затем обводишь рамками области, где их нужно считать, потом оно выдает репортаж о количестве который при желании можно экспортировать в Exel.
Код:
[Выделить все]
(defun c:blcx(/ blSet blList nameList listLen outList exFlag oldExFlag
		   exPath exApp exWorkbook exFileexSheets exSheet curId
		   newFile curCell curVal)

  
  (vl-load-com)
  (princ "*** Select entities on wanted layers *** ")
  (setq laySet(ssget)
	dxfList(mapcar
		 'entget
		   (vl-remove-if 'listp 
                     (mapcar 'cadr(ssnamex laySet))))
	dxfList(mapcar
		 '(lambda(x)(assoc 8 x))dxfList)
	filList '()
	); end setq
  (foreach lst dxfList
    (if(not(member(cdr lst)(mapcar 'cdr filList)))
      (setq filList(append filList(list lst)))
      ); end if
    ); end foreach
  (princ "\n******* Layers List for Blocks Counting ******* \n")
  (foreach lay filList
    (princ(strcat "\n"(cdr lay)))
    ); end of foreach
  (princ "\n********************************************** ")
  (textscr)
  (setq filList(append '((-4 . "<OR"))filList)
	filList(append filList '((-4 . "OR>")))
	filList(append '((0 . "INSERT"))filList)
	); end setq
		       
  (princ "\n*** Specify selection set by frame selection *** ")
  (if
    (setq blSet(ssget filList))
    (progn
      (setq blList(mapcar 'vlax-ename->vla-object 
                    (vl-remove-if 'listp 
                     (mapcar 'cadr(ssnamex blSet))))
	    nameList(vl-sort (mapcar'(lambda(X)(vla-get-Name x)) blList) '<)
	    listLen(length nameList)
	    ); end setq
      (while nameList
  (setq outList (cons(cons(car nameList)
           (- listLen(setq listLen(length (setq nameList
	   (vl-remove(car nameList) nameList))))))outList)
        ); end setq
  ) ; end while
      (princ "\n********** BLOCK COUNTING REPORT ************\n ")
      (foreach item outList
	(princ(strcat "\n" (car item)" "(itoa(cdr item))))
	); end foreach
      (princ "\n \n************* END OF REPORT *****************")
      (textscr)
      (if(not exFlag)(setq exFlag "N"))
      (setq oldExFlag exFlag)
      (initget "Y N")
      (setq exFlag
	     (getkword
		(strcat "\n\n*** Save report to MS Excel file? [Y/N] <"exFlag">: ")))
      (if(null exFlag)(setq exFlag oldExFlag))
      (if(= exFlag "Y")
	(progn
	   (if (setq  exPath(getfiled "Save Text File As"
           (strcat (getvar "dwgprefix")(substr (getvar "dwgname") 1
		(- (strlen (getvar "dwgname")) 4)) ".xls")"xls" 33); end getfiled
            ); end setq
	     (progn
	(setq exApp(vlax-create-object "Excel.Application"))
	(if(null exApp)
	  (progn
	    (alert "Error. Can't start MS Excel.")
	    (quit)
	    ); end progn
	    ); end if
	 (setq exWorkbook
	           (vlax-get-property exApp "Workbooks")
	       exFile
	           (vlax-invoke-method exWorkbook "Add")
	       exSheets
	           (vlax-get-property exFile "Worksheets") 
               exSheet
	           (vlax-get-property exSheets "Item" "Sheet1")
	       curRow 2
	); end setq
	  (repeat(length outList)
	    (setq curId(strcat "B"(itoa curRow))
		  curCell(vlax-variant-value

		         (vlax-invoke-method exSheet "Evaluate" curId))
		  curVal(car(nth(- curRow 2) outList))
		  ); end setq
		  (vlax-put-property curCell  "Formula" curVal)
	    (vlax-release-object curCell)
	    (setq curId(strcat "C"(itoa curRow))
		  curCell(vlax-variant-value
		         (vlax-invoke-method exSheet "Evaluate" curId))
		  curVal(itoa(cdr(nth(- curRow 2) outList)))
		  ); end setq
		  (vlax-put-property curCell  "Formula" curVal)
	    (vlax-release-object curCell)
	    (setq curRow(1+ curRow))
	    ); end repeat
	  (vlax-invoke-method exFile "SaveAs" exPath nil nil nil nil nil nil)
	  (vlax-invoke-method exFile "Close" nil)
	  (vlax-invoke-method exApp "Quit")
    (mapcar(function(lambda(x)
	       (if
		 (and x(not(vlax-object-released-p x)))
		 (vlax-release-object x)
		 )
	       ))
    (list curCell exSheet exSheets exFile exWorkbook exApp)
    )
    (setq curCell nil
          exSheet nil
          exSheets nil
          exFile nil
	  exWorkbook nil
	  exApp nil); end setq
    (gc)
	(princ(strcat"\n*** The file was successfully saved in: " exPath)) 
	); end progn
	     (princ "\n*** Excel file was not created! *** ")
	     ); end if
       ); end progn
      ); end if
    ); end progn
    (princ "\n*** Nothing blocks selected! ***")
  ); end if
      (princ)
      ); end of BLCX

(princ "\nType BLCX to run.")
{Smirnoff} вне форума  
 
Непрочитано 22.07.2005, 08:24
#7
Nike

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


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

Код:
[Выделить все]
(defun C:BLCOUNT ( / FILEPATH FILE_NAME INSLIST INSNAMES INSS LEN OUTPUT)
  (if (setq INSS (ssget '((0 . "INSERT"))))
    (progn
      (setq INSLIST (vl-remove-if-not 'atom (mapcar 'cadr (ssnamex INSS))))
      (setq INSNAMES (vl-sort (mapcar '(lambda (X) (cdr (assoc 2 (entget X)))) INSLIST) '<))
      (setq LEN (length INSNAMES))
      (while INSNAMES
  (setq OUTPUT (cons (cons
           (car INSNAMES)
           (- LEN (setq LEN (length (setq INSNAMES (vl-remove (car INSNAMES) INSNAMES))))))
         OUTPUT)
        ) ;_ end of setq
  ) ;_ end of while
      (setq OUTPUT (reverse OUTPUT))
      (if (setq  FILEPATH (getfiled "Save Text File As"
           (strcat (getvar "dwgprefix")
             (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 4)) ".txt")
           "txt"
           33
           ) ;_ end of getfiled
    ) ;_ end of setq
  (if (setq FILE_NAME (open FILEPATH "w"))
    (progn
      (mapcar '(lambda (X) (write-line (strcat (car X) " " (itoa (cdr X))) FILE_NAME)) OUTPUT)
      (close FILE_NAME)
      (startapp "NOTEPAD" FILEPATH)
      ) ;_ end of progn
    (vlax-invoke-method (vlax-get-or-create-object "WScript.Shell") "Popup"
      (strcat "File: [" FILEPATH "] is busy!") 0 "Warning" 16)
    ) ;_ end of if
  ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
Nike вне форума  
 
Непрочитано 22.07.2005, 08:34
#8
Nike

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


Можно так:

Код:
[Выделить все]
(defun c:bsel (/) ;;; выбор всех одноименных блоков по указке
  (setvar "cmdecho" 0) 
  (sssetfirst 
    nil 
    (setq bSet 
      (ssget 
        "_X" 
        (list 
          (assoc 2 (entget (car (entsel "Select sample block: ")))) 
        ) 
      ) 
    ) 
  ) 
  (terpri) 
  (princ(strcat "*** "(itoa(sslength bSet)) " bloks selected ***")) 
  (princ) 
)
затем в окне свойств посмотреть количество.

P.S. Может быть уважаемые Гуру подправили бы прожку так, чтоб она работала не только во всём чертеже, но и в выделенном фрагменте
Nike вне форума  
 
Непрочитано 22.07.2005, 09:29
#9
Кулик Алексей aka kpblc
Moderator

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


> Nike : исправь (ssget "_X" ...) на (ssget "_C" ...) Вообще-то мне лень перепечатывать Полещука, поэтому выдержка из справки:
Цитата:
C Crossing selection.

CP Cpolygon selection (all objects crossing and inside of the specified polygon).

F Fence selection.

I Implied selection (objects selected while PICKFIRST is in effect).

L Last visible object added to the database.

P Last selection set created.

W Window selection.

WP WPolygon (all objects within the specified polygon).

X Entire database. If you specify the X selection method and do not provide a filter-list, ssget selects all entities in the database, including entities on layers that are off, frozen, and out of the visible screen.

:E Everything within the cursor's object selection pickbox.

:N Call ssnamex for additional information on container blocks and transformation matrices for any entities selected during the ssget operation. This additional information is available only for entities selected via graphical selection methods such as Window, Crossing, and point picks.

Unlike the other object selection methods, :N may return multiple entities with the same entity name in the selection set. For example, if the user selects a subentity of a complex entity such as a BlockReference, PolygonMesh, or old style polyline, ssget looks at the subentity that is selected when determining if it has already been selected. However, ssget actually adds the main entity (BlockReference, PolygonMesh, an so on) to the selection set. The result could be multiple entries with the same entity name in the selection set (each will have different subentity information for ssnamex to report).

:S Allow single selection only.
P.S. Я не гуру, а количество постов говорит только о скорости нажатия на клавиши.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.07.2005, 09:34
#10
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


{Smirnoff} вне форума  
 
Непрочитано 22.07.2005, 10:50
#11
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Nike
Цитата:
P.S. Может быть уважаемые Гуру подправили бы прожку так, чтоб она работала не только во всём чертеже, но и в выделенном фрагменте Smile
Надо просто убрать "_X" после (ssget.
Код:
[Выделить все]
(defun c:bsel (/)
  (setvar "cmdecho" 0)
  (sssetfirst
    nil
    (setq bSet
      (ssget
        (list
          (assoc 2 (entget (car (entsel "Select sample block: "))))
        )
      )
    )
  )
  (terpri)
  (princ(strcat "*** "(itoa(sslength bSet)) " bloks selected ***"))
  (princ)
)
Узнаю свой "древний" код

>kpblc Ты не прав. Опция "_C" требует указания списка точек которой описывается рамка, для ручного выбора надо просто убрать все опции.
{Smirnoff} вне форума  
 
Непрочитано 22.07.2005, 10:57
#12
Кулик Алексей aka kpblc
Moderator

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


Да я уже увидел, но не стал править в надежде, что можно и самостоятельно разобраться.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > как узнать сколько блоков в чертеже определенного имени?

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