Karmelie Posté(e) le 25 octobre 2010 Posté(e) le 25 octobre 2010 Bonjour, Nous avons actuellement une banque de blocs normalisés (plus de 1000) dont plusieurs ont été récemment révisés lors de la migration d'AutoCAD 2006 vers AutoCAD 2010 (pour les rendre soit dynamiques, soit annotatifs etc…) Ces blocs sont tous dans le répertoire spécifique, ex: \blocs_norme Je cherche un moyen de réinsérer ces blocs à l'intérieur de nos dessins actifs qui bien évidemment contiennent plusieurs de ces blocs, mais pas tous les blocs et pas tous les mêmes blocs. Un programme qui lirait un à un les blocs du répertoire \blocs_norme et vérifirait si le bloc existe dans le dessin XXX.dwg si non on passe au bloc suivant, si oui, on réinsère le bloc en le redéfinissant... et ainsi de suite pour tous les blocs du répertoire et on recommence avec le dessin suivant. Quelqu'un peut-il m'aider? Merci à l'avance. Karmélie
(gile) Posté(e) le 25 octobre 2010 Posté(e) le 25 octobre 2010 Salut et bienvenue, La demande est claire, mais pour t'aider il faudrait que tu précise dans quel langage tu voudrais écrire ce programme et qu'est-ce que tu as du mal à faire. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Karmelie Posté(e) le 26 octobre 2010 Auteur Posté(e) le 26 octobre 2010 Bonjour Gile Je me débrouille un tout petit peu en lisp, mais pas assez pour écrire moi-même le progamme. Karmélie
(gile) Posté(e) le 26 octobre 2010 Posté(e) le 26 octobre 2010 Salut, Alors on va faire simple pour commencer. On définit une commande (RELOADBLOCKS) qui redéfinit tous les blocs du dessin à partir des fichiers dwg contenus dans le répertoire (il faut que tu remplaces le chemin "D:\\gie\\gile_blocs\\" par le chemin de ton répertoire en finissant par le double anti slash) (defun c:ReloadBlocks (/ folder blkLst name) ;; chemin du répertoire contenant les fichiers bloc (setq folder "D:\\gile\\gile_blocs\\") ;; pour tous les blocs de la collection du dessin, ;; si le bloc est présent dans le dossier, on le redéfinit ;; (insertion avortée avec NomBloc=NomBloc.dwg) (while (setq blk (tblnext "BLOCK" (not blk))) (setq name (cdr (assoc 2 blk))) (if (setq filename (findfile (strcat folder name ".dwg"))) (progn (command "_insert" (strcat name "=" filename)) (command) ) ) ) (princ) ) Tu peux tester cette commande dans un dessin. Pour traiter plusieurs dessins, je te conseille l'utilisation de SuperAuotScript de Eric.Ce programme te permet de lancer un script sur tous les fichiers spécifiés.Il faut tout d'abord enregistrer la LISP ci-dessus sou ReloadBlocks.lsp dans un répertoire du chemin de recherche d'AutoCAD.Dans SuperAuotScript, dans la zone "Choisissez un script" tu vas en créer un nouveau en ajoutant deux instruction LISP, une pour charger le LISP l'autre pour le lancer. chacune de ces instruction doit être suivie d'un (et un sel) espace ou retour chariot (validation).SuperAuotScript s'occupe d'enregistrer les modifications et de fermer chaque fichier. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Karmelie Posté(e) le 26 octobre 2010 Auteur Posté(e) le 26 octobre 2010 Bojour Gile, C'est fou ce que ça semble simple lorsque qqc s'y connait! J'essaie le tout. J'utilise déjà le SuperAuroSript Merci beaucoup. Karmélie
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