Como CRIAR um bloco com ENTMAKE

CRIAR um bloco via autolisp pode não ser muito fácil e muitos já me perguntaram como se faz... então lá vai:


;PRIMEIRO!
;sempre que for CRIAR o bloco, use estas linhas PRIMEIRO

(entmake '((0 . "BLOCK")         ;tipo de entidade
       (2 . "nome_do_bloco") ;nome do bloco
       (8 . "0")             ;layer
       (10 0.0 0.0 0.0)      ;ponto de base
;|se o bloco tem atributos editaveis use 2,
  se nao te atributos, use 0
  veja o help para mais opções|;

       (70 . 2)            
      ))


;AGORTA CRIA ENTIDADES NORMALMENTE...
;exemplo: uma linha:

(entmake '((0 . "LINE")
       (
8 . "0")
       (
10 0.0 0.0 0.0)
       (
11 10.0 0.0 0.0)
      )
)

;COMO SE CRIA UM ATRIBUTO:
;se vc usou o dxf 70 iguala 2, o bloco tem atributos
;logo, vc precisa criar eles
;use uma sequencia desta para cada atributo que voce quer criar:

(entmake '((0 . "ATTDEF") ;tipo de entidade: atributo
       (8 . "0")                  ;layer
       (10 1.0 1.0 0.0)           ;ponto de inserção
       (40 . 2)                   ;altura do texto
       (1 . "defval")             ;valor padrão
       (50 . 0)                   ;rotação
       (7 . "standard")           ;estilo do texto
       (72 . 1)                   ;alinhamento horizontal
;alinhamento do texto, se o dxf 72 e 74 são diferentes de zero
;vc precisará dele...

       (11 1.0 1.0 0.0)
       (
3 . "Entre com o valor")  ;prompt na linha de comando
       (2 . "nome_da_tag")        ;nome do atributo
       (70 . 0)                   ;veja o help para as opções
       (74 . 0)                   ;alinhamento vertical
      )
)


;sempre finalizamos a criação do bloco com uma entidade ENDBLOCK:
(entmake '((0 . "ENDBLK")))        ;POR ÚLTIMO!
;e assim CRIAMOS o bloco...


Logo postarei um exemplo de como INSERIR este bloco com o ENTMAKE... não se esqueça que INSERIR é diferente de CRIAR um bloco

4 comentários:

  1. Anônimo4/1/07 13:00

    Bom dia neyton,

    Seu post me lembrou de um problema que tive um tempo atrás, talvez vc pode me ajudar....

    Uma vez precisei substituir um bloco com atributos no meu desenho, porém como táva com preguiça de ter que reescrever todos os dados dos atributos fiz akela velha gambiarra de renomear o bloco novo com o mesmo nome do velho e reinserir ele no desenho substituindo o bloco do desenho. Hj eu uso uma rotina que fiz para extrair os atributos e gravar num txt, e depois usar estes dados do txt para cadastrar no novo bloco. (vale lembrar que os dois blocos tem que ter os mesmos tags). Mas chega de conversa e deixa eu te dizer meu problema, acontece que eu não poderia mandar o desenho com o nome do bloco errado, era o nome de clientes diferentes. Então tentei mudar o nome do bloco via autolisp (subst (cons 2 "bloco_novo")) e realmente substituía na no codigo dxf, porém ao dar o comando list no bloco tava lá o nome velho...

    Por que?

    Ass.
    João Carlos

    ResponderExcluir
  2. Anônimo6/1/07 11:50

    cara, alguns dxf o entmod/entupd não consegue alterar, o 5 por exemplo... talvez este seja um dos casos...

    tente com "vla-put-name", em vez do entmod...

    para usá-lo, você precisará do VLA-OBJECT da entidade...

    se não souber do que estou falando, dá um grito... agora não vou poder ajudar muito, estou sem o autocad no pc que estou usando

    ResponderExcluir
  3. Anônimo8/1/07 12:43

    ok, vou tentar com com o vla...

    valeu!

    ResponderExcluir
  4. Como conseguir entrar no bloco através da lisp, alterando propriedades de hachurias e linhas? já usei o seguinte código para explodir, mas não consigo entrar atrvés da lisp:
    (setvar "qaflags" 1)
    (while
    (setq MODBLOCK (SSGET "_X" ((CONS 0 "INSERT"))))
    ;(command "explode" MODBLOCK)
    )
    (setvar "qaflags" 0)

    ResponderExcluir