Invité ingoenius Posté(e) le 22 décembre 2007 Posté(e) le 22 décembre 2007 comment on peut faire pour sélectionner un bloc dans le dessin et changer de noms a ce bloc ainsi que tous le bloc du même nom dans le dessin ? cela me permettrai de mettre en place des blocs génériques dans le dessin et le nommer quand je sais de quel type de matériel il s'agit je essaye, mais doit avoir des problèmes dans la routine ;-( merci e Bonnes Fêtes a vous tous (defun c:BB () (setq old_BLOCCO (car (entsel "\nSelect block "))) (setq old_DatiB (entget old_BLOCCO)) (setq old_NBLOC (cdr (assoc 2 old_DatiB))) (setq ENT1 (ssget "x" (list (cons 0 "INSERT") (cons 2 old_NBLOC )))) (setq N (sslength ENT1)) (setq New_N (getstring "\nNew Name? ")) (setq NWNM (cons 2 New_N)) ;costruisce la nuova copia puntata con nuovo nome blocco (setq OLD (assoc 2 old_DatiB)) ;vecchia coppia puntata vecchio nome blocco (setq I 0) (repeat N (setq BL1 (ssname ENT1 I)) (setq Dati (entget BL1)) (setq C (assoc 2 Dati)) ;vecchio nome (setq E (cons 2 New_N)) (setq D ( subst E C Dati)) (entmod D) (setq I (1+ I)) ) (prin1) )
(gile) Posté(e) le 22 décembre 2007 Posté(e) le 22 décembre 2007 Salut, La commande RENOMMER (_RENAME) ne fait-elle pas ce que tu veux ? En LISP (si c'est vraiment nécessaire) : (defun c:bb (/ old_BLOCCO old_DatiB New_N) (and (setq old_BLOCCO (car (entsel "\nSelect block "))) (setq old_DatiB (entget old_BLOCCO)) (= (cdr (assoc 0 old_DatiB)) "INSERT") (setq New_N (getstring "\nNew Name? ")) (null (tblsearch "BLOCK" New_N)) (vl-cmdf "_.rename" "_b" (cdr (assoc 2 old_DatiB)) New_N) ) (princ) ) [Edité le 22/12/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 23 décembre 2007 Posté(e) le 23 décembre 2007 merci gile, j'ai fait ma petite modif pour le faire fonctionner dans le cas de selection dja existante de block ou pas seule une petite question si je veux mettre un nouveau nom de block avec un espace a l'interieur je peux pas? exemple new name "Par 64" car la barre espace est prise en compe comme un enter sino c'est parfait merci e bonnes fetes (defun c:bb ();rinommer block (setq OBJ (ssgetfirst)) (setq old_BLOCCO (cadr OBJ)) (if (= old_BLOCCO nil) (setq BLOCCO (car (entsel "\nSelect block "))) (setq BLOCCO (ssname old_BLOCCO 0)) ) (setq old_DatiB (entget BLOCCO))(= (cdr (assoc 0 old_DatiB)) "INSERT") (setq New_N (getstring "\nNew Name? "));pas possible de mettre un espcae dans le nom? (null (tblsearch "BLOCK" New_N)) (vl-cmdf "_.rename" "_b" (cdr (assoc 2 old_DatiB)) New_N) (princ) )
(gile) Posté(e) le 23 décembre 2007 Posté(e) le 23 décembre 2007 Salut, une petite question si je veux mettre un nouveau nom de block avec un espace a l'interieur je peux pas? Remplace : (setq New_N (getstring "\nNew Name? ")) par : (setq New_N (getstring T "\nNew Name? ")) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 23 décembre 2007 Posté(e) le 23 décembre 2007 Merci Gile de plus en utilisant un'autre de tes routine, j'ai complété la chose avec une input box ici le code final ;; InputBox (gile) (defun InputBox (box msg val / subr temp file dcl_id ret) ;; Retour chariot automatique à 50 caractères (defun subr (str / pos) (if (and (< 50 (strlen str)) (setq pos (vl-string-position 32 (substr str 1 50) nil T)) ) (strcat ":text_part{label=\"" (substr str 1 pos) "\";}" (subr (substr str (+ 2 pos))) ) (strcat ":text_part{label=\"" str "\";}") ) ) ;; Créer un fichier DCL temporaire (setq temp (vl-filename-mktemp "Tmp.dcl") file (open temp "w") ret "" ) ;; Ecrire le fichier (write-line (strcat "InputBox:dialog{key=\"box\";initial_focus=\"val\";spacer;:paragraph{" (subr msg) "}spacer;:edit_box{key=\"val\";edit_width=54;allow_accept=true;} spacer;ok_cancel;}" ) file ) (close file) ;; Ouvrir la boite de dialogue (setq dcl_id (load_dialog temp)) (if (not (new_dialog "InputBox" dcl_id)) (exit) ) (set_tile "box" box) (set_tile "val" val) (action_tile "accept" "(setq ret (get_tile \"val\")) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) ;;Supprimer le fichier (vl-file-delete temp) ret ) (defun c:BB ();rinomina i blocchi (setq OBJ (ssgetfirst)) (setq old_BLOCCO (cadr OBJ));estrai la selezione (if (= old_BLOCCO nil) ;se nulla é selezionato (setq BLOCCO (car (entsel "\nSelect block "))) (setq BLOCCO (ssname old_BLOCCO 0)) ) (setq old_DatiB (entget BLOCCO))(= (cdr (assoc 0 old_DatiB)) "INSERT") (setq Test (cdr(assoc 2 old_DatiB))) ;metto qui il vecchio nome del blocco ;(setq New_N (getstring "\nNew Name? ")) (setq New_N (inputbox "Rename Block" "old Name" Test)) ;cambiare qui la dcl dialog (null (tblsearch "BLOCK" New_N)) (vl-cmdf "_.rename" "_b" (cdr (assoc 2 old_DatiB)) New_N) (princ) ) :-) SUPER 1
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