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

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

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

Ответ
Поиск в этой теме
Непрочитано 25.10.2012, 23:12 1 | #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.
Просмотров: 22832
 
Непрочитано 28.02.2014, 15:54
#2
a_tim

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


Я так и не понял какой функцией вызвать команду! "ssd"- не работает
Автокад 2009
a_tim вне форума  
 
Непрочитано 28.02.2014, 17:12
#3
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 424


Строка 010 кода
Цитата:
Сообщение от aso3 Посмотреть сообщение
(defun ssd...
замени на (defun с:ssd...
ытя вне форума  
 
Непрочитано 03.03.2014, 15:22
#4
a_tim

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


Цитата:
Сообщение от ытя Посмотреть сообщение
Строка 010 кода

замени на (defun с:ssd...
; error: syntax error
a_tim вне форума  
 
Непрочитано 03.03.2014, 15:33
#5
Кулик Алексей aka kpblc
Moderator

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


c: должно быть написано на английской раскладке
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.03.2014, 15:38
#6
a_tim

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
c: должно быть написано на английской раскладке
Не помогло...
a_tim вне форума  
 
Непрочитано 03.03.2014, 19:45
#7
АлексЮстасу

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


Цитата:
Сообщение от a_tim Посмотреть сообщение
Не помогло...
В коде в самом конце есть свое (defun c:ssd ()...
Т.е. дело еще в чем-то. Не все скопировали, не загрузили и пр.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 04.03.2014, 08:02
#8
a_tim

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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
В коде в самом конце есть свое (defun c:ssd ()...
Т.е. дело еще в чем-то. Не все скопировали, не загрузили и пр.
Копировал все еще раз, менял на англ. раскладку, загружал.... syntax error
Кстати Автокад х64
a_tim вне форума  
 
Непрочитано 04.03.2014, 08:47
#9
Кулик Алексей aka kpblc
Moderator

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


В коде в самом конце уже определена команда ssd, поэтому никаких правок вносить не надо. Загрузка в 2014 Eng проходит нормально (не тестировал, поскольку не на чем и незачем).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.03.2014, 08:59
#10
a_tim

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
В коде в самом конце уже определена команда ssd, поэтому никаких правок вносить не надо. Загрузка в 2014 Eng проходит нормально (не тестировал, поскольку не на чем и незачем).
Дело в том, что выложенный код загружается хорошо, но не работает команда SSD. с чего я в принципе и начал обсуждение.
a_tim вне форума  
 
Непрочитано 04.03.2014, 09:14
#11
Кулик Алексей aka kpblc
Moderator

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


Взял файл, который лежит в стартовом посте. Код, загрузка, команда ssd
Указал первое попавшееся вхождение блока. Ввел параметры : B - значение 1500, точность 1000; Н - значение 600, точность 550. Установил "Selection". Все сработало корректно: самые мелкие блоки не подсветились.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.03.2014, 10:38
#12
a_tim

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


Все случилось. Взял код из исходного http://forums.augi.com/showthread.php?t=96601 и все заработало. Только у них там номеров строк нету.
a_tim вне форума  
 
Непрочитано 04.03.2014, 10:58
#13
Кулик Алексей aka kpblc
Moderator

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


Тваюжзаногу! https://www.youtube.com/watch?v=wFKc6EfRofo
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.03.2014, 11:05
#14
a_tim

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


Спасибо, Алексей. На форме редкий гость да и к тому же не программист.
a_tim вне форума  
 
Непрочитано 04.03.2014, 11:14
#15
Кулик Алексей aka kpblc
Moderator

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


Внес в справку по форуму - и видео, и скрины, и текст. Надеюсь, что внятно объяснил.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.10.2015, 22:13
#16
Мих


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


Лисп SSD выбирает динамические блоки с определённым значением параметров, а если надо выбрать блоки в определённом диапазоне значений параметра, например > 1000?

Последний раз редактировалось Мих, 01.10.2015 в 22:44.
Мих вне форума  
 
Непрочитано 10.06.2020, 12:41
#17
танбраун


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


Всех приветствую.
Загрузил данный код, но когда набираю команду SSD, ее нет в списке команд.
Подскажите в чем может быть причина (автокад 2019)

----- добавлено через ~6 мин. -----
Извиняюсь, все заработало.
танбраун вне форума  
 
Непрочитано 17.08.2020, 13:03
#18
BYNC

Инженер-конструктор
 
Регистрация: 08.09.2015
Москва
Сообщений: 52


У меня почему-то этот код не выбирает те блоки у которых значение то же, что и у блока который выбирал как образец. Т.е. если ткнул на блок длиной 500 и вводишь потом 500 в поле длина, он ничего не выбирет. Также не выбирает те блоки у которых значение длины установлено по умолчанию.
BYNC вне форума  
 
Непрочитано 21.08.2020, 11:11
1 | #19
koMon


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


пользовательская команда Dyn_Blocks_Selecting выбирает в модели динамические блоки по выбранным параметрам образцового блока
Миниатюры
Нажмите на изображение для увеличения
Название: DBS_2.jpg
Просмотров: 90
Размер:	18.2 Кб
ID:	229577  
Вложения
Тип файла: rar dyn_blocks_selecting.fas.rar (8.8 Кб, 93 просмотров)

Последний раз редактировалось koMon, 27.08.2020 в 14:05.
koMon вне форума  
 
Непрочитано 21.08.2020, 11:56
#20
Linkshunter

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


Цитата:
Сообщение от koMon Посмотреть сообщение
Dyn_Blocks_Selecting
автокад 2015:
- невозможно сбросить команду не выбирая блок,
- при выборе блока набор не формируется
Linkshunter вне форума  
Ответ
Вернуться   Форум 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