CADxp: Problème sélection bloc - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Problème sélection bloc

#1 L'utilisateur est hors-ligne   dfbiagio 

  • ceinture noire
  • Groupe : Membres
  • Messages : 390
  • Inscrit(e) : 28-juillet 03
  • LocationBinche

Posté 14 mars 2019 - 11:24

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.
0

#2 L'utilisateur est hors-ligne   tintin974 

  • ceinture blanche
  • Groupe : Membres
  • Messages : 2
  • Inscrit(e) : 11-mars 19

Posté 14 mars 2019 - 12:32

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)
0

#3 L'utilisateur est hors-ligne   dfbiagio 

  • ceinture noire
  • Groupe : Membres
  • Messages : 390
  • Inscrit(e) : 28-juillet 03
  • LocationBinche

Posté 14 mars 2019 - 13:04

Voir le messagetintin974, le 14 mars 2019 - 12:32 , dit :

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
1

#4 L'utilisateur est hors-ligne   AinTerreNette 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 17
  • Inscrit(e) : 04-juin 12
  • LocationClermont-Ferrand

Posté 14 mars 2019 - 13:24

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
--------

Citation


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.
0

#5 L'utilisateur est hors-ligne   GEGEMATIC 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 814
  • Inscrit(e) : 04-novembre 05

Posté 14 mars 2019 - 14:27

Salut,

Voir le messagedfbiagio, le 14 mars 2019 - 11:24 , dit :

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é
---------------------------------------------------------------------- PowerClic sur http://www.g-eaux.com
0

#6 L'utilisateur est hors-ligne   dfbiagio 

  • ceinture noire
  • Groupe : Membres
  • Messages : 390
  • Inscrit(e) : 28-juillet 03
  • LocationBinche

Posté 15 mars 2019 - 14:21

J

Voir le messageAinTerreNette, le 14 mars 2019 - 13:24 , dit :

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?
0

#7 L'utilisateur est hors-ligne   DenisHen 

  • ceinture rouge et blanche 6em dan
  • Groupe : Membres
  • Messages : 3173
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 15 mars 2019 - 22:47

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...
LinkedIn et mon site...
Windows 10 Pro 64bits / AutoCAD MAP 3D 2018.0.2
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#8 L'utilisateur est hors-ligne   bonuscad 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 4618
  • Inscrit(e) : 20-juin 03

Posté 15 mars 2019 - 23:05

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
0

#9 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11109
  • Inscrit(e) : 02-septembre 05

Posté 16 mars 2019 - 08:56

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
Image IPB
0

#10 L'utilisateur est hors-ligne   dfbiagio 

  • ceinture noire
  • Groupe : Membres
  • Messages : 390
  • Inscrit(e) : 28-juillet 03
  • LocationBinche

Posté 16 mars 2019 - 13:39

Un grand merci pour cette précision.
0

#11 L'utilisateur est hors-ligne   dfbiagio 

  • ceinture noire
  • Groupe : Membres
  • Messages : 390
  • Inscrit(e) : 28-juillet 03
  • LocationBinche

Posté 18 mars 2019 - 07:45

Bonjour,
petite précision, à gauche de *U c'est bien ` une apostrophe inversée car quand je fais un copier/coller ça fonctionne bien, mais quand je le réécris ça ne fonctionne pas !!
Merci d'avance.
0

#12 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11109
  • Inscrit(e) : 02-septembre 05

Posté 18 mars 2019 - 08:05

Oui, (AltGr+5), ne pas oublier l'astérisque après le U : "`*U*"
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#13 L'utilisateur est hors-ligne   dfbiagio 

  • ceinture noire
  • Groupe : Membres
  • Messages : 390
  • Inscrit(e) : 28-juillet 03
  • LocationBinche

Posté 18 mars 2019 - 10:29

Voir le message(gile), le 18 mars 2019 - 08:05 , dit :

Oui, (AltGr+5), ne pas oublier l'astérisque après le U : "`*U*"



Chez moi, AltGr+5 donne ceci [
J'ai un clavier belge :-)
Je n'ai pas oublié l'astérisque.
Bàt
0

#14 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11109
  • Inscrit(e) : 02-septembre 05

Posté 18 mars 2019 - 10:34

Oups,
AltGr+7
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#15 L'utilisateur est hors-ligne   dfbiagio 

  • ceinture noire
  • Groupe : Membres
  • Messages : 390
  • Inscrit(e) : 28-juillet 03
  • LocationBinche

Posté 18 mars 2019 - 11:32

Voir le message(gile), le 18 mars 2019 - 10:34 , dit :

Oups,
AltGr+7



Là, je n'ai rien :-|
0

#16 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11109
  • Inscrit(e) : 02-septembre 05

Posté 18 mars 2019 - 11:51

Il s'agit d'un accent grave (pour les voyelles), il faut taper un un autre caractère (ou espace) pour le voir.
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#17 L'utilisateur est hors-ligne   dfbiagio 

  • ceinture noire
  • Groupe : Membres
  • Messages : 390
  • Inscrit(e) : 28-juillet 03
  • LocationBinche

Posté 18 mars 2019 - 12:48

Merci bien, c'est ok
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)