Aller au contenu

[Résolu] nom de bloc commencant par *u


x_all

Messages recommandés

bonjour

 

il me semble que ce sujet a déjà été traité, mais je ne retrouve pas le fil...

 

un dessin m'arrive ou la plupart des bloc se nomment *U + un nombre

le problème c'est que je ne peu pas éditer ou modifier les blocs et dans la plupart il y a des aplats qui me cache le dessin...

bref le dessin est inexploitable...

 

existe il un lisp pour renommer en masse ces blocs en supprimant l'* ou en leur donnant un nom avec un numéro incrémental par exemple...

 

 

merci

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Si je comprends bien ce que tu veux faire, il n'est pas nécessaire de renommer ces blocs. Il s'agit de références de bloc dynamique.

Petite explication, quand on insère un bloc dynamique, il conserve son nom originel tant qu'on ne modifie aucune propriété dynamique de ce bloc, mais à la moindre modification AutoCAD crée une nouvelle définition de bloc avec un nom incrémenté préfixé avec *U.

Tu devrais pouvoir éditer la définition du bloc originel dans l'éditeur de bloc (Commande BEDIT ou sélection du bloc -> clic droit -> Editeur de bloc).

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Essaie ça (écris vite fait, pas pu tester car je n'ai qu'une LT sous la main...):

(defun c:TOTO ( / n )
 (vlax-for b (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
   (setq n (vla-get-name B))
   (if (= "*U" (substr n 1 2))
     (vla-put-name b (substr n 2))
   )
 )
)

Lien vers le commentaire
Partager sur d’autres sites

merci pour ton lien, mais j'ai ce message au lancement

 

 

serait ce un pb du à la 2013 ou à W7 64?

Dans RDYN, tu as une routine (inputbox) qui fait appel au vba (lequel n'est plus fournit en natif par autodesk, d'où l'erreur.)

Dans les lisps de (gile) tu retrouves cette routine, compatible quelle que soit la version.

 

Tu as aussi d'autres lisps en réponses 10&11 du message précité.

 

@+

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

Re,

 

Pour résoudre ton problème d’aplats, je te propose un petit LISP vite fait qui supprime les objets hachure SOLID, solide 2d et wipeout dans tout le dessin et tous les blocs.

Les objets sur les claques verrouillés sont épargnés.

on spécifie les types d'objets à supprimer à l'aide de la somme des codes binaire suivant :

- 1 -> hachures SOLID

- 2 -> solides 2d

- 4 -> wipeouts

 

exemples :

(RemoveSolids 1) ; ne supprime que les hachures SOLID

(RemoveSolids 2) ; ne supprime que les solides 2d

(RemoveSolids 3) ; supprime les hachures SOLID et les solides 2d

(RemoveSolids 4) ; ne supprime que les wipeouts

(RemoveSolids 5) ; supprime les hachures SOLID et les wipeouts

(RemoveSolids 6) ; supprime les solides 2d et les wipeouts

(RemoveSolids 7) ; supprime les hachures SOLID, les solides 2d et les wipeouts

 

;|
RemoveSolid
Supprime les applats dans le dessin et les blocs

Arugument
flag : la somme des codes binaires suivant :
1  Hachures SOLID
2  solides 2d
4  wipeouts
|;

(defun RemoveSolids (flag / *error*)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (or *block* (setq *blocks* (vla-get-Blocks *acdoc*)))
 (or *layers* (setq *layers* (vla-get-Layers *acdoc*)))

 (defun *error* (msg)
   (and
     msg
     (/= msg "Fonction annulée")
     (princ (strcat "\nErreur: " msg))
   )
   (vla-EndUndoMark *acdoc*)
   (princ)
 )

 (vla-StartUndoMark *acdoc*)
 (vlax-for blk	*blocks*
   (vlax-for obj blk
     (if
(and
  (= (vla-get-Lock (vla-Item *layers* (vla-get-Layer obj)))
     :vlax-false
  )
  (or
    (and
      (= (logand flag 1) 1)
      (= (vla-get-ObjectName obj) "AcDbHatch")
      (wcmatch (strcase (vla-get-PatternName obj)) "*SOLID")
    )
    (and
      (= (logand flag 2) 2)
      (= (vla-get-ObjectName obj) "AcDbSolid")
    )
    (and
      (= (logand flag 4) 4)
      (= (vla-get-ObjectName obj) "AcDbWipeout")
    )
  )
)
 (vla-delete obj)
     )
   )
 )
 (*error* nil)
)

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

Lien vers le commentaire
Partager sur d’autres sites

pwhaa n'en jetez plus !!!

 

problème trois fois résolu !!!

et même super le RemoveSolids :)

 

en passant, je me demandais bien pourquoi il n'y avais pas le fameux C: après (defun

 

c'est la première fois que je vois un lisp qui se lance avec une commande entre parenthèse... est ce ça les fameuses fonctions lambda?

 

en tous cas merci ça marche super super super...

Lien vers le commentaire
Partager sur d’autres sites

en passant, je me demandais bien pourquoi il n'y acais pas le fameux C: après (defun

c'est la première fois que je vois un lisp qui se lance avec une commande entre parenthèse... est ce ça les fameuses fonctions lambda? 

 

Non, les expressions lambda sont des fonctions anonymes (comme tes blocs).

Celle-ci a un nom : RemoveSolids, et est une fonction LISP "standard". Les fonctions LISP dont le nom est préfixé avec c: sont un peu spéciales en ce sens qu'elles peuvent être appelées directement comme des commandes mais pour ce faire, elles ne peuvent pas utiliser d'arguments.

 

Le fait d'utiliser une fonction avec argument permet plus de polyvalence : pour faire l'équivalent avec des commandes LISP et couvrir toutes les possibilités, il aurait fallu écrire 7 (defun c: ...) ou, une fois RemoveSolids défini, définir 7 commandes qui appellent RemoveSolids en lui passant les différentes combinaisons de codes binaires.

Ceci est possible en une seule expression LISP utilisant une expression lambda (la boucle est bouclée) pour définir les commandes rs1, rs2, rs3, ...,rs7 correspondant aux différentes combinaisons :

(mapcar
 '(lambda (s n)
    (eval
      (list 'defun s nil (list 'RemoveSolids n) '(princ))
    )
  )
 '(c:rs1 c:rs2 c:rs3 c:rs4 c:rs5 c:rs6 c:rs7)
 '(1 2 3 4 5 6 7)
)

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

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é