Aller au contenu

Problème sélection bloc


dfbiagio

Messages recommandés

Bonjour,

J'ai créé un lisp qui me permet de modifier un bloc que j'ai nommé "niveau_coupe".

Il modifie sa valeur en fonction de la coordonnée Y.

Pour faire une rechercher dans le plan, j'utilise le filtre suivant :

(ssget ((2 . "niveau_coupe"))).

Jusqu'à présent, je n'ai jamais rencontré de problème.

Aujourd'hui, pour un fichier, cela ne fonctionne plus.

En faisant des recherches, j'ai constaté que le bloc dans la boîte des propriétés s'appelle bien niveau_coupe, mais lorsque je fais une recherche via (entget (car (entsel))) celui-ci s'appelle (2 . "*U202"), ce qui explique que mon lisp ne fonction pas.

Dans ce fichier, tous mes blocs niveau_coupe on changé en Uxxx.

Quelqu'un a une explication pour moi.

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Peut-être tu peux remplaçer tous tes blocs "*Uxxx" en "niveau_bloc", gràce à l’excellent lisp de M.Patrick : "RBLOC" . Puis relancer ton programme.

 

(Le lisp RBLOCsur cette page)

 

 

Merci pour ton conseil, mais je pense avoir saisi le problème. Il modifie le nom dans les codes dxf pour des blocs dynamiques. J'ai supprimé les fonctions dynamiques et tout est rentré dans l'ordre.

Il faut faire attention, lorsqu'on modifie un bloque dynamique, il échappe à la recherche via le filtre. Je viens de faire l'essai.

Bàt

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

une suggestion, si tu souhaites garder les fonctions dynamiques de tes blocs :

Peut-être pourrais tu attribuer une Xdata à ton bloc "niveau_coupe" et tu fais une recherche sur cette Xdata

 

 

Sea U Letter

--------

La mort, c'est un peu comme une connerie.

Le mort, lui, il ne sait pas qu'il est mort. Ce sont les autres qui sont tristes.

Le con, c'est pareil.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

lisp ne fonction pas. Dans ce fichier, tous mes blocs niveau_coupe on changé en Uxxx.Quelqu'un a une explication pour moi?

tes blocs sont devenus anonymes

les préfixe U est un bloc anonyme "général"

il me semble qu'il existe d'autres, plus anciens,

les X: hachures

les D: Dimensions

 

Si ça avait été une correction d'erreur par _audit, il t'aurait fait un "audit_bad_bloc"

 

le U* est également le nom anonyme des blocs dynamique, une fois que tu les as modifiés:

niveau_coupe est-il dynamique ?

dans ce cas, je ne connais pas de filtre de ssget direct,

il faut prendre toues les blocs U*, les passer en revue et regarder leur propriété "effectivename"

 

bon courage,

a+

gégé

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

J

une suggestion, si tu souhaites garder les fonctions dynamiques de tes blocs :

Peut-être pourrais tu attribuer une Xdata à ton bloc "niveau_coupe" et tu fais une recherche sur cette Xdata

 

 

 

 

Hello,

Jamais utilisé les xdata, qu'est-ce ça ko?

Lien vers le commentaire
Partager sur d’autres sites

Salut.

 

Oublie les XData (réservé au LiSPiens). Certains blocs "anonymes" ont des noms bien pires, comme "$xxx", c'est la plaie sur AutoCAD... Tu peut t'en sortir avec certains lisp, je ne vois pas d'autres solutions...

 

@AinTerreNette : j'adore ta signature...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

De mémoire car ça fais longtemps que je n'ai plus appliqué ceci, mais il me semble que pour arriver à sélectionner ces blocs anonyme avec (ssget), il faut utiliser l'apostrophe inverse (AltGr+ 7)

Donc normalement (ssget '((2 . "`*U*"))) devrait sélectionner ce type de bloc.

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Comme dit plus haut, les blocs "Uxxx" sont des blocs anonymes générés par AutoCAD pour les blocs dynamiques dont les propriétés ont été modifiées, il faut donc ajouter à ton filtre les blocs dont le nom commence par "U" et traiter ensuite le jeu de sélection pour ne conserver que ceux dont le nom "effectif" est celui recherché.

Dans ton cas :

(if (setq ss (ssget '((2 . "niveau_coupe,`*U*"))))
 (repeat (setq i (sslength ss))
   (setq br (ssname ss (setq i (1- i))))
   (if (/= "niveau_coupe" (strcase (getpropertyvalue (getpropertyvalue br "DynamicBlockTableRecord") "Name")))
     (ssdel br ss)
   )
 )
) 

ss ne contient maintenant que les blocs dont le nom effectif est "niveau_coupe".

 

On peut aussi en faire une fonction réutilisable :

(defun ssgetdyn (nomBloc / ss i br)
 (setq nomBloc (strcase nomBloc))
 (if (setq ss (ssget (list (cons 2 (strcat nombloc ",`*U*")))))
   (repeat (setq i (sslength ss))
     (setq br (ssname ss (setq i (1- i))))
     (if (/= nomBloc (strcase (getpropertyvalue (getpropertyvalue br "DynamicBlockTableRecord") "Name")))
       (ssdel br ss)
     )
   )
 )
 ss
)

 

dans ton cas tu fais simplement : (ssgetdyn "niveau_coupe")

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

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é