Invité ingoenius Posté(e) le 11 avril 2008 Posté(e) le 11 avril 2008 j'ai 2 biblioteques de blocs serie H30DH30D-C013-3D, H30D-L100-3D, H30D-L200-3D,....... seria H30VH30V-C013-3D, H30V-L100-3D, H30V-L200-3D,...... maintenant je voudrait avec un lisp remplacer tous les blocs dans le dessin correspondants dans la serie H30D avec les H30V donc le prefix du nom du bloc change mais le reste est correspondant , je sais pas comment mi prendre pour la routine merci de votre aide ;-)
Carbo Posté(e) le 11 avril 2008 Posté(e) le 11 avril 2008 Voici une fonction magique qui permet de modifier un peu tout ce qu'on veux d'une entitée: (defun apply-to-select (var func select) (if (= 'pickset (type select)) (repeat (setq n (sslength select)) (setq entity (ssname select (setq n (1- n)))) (entmod (subst (cons var (apply func (list (cdr (assoc var (entget entity)))))) (assoc var (entget entity)) (entget entity)))))) que tu peux utiliser comme suit:(apply-to-select 2 '(lambda (x) (vl-string-subst "H30V" "H30D" x)) (ssget)) PS: Le code peut bien-sûr être optimisé,,, je t'en laisse le soin ;-) [Edité le 11/4/2008 par Carbo] http://carbonides.webhop.net
papyrus1985 Posté(e) le 11 avril 2008 Posté(e) le 11 avril 2008 Salut tu as le lisp RBLOC de Patrick_35 http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=11303 et en faisant une boucle sur ta liste ça devrait marché Cyprien Utilisateur AutoCAD depuis la R12 Longue Vie à CADxp
(gile) Posté(e) le 11 avril 2008 Posté(e) le 11 avril 2008 Salut, Si tes blocs ne contiennent pas d'attributs dont tu veux conserver les valeurs et qu'il sont dans un répertoire du chemin de recherche, tu peux utiliser la méthode : (command "_insert" "H30D-C013-3D=H30V-C013-3D.dwg" '(0 0) 1 1 0)(command "_erase" "_last" "") Pour appliquer cette méthode à tous les blocs de la collection : EDIT : code modifié suite à la remarque pertinente de Carbo. (defun c:test (/ blk name) (while (setq blk (tblnext "BLOCK" (not blk))) (setq name (cdr (assoc 2 blk))) (if (wcmatch name "H30D*") (command "_insert" (strcat name "=" (strcat "H30V" (substr name 5) ".dwg")) '(0 0 0) 1 1 0 "_erase" "_last" "" "_rename" "_block" name (strcat (substr name 1 1) "2") ) ) ) (princ) ) [Edité le 11/4/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Carbo Posté(e) le 11 avril 2008 Posté(e) le 11 avril 2008 (command "_insert" "H30D-C013-3D=H30V-C013-3D.dwg" '(0 0) 1 1 0)(command "_erase" "_last" "") Joli coup, bien vu!Par contre, tu aura des blocs appelés H30D qui ont l'apparence des H30V,,, ce qui n'est pas l'idéal. http://carbonides.webhop.net
(gile) Posté(e) le 11 avril 2008 Posté(e) le 11 avril 2008 Bien vu Carbo, J'ai posté un peu vite sans tester. Donc si les blocs H30V* sont des fichiers dans un répertoire du chemin de recherche et qu'ils n'appartiennent pas à la collection du dessin (por pouvoir utiliser la commande renommer), on peut utiliser le LISP (modifié) donné plus haut. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 14 avril 2008 Posté(e) le 14 avril 2008 merci a vous tous ;-) ca commence a fonctionner, mais je doit adapter certains blocs pour le rendre compatibles , mais la routine fonctionne
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