Aller au contenu

Lisp RB mais encore plus tueur.


Steven

Messages recommandés

salut à tous.

 

Le lisp RB de Patrick_35 est déjà très efficace car il met toutes les entités d'un bloc sur les calque 0 et tout en DUBLOC en une seul commande.

 

Toutefois, y a-t-il moyen de créer un lisp qui fasse la même chose mais qui en plus supprime toutes sortes de hachures, image, wipeout qu'il peut y avoir dans les blocs?

En effet, je doit redéfinir tout un tas de bloc. J'utilise RB mais le soucis est que je dois ensuite éditer les blocs manuellement pour supprimer les hachures à l'intérieur de ceux-ci.

lorsqu'il y en a un ou deux, ça ne pose pas de problème mais lorsqu'il y a une centaine de blocs différents, ça devient tout suite moins amusant.

 

[Edité le 30/6/2011 par Steven]

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Voici une routine de Gilles + micro-modif de Fraid un peu similaire a ta demande :

je pense qu'il faut mofifier la ligne "AcDb..." et traiter les hachures par exemple

 

Le Decapode

 

>>

 

;; Supprimer (Kill) les cotations (DIMension) dans les blocs (BLOCK)

;; Par GC le 11/03/2011 - Passage en DEFUN par Fraid

 

(defun c:KDIM_BLOCK (/ b o)

(vl-load-com)

(vlax-for b (vla-get-Blocks

(vla-get-ActiveDocument

(vlax-get-acad-object)

)

)

(or

(= (vla-get-IsLayout b) :vlax-true)

(= (vla-get-IsXref b) :vlax-true)

(vlax-for o b

(if (wcmatch (vla-get-ObjectName o) "AcDb*Dimension")

(vla-delete o)

)

)

)

)

)

 

>>

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Toutefois, y a-t-il moyen de créer un lisp qui fasse la même chose mais qui en plus supprime ... image, wipeout...

 

(DEFUN c:deletewipeoutinblocks (/ acdoc)
;;; http://www.cadxp.com/sujetXForum-12798.htm
 (SETQ acdoc (VLA-GET-ACTIVEDOCUMENT (VLAX-GET-ACAD-OBJECT)))
 (VLA-STARTUNDOMARK acdoc)
 (VLAX-FOR b (VLA-GET-BLOCKS acdoc)
   (VLAX-FOR e	b
     (IF (= "AcDbWipeout" (VLA-GET-OBJECTNAME e))
(VLA-DELETE e)
     )
   )
 )
 (VLA-ENDUNDOMARK acdoc)
 (VLA-REGEN acdoc ACACTIVEVIEWPORT)
 (PRINC)
)

 

et pour le Fun : Hachures (solid) et WipeOut

(DEFUN c:deletesolid (/ acdoc)
;;; http://www.cadxp.com/sujetXForum-12798.htm
 (SETQ acdoc (VLA-GET-ACTIVEDOCUMENT (VLAX-GET-ACAD-OBJECT)))
 (VLA-STARTUNDOMARK acdoc)
 (VLAX-FOR b (VLA-GET-BLOCKS acdoc)
   (VLAX-FOR e	b
     ;; (if (member (vla-get-ObjectName (list "AcDbHatch" "AcDbWipeout" "AcDbSolid")))
     (IF (AND (= "AcDbSolid" (VLA-GET-OBJECTNAME e))
       (= 255 (VLA-GET-COLOR e))
  )
(VLA-DELETE e)
     )
   )
 )
 (VLA-ENDUNDOMARK acdoc)
 (VLA-REGEN acdoc ACACTIVEVIEWPORT)
 (PRINC)
)

 

Ya qu'à demander !

 

 

 

[Edité le 1/7/2011 par Maximilien]

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

AutoCAD, Revit, GstarCAD, Fisa-CAD, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Lien vers le commentaire
Partager sur d’autres sites

Salut à tous.

 

A chaque fois, j'hallucine :D

 

j'essaye tout ça cet après-midi ;)

 

merci à vous :)

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Salut Maximilien

 

Le premier qui ne supprime que les wipeaout fonctionne très bien par contre, le second, qui supprime les wipeout et les hachures ne fonctionne pas :(

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Tu peux essayer ceci pour les Hachures :

 

 

;; Supprimer (Kill) les hachuress (HATCH) dans les blocs (BLOCK)
;; Par GC le 11/03/2011 - Passage en DEFUN par Fraid
;; Micro-Modification par LeCrabe DIM -->HATCH

(defun c:KHATCH_BLOCK (/ b o)
(vl-load-com)
(vlax-for b (vla-get-Blocks
(vla-get-ActiveDocument
(vlax-get-acad-object)
)
)
(or
(= (vla-get-IsLayout b) :vlax-true)
(= (vla-get-IsXref b) :vlax-true)
(vlax-for o b
(if (wcmatch (vla-get-ObjectName o) "AcDb*Hatch")
(vla-delete o)
)
)
)
)
)

 

C'est une micro-modification de la routine de Gilles - Merci !

Je viens de la tester avec des hachures ANSI31 et SOLID

tant en mode DUCALQUE que en mode Couleur Forcee, donc ca devrait faire !

Ne pas oublier un RG ou REGEN apres l'execution !

 

Le Decapode

 

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Tu peux essayer ceci pour les Hachures :

 

 

;; Supprimer (Kill) les hachuress (HATCH) dans les blocs (BLOCK)
;; Par GC le 11/03/2011 - Passage en DEFUN par Fraid
;; Micro-Modification par LeCrabe DIM -->HATCH

(defun c:KHATCH_BLOCK (/ b o)
(vl-load-com)
(vlax-for b (vla-get-Blocks
(vla-get-ActiveDocument
(vlax-get-acad-object)
)
)
(or
(= (vla-get-IsLayout b) :vlax-true)
(= (vla-get-IsXref b) :vlax-true)
(vlax-for o b
(if (wcmatch (vla-get-ObjectName o) "AcDb*Hatch")
(vla-delete o)
)
)
)
)
)

 

C'est une micro-modification de la routine de Gilles - Merci !

Je viens de la tester avec des hachures ANSI31 et SOLID

tant en mode DUCALQUE que en mode Couleur Forcee, donc ca devrait faire !

Ne pas oublier un RG ou REGEN apres l'execution !

 

Le Decapode

 

 

 

Je ne dirais qu'une seule chose.............. Super :D

 

Merci à tous :)

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

Et toujours avec la meme micro-modification du programme de Gilles

voici la routine qui traite les WIPEOUTs

 

 

;; Supprimer (Kill) les WIPEOUTs (WIPEOUT) dans les blocs (BLOCK)
;; Par GC le 11/03/2011 - Passage en DEFUN par Fraid

(defun c:KWIPEOUT_BLOCK (/ b o)
(vl-load-com)
(vlax-for b (vla-get-Blocks
(vla-get-ActiveDocument
(vlax-get-acad-object)
)
)
(or
(= (vla-get-IsLayout b) :vlax-true)
(= (vla-get-IsXref b) :vlax-true)
(vlax-for o b
(if (wcmatch (vla-get-ObjectName o) "AcDb*Wipeout")
(vla-delete o)
)
)
)
)
)

 

Le Decapode

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Et toujours avec la meme micro-modification du programme de Gilles

voici la routine qui traite les WIPEOUTs

 

 

;; Supprimer (Kill) les WIPEOUTs (WIPEOUT) dans les blocs (BLOCK)
;; Par GC le 11/03/2011 - Passage en DEFUN par Fraid

(defun c:KWIPEOUT_BLOCK (/ b o)
(vl-load-com)
(vlax-for b (vla-get-Blocks
(vla-get-ActiveDocument
(vlax-get-acad-object)
)
)
(or
(= (vla-get-IsLayout b) :vlax-true)
(= (vla-get-IsXref b) :vlax-true)
(vlax-for o b
(if (wcmatch (vla-get-ObjectName o) "AcDb*Wipeout")
(vla-delete o)
)
)
)
)
)

 

Le Decapode

 

 

J'l'avais pas vu celui-là. Trop fort :D

 

Merci pour tout. Voilà le gain de temps gagné :D

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

Heureux d'avoir pu t'aider ...

 

Par contre SVP si Gilles ou Fraid ou Bonuscad ou autre "Super Pro en Lisp / VLisp"

pouvait nous faire la petite modification qui permettrait de traiter une selection AutoCAD classique et non pas TOUT le DWG, cela pourrait m'aider (et sans doute d'autres personnes aussi) pour certains nettoyages !

 

Merci d'avance, Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

Hello

 

 

Heureux d'avoir pu t'aider ...

 

 

Par contre SVP si Gilles ou Fraid ou Bonuscad ou autre "Super Pro en Lisp / VLisp"

 

pouvait nous faire la petite modification qui permettrait de traiter une selection AutoCAD classique et non pas TOUT le DWG, cela pourrait m'aider (et sans doute d'autres personnes aussi) pour certains nettoyages !

 

 

Merci d'avance, Le Decapode

 

Il serait temps de mettre la pince à la patte...

 

Faire une sélection filtrée, parcourir la sélection pour effacer tous les objets (en l'état, la routine traite wipeouts et hachures SOLID, commenter/décommenter les expressions de filtre suivant les besoins) :

 

(defun c:lecrabe (/ ss ent)
 (if (setq ss
     (ssget
       ;; uniquement les wipeouts
       ;'((0 . "WIPEOUT"))

       ;; uniquement les hachures SOLID
       ;'((0 . "HATCH") (2 . "SOLID"))

       ;; wipeouts et hachures SOLID
       '((-4 . "<OR")(0 . "WIPEOUT")(-4 . "<AND")(0 . "HATCH")(2 . "SOLID")(-4 . "AND>")(-4 . "OR>"))
     )
     )
   (repeat (setq n (sslength ss))
     (entdel (ssname ss (setq n (1- n))))
   )
 )
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité