Usando vla-GetDynamicBlockProperties

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.

LinkWithin

Related Posts Plugin for WordPress, Blogger...