Aller au contenu

changer noms de bloc


Invité ingoenius

Messages recommandés

Invité ingoenius

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Invité ingoenius

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

 

 

Lien vers le commentaire
Partager sur d’autres sites

Invité ingoenius

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

  • Upvote 1
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é