FRAXA Posté(e) le 26 mars 2008 Partager Posté(e) le 26 mars 2008 Bonjour à tous!Serait-il possible de créer un lisp pour:- Insérer un wbloc- Supprimer tous les calques de "présentation" que peut contenir le wbloc.Exemple:Je souhaite insérer un châssis de pompe dessiné en 3D dans une implantation.Le fichier contenant le châssis contient des calques de présentations: -HAT, -VIS, -COT, VPORTS, defpoints, cotation, etc...Actuellement, quand j'insère ce fichier en tant que wbloc dans mon fichier d'implantation, j'ai tous ces calques de présentation qui encombrent mon gestionnaire de calques. J'utilise donc la commande laydel pour supprimer ces fameux calques dits de "présentation". J'espère avoir était clair dans ma demande et je remercie d'avance toutes les personnes qui vont ce pencher sur ma demande. HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800 Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 26 mars 2008 Partager Posté(e) le 26 mars 2008 Salut, Je ne vois pas l'intérêt de faire un LISP pour insérer un fichier et ensuite supprimer les calques importés avec lui. Je ferais plutôt un bloc "propre" ; en faisant un WBLOC depuis le fichier en question et ne sélectionnant que les solides concernés, le nouveau fichier créé ne devrait contenir que le (ou les) calque(s) des objets sélectionnés. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
FRAXA Posté(e) le 26 mars 2008 Auteur Partager Posté(e) le 26 mars 2008 Je ne vois pas l'intérêt de faire un LISP pour insérer un fichier et ensuite supprimer les calques importés avec lui. L'intérêt c'est de diminuer le nombre de fichier et de réduire le nombre de manipulations lorsque l'on modifie le wbloc. HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800 Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 26 mars 2008 Partager Posté(e) le 26 mars 2008 L'intérêt c'est de diminuer le nombre de fichier et de réduire le nombre de manipulations lorsque l'on modifie le wbloc. Et le nombre de manipulations pour créer un LISP (encore un fichier) ??!!! Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
FRAXA Posté(e) le 27 mars 2008 Auteur Partager Posté(e) le 27 mars 2008 Et le nombre de manipulations pour créer un LISP (encore un fichier) ??!!! Dans mon cas, ça m'éviterais de créer une bonne centaine de fichiers.Je sais que la création dans tel lisp demande beaucoup de temps, et si j'avais les compétences pour le faire je l'aurais fait depuis longtemps.Peut-être que ma méthode de travail n'est pas bonne mais je pense que ce lisp pourrait intéresser beaucoup de monde. En tout cas, je te remercie (gile) d'avoir pris le temps d'étudier ma demande. HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800 Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 30 mars 2008 Partager Posté(e) le 30 mars 2008 Salut, J'ai essayé de faire quelque chose.Deux commandes :- une première : CleanInsert, pour insérer un fichier et le "nettoyer" des objets générés par SOLVIEW, SOLDRAW et SOLPROF (si les préfixes ou suffixes ont été conservés dans les noms de calque).- une seconde : CleanBlock, pour nettoyer un bloc déjà inséré. ;; Insère un fichier dans le dessin et en supprime tous les objets ;; créés avec les commandes SOLVIEW, SOLDRAW et SOLPROF (defun c:CleanInsert (/ file) (and (setq file (getfiled "Sélectionnez le fichier de dessin" (getvar "DWGPREFIX") "dwg" 0 ) ) (vl-cmdf "_.insert" file) (not (RemoveSolDraw_blk (vl-filename-base file))) (vl-cmdf "_.regenall") ) (princ) ) ;; Supprime du bloc sélectionné tous les objets ;; créés avec les commandes SOLVIEW, SOLDRAW et SOLPROF (defun c:CleanBlock (/ blk) (and (setq blk (car (entsel "\nSélectionnez le bloc à nettoyer: "))) (setq elst (entget blk)) (= "INSERT" (cdr (assoc 0 elst))) (not (RemoveSolDraw_blk (cdr (assoc 2 elst)))) (vl-cmdf "_.regenall") ) (princ) ) ;; Supprime de la définition de bloc tous les objets ;; créés avec les commandes SOLVIEW, SOLDRAW et SOLPROF (defun RemoveSolDraw_blk (blk / doc lay) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-for o (vla-item (vla-get-Blocks doc) blk) (setq lay (vla-get-Layer o)) (if (or (wcmatch lay "*-COT") (wcmatch lay "*-HAT") (wcmatch lay "*-HID") (wcmatch lay "*-VIS") (wcmatch lay "PH-*") (wcmatch lay "PV-*") (= lay "VPORTS") ) (vl-catch-all-apply 'vla-delete (list o)) ) ) (vlax-for b (vla-get-Blocks doc) (if (or (= (vla-get-Name b) "AME_VW") (wcmatch (vla-get-Name b) "`**") ) (vl-catch-all-apply 'vla-delete (list b)) ) ) (vlax-for l (vla-get-Layers doc) (setq lay (vla-get-Name l)) (if (or (wcmatch lay "*-COT") (wcmatch lay "*-HAT") (wcmatch lay "*-HID") (wcmatch lay "*-VIS") (wcmatch lay "PH-*") (wcmatch lay "PV-*") (= lay "VPORTS") ) (vl-catch-all-apply 'vla-delete (list l)) ) ) ) Mais, mieux à mon avis, si tu veux faire un vrai ménage, la commande CleanSolDraw (à lancer depuis un dessin vierge).L'utilisateur choisi un répertoire à traiter et un nouveau sous dossier "Blocs" est créé dans ce répertoire. Tous les fichiers dwg du répertoire sont copiés dans le nouveau dossier et sont "nettoyés". ;; Copie tous les dwg d'un répertoire dans un nouveau sous dossier ;; et supprime des fichiers les objets créés avec ;; les commandes SOLVIEW, SOLDRAW et SOLPROF (defun c:CleanSolDraw (/ dir files new fso dbx) (vl-load-com) (and (setq dir (dirbox "Choisir un dossier" "" 0)) (setq files (vl-directory-files dir "*.dwg" 0)) (setq fso (vlax-create-object "Scripting.FileSystemObject")) (setq new (strcat dir "\\Blocs")) (or (= -1 (vlax-invoke fso 'FolderExists new)) (vlax-invoke fso 'CreateFolder new) ) (not (foreach f files (vlax-invoke fso 'CopyFile (strcat dir "\\" f) (strcat new "\\" f) ) ) ) (vlax-release-object fso) (foreach f files (setq dbx (OpenDBX (strcat new "\\" f))) (RemoveSolDraw_doc dbx) (vla-saveas dbx (strcat new "\\" f)) (vlax-release-object dbx) (vl-file-delete (strcat new "\\" (vl-filename-base f) ".bak") ) ) ) (princ) ) ;;; DirBox -Patrick_35- ;;; Boite de dialogue de sélection de dossier (defun DirBox (Message Chemin Drapeau / rep sh) (vl-load-com) (setq sh (vlax-create-object "Shell.Application")) (if (setq rep (vlax-invoke sh 'browseforfolder 0 Message Drapeau Chemin) ) (setq rep (vlax-get-property (vlax-get-property rep 'self) 'path)) (setq rep nil) ) (vlax-release-object sh) rep ) ;;; OpebDBX -Patrick_35- ;;; Accéder à un dessin fermé (defun OpenDBX (dwg / odbx) (vl-load-com) (if ( (setq odbx (vlax-create-object "ObjectDBX.AxDbDocument")) (setq odbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2) ) ) ) ) (vla-open odbx dwg) odbx ) ;; RemoveSolDraw ;; Supprime du document tous les objets créés avec ;; les commandes SOLVIEW, SOLDRAW et SOLPROF (defun RemoveSolDraw_doc (doc / lay) (vl-load-com) (vlax-for o (vla-get-ModelSpace doc) (setq lay (vla-get-Layer o)) (if (or (wcmatch lay "*-COT") (wcmatch lay "*-HAT") (wcmatch lay "*-HID") (wcmatch lay "*-VIS") (wcmatch lay "PH-*") (wcmatch lay "PV-*") ) (vl-catch-all-apply 'vla-delete (list o)) ) ) (vlax-for o (vla-get-Paperspace doc) (setq lay (vla-get-Layer o)) (if (or (wcmatch lay "*-COT") (= lay "VPORTS") ) (vl-catch-all-apply 'vla-delete (list o)) ) ) (vlax-for b (vla-get-Blocks doc) (if (or (= (vla-get-Name b) "AME_VW") (wcmatch (vla-get-Name b) "`**") ) (vl-catch-all-apply 'vla-delete (list b)) ) ) (vlax-for l (vla-get-Layers doc) (setq lay (vla-get-Name l)) (if (or (wcmatch lay "*-COT") (wcmatch lay "*-HAT") (wcmatch lay "*-HID") (wcmatch lay "*-VIS") (wcmatch lay "PH-*") (wcmatch lay "PV-*") (= lay "VPORTS") ) (vl-catch-all-apply 'vla-delete (list l)) ) ) ) [Edité le 30/3/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
FRAXA Posté(e) le 31 mars 2008 Auteur Partager Posté(e) le 31 mars 2008 (gile) je ne sais comment te remercier!Le lisp CleanInsert répond exactement à mes attentes.Merci beaucoup.Juste une petite question, est-il possible d'insérer en attribut les propriétés personnalisées du fichier? HPZ400 Workstation Intel Xeon W3550 3.07 GHz 6 Go ram QUADRO FX 1800 Lien vers le commentaire Partager sur d’autres sites More sharing options...
lili2006 Posté(e) le 31 mars 2008 Partager Posté(e) le 31 mars 2008 Bonsoir à toutes et tous, (gile) Tous les fichiers dwg du répertoire sont copiés dans le nouveau dossier et sont "nettoyés". Qu'entend-tu exactement par "nettoyés" STP ? Est-ce que ce Lisp ne répond qu'à la demande de FRAXA, rappel => - Insérer un wbloc- Supprimer tous les calques de "présentation" que peut contenir le wbloc. , ou bien vas t-il (ou peut-il,...) aller plus loin ? Merci d'avance. [Edité le 31/3/2008 par lili2006] Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 31 mars 2008 Partager Posté(e) le 31 mars 2008 Salut, lili2006, Qu'entend-tu exactement par "nettoyés" STP ? Est-ce que ce Lisp ne répond qu'à la demande de FRAXA Oui je pense que que ce LISP¨répond à une demande plutôt spécifique (c'est pourquoi je ne pense pas aller plus loin). Les commandes SOLVIEW/SOLDRAW et SOLPROF qui servent à créer dans les présentations des entités 2d à partir de solides 3d, créent, en plus des objets graphiques, des calques et des blocs dont il nest pas très aisé de se débarrasser.FRAXA veut utiliser des fichiers dans lesquels ces commandes ont été utilisées comme bloc, mais n'avoir plus que les solides 3d.Le "nettoyage" consiste donc à supprimer de ces fichiers les objets créés par ces commandes. FRAXA, est-il possible d'insérer en attribut les propriétés personnalisées du fichier?Oui c'est possible, mais comme dit plus haut, je ne pense pas le faire, cette demande est trop spécifique et pas assez claire : attributs visibles ou non ? constant ou éditable ? à insérer où ? Je persiste à penser que tu devrais te faire une bibliothèque avec des blocs "propres" (la routine CleanSoldraw te ferais le plus gros du boulot) dans lesquels tu pourrais mettre tes attributs à ta guise. [Edité le 31/3/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
lili2006 Posté(e) le 31 mars 2008 Partager Posté(e) le 31 mars 2008 Re, Merci beaucoup de tes réponses (gile), j'ai posé cette question car je me demandais bien ce que pouvez être : (if (or (wcmatch lay "*-COT")(wcmatch lay "*-HAT")(wcmatch lay "*-HID")(wcmatch lay "*-VIS")(wcmatch lay "PH-*")(wcmatch lay "PV-*")(= lay "VPORTS"), en 3D, je "comprend" (c'est ungrand mot !)mieux alors,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 31 mars 2008 Partager Posté(e) le 31 mars 2008 lili2006, Une petite animation sur l'utilisation de SOLVIEW/SOLDRAW piquée ici http://discussion.autodesk.com/servlet/JiveServlet/download/130-653760-5888180-179046/soldraw.gif Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
lili2006 Posté(e) le 1 avril 2008 Partager Posté(e) le 1 avril 2008 Bonsoir à toutes et tous, Merci pour le lien (gile), Pu beaucoup de place pour dessiner dis donc, on dirait,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant