bucheron Posté(e) le 28 juillet 2005 Posté(e) le 28 juillet 2005 Bonjour a tous, voila mon nouveau probleme. J'ai recuperer sur un forum CADXP un petit lisp qui me permet d'avoir la liste des calques d'un fichier .dwg dans un fichier texte.[surligneur](defun c:exc (/ calque nom etat acti gele verr xref styl chaine table fichier) (setq calque (tblnext "layer" T)) ; Pointer sur la 1er entrée (while calque (setq nom (cdr (assoc 2 calque)) etat (cdr (assoc 70 calque)) acti (cdr (assoc 62 calque)) styl (cdr (assoc 6 calque)) gele (logand etat 1) verr (logand etat 4) xref (logand etat 16) ) (if (/= xref 16) ; Calque ne dépendant pas des xref (progn (setq chaine (strcat nom (chr 9))) (if (< acti 0) (setq chaine (strcat chaine "Inactif" (chr 9))) (setq chaine (strcat chaine "Actif" (chr 9))) ) (if (= gele 1) (setq chaine (strcat chaine "Gelé" (chr 9))) (setq chaine (strcat chaine "Apparent" (chr 9))) ) (if (= verr 4) (setq chaine (strcat chaine "Verrouillé" (chr 9))) (setq chaine (strcat chaine "Déverrouillé" (chr 9))) ) (setq chaine (strcat chaine (itoa (abs acti)) (chr 9) styl)) (setq table (append table (list chaine))) ) ) (setq calque (tblnext "layer")) ) (setq nom_du_fichier "C:\\Sites\\PRISONS\\PCHA\\DWG\\list.txt") (write-line nom_du_fichier) (if table (progn (setq table (acad_strlsort table)) (setq fichier (strcat (getvar "dwgprefix") (getvar "dwgname"))) (setq fichier (getvar "dwgname");;; (strcat (substr fichier 1 (- (strlen fichier) 3)) "txt") ) (setq n 0) (setq nom (open nom_du_fichier "a"));;; (write-line (strcat fichier) nom) (while (nth n table) (write-line (strcat fichier " " (nth n table)) nom) (setq n (1+ n)) ) (close nom);;; (alert (strcat "Fichier ";;; fichier;;; (chr 13);;; "crée pour ";;; (itoa (1+ n));;; " calques";;; );;; ) ) (alert "Pas de calques") ) (princ))[/surligneur] Je l'ai modifié pour pouvoir le lancer a partir d'un script. [surligneur] filedia 0cmddia 0_open C:\Sites\PRISONS\PCHA\DWG\Arcacfa-00d.dwgexc_close _open C:\Sites\PRISONS\PCHA\DWG\Arcacfa-tod.dwgexc_close _open C:\Sites\PRISONS\PCHA\DWG\Arcadmi-00d.dwgexc_close _open C:\Sites\PRISONS\PCHA\DWG\Arcadmi-01d.dwgexc_close...[/surligneur] Maintenat, j'aimerais eviter de faire le script (350 fichiers a lister).Je recherche les commandes lisp qui me permetrai de lire le nom de tous les fichiers .dwg d'un repertoire pour les integrer dans le programme "EXC" que j'utilise. Merci a tous
Patrick_35 Posté(e) le 28 juillet 2005 Posté(e) le 28 juillet 2005 Salut,Un lisp qui te crée un script de la partie personnalisable d'un répertoire complet que tu choisisLe script est créé dans le répertoire choisi sous le nom de SCRIPT.SCR @+ (defun c:scr(/ fic fscr lst n rep) (if (setq fic (getfiled "Choisissez un fichier de référence" (getvar "dwgprefix") "dwg" 8)) (progn (setq rep (vl-string-translate "\\" "/" (strcat (vl-filename-directory (findfile fic)) "\\"))) (setq lst (acad_strlsort (vl-directory-files rep "*.dwg" 1)) fscr (open (strcat rep "SCRIPT.SCR") "w") n 0) (while (nth n lst) (if (= n 0) (progn (write-line "(if (and (not (zerop (getvar \"dbmod\"))) (not (zerop (getvar \"sdi\"))))" fscr) (write-line " (command \"_.qsave\"))" fscr) ) ) (write-line (strcat "(command \"_.open\" \"" rep (nth n lst) "\")") fscr) ;======================================================================================= ; Début de Partie personnalisable ;======================================================================================= (write-line "exc" fscr) ;======================================================================================= ; Fin de Partie personnalisable ;======================================================================================= (write-line "(if (not (zerop (getvar \"dbmod\")))" fscr) (write-line " (command \"_.qsave\"))" fscr) (write-line "(if (zerop (getvar \"sdi\"))" fscr) (write-line " (command \"_.close\"))" fscr) (setq n (1+ n)) ) (close fscr) (princ "\nScript créé.") ) ) (princ) ) [Edité le 29/7/2005 par Patrick_35] Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tramber Posté(e) le 29 juillet 2005 Posté(e) le 29 juillet 2005 Très pratique pour les scripts pour le pré-traitement sur tableur :le Directory Lister (indispensable si les répertoires à éditer sont nombreux) http://gratuiciel.prv.pl http://home.autocom.pl/mrowka/freeware/images/dss2.gif Le télécharger sur la page anglaise mais mettre la version francaise. On peut faire un masque sur les DWG [Edité le 4/8/2005 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
bucheron Posté(e) le 29 juillet 2005 Auteur Posté(e) le 29 juillet 2005 Salut Patrick_35 J'ai modifier ton lisp et c'est OK.J'ai des peties questions concernat certaines lignes de commande : (write-line "(if (and (not (zerop (getvar \"dbmod\"))) (not (zerop (getvar \"sdi\"))))" fscr)et(write-line "(if (zerop (getvar \"sdi\"))" fscr) A quoi elles servent? aussi, quel est l'interret d'utiliser les lignes du type :(write-line " (command \"_.close\"))" fscr) au lieu de :(write-line "_close " fscr) merci :)
Patrick_35 Posté(e) le 29 juillet 2005 Posté(e) le 29 juillet 2005 Salut,(write-line "(if (and (not (zerop (getvar \"dbmod\"))) (not (zerop (getvar \"sdi\"))))" fscr)Je teste si tu es en mono ou multidessin (variable SDI) et si en mono, je regarde si tu as besoin de sauvegarder (variable DBMOD)(write-line "(if (zerop (getvar \"sdi\"))" fscr)Je teste si tu es en mono ou multidessin pour eviter une erreur en mono avec le _.close(write-line " (command \"_.close\"))" fscr)au lieu de :(write-line "_close " fscr)C'est pour finir mon if J'ai modifié ce matin mon lisp, car j'avais constaté un bugLe script tel qu'il est fait prend les noms de répertoires+fichiers avec les espaces, accents.... Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 29 juillet 2005 Posté(e) le 29 juillet 2005 Bon, ben je viens de l'améliorer pour la dernière fois @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bucheron Posté(e) le 29 juillet 2005 Auteur Posté(e) le 29 juillet 2005 Merci pour tes explications. Je pense que j'aurai encore quelques questions... @+ ;)
bonuscad Posté(e) le 4 août 2005 Posté(e) le 4 août 2005 Tiens ça me rappele quelque chose Patrick_35 ;) Tes remarque m'ont été très précieuses, mais à mon tour d'en faire une. :D J'ai remarqué après plusieurs tests que :(getfiled "Choisissez un fichier de référence" (getvar "dwgprefix") "dwg" 8)renvoie le nom du chemin + fichier pour une sélection hors des chemins de recherche, mais renvoie le nom du fichier SEUL si la sélection se fait dans un dossier de recherche. Par contre (getfiled "Choisissez un fichier de référence" (getvar "dwgprefix") "dwg" 16)renvoie bien le nom du dossier+fichier dans TOUT les cas.Ce qui conviendra mieux pour récupérer le chemin ;) @+ Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 5 août 2005 Posté(e) le 5 août 2005 Merci Bonus, un oeil expert et il est vrai que je me suis inspiré d'une autre source mais avec des commandes dos ;), mais quand les idées sont bonnes...Je l'avais constaté sur des plate-formes XP, ce qui m'obligeait de faire par la suite un findfile alors que sur NT, j'ai le chemin completCa simplifie mes routines.Merci encore @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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