Atributo de blocos

Em vários forums eu vi gente perguntando como que faz para acessar os atributos de um bloco… bem, um exemplo:


(defun get-entname-of-tag (ent tag / tmp)
(
setq tmp
(vl-catch-all-apply
(lambda nil
(setq ent (vlax-ename->vla-object
(ename-of ent))
tmp (cadr
(assoc (strcase tag)
(
mapcar
(lambda (x)
(
list
(strcase (vla-get-tagstring x))
(
vlax-vla-object->ename x)))
(
3d-of-vla (vla-getattributes ent))
)))))))
(
if (not (vl-catch-all-error-p tmp))
tmp))


com este exemplo, pode-se acessar a ename do atributo de um bloco, fornecendo à rotina a string do nome do atributo… com isso ja estaremos aptos a aplicar entmods nele!!!

12 comentários em “Atributo de blocos”

  1. Boa tarde

    Tenho uma rotina aonde é inserido um bloco que tem um atributo, esse atributo é uma variável que informo antes de inserir o bloco, gostaria que quando inserisse o bloco a rotina já usasse essa variável com o atributo, mas não estou conseguindo resolver esse problema, alguém poderia me dar uma dica de como resolver isso.
    Segue abaixo parte da minha rotina que está com problemas.

    (setq AlPLTC_tx (strcat "h=" (rtos AlPLTC 2 1) "m")); variável que recebe o valor da altura da placa

    (command "_-insert" "C:\Arquivos_Autolisp\Biblioteca\Placa Trânsito_Ø40-teste" PtInBlPlT "1" "1" 0)

    PtInBlPlT é o ponto de inserção do bloco

  2. Boa tarde, Neyton
    Do nada todos meus arquivos do Cad, estão demorando para abrir, e no fim quando abrem aparece uma mensagem de erro: "malformed list on input". Até se eu apro o cad sem abrir um arquivo pre existente da o mesmo erro. O que é isso? como corrigir?
    Espero que vc posso me ajudar.
    Desde já Agradeço

  3. boa tarde, espero q possa me ajudar…

    estou tentando montar uma rotina lisp igual do eattext, só que ela é para o intelicad, pois, não existe esse comando no intelicad.

    pode me ajudar?

  4. bom dia Neyton.
    consegui extrair o valor do bloco
    mas qdo uso ele na seguinte rotina
    volta com erro "; error: bad argument type: numberp:" e o valor doa atributo
    a rotina é esta
    ;Entrada de Informações
    (setq CT (vl-string-subst "." (chr 44) (strcat VALOR)))
    (setq PR (getreal "nEntre com a profundidade: "))

    ;Solução
    (setq SOL (- CT PR))

  5. Bom dia Neyton.
    fiz conforme vc orientou.
    mas qdo carrego o lisp q criei, dá o seguinte erro "; error: malformed list on input" por causa dessa linha
    ;pega o valor do mesmo
    ( setq valor ( cdr (assoc 1 (entget att_entity ) ) )
    oq pode estar acontecendo de errado?
    grato

  6. com a entityname do bloco, voce obtem a entityname do atributo do qual voce quer obter o valor, usando a lisp deste post

    de posse deste entityname, voce pode obter o seu valor:

    ;selecione o bloco
    ( setq bloco ( car ( entsel "nselecione o bloco" )))

    ;pergunte o atributo
    (setq attname ( getstring "nqual o nome do atributo ?" ) )

    ;pega o ename do atributo
    (setq att_entity ( get-entname-of-tag bloco attname ) )

    ;pega o valor do mesmo
    ( setq valor ( cdr (assoc 1 (entget att_entity ) ) )

  7. Estou tendo dificuldades tb.
    Preciso apenas extrair este valor para inserir em alguns calculos

    como faria apenas a linha para extrair o valo?

    estou tentando algo do tipo
    (setq CT (entsel "nSelecione a cota:"))
    mas ele me retorna a entity name. Como posso estrair o valor do atributo?

  8. Ent é o ENAME da entidade, aquilo que a função abaixo retorna:

    ( car ( entsel “nSelecione um bloco: ” ) )

    que é algo assim: < Entity name #123456 >

    e tag é uma string, que identifica o atributo

    o retorno é outra ENAME, so que do atributo, do qual você pode extrair a ELIST, que contem todos os DXF, ou algo assim:

    ( (0 . “ATTRIB”) (8 . “0”) … )

  9. Olá Neyton,

    Sou admirador dos teus conhecimentos. REalmente tais publicaçõestem ajudado a muitos e principalmente para iniciantes em autolisp.

    Parabéns!

    Bom, nesta rotina é passado o ent e o tag, podes confirmar o que é exatamente cada um deles? o nome do bloco e identificador???

    Obrigado

Deixe um comentário

Carrinho de compras
Rolar para cima