Aller au contenu

Des zombies dans les blocs


(gile)

Messages recommandés

J'ai découvert en réparant un dysfonctionnement dans Edit_bloc.lsp que certains blocs de la "Palette de panneaux de signalisation routière" (Téléchargement proposés par l'administrateur >> Blocs, Bibliothèques, Textures >> AutoCAD) contenaient une "AcDbZombieEntity" (Objectname en vlisp).

 

En parcourant les entités de ces blocs avec entnext il s'avère qu'il s'agit d'une ACAD_PROXY_ENTITY.

 

Ces blocs "zombifiés" ne peuvent, par exemple, pas être insérés avec le Design Center, ni placés dans une palette d'outils, ni modifiés dans l'éditeur de bloc (AutoCAD 2006 et 2007).

 

La suppression des "entités zombies" ne semble pas affecter les blocs en questions (blocs B8, C28-1, C28-2 et C4A pour la bibliothèque citée plus haut).

 

Voici donc une petite routine pour supprimer les entités zombies de tous les blocs de la collection :

 

(vlax-for bloc (vla-get-blocks
	 (vla-get-ActiveDocument
	   (vlax-get-acad-object)
	 )
       )
 (vlax-for ent	bloc
   (if	(= "AcDbZombieEntity" (vla-get-ObjectName ent))
     (vla-delete ent)
   )
 )
) 

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...
  • 1 an après...

Bonsoir à toutes et tous,

 

On copie-colle uniquement le code en ligne de commande ?

 

Commande: (vlax-for bloc (vla-get-blocks

((_>

((_> (vla-get-ActiveDocument

(((_>

(((_> (vlax-get-acad-object)

(((_>

(((_> )

((_>

((_> )

(_>

(_> (vlax-for ent bloc

((_>

((_> (if (= "AcDbZombieEntity" (vla-get-ObjectName ent))

(((_>

(((_> (vla-delete ent)

(((_>

(((_> )

((_>

((_> )

(_>

(_> )

nil

 

 

Si le résultat est nil, c'est qu'il n'y a pas d'""entités zombies"" ?

 

Parce que le fichier en question ayant progressé se trouve avec des éléments non purgeables,...

 

Peut-être pas de rapport,...

 

Mais là aussi Edit_bloc semble ne pas pouvoir tout "redresser propre" ,...

 

Une idée ?

 

Merci d'avance,

 

PS: Rappel du post

Civil 3D 2025 - COVADIS_18.3b

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

On copie-colle uniquement le code en ligne de commande ?

 

Si le résultat est nil, c'est qu'il n'y a pas d'""entités zombies"" ?

 

Je voudrais "nettoyer" ce fichier,...et je ne sais pas comment reconnaitre ces entités dites "zombies"

 

De plus, j'ai testé edit_bloc sur celui-ci est je n'ai pas de résultats probants, d'où mon interrogation.

 

Certaines calques ne sont pas purgeable, je ne sais donc pas si cela provient de ce phénomène ou blocs imbriqués ou que sais-je encore,...

 

Pour résumer, passer l'ensemble du fichier en définition du bloc en cochant toutes les options de edit_bloc (calque "0", couleur, type de ligne, épaisseur et style de tracé du bloc)

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

1. oui on copie directement l'expression en ligne de commande.

2. L'expression retourne toujours nil (pour info, il y a 9 zombies dans le dessin)

 

Pour ce fichier, j'ai commencer par RECUPERER le fichier : 207 erreurs.

Ensuite j'ai un peu regardé et à mon avis si c'est pour faire une bibliothèque de bloc saine il y a beaucoup de boulot...

 

Il est truffé d'objets créés par des application genre Architecture ou Civil, MAP et Covadis qui tous stockent des informations parfaitement inutiles pour des panneaux de signalisation dans une multitude de dictionnaire et données étendues. Si tu crées un nouveau calque, des xdatas lui sont automatiquement attachées...

 

L'utilisation d'Edit_Bloc n'est pas une bonne idée, si tu mets tous les composants des blocs sur le calque 0 et en couleur DuBloc, les panneaux vont devenir tout blanc !...

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

ok !

 

(pour info, il y a 9 zombies dans le dessin)

 

Comment obtiens-tu le nombre de 9 ?

 

j'ai commencer par RECUPERER le fichier : 207 erreurs.

 

Quand je l'ai fait ,j'en ai trouvé bien plus !!!???

 

Etape 1 62200 objets contrôlés

Contrôle des entités 2ème passe

Etape 2 62300 objets contrôlés

Contrôle des blocs

1137 blocs contrôlés

Nombre total d'erreurs trouvées 3787, corrigées 3787

0 objets effacés

 

Qu'est-ce qui peut expliquer cette différence selon toi ?

 

Et au final, au bout de 1 ou 2 minutes, AutoCAD à planté !

 

Il est truffé d'objets créés par des application genre Architecture ou Civil, MAP et Covadis

 

C'est ce genre d'infos qui te font penser ça ?

 

Chargement des applications non enregistrées ...

-> Pas d'application trouvée pour la classe 'AcDbAssocNetwork' !

-> Pas d'application trouvée pour la classe 'AcMapDMStylizedEntitiesTable' !

-> Pas d'application trouvée pour la classe 'AcMapDMMapManager' !

-> Pas d'application trouvée pour la classe 'AcMapDMStyleLibrary' !

 

Si tu crées un nouveau calque, des xdatas lui sont automatiquement attachées...

 

Aie ! :mad: Pas de solution "propre" alors ?

 

 

L'utilisation d'Edit_Bloc n'est pas une bonne idée, si tu mets tous les composants des blocs sur le calque 0 et en couleur DuBloc, les panneaux vont devenir tout blanc !...

 

Oui, je m'en suis rendu compte,... :casstet: (Je voulais dire sans changer la couleur,...)

 

Merci de ton aide,

Civil 3D 2025 - COVADIS_18.3b

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

Lien vers le commentaire
Partager sur d’autres sites

Comment obtiens-tu le nombre de 9 ?

 

en rajoutant un compteur :

(setq n 0)
(vlax-for bloc (vla-get-blocks
	 (vla-get-ActiveDocument
	   (vlax-get-acad-object)
	 )
       )
 (vlax-for ent	bloc
   (if	(= "AcDbZombieEntity" (vla-get-ObjectName ent))
     (progn
(vla-delete ent)
(setq n (1+ n))
     )
   )
 )
)

 

Pas de solution "propre" alors ?

À partir de cette base, ça me semble difficile.

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Au second passage commande récupérer, comme toi,...!!???

 

Etape 1 62300 objets contrôlés

Contrôle des entités 2ème passe

Etape 2 62300 objets contrôlés

Contrôle des blocs

1139 blocs contrôlés

Nombre total d'erreurs trouvées 207, corrigées 207

0 objets effacés

Civil 3D 2025 - COVADIS_18.3b

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Ok !

 

Ne fonctionne pas chez moi,...

 

Commande: (setq n 0)

0

Commande:

_HELP

Commande: (vlax-for bloc (vla-get-blocks

((_>

((_> (vla-get-ActiveDocument

(((_>

(((_> (vlax-get-acad-object)

(((_>

(((_> )

((_>

((_> )

(_>

(_> (vlax-for ent bloc

((_>

((_> (if (= "AcDbZombieEntity" (vla-get-ObjectName ent))

(((_>

(((_> (progn

((((_>

((((_> (vla-delete ent)

((((_>

((((_> (setq n (1+ n))

((((_>

((((_> )

(((_>

(((_> )

((_>

((_> )

(_>

(_> )

nil

Commande:

AIDE

Commande:

AIDE

Commande:

AIDE

 

Quand je fais "echap", ouvre l'aide,...

 

À partir de cette base, ça me semble difficile.

 

Dommage,

 

Merci encore,

Civil 3D 2025 - COVADIS_18.3b

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

Lien vers le commentaire
Partager sur d’autres sites

1. Je pense que l'appel de l'aide est dû aux sauts de ligne rajoutés par CADxp dans le code qui correspondent à autant d'entrée entre les différentes expressions :

(setq n 0) Entrée Entrée

Le second Entrée appelle l'aide (dernière commande ?).

 

Tu as appris, utilise plutôt l'éditeur Visual LISP...

 

Rappel : une expression LISP retourne le résultat de la dernière évaluation. Dans ce cas, si le dernier objet évalué n'est pas un ZombieEntity l'expression retournera nil.

Mais la variable n stocke le nombre de ZombieEntity qui on été supprimés, il suffit de l'interroger avec !n en ligne de commande ou directement n dans la console de l'éditeur.

 

2. Je n'ai pas dit qu'on ne pouvait pas faire une bibliothèque à partir de cette base, je dis juste qu'il sera long et fastidieux de faire quelque chose de propre, c'est à dire une bibliothèque dont les blocs ne ramènent pas avec eux dans les dessins dans lesquels ils sont insérés tout un tas d'objets inutiles.

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

C'est ce que j'ai fini par faire hier soir (Utiliser l'éditeur VL) pensant qu'il manquait une parenthèse,...

 

J'ai alors formaté la fenêtre d'édition.

 

Il me manquait alors l'appel de la variable. J'ai testé les deux solutions (console de l'éditeur et ligne de commande, ça fonctionne, merci pour le rappel => Il faut que je reprenne mes notes,...)

 

Avant d'y arriver, la console me donnait =>

 

_1$ n
avec un rectangle vert devant,.. Peux-tu me rappeler ce que cela veut dire ?

 

2. Je n'ai pas dit qu'on ne pouvait pas faire une bibliothèque à partir de cette base,

 

Oui, bien sur, lorsque j'ai écrit "dommage", je voulais dire qu'il était dommage de ne pouvoir "nettoyer" correctement un bloc "facilement" de ces entités "polluantes". Une commande AutoCAD base pour ce genre de chose n'aurait pas été du luxe (comme par exemple détaché les xdatas lors de la création d'un nouveau calque,...,une commande permettant de remettre par défaut les entités sur le calque "0",etc,...)

 

Je pensais tout sortir en wbloc et reconstruire des fichiers par cathégorie.

 

Est-ce que la commande wbloc est adaptée pour espérer avoir quelque chose de propre, ou est-ce qu'il faut tout de même ouvrit tous les blocs pour remettre "manuellement" les entités dans le calque "0" est assurer ensuite une purge du fichier selon toi ?

 

Merci encore,

Civil 3D 2025 - COVADIS_18.3b

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

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é