Outro dia um camarada me perguntou como alterar o valor de um atributo dinâmico em um bloco.
Bom escrevi um pequeno programa para exemplificar, segue:
;subrotina que retorna a lista de atributos dinamicos de um bloco
;vlabloc é o ponteiro VLA para o bloco
(defun get-dynamic-attributes (vlabloc)
;(vl-load-com)
(mapcar '(lambda (p) (cons (vla-get-PropertyName p) p))
(vlax-safearray->list
(vlax-variant-value
(vla-GetDynamicBlockProperties vlabloc)))))
;exemplo de uso:
;|
carrega as funções vl
(vl-load-com)
;selecione um bloco dinamico na tela
(setq bloco (vlax-ename->vla-object (car (entsel "\nSelecione o bloco"))))
;pega a lista de atributos:
(setq atts (get-dynamic-attributes bloco))
;da lista, pegue o atributo COMPRIMENTO:
(setq attComprimento (cdr (assoc "COMPRIMENTO" atts)))
;alerta sobre o valor atual
(alert (strcat "O valor atual é: " (rtos (vlax-variant-value (vla-get-value attComprimento)) 2 3)))
;redefine o valor para outro valor qualquer
(vla-put-value attComprimento 2.0)
;alerta para o novo valor:
(alert (strcat "O valor atual é: " (rtos (vlax-variant-value (vla-get-value attComprimento)) 2 3)))
|;
É simples, né? O exemplo te ensina a listar os atributos, que você poderá pegar e alterar.
;subrotina que retorna a lista de atributos dinamicos de um bloco
;vlabloc é o ponteiro VLA para o bloco
(defun get-dynamic-attributes (vlabloc)
;(vl-load-com)
(mapcar '(lambda (p) (cons (vla-get-PropertyName p) p))
(vlax-safearray->list
(vlax-variant-value
(vla-GetDynamicBlockProperties vlabloc)))))
;exemplo de uso:
;|
carrega as funções vl
(vl-load-com)
;selecione um bloco dinamico na tela
(setq bloco (vlax-ename->vla-object (car (entsel "\nSelecione o bloco"))))
;pega a lista de atributos:
(setq atts (get-dynamic-attributes bloco))
;da lista, pegue o atributo COMPRIMENTO:
(setq attComprimento (cdr (assoc "COMPRIMENTO" atts)))
;alerta sobre o valor atual
(alert (strcat "O valor atual é: " (rtos (vlax-variant-value (vla-get-value attComprimento)) 2 3)))
;redefine o valor para outro valor qualquer
(vla-put-value attComprimento 2.0)
;alerta para o novo valor:
(alert (strcat "O valor atual é: " (rtos (vlax-variant-value (vla-get-value attComprimento)) 2 3)))
|;
É simples, né? O exemplo te ensina a listar os atributos, que você poderá pegar e alterar.