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 »

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
Concreto
Concreto
Mensagens: 25
Registrado em: Sex 29 Dez 2017 4:17:25 pm

Re: Apagar layers congelados e desligados no model.

Mensagem por Carlos Fernando »

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
Concreto
Concreto
Mensagens: 25
Registrado em: Sex 29 Dez 2017 4:17:25 pm

Re: Apagar layers congelados e desligados no model.

Mensagem por Carlos Fernando »

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 »

Obrigado Carlos,

Resolveu!!!
Responder