Bloco de Cota de nível

Dúvidas sobre AutoLISP...

Moderador: Moderadores

Responder
Indionei.matos
Madeira
Madeira
Mensagens: 14
Registrado em: Qua 16 Out 2019 9:54:56 am

Bloco de Cota de nível

Mensagem por Indionei.matos »

Boa noite pessoal!!

Procurei aqui no forum sobre a minha dúvida, mas não tive sucesso. Trata-se do seguinte:

Eu criei um bloco com atributos para cotas de níveis, ( Ex.:Em um corte de um projeto arquitetônico tem os níveis do térreo 0.00m, 1º pavimento 3.80m, 2º pavimento 7.60m e assim por diante.), aí eu criei uma rotina para copiar esse bloco e já atualizar o texto do bloco com a cota de nível conforme eu vou clicando no ponto desejado.
Está funcionando tudo certo, até aí foi tranquilo de fazer, porem, tem algumas coisas que eu gostaria de melhorar nesse processo durante a cópia que vou fazendo desse bloco.

* No comando copy normal dentro do AutoCAD vai aparecendo a cópia que eu selecionei para onde eu vou com o mouse. Já na minha rotina como eu peço para indicar o próximo ponto, eu perco essa visualização, já tentei de várias formas e ainda não consegui. Eu retirei a mensagem e deixei direto pela mensagem do comado mesmo, mas gostaria de usar a minha mensagem. Tentei colocar pause, mas aí tenho que dar um clique a mais e não fica bom.

* Outra coisa é saber se é possível fazer a cópia e a visualização do bloco selecionado já ir atualizando conforme o ponto ou coordenadas do mouse vai se movimentando na tela. (Ex. As dimensões do AutoCAD quando você cria elas e depois vocês clica na dimensão e altera os pontos de referência, o valor da dimensão já vai atualizando conforme você vai mexendo o mouse). Gostaria de fazer dessa forma, mas nem sei por onde começar e não encontrei nada a respeito.

Gostaria da ajuda de vocês se possível, se caso entenderam a minha dúvida.

Atenciosamente:
Indionei C de Matos
Avatar do usuário
Carlos Fernando
Concreto
Concreto
Mensagens: 37
Registrado em: Sex 29 Dez 2017 4:17:25 pm

Re: Bloco de Cota de nível

Mensagem por Carlos Fernando »

Indionei

Nesses casos para simular uma cópia de inserção do bloco e fazer a alteração dinamica do atributo eu normalmente utilizo uma combinação do comando "move" e a função "vla-put-textstring" dentro de um loop, após usar o grread.
Leia as duas notas do cabeçalho primeiro antes de testar e veja se era o que vc procurava.

Att

Código: Selecionar todos

;Rotina para inserir bloco de indicação de nível de forma dinamica
;Nome do comando : INSNIVEL
;Autor: Carlos Fernando
;Data 21/07/2021
;Notas:
;1)O usuário deve substituir o caminho do arquivo "D:\\Documentos\\Nivel.dwg" pelo caminho onde está localizado o bloco de nível do usuário;
;2)Para cancelar o comando o usuário deve presionar ESC;


(vl-load-com)
(defun c:insnivel (/ *error* attdia attreq bloco cmdecho gr pt)
  (setq cmdecho(getvar "cmdecho"))(setvar "cmdecho" 0)
    
(defun *error* (msg)
    (if cmdecho(setvar "cmdecho" cmdecho))
    (if attdia(setvar "attdia" attdia))
    (if attreq(setvar "attreq" attreq))
    (or (wcmatch (strcase msg) "*FECHAR*,*BREAK*,*CANCELAR*,*CANCEL*,*SAIR*,*EXIT*")
        (princ (strcat "\nErro: " msg)))
    (entdel(entlast))
  (princ)
)
    
 (while t
 (setq attdia (getvar "attdia")attreq (getvar "attreq"))
 (setvar "attdia" 0)(setvar "attreq" 1)
 (setq bloco (vla-insertblock (vla-get-ModelSpace(vla-get-ActiveDocument(vlax-get-acad-object)))(vlax-3D-point (if pt pt '(0 0 0)))"D:\\Documentos\\Nivel.dwg" 1.0 1.0 1.0 0.0))
 (prompt "\nClique no local desejado para inserir o bloco de nível (ou ESC para sair): ")   
   (while (eq 5 (car (setq gr (grread t 15 0))))
     (setq pt (cadr gr))    
     (vla-move bloco (vla-get-InsertionPoint bloco)(vlax-3D-point pt))
     (vla-put-textstring(car(vlax-invoke bloco 'getattributes))(rtos (cadr pt) 2 2))
   )
   (prompt "\n1 bloco de nível foi inserido.")
 )
  (princ)
)
    
(prompt "\nO comando INSNIVEL foi carregado com sucesso.")
(princ)

Anexos
Exemplo de uso da rotina Insnivel
Exemplo de uso da rotina Insnivel
5h8j52.gif (562.06 KiB) Exibido 250 vezes
Responder