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"

LinkWithin

Related Posts Plugin for WordPress, Blogger...