Tenha uma nova experiência ao navegar no Fórum pelo computador de forma integrada ao portal principal. Acesse o seguinte link: https://www.autolisp.com.br/board/. Entretanto para dispositivos móveis recomendamos acessar este outro link: https://www.autolisp.com.br/forum/

Apagar layers congelados e desligados no model.

Dúvidas sobre AutoLISP...

Moderador: Moderadores

Responder
CMHD
Novato
Novato
Mensagens: 3
Registrado em: Sex 14 Jun 2019 4:50:36 pm

Apagar layers congelados e desligados no model.

Mensagem por CMHD » Sex 14 Jun 2019 5:43:44 pm

Boa tarde à todos,

Primeiramente vou esplicar meu objetivo, é provavel que haja uma alternativa melhor :wink: .

Quando termino um projeto geralmente tenho muitos pavimentos e informações que não são necessárias no meu projeto, e, como utilizo pranchas com Folhas de impressão com blocos atributados preciso de uma lisp para explodir apenas os blocos no Model, ou lisp para explodir todos blocos com excesão de alguns (bloco atributado da folha, carimbo e legenda - esses blocos tem sempre o mesmo nome).

Até o momento consegui elaborar a lisp para explodir tudo e apagar os layers congelados e desligados:

(defun c:QQQ (/ ActDoc LayList LayNameList)
;
; explode todos os blocos.
(setq sel1 (ssget "x" '( (0 . "INSERT") )))
(command "explode" sel1)
(command "")
;
; apaga todos os layers congelados e desligados.
(setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(vlax-for Lay (vla-get-Layers ActDoc)
(if
(or
(= (vla-get-LayerOn Lay) ':vlax-false)
(= (vla-get-Freeze Lay) ':vlax-true)
)
(progn
(vla-put-Lock Lay :vlax-false)
(setq LayList (cons Lay LayList)
LayNameList (cons (vla-get-Name Lay) LayNameList)
)
)
)
)
(vla-StartUndoMark ActDoc)
(if LayList
(progn
(vlax-for Layout (vla-get-Layouts ActDoc)
(vlax-for Obj (vla-get-Block Layout)
(if (member (vla-get-Layer Obj) LayNameList)
(vla-Delete Obj)
)
)
)
(vla-PurgeAll ActDoc)
)
)
(vla-EndUndoMark ActDoc)
(command "purge" "a" "*" "n")
(command "audit" "y")
(command "qsave")
(command "close")
(princ "\n ----- ")
(princ)
)

Mas não tenho idéia de como fazer ela selecionar apenas os blocos no model para explodir ou ignorar alguns blocos específicos.

Avatar do usuário
Carlos Fernando
Papel
Papel
Mensagens: 10
Registrado em: Sex 29 Dez 2017 4:17:25 pm

Re: Apagar layers congelados e desligados no model.

Mensagem por Carlos Fernando » Sex 14 Jun 2019 9:55:44 pm

Boa noite, não testei sua rotina, mas se quiser selecionar apenas
os blocos no espaço de modelo, basta incluir essa opção no seu ssget. assim:

Código: Selecionar todos

(setq sel1 (ssget "_x" '((0 . "INSERT")(410 . "MODEL"))))
 (command "_explode" sel1 "")
Dicas: vc pode colocar o comando de ENTER (as aspas) dentro do próprio comando e
sempre use o sublinhado antes de um comando para que o comando funcione em qualquer versão de idioma do autocad.

Abraço

Avatar do usuário
Carlos Fernando
Papel
Papel
Mensagens: 10
Registrado em: Sex 29 Dez 2017 4:17:25 pm

Re: Apagar layers congelados e desligados no model.

Mensagem por Carlos Fernando » Sáb 15 Jun 2019 1:04:43 pm

Esqueci de mencionar como fazer para não selecionar alguns blocos.
Para selecionar todos os blocos exceto alguns, basta usar o processo de negação no ssget.
Supondo que existem 100 diferentes blocos e vc quer selecionar todos exceto os blocos "folha" "carimbo" e "legenda"
então é só fazer

Código: Selecionar todos

(setq sel1 (ssget "_x" '((0 . "INSERT")(2 . "~folha")(2 . "~carimbo")(2 . "~legenda"))))
Para ignorar mais blocos basta acrescentar da mesma forma.

Att

CMHD
Novato
Novato
Mensagens: 3
Registrado em: Sex 14 Jun 2019 4:50:36 pm

Re: Apagar layers congelados e desligados no model.

Mensagem por CMHD » Dom 16 Jun 2019 7:29:25 pm

Obrigado Carlos,

Resolveu!!!

Responder