Aller au contenu

Bloc *U139


ludo07

Messages recommandés

Bonjour à tous,

 

Sur un fichier que je récupére d'une société exterieur et que j'appel en XREF j'ai un soucis sur un bloc qui s'appel *U139.

Car quand je le selectionne pour l'éditer son nom n'apparait pas dans l'éditeur de bloc???????????????????????????????????????????????????????????????

 

Quelqu'un à une idée?

 

A+

Lien vers le commentaire
Partager sur d’autres sites

Salut ludo07!

 

Les blocs *U sur 2008-2009 ou *A sur 2006-2007 sont des blocs dynamiques.

Quand tu créer un bloc dynamique, celui-ci à son nom d'origine. Mais si tu le modifies

(propriétés dynamiques) comme il a changé de forme, autocad lui donne un nouveau nom

 

Exemple t'as un bloc porte, une propriété dynamique sur la taille, si tu insères deux blocs portes,

et que tu leur donne la même "taille", tu aura deux nouveaux blocs *Uxxx et *Uyyy.

 

[Edité le 17/10/2008 par bseb67]

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

 

ludo07

Un mixe de Nbl Et Rbloc.

(à utiliser avec précaution, car des blocs dynamiques différents peuvent se retrouver avec le même graphisme)

 

(defun c:rdyn(/ ent nom rep tot InputBox MsgBox)

 (defun InputBox (Titre Message Defaut / users1 valeur)
   (setq users1 (getvar "users1"))
   (acad-push-dbmod)
   (vla-eval (vlax-get-acad-object) (strcat "ThisDrawing.SetVariable \"USERS1\"," "InputBox (\"" Message "\", \"" Titre "\", \"" Defaut "\")"))
   (setq valeur (getvar "users1"))
   (setvar "users1" users1)
   (acad-pop-dbmod)
   valeur
 )

 (vl-load-com)
 (if (/= (setq rep (inputbox "RDYN 1.00" "Veuillez donner le nom du nouveau bloc" "")) "")
   (if (ssget (list (cons 0 "insert")))
     (progn
(setq tot 0)
(vlax-for ent (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
  (if (eq (vla-get-isdynamicblock ent) :vlax-true)
    (if (tblsearch "block" rep)
      (progn
	(or nom (setq nom (vla-get-effectivename ent)))
	(if (eq nom (vla-get-effectivename ent))
	  (progn
	    (vla-put-name ent rep)
	    (setq tot (1+ tot))
	  )
	)
      )
      (progn
	(setq nom (vla-get-effectivename ent)
	      tot (1+ tot)
	)
	(vla-converttostaticblock ent rep)
      )
    )
  )
)
(vla-delete sel)
(princ (strcat "\nModification de " (itoa tot) " bloc(s)."))
     )
   )
 )
 (princ)
)

 

(gile)

Juste une remarque concernant ton lisp NBL.

Tu as deux fonctions qui peuvent te simplifier la vie.

ConvertToAnonymousBlock et ConvertToStaticBlock

 

@+

 

[Edité le 21/10/2008 par Patrick_35]

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Merci Patrick,

 

Je n'avais pas pensé à ces fonctions quand j'avais écris NBL, il n'était alors pas question de bloc dynamique, mais vla-ConvertToStaticBlock marche aussi avec des blocs "statiques", bon à savoir... ;)

 

PS : tu utilises ver comme variable (setq ver "RDYN 1.00"), et ver est un "symbole protégé" (fonction LISP)

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

Lien vers le commentaire
Partager sur d’autres sites

bonjour,

je propose ça mais je n'ai pas le moyen de le tester en dehors du fichier proposé par ludo07.

(Donc si quelqu'un a un fichier avec des tonnes de blocs anonymes, merci à lui de le poster).

 

le principe est de provoquer volontairement des erreurs dans la table des blocs pour les blocs ano, puis de les faire corriger par AutoCAD lui-même.

C'est une étude de programmation et non une solution finale pour le problème initial évoqué.

 

(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(setq i 0)
(vlax-for obj (vla-get-blocks doc)
 (if (= (substr (strcase (vla-get-name obj)) 1 2) "*U")
   (progn
     (while (tblsearch "block" (itoa (setq i (1+ i)))))
     (vla-put-name obj (itoa i))
   )
   (setq blocks (cons (vla-get-name obj) blocks))
 )
)
(vlax-invoke-method doc 'AuditInfo :vlax-true)
(setq i 0)
(vlax-for obj (vla-get-blocks doc)
 (if (not (member (vla-get-name obj) blocks))
   (progn
     (while (tblsearch "block" (setq newName (strcat "U" (itoa (setq i (1+ i)))))))
     (vla-put-name obj newName)
   )
 )
)
(vlax-release-object doc)

 

donc si on souhaite seulement retirer le caractére anonyme des blocs on devrait pourvoir simplement faire :

 

(setq i 0 doc (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for obj (vla-get-blocks doc)
 (if (= (substr (strcase (vla-get-name obj)) 1 2) "*U")
   (progn
     (while (tblsearch "block" (itoa (setq i (1+ i)))))
     (vla-put-name obj (itoa i))
   )
 )
)
(vlax-invoke-method doc 'AuditInfo :vlax-true)
(vlax-release-object doc)

 

Bruno Toniutti

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

 

C'est une solution, mais tu ne trouves pas plus simple d'utiliser directement ConvertToStaticBlock

 

Pour reprendre ton premier exemple, on pourrait faire

 

(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(ssget "x" (list (cons 0 "INSERT") (cons 2 "`*U*")))
(vlax-for obj (setq sel (vla-get-activeselectionset doc))
 (if (tblsearch "block" (setq nom (substr (vla-get-name obj) 2)))
   (vla-put-name obj nom)
   (vla-converttostaticblock obj nom)
 )
)
(vla-delete sel)

 

et sans utiliser l'audit

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

oui Patrick naturellement c'est mieux, mais quand on a converttostaticblock de dispo :P , converttostaticblock a du apparaître vers la 2006, aujourd'hui ça doit être effectivement ok pour la majorité des utilisateurs.

 

Comme je l'ai écrit, j'ai posté cela juste en tant qu'étude de programmation, bref c'est une bête curieuse que de passer par un audit et il n'y a plus de raison de procéder ainsi.

 

Bruno Toniutti

 

Lien vers le commentaire
Partager sur d’autres sites

  • 15 ans après...

Bonjour passionnant sujet,

ce pourrait il de finaliser ces routines dans un Lisp …

j ai ouvert un projet dwg cette semaine d une entreprise en utilisant attout en nom de bck blockname il me dis plein de *u…

pour les noms de blocs

 

le travail fournit sur ce forum est magistral merci bcp

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @dc01,

Pour faire des ATTOUT avec les blocs dynamiques, il y a le lisp ATTIN / ATTOUT amélioré de @bryce.

ATTIN_ATTOUT_DYN.zip

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

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é