Aller au contenu

Réinsertion de plusieurs blocs dans plusieurs dessins


Messages recommandés

Posté(e)

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

 

Posté(e)

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

Posté(e)

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

Posté(e)

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

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é