Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

ces derniers temps, mon boulot consiste à faire des plans de synthèse sur un projet de voirie tramway. C'est à dire que je récolte les plans des différents intervenants que je dois superposer pour mettre en évidences les éventuelles incohérences.

 

Donc, cela va sans dire que j'utilise la xref de façon presque exclusive et je ne fais que geler les calques qui ne nous intéressent pas.

Pas trop technique comme boulot, mais ce n'est pas le sujet.

 

J'ai remarqué que, de temps à autre, la commande GELCALQUE ou _layfrz avait quelques difficultés à fonctionner sur des éléments de xrefs. Non pas lorsque les éléments de la xrefs sont des objets simples comme des lignes, des arcs, des cercles... Mais lorsque qu'on clique sur un élément d'un bloc contenu dans une xref il arrive souvent qu'on gèle le calque 0. Ceci s'explique par le fait que celui qui a fabriqué le bloc a mis les éléments qui le constituent sur un (ou plusieurs) calque(s) et a laissé le bloc lui-même sur le calque 0.

 

C'est pas bien !!! Mais bon, c'est comme ça et je ne vais pas aller tirer les oreilles individuellement à chacun. Mais comme je ne veux pas ouvrir le fichier xref à chaque fois pour voir comment c'est fabriqué à l'intérieur, je me suis intéressé à la fonction (nentsel). J'ai vu des sujets de (Gilles) Patrick35 et de Bonuscad traitant de la matrice de transformation renvoyée par (nentsel), mais ce n'est pas ce qui m'intéressait.

 

Revenons à (nentsel), de quoi s'agit-il ?

 

En gros, c'est une fonction qui permet de sélectionner un objet.

Si cet objet n'est pas complexe (bloc ou xref), (nentsel) renvoie les mêmes information que (entsel) : à savoir une liste de 2 éléments.

 

(

< Nom d'entité: 7e691180 >

(16.1544 -5.28676 0.0)

)

 

le nom de l'entité et le point de sélection.

 

Par contre, lorsque l'objet sélectionné est un composant d'un bloc ou d'une xref, nentsel retourne une liste comprenant 4 éléments (sauf lorsqu'on clique sur un attribut, ou on récupère directement l'objet ATTRIB. Un peu comme quand on clique sur un objet POLYLIGNE 3D ou on récupère directement l'objet VERTEX)

 

Les 4 éléments de la liste sont les suivants :

 

(

< Nom d'entité: 7e6bc0b0 >

(2.29229 10.1415 0.0)

((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0) (0.0 10.0 0.0))

(< Nom d'entité: 7e6bc0c8 > < Nom d'entité: 7e691178 >)

)

 

Le premier élément de la liste et l'objet sélectionné

le 2ème élément de la liste, le point cliqué

le 3ème élément la matrice de transformation Objet à Général

et le quatrième, une liste du ou des blocs imbriqués contenant l'objet sélectionné. C'est ce quatrième élément de la liste qui m'a donc intéressé. Dans l'exemple ci-dessus, il s'agit d'un bloc dans une xref.

 

L'objet du lisp est de donner une sorte de hiérarchie des calques. L'objet lui-même est sur tel-calque, le bloc dont il fait partie est sur tel autre... la xref sur tel autre.

 

(defun c:?? ()
 (setq e (nentsel))
 (setq a (entget (car e)))
 (setq MSG (strcat (cdr (assoc 0 a)) "\nCalque : " (cdr (assoc 8 a))))

 (if (> (length e) 2)   ;; complexe
   (progn
     (setq lnested (car (reverse e)))
     (foreach enested lnested
       (setq nested (entget enested))
       (setq INFOTBL (tblsearch "BLOCK" (cdr (assoc 2 nested))))
       (if (= (boole 1 (cdr (assoc 70 INFOTBL)) 4) 4)  ; c'est une xref
         (setq MSG (strcat MSG "\n\ndans xref : " (cdr (assoc 2 INFOTBL)) "\nCalque : " (cdr (assoc 8 nested))))
         (setq MSG (strcat MSG "\n\ndans bloc : " (cdr (assoc 2 INFOTBL)) "\nCalque : " (cdr (assoc 8 nested))))
       )
     )
   )
 )
 (alert MSG)
 (princ)
) 

 

Il faudrait encore traiter le cas particulier des attributs.

 

Amicalement

Vincent

 

PS : je viens de m'apercevoir que l'affichage des codes conserve les indentations données par l'auteur du code. Merci à celui qui s'est donné cette peine

 

[Edité le 10/2/2009 par zebulon_]

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Salut

Bien pratique!!

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Posté(e)

Entre temps, j'ai trouvé un code dxf 330 qui indique "l'objet propriétaire". Donc quand on sélectionne un attribut de bloc ou alors un vertex d'une polyligne 3D, on peut aller à la pêche aux informations avec ce code dxf 330 pour trouver le bloc propriétaire de l'attribut ou la polyligne 3d propriétaire du sommet.

 

(defun c:?? ()
 (setq e (nentsel))
 (if e
   (progn
     (setq a (entget (car e)))
     (setq TP (cdr (assoc 0 a)))

     (setq MSG (strcat TP "\nCalque : " (cdr (assoc 8 a))))
 
     (cond
       ((= TP "ATTRIB")
         (setq OWNER (cdr (assoc 330 a)))
         (setq a (entget OWNER))
         (setq MSG (strcat MSG "\n\ndans BLOC : " (cdr (assoc 2 a)) "\nCalque : " (cdr (assoc 8 a))))
       )
       ((= TP "VERTEX")
         (setq OWNER (cdr (assoc 330 a)))
         (setq a (entget OWNER))
         (setq MSG (strcat MSG "\n\ndans POLYLIGNE 3D\nCalque : " (cdr (assoc 8 a))))
       )
     )

     (if (> (length e) 2)   ;; complexe
       (progn
         (setq lnested (car (reverse e)))
         (foreach enested lnested
           (setq nested (entget enested))
           (setq INFOTBL (tblsearch "BLOCK" (cdr (assoc 2 nested))))
           (if (= (boole 1 (cdr (assoc 70 INFOTBL)) 4) 4)  ; c'est une xref
             (setq MSG (strcat MSG "\n\ndans XREF : " (cdr (assoc 2 INFOTBL)) "\nCalque : " (cdr (assoc 8 nested))))
             (setq MSG (strcat MSG "\n\ndans BLOC : " (cdr (assoc 2 INFOTBL)) "\nCalque : " (cdr (assoc 8 nested))))
           )
         )
       )
     )
     (alert MSG)
   )
 )
 (princ)
)

 

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

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é