Aller au contenu

Renommer une copie de bloc !


Messages recommandés

Posté(e)

Bonjour,

 

Je ne sais pas si mon titre est clair.

 

Je connais la fonction renommer mais je souhaite conserver mon ancien bloc avec son nom d'origine.

 

En attend je vais le copier dans un autre fichier , le renommer le réimporté...

 

Merci d'avance !

Autocad Architecture

Inventor

3d Viz

Paint

Posté(e)

Bonjour à tous,

 

Sinon il y a aussi ce lisp (que son auteur me pardonne, je ne le retrouve pas dans mon cafarneum!!).Ce lisp permet de créer un nouveau nom et caractéristiques d'un bloc déjà inséré dans un dessin, sans modifier les autres insertions de ce bloc. Ca à l'air de répondre à ton problème, non ?

 

Tapes en ligne de commande : NBL =>

 

 defun c:nbl (/ old name AcDoc Space zdir ins rot nor obj new ref)
(vl-load-com)
(while (not
(and
(setq old (car (entsel "\nSélectionner le bloc à re-créer: ")))
(= "INSERT" (cdr (assoc 0 (entget old))))
)
)
(princ "\nObjet incorrect.")
)
(while
(not
(and
(setq
name (getstring T "\nEntrez le nouveau nom pour le bloc: ")
)
(/= name "")
(null (tblsearch "BLOCK" name))
)
)
(princ "\nNom incorrect.")
)
(setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Space (if (= (getvar "CVPORT") 1)
(vla-get-PaperSpace AcDoc)
(vla-get-ModelSpace AcDoc)
)
zdir (trans '(0 0 1) 1 0 T)
old (vlax-ename->vla-object old)
ins (vlax-get old 'InsertionPoint)
rot (vla-get-Rotation old)
nor (vlax-get old 'Normal)
obj (vlax-invoke old 'Explode)
new (vla-add (vla-get-Blocks AcDoc)
(vlax-3d-point (trans ins 0 nor))
name
)
)
(foreach n obj
(vla-rotate3d
n
(vlax-3d-point ins)
(vlax-3d-point (mapcar '+ ins nor))
(- rot)
)
(vla-transformby
n
(vlax-tmatrix
(append
(mapcar
'(lambda (vec org)
(append (trans vec nor 0 T) (list org))
)
(list '(1 0 0) '(0 1 0) '(0 0 1))
(trans '(0 0 0) 0 nor)
)
(list '(0 0 0 1))
)
)
)
)
(vlax-invoke acDoc 'CopyObjects obj new)
(mapcar 'vla-delete (cons old obj))
(setq ref
(vla-insertblock
Space
(vlax-3d-point '(0 0 0))
name
1
1
1
0
)
)
(vla-transformby
ref
(vlax-tmatrix
(append
(mapcar
'(lambda (vec org)
(append vec (list org))
)
(mxm
(mapcar '(lambda (x) (trans x 0 nor T))
'((1 0 0) (0 1 0) (0 0 1))
)
(mapcar '(lambda (x) (trans x zdir 0 T))
'((1 0 0) (0 1 0) (0 0 1))
)
)
ins
)
(list '(0 0 0 1))
)
)
)
(vla-rotate3d
ref
(vlax-3d-point ins)
(vlax-3d-point (mapcar '+ ins nor))
rot
)
(princ (strcat "Le bloc \"" name "\" a été créé."))
(princ)
)

;; Multiply two matrices by Vladimir Nesterovsky
(defun mxm (m q)
(mapcar '(lambda (r)
(mapcar '(lambda (l) (apply '+ (mapcar '* l r)))
(apply 'mapcar (cons 'list q))
)
)
m
)
) 

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Re,

 

Je pensais bien que ce lisp était de toi (Gile) mais il n'est pas répertorié sur ta page cadxp, ni même sur ta page perso, c'est dommage, car tous ces outils sont trés pratique. Je me doute que c'est un travail énorme, mais il serait bien que chaques lispeurs de ce forum puisse regrouper leur travaux de façon globale. Comme je le dis plus haut, il est difficile pour des utilisateurs comme moi de retrouver systématiquement les auteurs. Mais je pense que tu ne m'en veux pas, car l'esprit que vous donnez (je pense essentiellement à ceux qui apportent plus que l'utilisation des outils intégrés par AutoCAD, et ils se reconnaitront) à ce forum est le partage des savoirs et savoir faire et c'est cela qui est super sur ce site. Merci encore.

 

@+,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Merci bien,

 

Je copie colle ca ! Dommage que ce ne soi pas une fonction de base !

 

Merci encore.

 

A+

Autocad Architecture

Inventor

3d Viz

Paint

Posté(e)

Je viens de remarquer que j'avais oublié de prendre en compte les échelles X, Y et Z de la référence sélectionnée (ce qui peut faire échouer la routine si ces échelles ne sont pas uniformes).

 

Voilà une version corrigée, en attendant que je me penche plus sérieusement sur la question pour faire quelque chose de mieux abouti (que j'ajouterais alors à mes LISP en téléchargement puisqu'il y a la demande).

 

(defun c:nbl (/ old name AcDoc Space zdir ins rot nor obj new ref)
 (vl-load-com)
 (while (not
   (and
     (setq old (car (entsel "\nSélectionner le bloc à re-créer: ")))
     (= "INSERT" (cdr (assoc 0 (entget old))))
   )
 )
   (princ "\nObjet incorrect.")
 )
 (while
   (not
     (and
(setq
  name (getstring T "\nEntrez le nouveau nom pour le bloc: ")
)
(/= name "")
(null (tblsearch "BLOCK" name))
     )
   )
    (princ "\nNom incorrect.")
 )
 (setq	acDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Space (if (= (getvar "CVPORT") 1)
	(vla-get-PaperSpace AcDoc)
	(vla-get-ModelSpace AcDoc)
      )
zdir  (trans '(0 0 1) 1 0 T)
old   (vlax-ename->vla-object old)
ins   (vlax-get old 'InsertionPoint)
rot   (vla-get-Rotation old)
nor   (vlax-get old 'Normal)
xsc   (vla-get-XScaleFactor old)
ysc   (vla-get-YScaleFactor old)
zsc   (vla-get-ZScaleFactor old)
 )
 (or (vl-every '(lambda (sc) (= sc 1.0)) (list xsc ysc zsc))
     (progn
(vla-put-XScaleFactor old 1.0)
(vla-put-YScaleFactor old 1.0)
(vla-put-ZScaleFactor old 1.0)
     )
 )
 (setq	obj (vlax-invoke old 'Explode)
new (vla-add (vla-get-Blocks AcDoc)
	     (vlax-3d-point (trans ins 0 nor))
	     name
    )
 )
 (foreach n obj
   (vla-rotate3d
     n
     (vlax-3d-point ins)
     (vlax-3d-point (mapcar '+ ins nor))
     (- rot)
   )
   (vla-transformby
     n
     (vlax-tmatrix
(append
  (mapcar
    '(lambda (vec org)
       (append (trans vec nor 0 T) (list org))
     )
    (list '(1 0 0) '(0 1 0) '(0 0 1))
    (trans '(0 0 0) 0 nor)
  )
  (list '(0 0 0 1))
)
     )
   )
 )
 (vlax-invoke acDoc 'CopyObjects obj new)
 (mapcar 'vla-delete (cons old obj))
 (setq	ref
 (vla-insertblock
   Space
   (vlax-3d-point '(0 0 0))
   name
   xsc
   ysc
   zsc
   0
 )
 )
 (vla-transformby
   ref
   (vlax-tmatrix
     (append
(mapcar
  '(lambda (vec org)
     (append vec (list org))
   )
  (mxm
    (mapcar '(lambda (x) (trans x 0 nor T))
	    '((1 0 0) (0 1 0) (0 0 1))
    )
    (mapcar '(lambda (x) (trans x zdir 0 T))
	    '((1 0 0) (0 1 0) (0 0 1))
    )
  )
  ins
)
(list '(0 0 0 1))
     )
   )
 )
 (vla-rotate3d
   ref
   (vlax-3d-point ins)
   (vlax-3d-point (mapcar '+ ins nor))
   rot
 )
 (princ (strcat "Le bloc \"" name "\" a été créé."))
 (princ)
)

;; Multiply two matrices by Vladimir Nesterovsky
(defun mxm (m q)
 (mapcar '(lambda (r)
     (mapcar '(lambda (l) (apply '+ (mapcar '* l r)))
	     (apply 'mapcar (cons 'list q))
     )
   )
  m
 )
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Plus simple peut être :

Ouvrir le bloc dans l'éditeur de blocs et dans la barre d'outils en haut :

choisir "enregistrer le bloc sous" le 3eme bouton en partant de la gauche.

 

http://shup.com/Shup/745/copiblocvq3.png

 

 

Formateur Autocad - Revit - Sketchup - Photoshop

Posté(e)

Tu as raison, Pieroka !!!

C'est plus simple, et de plus, si je comprends l'intérêt de créer une nouvelle définition de bloc identique à celle de la référence sélectionnée, c'est pour la modifier, donc, depuis l'éditeur c'est tout à fait adapté !

 

Je donne quand même une nouvelle version plus concise et plus "rationnelle" pour ceux qui n'ont pas d'éditeur de bloc (versions antérieures à 2006) et pour ceux qui ne voudraient pas passer par là (et surtout parcque je viens de l'écrire)

 

;; NBL -03/08/07- version 2.2
;; Crée un nouvelle définition de bloc semblable à celle de la référence sélectionnée.
;; La référence sélectionnée est remplacée par une référence de la nouvelle définition
;; qui conserve ses proprétés.

(defun c:nbl (/	old-ref	new-name AcDoc Space Blocks old-name old-block new-block
      obj new-ref)
 (vl-load-com)
 (while (not
   (and
     (setq old-ref (car (entsel "\nSélectionner le bloc à re-créer: ")))
     (= "INSERT" (cdr (assoc 0 (entget old-ref))))
   )
 )
   (princ "\nObjet incorrect.")
 )
 (while
   (not
     (and
(setq
  new-name (getstring T "\nEntrez le nouveau nom pour le bloc: ")
)
(/= new-name "")
(null (tblsearch "BLOCK" new-name))
     )
   )
    (princ "\nNom incorrect.")
 )
 (setq	AcDoc	  (vla-get-ActiveDocument (vlax-get-acad-object))
Space	  (if (= (getvar "CVPORT") 1)
	    (vla-get-PaperSpace AcDoc)
	    (vla-get-ModelSpace AcDoc)
	  )
Blocks	  (vla-get-Blocks acDoc)
old-ref	  (vlax-ename->vla-object old-ref)
old-name  (if (vlax-property-available-p old-ref 'EffectiveName)
	    (vla-get-EffectiveName old-ref)
	    (vla-get-name old-ref)
	  )
old-block (vla-item Blocks old-name)
new-block (vla-add Blocks
		   (vlax-3d-point '(0 0 0))
		   new-name
	  )

 )
 (vlax-for o old-block
   (setq obj (cons o obj))
 )
 (vlax-invoke AcDoc 'CopyObjects obj new-block)
 (and (vlax-property-available-p old-block 'Units)
      (vla-put-Units new-block (vla-get-Units old-block))
 )
 (setq	new-ref
 (vla-insertblock
   Space
   (vlax-3d-point '(0 0 0))
   new-name
   (vla-get-XScaleFactor old-ref)
   (vla-get-YScaleFactor old-ref)
   (vla-get-ZScaleFactor old-ref)
   (vla-get-Rotation old-ref)
 )
 )
 (vla-put-Normal new-ref (vla-get-Normal old-ref))
 (vla-put-InsertionPoint
   new-ref
   (vla-get-InsertionPoint old-ref)
 )
 (if (= (vla-get-HasAttributes old-ref) :vlax-true)
   (progn
     (setq old-att (mapcar '(lambda (att) (cons (vla-get-TagString att) att))
		    (vlax-invoke old-ref 'getAttributes)
	    )
    new-att (mapcar '(lambda (att) (cons (vla-get-TagString att) att))
		    (vlax-invoke new-ref 'getAttributes)
	    )
     )
     (foreach att new-att
(foreach prop (list
		'Alignment  'Backward	'Height	    'InsertionPoint
		'Invisible  'TextString	'ObliqueAngle
		'StyleName  'UpsideDown
	       )
  (if (vlax-property-available-p
	(cdr (assoc (car att) old-att))
	prop
      )
    (vlax-put (cdr att)
	      prop
	      (vlax-get (cdr (assoc (car att) old-att)) prop)
    )
  )
)
     )
   )
 )
 (vla-delete old-ref)
 (princ (strcat "Le bloc \"" new-name "\" a été créé."))
 (princ)
) 

[Edité le 2/8/2007 par (gile)]

 

[Edité le 3/8/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour à tous

 

j'ai essayé ce lisp nbl 2.0, il fonctionne mais dans mon cas il efface les infos inscrites dans les attributs.

 

sur plusieurs dessins j'ai des blocs identiques mais leurs noms a changé avec des suffixes nomdubloc-flat-1flat-1 , jaimerais tous les renommer mais le nom du bloc d'origine existe dans le dessin et ne peut le renommer ??

 

y a t'il une idée ?????

 

ps: j'ai remarqué quand on fait mesurer d'un bloc sur une ligne le nom de bloc n'est plus considéré comme bloc ??

 

merci

 

Michel a

Posté(e)

il efface les infos inscrites dans les attributs

 

Exact j'avais ommis le traitement des attributs, il récupèrent désormais leurs valeurs de l'ancienne référence (version 2.1)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

J'ai testé cette version 2.1 sur un bloc cartouche avec une bonne quantité d'attributs. Le nouveau bloc récupère les informations, mais les place complètement dans le désordre dans le nouveau cartouche.

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

Effectivement, suivant les blocs l'ordre des attributs change.

Donc, une nouvelle version (2.2) qui traite les attributs suivant leurs étiquettes et récupère d'autres propriétés de formatage du "texte" (certaines semblaient se perdre aussi).

 

Merci pour les tests ;)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 1 mois après...
Posté(e)

NBL marche super, mais les blocs dynamiques deviennent statiques. Y-a-t'il possibilité de modifier cela ? Merci d'avance !

Autocad 2021 - Revit 2022 - Windows 10

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é