balyoa Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Bonjour, J'ai un fichier DWG avec N calques.Je souhaiterai générer de manière automatique 3 DWG issu du 1er uniquement en choisissant les calques à prendre en compte.Merci d'avance pour votre aide.Cordialement.Yoann
(gile) Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Salut Commande WBLOC ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
balyoa Posté(e) le 9 mars 2009 Auteur Posté(e) le 9 mars 2009 Bonjour, Merci mais je sais je le fais actuellement avec wbloc. Mais je suis obligé d'appliquer des filtres de calques puis de faire un wbloc, et ce autant de fois que j'ai besoin de générer des fichiers différents. Je cherche justement à automatiser tout cela. Sinon je dois appliquer 3 filtres différents, et pour chacun lancer un wbloc, le tout est assez long, surtout sur un nombre de dwg originaux important. Cordialement
grosseel Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Salut balyoa, Comment est architecturer ton dwg, Est ce qu'il s'agit dun plan électrique dont un calque est égal à un folio, si c'est le cas j'ai la réponse à ta question. Par contre, j'ai formulé une demande similaire ( ici http:// http://www.cadxp.com/sujetXForum-22846.htm ) mais pour des plans architecturer différement si quelqu'un à une réponse à me donner, je suis preneur Merci d'avance pour vos réponses. J'attend des précisions Balyoa
balyoa Posté(e) le 9 mars 2009 Auteur Posté(e) le 9 mars 2009 Et non mon dwg n'est pas structuré en folios. Je dois agis directement sur la liste des calques pour faire ma sélection, et générer un nouveau dwg issu de cette sélection. Une solution serait d'inclure la commande wbloc dans un lisp, mais je ne connais pas le lisp. Si certains développeurs connaissent une solution à ce problème, nous sommes donc 2 à être preneurs. Merci d'avance.
Patrick_35 Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Salut Tu as la possibilité de sauvegarder les filtres (commande _filter) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Salut, Le problème n'est pas tant l'utilisation de la commande WBLOC dans un LISP (ou dans un script s'il faut traiter plusieurs fichiers) que le choix automatique des objets à sélectionner. Automatiser une tache suppose de "travailler en aveugle" (sans intervention de l'utilisateur), donc d'avoir des critères objectifs et précis pour faire une sélection, ces critères devant être identiques dans tous les fichiers à traiter. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Salut, Un code lisp (sans gestion d'erreur), il crée les fichiers par calque "NomDuFichier$NomDuCalque.dwg"Il est facile de supprimer les fichiers non-voulus. ((lambda ( / def_lay nam_lay js) (setq def_lay (tblnext "LAYER" T)) (setq nam_lay (cdr (assoc 2 def_lay))) (cond ((setq js (ssget "_X" (list (cons 8 nam_lay)))) (command "_.-wblock" (strcat (getvar "dwgname") "$" nam_lay) "" "*0.0,0.0,0.0" js "") ) ) (while (setq def_lay (tblnext "LAYER")) (setq nam_lay (cdr (assoc 2 def_lay))) (cond ((setq js (ssget "_X" (list (cons 8 nam_lay)))) (command "_.-wblock" (strcat (getvar "dwgname") "$" nam_lay) "" "*0.0,0.0,0.0" js "") ) ) ) (prin1) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
balyoa Posté(e) le 9 mars 2009 Auteur Posté(e) le 9 mars 2009 Merci , mais..... Mes dwg en sorties seront constitués de plusieurs calques, je ne souhaite pas un dwg par calque existant, mais un dwg par groupe de calques, nuance..... Encore merci pour vos propositions
(gile) Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Je me répète :Y a-t-il des critères non équivoques (préfixes, couleur...), communs à tous les fichiers qui permettrait de déterminer ces "groupes de calques" ? Si oui, lesquels ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Hello J'abonde dans le sens de Gilles, on pourrait imaginer un programme Lisp/V-Lisp qui traiterait automatiquement par une commande WBLOC (exécuter sur le calque ZERO et dans l'onglet Objet et dans le SCG et etc ...), tous les calques d'un dessin dont le préfixe du nom de calque serait : RES_ASS*, RES_AEP*, RES_EDF*, RES_GDF*, CADA*, BATIM*, etc A mon avis il faut inclure le calque ZERO dans le WBLOC !? et il faudrait peut être aussi demander quels autres calques, il faut inclure obligatoirement pour chaque WBLOC exécuté ... Qu'en pensez vous ? Le Decapode Autodesk Expert Elite Team
balyoa Posté(e) le 9 mars 2009 Auteur Posté(e) le 9 mars 2009 Je ne peux filtrer que sur le nom de calques, et oui certains ont un préfixe commun.la proposition de lecrabe me parait très intéressante.
bonuscad Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Entretemps, j'ai construis rapidement un truc pour faire un script sur un dossier.Toujours sur le principe précédent, (qui ne te convient pas)Mais avec le résultat en fichier rien n'empêche de regrouper plusieurs fichiers en un seul par un INSERER en cochant le mode "décomposé" surtout si à chaque fois les nom de calque sont différents. Ca fait peut être un peu moins de boulot. Voici quand même le générateur de script: (defun c:make_script ( / prefix file_scr) (setq prefix (strcat (vl-filename-directory (getfiled "Sélectionner un fichier dessin TEMOIN" "" "dwg" 16)) "\\") file_scr (open (strcat prefix "open_folder.scr") "w") ) (foreach dwg (vl-directory-files prefix "*.dwg" 1) (write-line "_.open" file_scr) (write-line (strcat "\"" prefix dwg "\"") file_scr) ;; ;;debut partie personnalisable ;; (write-line "((lambda ( / def_lay nam_lay js)" file_scr) (write-line "(setq def_lay (tblnext \"LAYER\" T))" file_scr) (write-line "(setq nam_lay (cdr (assoc 2 def_lay)))" file_scr) (write-line "(cond" file_scr) (write-line "((setq js (ssget \"_X\" (list (cons 8 nam_lay))))" file_scr) (write-line "(command \"_.-wblock\" (strcat (getvar \"DWGPREFIX\") (getvar \"dwgname\") \"$\" nam_lay) \"\" \"*0.0,0.0,0.0\" js \"\")" file_scr) (write-line ")" file_scr) (write-line ")" file_scr) (write-line "(while (setq def_lay (tblnext \"LAYER\"))" file_scr) (write-line "(setq nam_lay (cdr (assoc 2 def_lay)))" file_scr) (write-line "(cond" file_scr) (write-line "((setq js (ssget \"_X\" (list (cons 8 nam_lay))))" file_scr) (write-line "(command \"_.-wblock\" (strcat (getvar \"DWGPREFIX\") (getvar \"dwgname\") \"$\" nam_lay) \"\" \"*0.0,0.0,0.0\" js \"\")" file_scr) (write-line ")" file_scr) (write-line ")" file_scr) (write-line ")" file_scr) (write-line "(prin1)" file_scr) (write-line "))" file_scr) ;; ;;fin partie personnalisable ;; ;(write-line "_.qsave" file_scr) (write-line "_.close" file_scr) (write-line "_yes" file_scr) ) (close file_scr) (princ (strcat "\Vous pouvez lancer le SCRIPT :" prefix "open_folder.scr")) (prin1) ) NB: Si tu utilise MAP, le rajout de \"_no\" sera nécessaire à la fin de wblock Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Je ne peux filtrer que sur le nom de calques, et oui certains ont un préfixe commun. Si tu dois entrer toi même les noms de calque pour chaque filtre et ce pour chaque fichier, l'automatisation se réduit à la commande WBLOC ce qui ne présente pas grand intérêt. Il te reste la solution proposée par bonuscad... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
balyoa Posté(e) le 9 mars 2009 Auteur Posté(e) le 9 mars 2009 En fait j'ai une trentaine de fichiers, et pour chacun d'entre eux je dois en faire 3 dwg distincts en filtrant toujours sur les memes noms de calques.
(gile) Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Et bien, donne donc les 3 listes de noms de calques (séparés par des virgules) et 3 suffixes pour les 3 dwg à générer.Il sera alors possible de faire un petit LISP que tu pourra appeler depuis un script (regarde SuperAutoScript) pour traiter tous les fichiers. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
balyoa Posté(e) le 9 mars 2009 Auteur Posté(e) le 9 mars 2009 Admettons que je souhaite sélectionner dans le fichier "1.dwg" source, les calques nommés A, B, C pour générer le fichier "1s.dwg", les calques D, E, F pour générer le fichier "1h.dwg" et les calques G, H, I pour générer le fichier 1t.dwg.... et ainsi de suite pour les fichiers "2.dwg", "3.dwg", etc..... A quoi ressemblerait le script ? Merci d'avance
(gile) Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Voilà un LISP, pas testé, donc à essayer d'abord dans un fichier. Il faut remplacer [surligneur]"A,B,C"[/surligneur] [surligneur]"D,E,F"[/surligneur] [surligneur]"G,H,I"[/surligneur] par les noms de calques. Chaque série est entre guillemets les noms de calques séparés par de virgules.Tu peux aussi remplacer [surligneur]"s"[/surligneur] [surligneur]"h"[/surligneur] [surligneur]"t"[/surligneur] par les suffixes que tu veux (l'ordre des calques et des suffixes doit correspondre). Si tu veux traiter plusieurs fichiers, dans SuperAutoScript tu sélectionnes les fichiers à traiter et, dans la case script, tu mets juste : WBlockByLayerList (defun c:WBlockByLayerList (/ acdoc layers clayer frozen) (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) layers (vla-get-Layers acdoc) ) (setq clayer (getvar "CLAYER")) (vlax-for l layers (and (= (vla-get-Freeze l) :vlax-true) (setq frozen (cons l frozen)) (vla-put-Freeze l :vlax-false) ) ) (setvar "CLAYER" "0") (mapcar '(lambda (lays suff) (if (ssget "_X" (list '(410 . "Model") (cons 8 lays))) (progn (vla-WBlock acdoc (strcat (getvar "DWGPREFIX") (vl-filename-base (getvar "DWGNAME")) suff ".dwg" ) (setq ss (vla-get-ActiveSelectionSet acdoc)) ) (vla-delete ss) ) ) ) '([surligneur]"A,B,C"[/surligneur] [surligneur]"D,E,F"[/surligneur] [surligneur]"G,H,I"[/surligneur] ) '([surligneur]"s"[/surligneur] [surligneur]"h"[/surligneur] [surligneur]"t"[/surligneur]) ) (setvar "CLAYER" clayer) (foreach l frozen (vla-put-Freeze l :vlax-true)) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
balyoa Posté(e) le 9 mars 2009 Auteur Posté(e) le 9 mars 2009 Merci, j'essaye demain et je fais un feedback.
bonuscad Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 dans la case script, tu mets juste : WBlockByLayerList Sans avoir testé, je pense qu'il faudra d'abords s'assurer que le fichier lisp soit bien enregistré dans un dossier de recherche d'Autocad. Dans la case script, il faudra aussi d'abords le chargé, puis l'exécuter.Ce qui pourrait être (sans aucun tests): (load "WBlockByLayerList.lsp")WBlockByLayerList Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 9 mars 2009 Posté(e) le 9 mars 2009 Tu as raison Bruno, je voulais dire qu'avec SuperAutoScript, il n'est pas nécessaire de s'occuper de l'ouverture, enregistrement et fermeture des fichiers.Mais bien sûr il faut charger le LISP avant de l'exécuter soit comme tu le dis, soit en utilisant un chargement automatique. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
grosseel Posté(e) le 19 mars 2009 Posté(e) le 19 mars 2009 Bonjour à tous, ma problématique est la même que Balyoa sauf que mon plan est architecturé différement :- 5 colonnes et autant de ligne que nécessaire- Décalage entre colonnes 500- Décalage entre lignes 400- Sens de lecture du bas à gauche vers le haut à droiteDonc ma demande est : Est-il possible de 'éclater mon fichier dwg en autant de fichiers que de folios présent dans le fichier de base.J'ai essayé avec un script mais le probléme est de l'étendre aux autres folios. Exemple du script: _copybase 0,0 -1,-1 420,296 _new "chemin du gabarit" _pasteclip 0,0 _zoom _e _save "Chemin d'enregistrement du fichier" _close delai 5000 _copybase
balyoa Posté(e) le 31 mars 2009 Auteur Posté(e) le 31 mars 2009 Merci beaucoup Gilles et Bonuscad, ca marche du tonnerre avec le lisp et superautoscipt !Les 30 fichiers traités en 1/4 heure. Encore merci. Balyoa
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