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!!!
Olá Neyton,
ResponderExcluirSou 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
Ent é o ENAME da entidade, aquilo que a função abaixo retorna:
ResponderExcluir( 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") ... )
Estou tendo dificuldades tb.
ResponderExcluirPreciso 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?
com a entityname do bloco, voce obtem a entityname do atributo do qual voce quer obter o valor, usando a lisp deste post
ResponderExcluirde 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 ) ) )
Bom dia Neyton.
ResponderExcluirfiz 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
poe mais um parenteses fechando :
ResponderExcluir( setq valor ( cdr (assoc 1 (entget att_entity ) ) ) )
bom dia Neyton.
ResponderExcluirconsegui 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))
o valor do atributo é uma string
ResponderExcluirse vc quer usar o valor numerico, tem que converter com a função ATOF
Olá Neyton.
ResponderExcluirMuito obrigado pela ajuda. Consegui fazer o lisp.
Parabens pelo blog.
abras
boa tarde, espero q possa me ajudar...
ResponderExcluirestou 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?
Boa tarde, Neyton
ResponderExcluirDo 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
Boa tarde
ResponderExcluirTenho 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