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

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

как выбрать динамические блоки по состоянию видимости?

Ответ
Поиск в этой теме
Непрочитано 10.01.2011, 01:29 1 | #1
как выбрать динамические блоки по состоянию видимости?
АлексЮстасу
 
топограф, технолог
 
Москва
Регистрация: 24.05.2009
Сообщений: 3,030

Вопрос уже поднимал Juss_00 в http://forum.dwg.ru/showpost.php?p=3...postcount=1109, но там он затерялся (что там совсем немудрено).

Как находить все однотипные динамические блоки с указанной видимостью?

Для наглядности пример:
Допустим, сделан дин. блок светильника, у которого видимость отвечает за число ламп - одна, две, три и т.д.
В реальных чертежах таких дин. блоков светильников, допустим, десятки и сотни. Как найти все светильники, допустим, с двумя лампами?
Просмотров: 10475
 
Непрочитано 10.01.2011, 02:49
1 | #2
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,767


http://www.cadforum.cz/cadforum_en/s...erties-tip7583
engngr вне форума  
 
Непрочитано 10.01.2011, 10:15
1 | #3
VVA

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


Dynamic block filter
Код:
[Выделить все]
;;; SSD R2.3 (gile) 14/07/2008
;;; http://autolisp-exchange.com/forum/showthread.php?t=166
;;; Select dynamic blocks according to dynamic properties values
;;; Using:
;;; To make a selection, enter ssd at command prompt or,
;;; within a modification command, type (ssd) at "Select objects: " prompt
;;; Select a source dynamic block
;;; Choose properties values to filter in the dialog box (an empty tile means "all vaue")

(defun ssd (/ DynBlkPropValue ss blk name pop ret fuzz sel res)

  (vl-load-com)

  ;; DynBlkPropValue
  ;; Dialog box to choose dynamic properties values
  ;;
  ;; Argument : the dynamic properties list (vla-object list)

  (defun DynBlkPropValue (lst / tmp file pn av dcl_id val)
    (setq tmp  (vl-filename-mktemp "Tmp.dcl")
      file (open tmp "w")
    )
    (write-line
      (strcat
    "DynBlkProps:dialog{label=\"Dynamic block filter\";"
    ":text{label=\"Block name: \""
    (vl-prin1-to-string name)
    ";}spacer;:boxed_column{label=\"Dynamic properties\";"
      )
      file
    )
    (foreach p lst
      (setq pn (vla-get-PropertyName p))
      (cond
    ((setq av (vlax-get p 'AllowedValues))
     (setq pop
        (cons (cons pn (cons "" (mapcar 'vl-princ-to-string av)))
              pop
        )
     )
     (write-line
       (strcat
         ":popup_list{label="
         (vl-prin1-to-string pn)
         ";key="
         (vl-prin1-to-string pn)
         ";edit_width=25;allow_accept=true;}"
       )
       file
     )
    )
    ((/= pn "Origin")
     (setq fuzz (cons pn fuzz))
     (write-line
       (strcat
         ":row{:edit_box{label="
         (vl-prin1-to-string pn)
         ";key="
         (vl-prin1-to-string pn)
         ";edit_width=12;allow_accept=true;}"
         ":edit_box{label=\"Fuzz\";key="
         (vl-prin1-to-string (strcat pn "_fuzz"))
         ";value=\"0.0\";edit_width=6;allow_accept=true;}}"
       )
       file
     )
    )
      )
    )
    (write-line
      (strcat
    "}spacer;:radio_row{key=\"selset\";"
    ":radio_button{label=\"All drawing\";key=\"all\";value=\"1\";}"
    ":radio_button{label=\"Selection\";key=\"sel\";}}"
    "spacer;ok_cancel;}"
      )
      file
    )
    (close file)
    (setq dcl_id (load_dialog tmp))
    (if    (not (new_dialog "DynBlkProps" dcl_id))
      (exit)
    )
    (foreach p pop
      (start_list (car p))
      (mapcar 'add_list (cdr p))
      (end_list)
    )
    (action_tile
      "accept"
      "(foreach p (mapcar 'vla-get-PropertyName lst)
      (if (assoc p pop)
      (setq val (nth (atoi (get_tile p)) (cdr (assoc p pop))))
      (setq val (get_tile p)))
      (if (and val (/= val \"\"))
      (setq ret (cons (cons p val) ret))))
      (setq fuzz (mapcar (function (lambda (x)
      (cons x (get_tile (strcat x \"_fuzz\"))))) fuzz))
      (and (not ret) (setq ret T))
      (setq sel (get_tile \"selset\"))
      (done_dialog)"
    )
    (action_tile "cancel" "(setq ret nil)")
    (start_dialog)
    (unload_dialog dcl_id)
    (vl-file-delete tmp)
    ret
  )

  ;;----------------------------------------------------;;

  (and
    (or
      (and
    (setq ss (cadr (ssgetfirst)))
    (= 1 (sslength ss))
    (setq blk (vlax-ename->vla-object (ssname ss 0)))
    (sssetfirst nil nil)
      )
      (and
    (sssetfirst nil nil)
    (setq blk (car (entsel)))
    (setq blk (vlax-ename->vla-object blk))
      )
    )
    (= (vla-get-ObjectName blk) "AcDbBlockReference")
    (= (vla-get-IsDynamicBlock blk) :vlax-true)
    (setq name (vla-get-EffectiveName blk))
    (DynBlkPropValue
      (vlax-invoke blk 'getDynamicBlockProperties)
    )
    (if    (= sel "all")
      (ssget "_X"
         (list '(0 . "INSERT") (cons 2 (strcat name ",`*U*")))
      )
      (ssget (list '(0 . "INSERT") (cons 2 (strcat name ",`*U*")))
      )
    )
    (setq res (ssadd))
    (vlax-for b    (setq ss (vla-get-ActiveSelectionSet
               (vla-get-activeDocument
                 (vlax-get-acad-object)
               )
             )
        )
      (if
    (and
      (= (vla-get-EffectiveName b) name)
      (or
        (= ret T)
        ((lambda (lst)
           (apply
         '=
         (cons
           T
           (mapcar
             (function
               (lambda (p / n v l u f)
             (setq n (car p)
                   l (assoc n lst)
                   u (vla-get-UnitsType (caddr l))
             )
             (equal    (cond
                  ((= 0 u) (cdr p))
                  ((= 1 u) (angtof (cdr p)))
                  (T (distof (cdr p)))
                )
                (cadr l)
                (if (and (setq f (cdr (assoc n fuzz)))
                     (numberp (read f))
                    )
                  (atof f)
                  0.0
                )
             )
               )
             )
             ret
           )
         )
           )
         )
          (mapcar
        (function
          (lambda (p / n v)
            (list
              (setq n (vla-get-PropertyName p))
              (vlax-get p 'Value)
              p
            )
          )
        )
        (vlax-invoke b 'getDynamicBlockProperties)
          )
        )
      )
    )
     (ssadd (vlax-vla-object->ename b) res)
      )
    )
    (vla-delete ss)
  )
  res
)

;;; Calling function

(defun c:ssd ()
  (sssetfirst nil (ssd))
  (princ)
)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 10.01.2011 в 12:11. Причина: Заменено на версию R2.3
VVA вне форума  
 
Автор темы   Непрочитано 10.01.2011, 11:47
#4
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,030


Списибо! Не было ни гроша, да вдруг два алтына ))

engngr - результаты работы сохраняются в выборке, например: Identify a dynamic block (to select): <Selection set: 177>
Как-то сделать можно, чтобы выбранное сразу увидеть, подсвечивалось?

VVA - Эта SSD у меня почему-то не вызывается.
Unknown command "SSD". Press F1 for help.

Последний раз редактировалось АлексЮстасу, 10.01.2011 в 12:11.
АлексЮстасу вне форума  
 
Непрочитано 10.01.2011, 12:12
#5
VVA

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


В версии R2.6 есть ошибка. Сообщил автору. Пока в #3 выложил версию R2.3
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 10.01.2011, 12:52
#6
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,030


Цитата:
Сообщение от VVA Посмотреть сообщение
В версии R2.6 есть ошибка. Сообщил автору. Пока в #3 выложил версию R2.3
Эта версия сработала! Отлично! И выдает сразу подсвеченную выборку!
АлексЮстасу вне форума  
 
Непрочитано 11.01.2011, 10:29
6 | #7
VVA

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


Подкорректировал версию 2.6. Надеюсь правильно разобрался с замыслом автора
Код:
[Выделить все]
;;;From http://www.theswamp.org/index.php?topic=23944.0
;;; Thread  Dynamic block filter
;;; SSD R2.6 (gile) 14/07/2008 (last revision 19/12/2010)
;;; Select dynamic blocks according to dynamic properties values
;;; Using:
;;; To make a selection, enter ssd at command prompt or,
;;; within a modification command, type (ssd) at "Select objects: " prompt
;;; Select a source dynamic block
;;; Choose properties values to filter in the dialog box
;;; (an empty tile or an asterisk (*) means "all vlaue")

(defun ssd (/ *error* ToString DynBlkPropValue dz ss ent blk name pop fuzz ret sel res)

  (vl-load-com)
  (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))));;;Add VVA 2010-01-11
  (defun *error* (msg)
    (if	(/= msg "Function cancelled")
      (princ (strcat "Error: " msg))
    )
    (setvar 'dimzin dz)
    (princ)
  )

  (defun ToString (v u)
    (cond
      ((= 0 u) (vl-princ-to-string v))
      ((= 1 u)(angtos v (getvar 'aunits) 16))  ;;;Correct VVA 2010-01-11
      ((if (< (abs v) 1e-6)
	 (rtos v 1 6)
	 (rtos v (getvar 'lunits) 12)
       )
      )
    )
  )

  ;; DynBlkPropValue
  ;; Dialog box to choose dynamic properties values
  ;;
  ;; Argument : the dynamic properties list (vla-object list)

  (defun DynBlkPropValue (lst / tmp file pn unt av dcl_id val)
    (setq tmp  (vl-filename-mktemp "Tmp.dcl")
	  file (open tmp "w")
    )
    (write-line
      (strcat
	"DynBlkProps:dialog{label=\"Dynamic block filter\";"
	":text{label=\"Block name: \""
	(vl-prin1-to-string name)
	";}spacer;:boxed_column{label=\"Dynamic properties\";"
      )
      file
    )
    (foreach p lst
      (setq pn	(vla-get-PropertyName p)
	    unt	(vla-get-UnitsType p)
      )
      (cond
	((setq av (vlax-get p 'AllowedValues))
	 (setq av  (mapcar '(lambda (x) (ToString x unt)) av)
	       pop (cons (vl-list* pn "*" av) pop)
	 )
	 (write-line
	   (strcat
	     ":popup_list{label="
	     (vl-prin1-to-string pn)
	     ";key="
	     (vl-prin1-to-string pn)
	     ";value="
	     (itoa (1+ (vl-position (ToString (vlax-get p 'Value) unt) av)))
	     ";edit_width=25;allow_accept=true;}"
	   )
	   file
	 )
	)
	((/= pn "Origin")
	 (setq fuzz (cons pn fuzz))
	 (write-line
	   (strcat
	     ":row{:edit_box{label="
	     (vl-prin1-to-string pn)
	     ";key="
	     (vl-prin1-to-string pn)
	     ";value="
	     (vl-prin1-to-string (ToString (vlax-get p 'Value) unt))
	     ";edit_width=18;allow_accept=true;}"
	     ":edit_box{label=\"Fuzz\";key="
	     (vl-prin1-to-string (strcat pn "_fuzz"))
	     ";value=\"1e-12\";edit_width=6;allow_accept=true;}}"
	   )
	   file
	 )
	)
      )
    )
    (write-line
      (strcat
	"}spacer;:radio_row{key=\"selset\";"
	":radio_button{label=\"All drawing\";key=\"all\";value=\"1\";}"
	":radio_button{label=\"Selection\";key=\"sel\";}}"
	"spacer;ok_cancel;}"
      )
      file
    )
    (close file)
    (setq dcl_id (load_dialog tmp))
    (if	(not (new_dialog "DynBlkProps" dcl_id))
      (exit)
    )
    (foreach p pop
      (start_list (car p))
      (mapcar 'add_list (cdr p))
      (end_list)
    )
    (action_tile
      "accept"
      "(foreach p (mapcar 'vla-get-PropertyName lst)
      (if (assoc p pop)
      (setq val (nth (atoi (get_tile p)) (cdr (assoc p pop))))
      (setq val (get_tile p)))
      (if (and val (/= val \"\") (/= val \"*\"))
      (setq ret (cons (cons p val) ret))))
      (setq fuzz (mapcar (function (lambda (x)
      (cons x (get_tile (strcat x \"_fuzz\"))))) fuzz))
      (and (not ret) (setq ret T))
      (setq sel (get_tile \"selset\"))
      (done_dialog)"
    )
    (action_tile "cancel" "(setq ret nil)")
    (start_dialog)
    (unload_dialog dcl_id)
    (vl-file-delete tmp)
    ret
  )

  ;;----------------------------------------------------;;

  (setq dz (getvar 'dimzin))
  (setvar 'dimzin 8)
  (and
    (or
      (and
	(setq ss (cadr (ssgetfirst)))
	(= 1 (sslength ss))
	(setq ent (ssname ss 0))
	(sssetfirst nil nil)
      )
      (and
	(sssetfirst nil nil)
	(setq ent (car (entsel)))
      )
    )
    (setq blk (vlax-ename->vla-object ent))
    (= (vla-get-ObjectName blk) "AcDbBlockReference")
    (= (vla-get-IsDynamicBlock blk) :vlax-true)
    (not (redraw ent 3))
    (setq name (vla-get-EffectiveName blk))
    (or
      (DynBlkPropValue (vlax-invoke blk 'getDynamicBlockProperties))
      (redraw ent 4)
    )
    (not (redraw ent 4))
    (if	(= sel "all")
      (ssget "_X"
	     (list '(0 . "INSERT") (cons 2 (strcat name ",`*U*")))
      )
      (ssget (list '(0 . "INSERT") (cons 2 (strcat name ",`*U*")))
      )
    )
    (setq res (ssadd))
    (vlax-for b	(setq ss (vla-get-ActiveSelectionSet *acdoc*))
      (if
	(and
	  (= (vla-get-EffectiveName b) name)
	  (or
	    (= ret T)
	    ((lambda (lst)
	       (apply
		 '=
		 (cons
		   T
		   (mapcar
		     (function
		       (lambda (p / n v l u f)
			 (setq n (car p)
			       l (assoc n lst)
			       u (vla-get-UnitsType (caddr l))
			 )
			 (equal	(cond
				  ((= 0 u) (cdr p))
				  ((= 1 u) (angtof (cdr p)))
				  (T (distof (cdr p)))
				)
				(if (= u 0)
				  (vl-princ-to-string (cadr l))
				  (cadr l)
				)
				(if (and (setq f (cdr (assoc n fuzz)))
					 (numberp (read f))
				    )
				  (atof f)
				  1e-12
				)
			 )
		       )
		     )
		     ret
		   )
		 )
	       )
	     )
	      (mapcar
		(function
		  (lambda (p / n v)
		    (list
		      (setq n (vla-get-PropertyName p))
		      (vlax-get p 'Value)
		      p
		    )
		  )
		)
		(vlax-invoke b 'getDynamicBlockProperties)
	      )
	    )
	  )
	)
	 (ssadd (vlax-vla-object->ename b) res)
      )
    )
    (vla-delete ss)
  )
  (setvar 'dimzin dz)
  res
)

(defun c:ssd ()
  (sssetfirst nil (ssd))
  (princ)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 11.01.2011, 11:15
#8
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,030


Цитата:
Сообщение от VVA Посмотреть сообщение
Подкорректировал версию 2.6. Надеюсь правильно разобрался с замыслом автора
Работает!
Жаль, что никак не реагирует, ничего не сообщает, если ничего не найдено.
Что-нибудь вроде "no blocks selection". (не силен я в английском).

Последний раз редактировалось АлексЮстасу, 11.01.2011 в 11:23.
АлексЮстасу вне форума  
 
Непрочитано 05.04.2012, 16:03
#9
Juss_00

Инженер
 
Регистрация: 11.12.2007
Москва
Сообщений: 295


Спасибо, через 5 лет снова стал искать... нашел )
Отличные лисп и приложение )
__________________
Live as though tomorrow you will die,
Study as though you will live eternally.
Juss_00 вне форума  
 
Непрочитано 16.05.2012, 13:03
#10
matvey

инженер-проектировщик
 
Регистрация: 04.09.2008
Ставрополь
Сообщений: 4


Благодарю за спасительный лисп! Установил, настроил, вынес иконку на палитру и заметил, давно неиспользуемую, кнопку "ИЗВЛЕЧЕНИЕ ДАННЫХ" (DATAEXTRACTION или ДАННЫЕИЗВЛ) и еще раз посчитал блоки на чертеже - все совпало!
matvey вне форума  
 
Непрочитано 07.02.2013, 14:21 Выбор блока по состоянию видимости
#11
Mixon2010

инженер проектировщик
 
Регистрация: 27.09.2010
Москва
Сообщений: 47


Всем привет Это на самом деле замечательный фильтр, но у меня в блоке есть надпись, которая при необходимости может перемещаться относительно блока. После перемещения надписи,фильтр перестает его видеть. После обнуления координат X и Y положения блока и состояния видимости, фильтр отлично видит блоки внутри которых надписи меняют свое положение. Дело в том, что очень не удобно каждый раз вручную обнулять координаты X и Y , можно-ли сделать такую кнопочку в меню для обнуления координат X и Y ??? Заранее благодарствую
Mixon2010 вне форума  
 
Непрочитано 08.02.2013, 20:01
#12
VVA

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


Mixon2010, Мне кажется у тебя что-то не то с блоком
Код:
[Выделить все]
(defun C:TEST ( )
  ((lambda ( i / ss ed)
    (if (setq ss (ssget "_:L" '((0 . "INSERT"))))
     (while (< (setq i (1+ i)) (sslength ss))
       (setq ed (entget(ssname ss i )))
       (entmod (subst '(10 0. 0. 0.)(assoc 10 ed) ed))
       )
      )
     )
    -1
    )
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 11.01.2017, 10:18
#13
Composter

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


спасибо VVA за фильтр
Composter вне форума  
 
Непрочитано 11.01.2017, 10:40
#14
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


fuzz - это пушинка. При чем здесь пушинка?
Profan вне форума  
 
Непрочитано 11.01.2017, 10:49
#15
Composter

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


я думаю это сокращение от Fuzziness
Composter вне форума  
 
Непрочитано 11.01.2017, 10:59
#16
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Это я к тому, что диалоговое окно переведено не полностью. Алексу или Юстасу (или обоим), возможно, все равно там в Стокгольме (Швеция), но другим может быть не все равно.
Profan вне форума  
 
Непрочитано 12.01.2017, 15:44
#17
Composter

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


хотя нет есть в официально справке автокада fuzz
http://help.autodesk.com/view/ACD/20...3-89342A11EF9B
Composter вне форума  
 
Непрочитано 06.02.2022, 14:36
#18
DaiverCAD

Геодезист
 
Регистрация: 07.12.2007
Краснодар
Сообщений: 43


Коллеги приветствую!

Понимаю что ветка давно не обсуждалась, но может быть кто-нибудь сможет помочь
Вопрос в следующем может ли данный лисп выбирать динамические блоки по условию например когда нужно отобрать блоки содержащие числа "больше" какого то заданного. Например имеется куча динамических блоков содержащих разные числа, мне нужно отобрать только те значения которых превышают 1000, тоесть 1001, 1002, 1500, 2000 и т.д.
Или может быть можно подправить код чтобы так можно было фильтровать?

Заранее спасибо
DaiverCAD вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > как выбрать динамические блоки по состоянию видимости?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические блоки кранов. cheshiki1 Поиск литературы, чертежей, моделей и прочих материалов 14 20.07.2013 11:52
Динамические блоки при копировании перестают быть динамическими. *Voland* Динамические блоки 11 04.07.2012 10:51
соединить динамические блоки отрезками по кротчайшему пути gizmo_zx Программирование 18 06.09.2010 20:32
Глюк. Динамические блоки становится статическим! b_anton Динамические блоки 10 24.06.2008 16:27
HELP!!! Динамические блоки? Bdod Динамические блоки 13 07.04.2007 08:59