Aller au contenu

utiliser la liste des fichiers .dwg dans un lisp


bucheron

Messages recommandés

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 0

cmddia 0

_open C:\Sites\PRISONS\PCHA\DWG\Arcacfa-00d.dwg

exc

_close

 

_open C:\Sites\PRISONS\PCHA\DWG\Arcacfa-tod.dwg

exc

_close

 

_open C:\Sites\PRISONS\PCHA\DWG\Arcadmi-00d.dwg

exc

_close

 

_open C:\Sites\PRISONS\PCHA\DWG\Arcadmi-01d.dwg

exc

_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

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Un lisp qui te crée un script de la partie personnalisable d'un répertoire complet que tu choisis

Le 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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 bug

Le script tel qu'il est fait prend les noms de répertoires+fichiers avec les espaces, accents....

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 complet

Ca simplifie mes routines.

Merci encore

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é