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

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

Выбор динамических блоков по значению линейного параметра

Ответ
Поиск в этой теме
Непрочитано 25.10.2012, 23:12 1 |
Выбор динамических блоков по значению линейного параметра
aso3
 
Регистрация: 07.02.2012
Сообщений: 7

Имеется динамический блок, в котором есть 2 линейных параметра и один атрибут.
Значения линейных параметров различные, у атрибута одно значение.
Необходимо: Выбрать блоки с линейным параметром например 500 и задать им значение атрибута например 1
и так для всех типоразмеров блоков.


Нашел ответ на свой вопрос, может кому-то пригодится.
Лисп SSD Опубликованный VVA
Код:
[Выделить все]
 ;;; http://autolisp-exchange.com/Forums/Forum2/F2T40P1.htm
;;; http://forums.augi.com/showthread.php?t=96601
;;; SSD R2.3 (gile) 14/07/2008
;;; 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)
)

Вложения
Тип файла: dwg
DWG 2013
Чертеж1.dwg (41.6 Кб, 2030 просмотров)


Последний раз редактировалось aso3, 26.10.2012 в 16:17.
Просмотров: 22844
 
Непрочитано 21.08.2020, 12:06
#21
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от Linkshunter Посмотреть сообщение
невозможно сбросить команду не выбирая блок,
сделано умышленно. зачем запускать команду, которую нужно отменить сразу после запуска?
Цитата:
Сообщение от Linkshunter Посмотреть сообщение
при выборе блока набор не формируется
надо смотреть файл. я пробовал на тЕмном файле, работает. м.б. засада в точности например числовых параметров. у меня проверка на 1e-1.
koMon вне форума  
 
Непрочитано 22.08.2020, 14:35
#22
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от koMon Посмотреть сообщение
сделано умышленно. зачем запускать команду, которую нужно отменить сразу после запуска?
Ну, например, случайно запустил команду)
Что же выходит? Если блоков в файле нет, то всё - приплыли?)))
skkkk вне форума  
 
Непрочитано 24.08.2020, 09:26
1 | #23
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от skkkk Посмотреть сообщение
Ну, например, случайно запустил команду)
Что же выходит? Если блоков в файле нет, то всё - приплыли?)))
выходит, что приплыли, но с другой стороны task manager ведь никто не отменял [шутка]
но коррекцию внёс
koMon вне форума  
 
Непрочитано 24.08.2020, 09:49
#24
Linkshunter

проектирование а/дорог
 
Регистрация: 03.07.2013
СПб
Сообщений: 376


Цитата:
Сообщение от koMon Посмотреть сообщение
но коррекцию внёс
спасибо
Цитата:
Сообщение от Linkshunter Посмотреть сообщение
- при выборе блока набор не формируется
дело было в нелинейных параметрах - при отключении лишних все работает
Миниатюры
Нажмите на изображение для увеличения
Название: д.JPG
Просмотров: 60
Размер:	52.2 Кб
ID:	229438  
Linkshunter вне форума  
 
Непрочитано 26.08.2020, 09:56
#25
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от Linkshunter Посмотреть сообщение
работает
я ещё подпилил чуток. выбор/отмена выбора всех параметров кнопкой. поиск блоков по параметрам в выбранных дин. блоках - кнопка.
Миниатюры
Нажмите на изображение для увеличения
Название: DBS_2.jpg
Просмотров: 89
Размер:	18.2 Кб
ID:	229505  
koMon вне форума  
 
Непрочитано 26.08.2020, 11:50
#26
DMSskop


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


Цитата:
Сообщение от koMon Посмотреть сообщение
я ещё подпилил чуток. выбор/отмена выбора всех параметров кнопкой. поиск блоков по параметрам в выбранных дин. блоках - кнопка.
В 2021 не работает для некоторых блоков

Последний раз редактировалось DMSskop, 26.08.2020 в 12:15.
DMSskop вне форума  
 
Непрочитано 26.08.2020, 17:08
#27
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от DMSskop Посмотреть сообщение
В 2021 не работает для некоторых блоков
надо нерабочий блок посмотреть или краш лог.
koMon вне форума  
 
Непрочитано 27.08.2020, 07:29
#28
DMSskop


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


Команда запуска DYN_BLOCK_SELECTING а не Dyn_Blocks_Selecting :0)
С этим блоком такая ошибка: Выберите динамический блок: ; ошибка: неверный тип аргумента: stringp 0
Вложения
Тип файла: dwg
DWG 2018
Чертеж1.dwg (54.7 Кб, 15 просмотров)
DMSskop вне форума  
 
Непрочитано 27.08.2020, 14:04
1 | #29
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от DMSskop Посмотреть сообщение
Команда запуска DYN_BLOCK_SELECTING а не Dyn_Blocks_Selecting
уже нет
Цитата:
Сообщение от DMSskop Посмотреть сообщение
С этим блоком такая ошибка
скорректировал
koMon вне форума  
 
Непрочитано 23.02.2021, 11:55
#30
a_tim

Архитектор
 
Регистрация: 21.05.2010
Казахстан, Астана
Сообщений: 25
<phrase 1=


Цитата:
Сообщение от koMon Посмотреть сообщение
пользовательская команда Dyn_Blocks_Selecting выбирает в модели динамические блоки по выбранным параметрам образцового блока
Благодарю. Работает отлично. Автокад 2019
a_tim вне форума  
 
Непрочитано 26.08.2021, 10:27
#31
olga87


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


Скажите пожалуйста, лисп "ssd" работает, но с определенными блоками появляется сообщение, что "Диалоговое окно не помещается на экране..." (видимо требуемые размеры окна "dcl" больше чем разрешение экрана).
Как можно исправить код, чтобы, например, в таком случае окно имело фиксированные размеры и если необходимо появлялась в окне прокрутка?
olga87 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выбор динамических блоков по значению линейного параметра

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор блоков по значению атрибутов. Sleekka Программирование 71 14.10.2023 23:39
подсчет динамических блоков AAI Программирование 37 25.06.2012 15:05
Тормозит команда расчленения набора блоков batmax Программирование 4 31.08.2010 17:37
Выбор блоков по видимости gabrin Программирование 1 17.08.2008 18:38
Выбор блоков по значению слоя атрибута Serge_Y Программирование 2 15.11.2006 22:43