Recuperar valor de atributo

Bom, continuando com as rotinas, na rotina Rtc3 que postei tem uma função que recupera o valor dos atributos de um bloco… Outra coisa que vejo muito em forums sobre o assunto.. parece que quanto mais tu responde essa dúvida mais ela aparece… mas vá lá, vejam como eu faço:


(defun get-tag-prop (ent tag / pass str)
(
setq ent (ename-of ent)
tag (strcase tag)
pass t)
(
while pass
(setq ent (entnext ent)
str (dxf 2 ent)
pass (if str
(/= tag (strcase str)))))
(
if str (dxf 1 ent) nil))


Onde “ent” é a “entity name” do bloco e “tag” é uma string com o nome do atributo que se quer resgatar o valor

já para atribuir o valor a um atributo, tenho esta rotina:


(defun set-dxf-tag (ent dx tag val / tmp)
(
setq ent (ename-of ent)
val (if (listp tag) val (list val))
dx (if (listp dx) dx (list dx))
tag (mapcar strcase (if (listp tag) tag (list tag))))
(
repeat (length tag)
(
setq tmp (get-entname-of-tag ent (car tag)))
(
if tmp (remake-ent tmp (car dx) (car val)))
(
setq tag (cdr tag)
dx (if (= 1 (length dx)) dx (cdr dx))
val (if (= 1 (length val)) val (cdr val))))
(
dxf 5 ent))


alem de alterar o valor do atributo, ela também serve para alterar qualquer outro dxf deste atributo, como o layer por exemplo…
sendo “ent” a referência ao BLOCO, pode ser HANDLE, ENAME, VLA
“dx” é um número inteiro, que representa o dxf… exemplo: 8 significa layer
“tag” é uma string, que o nome do atributo
“val” é qualquer valor aceito pelo dxf que você passar para a variável “dx”
exemplo:
(set-dxf-tag ent_bloco 8 “tag1” “layerx”)
fará o layer do atributo de nome “tag1” passar para “layerx”

8 comentários em “Recuperar valor de atributo”

  1. Ótimo Neyton,

    Mas na verdade o que eu preciso não é mudar a escala propriamente dita, mas sim mudar um atributo de texto.
    exemplo:

    (set-dxf-tag isoa4t ? “aplication” “civil”)

    No lugaro do ?, tenho que colocar por exemplo 8 para alterar o layer, mas minha dúvida é o que usar para alterar um atributo de texto normal, pois só sei o nome do atributo.

    Se caso vc conhecer um outro método sem a interação du usuário, também agradeceria.
    Algo do tipo:

    (command “attedit” “ISOA4T” “aplication” eletric civil)

    Obrigado pela força mais uma vez.

    Abraço

  2. bem, não é bem assim a sintaxe

    no seu caso, isso deve funcionar:

    ( setq ent
    ( car
    ( entsel “nSelecione o bloco” )
    )
    )

    (
    set-dxf-tag
    ent
    ‘(40 ;dxf da escala em X
    41 ;dxf da escala em Y
    42 ;dxf da escala em Z
    )
    “DN”
    10 ;valor da escala
    )

    onde “DN” é o nome do atributo
    10 é a escala que estou aplicando, esta escala é absoluta, 1:1 é 1, 1:10 é 0.1

    ent é uma ENAME, obtido pelo setq acima

  3. Olá Neyton,

    to tentando alterar um atributo de um bloco que contem a scala.. então:

    (set-dxf-tag isoa4t 2 “scale” “1:1”)

    onde isoa4t é o nome do bloco… mas acredito que existe um problema onde digito o “2”, pois não sei qual é o valor/dxf referente ao atributo de tag “scale”… podes me ajudar?

    Agradeço e parabenizo-te por tal iniciativa que representa este teu blog.
    Através deste muitos podem esclarecer dúvidas e buscar informações muito importantes.

    Além de tudo a qualidade das tuas publicações é ótima.

    Obrigado.
    At+

Deixe um comentário

Carrinho de compras
Rolar para cima