Aller au contenu

[Résolu] Comment distinguer un bloc d'une Xref ?


Messages recommandés

Posté(e)

Bonjour à tous.

 

Voilà, je cherche, via un Lisp, à ne sélectionner que les références externes via un (ssget, mais v'là ti pô que le code DXF 0 d'une XRef est... "INSERT" ? ? ?

 

Donc, comment faire ? ? ?

 

Si quelqu'un a une astuce, un conseil... je suis preneur...

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)

Posté(e)

Coucou

 

Étonnant ! je viens de vérifier avant de répondre car je n'aime pas dire des bêtises et :

En vérifiant dans un dessin les codes 70 d'un bloc et d'une XREF j'obtiens dans les deux cas 0 (zéro)

Alors qu'il me semblait que l'XREF était décrite par la valeur 4 dans le code 70

 

Chez toi c'est pareil ?

 

Amicalement

Posté(e)

Coucou

 

On va pas s'avouer vaincu pour autant mais je vais creuser ça dès que je peux pour l'AutoLisp

Essaie ça:

(setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(if (=
 	(vla-get-isXref
(vla-item
  (vla-get-Blocks AcDoc)
  (vla-get-Name
	(vlax-ename->vla-object
  	(car (entsel "\choix Objet\n"))
	) ;_ Fin de vlax-ename->vla-object
  ) ;_ Fin de vla-get-Name
) ;_ Fin de vla-item
 	) ;_ Fin de vla-get-isXref
 	:vlax-true
) ;_ Fin de =
 (alert "XREF")
 (alert "pas Xref")
) ;_ Fin de if

 

Amicalement

Posté(e)

Bonjour didier, et merci pour cette réponse, qui fonctionne parfaitement...

 

Je n'ai plus qu'à la coder dans mon Lisp...

 

Encore merci...

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)

Posté(e) (modifié)

Coucou

 

Étonnant ! je viens de vérifier avant de répondre car je n'aime pas dire des bêtises et :

En vérifiant dans un dessin les codes 70 d'un bloc et d'une XREF j'obtiens dans les deux cas 0 (zéro)

Alors qu'il me semblait que l'XREF était décrite par la valeur 4 dans le code 70

 

Chez toi c'est pareil ?

 

Amicalement

 

Didier, j'ai été aussi surpris que toi!

D'après l'aide DXF 2018 le bit des xrefs est dans le code 70 des APPID ???

Alors que le code 70 de la table des blocs est devenue les unités d'insertion (0=sans unité)

 

Confusion avec la table des BLOCK_RECORD qui affiche le code 70 avec les unités d'insertions.

 

 

Pour DenisHen, avec le vla tu peux obtenir facilement ce que tu désire

 (vlax-for i
   (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-Acad-Object)))
   (if (= (vla-get-IsXref i) :vlax-true)
     (print (vla-get-name i))
   )
 )

Modifié par bonuscad

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

Posté(e)

Merci à vous pour votre aide.

 

@Bonuscad : je n'arrive pas à faire fonctionner ton lisp :

(defun c:TestXref ( / i)
 (vlax-for i (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-Acad-Object)))
   (if (= (vla-get-IsXref i) :vlax-true)
     (print (vla-get-name i))
   ) ;_ Fin de if
 ) ;_ Fin de vlax-for
) ;_ Fin de defun

 

AutoLisp me dit qu'il y a une parenthèse fermante absente ou mal placée...

 

@didier : j'ai écris "coder" car je dois modifier ce code pour l'adapter à mes besoins. Mais effectivement, j'ai commencé par le copier... ;)

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)

Posté(e)

Coucou

 

Ah le copier-coller ! ce n'est DÉFINITIVEMENT pas une bonne ;méthode d’apprentissage

Ce qui t'a été donné est un extrait, et toi tu en fais un defun c:xxx

Je te laisse te dépatouiller pour comprendre, ton niveau est assez avancé pour ça.

Au fait : je ne vous pas de souci de parenthèses.

 

Allez !! je ne suis pas un bourreau : regarde du côté de la variable et pose toi la question du defun c:xxx

Amicalement

Posté(e)

Coucou

 

Il va falloir que je fasse attention et remette en cause ce que je pense savoir pour ne pas dire de bêtises sur mon site

Je vais regarder de plus près mais je ne comprends pas le truc du groupe 70 qui a sauté

Comment assure-t'-on la compatibilité avec les nouvelles versions s'ils nous changent les valeurs de groupe ?

 

Amicalement

Posté(e)

Coucou

 

Au risque de passer pour un demeuré voici l'extrait de l'aide 2018 :

regardez le numéro 4

 

70 
Drapeaux par type de bloc (valeurs binaires pouvant être combinées) :
0 = Indique qu'aucun des drapeaux suivants ne s'applique 
1  = Ce bloc anonyme est généré par une opération de hachage, de cotation  associative ou tout autre type d'opération, ou par une application 
2  = Ce bloc a des définitions d'attribut non constantes (ce bit n'est pas  défini si le bloc comporte des définitions d'attribut constantes ou  s'il n'a aucune définition d'attribut) 
4 = Ce bloc est une référence externe (xréf)
8 = Ce bloc est une superposition de xréf 
6 = Ce bloc est dépendant en externe
32  = Il s'agit d'une référence externe non résolue ou d'un élément  dépendant d'une référence externe (ignorée lors de la saisie) 
64 = Cette définition est une référence externe référencée (ignoréelors de la saisie) 

 

Amicalement

Posté(e)

C'est très curieux comme comportement, voici la liste des codes DXF d'une XRef :

(-1 . <Nom d'entité: 204670bad00>)

(0 . "INSERT")

(330 . <Nom d'entité: 20457b7fe80>)

(5 . "16A08")

(100 . "AcDbEntity")

(67 . 0)

(410 . "Model")

(8 . "_XRef")

(100 . "AcDbBlockReference")

(2 . "ST-Denis-EU")

(10 0.0 0.0 0.0)

(41 . 1.0)

(42 . 1.0)

(43 . 1.0)

(50 . 0.0)

(70 . 0) <= Curieux, non ? ***************

(71 . 0)

(44 . 0.0)

(45 . 0.0)

(210 0.0 0.0 1.0)

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)

Posté(e)

Coucou

 

Merci beaucoup Olivier

 

Je faisais le test du groupe 70 suite à un appel en ENTGET

Ce qui explique la confusion

 

DenisHEN tu poses la même question que je posais en message #2 sur le groupe 70...

Et sans doute tu fais la même confusion qui a été solutionnée et m'a donné l'occasion de remercier Olivier à l'instant.

 

Amicalement

Posté(e)

Re.

 

@didier : je n'ai pas compris la solution, raison du #12. Je ne sais toujours pas faire la différence.

 

Peut-être en comparant le code 2 de la Xref à la liste des blocs inclus dans le dessin ? ? ?

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)

Posté(e)

Bon, j'ai écris ça :

;;;********************************************************
;;;  Place toutes les références externes en arrière plan  
;;;********************************************************
(defun c:XrefDessous (/ Select)
 (if (setq Select (ssget "_X" '((0 . "INSERT"))))
   (progn (setq i 0)
          (while (setq ent (ssname Select i))
            (setq NomXref (cdr (assoc 2 (entget ent))))
            (if (not (tblsearch "block" NomXref))
              (progn (command "ordretrace" ent "" "ar") ;
                     (princ "\nNomXref=") ;
                     (princ NomXref)
              ) ;_ Fin de progn
            ) ;_ Fin de while
            (setq i (+ i 1))
          ) ;_ Fin de while
   ) ;_ Fin de progn
 ) ;_ Fin de if
 (princ)
) ;_ Fin de defun

 

Mais les noms des références externes sont incluses dans la table des blocs...

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)

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é