zebulon_ Posté(e) le 10 février 2009 Posté(e) le 10 février 2009 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éralet 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. AmicalementVincent 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)
jalna Posté(e) le 10 février 2009 Posté(e) le 10 février 2009 SalutBien 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 DammeMon forum : http://plexus.forumactif.org/
zebulon_ Posté(e) le 10 février 2009 Auteur Posté(e) le 10 février 2009 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) ) AmicalementVincent 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)
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant