pelloux Posté(e) le 23 mai 2008 Posté(e) le 23 mai 2008 Bonjour J'ai des plans de réseaux d'assainissement (fourni par un délégataire) avec des xdata déjà existantes sur mes fichiers dwg. Les dessinateurs de mon entreprise crée des tampons d'assainissement sous forme de blocs qu'ils orientent suivant la direction de la canalisation. Je souhaite récupérer la valeur d'orientation de chaque tampon d'assainissement pour la mettre dans mes xdata. Es-ce que cette valeur d'orientation est récupérable ? Si oui peut-on encore la mettre dans les xdata existantes (nouveau champ) de mes fichiers dwg ? Merci et bonne journée. PHPELLOUX
papyrus1985 Posté(e) le 23 mai 2008 Posté(e) le 23 mai 2008 Bonjour, tu peux utilisé un champ qui récupère la propriété "rotation" de ton bloc. Avec un lisp tu pourras remplir tes xdata (juste par curiosité c'est quoi exactement un xdata et ca sert a quoi ?:() Cyprien Utilisateur AutoCAD depuis la R12 Longue Vie à CADxp
pelloux Posté(e) le 23 mai 2008 Auteur Posté(e) le 23 mai 2008 Salut Papyrus1985 Le problème c'est que je n'ai aucune idée comment crée ce lisp puisque je ne développe pas. Les xdata sont des données alpha associés à des éléménts géométriques. Dans les Express tools tu peux crée tes xdata et les interroger. @+ PHPELLOUX
bonuscad Posté(e) le 23 mai 2008 Posté(e) le 23 mai 2008 Oui bien sûr... Voici un exemple à adapter: - la rotation du bloc est le code dxf 50- comme je ne connais pas le nom de ton appli de xdata j'en ai créé une pour l'exemple et je rajoute donc les xdata à l'entité sélectionnée (sois en chaine, code 1000 dans les unités angulaire utilisées, soit en valeur réelle, code 1040, en choisissant le radian) ((lambda ( / ang dxf_ent) (print (angtos (setq ang (cdr (assoc 50 (entget (car (entsel "\nChoisir un bloc: ")))))) (getvar "AUNITS") 4)) (setq dxf_ent (entget (car (entsel "\nDonnée de rotation à attacher à: ")))) (if (null (tblsearch "appid" "pelloux2008")) (regapp "pelloux2008") ) (entmod (append dxf_ent (list (list -3 (list "pelloux2008" (cons 1002 "{") (cons 1000 (angtos ang (getvar "AUNITS") 4)) (cons 1040 ang) (cons 1002 "}") ) ) ) ) ) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pelloux Posté(e) le 23 mai 2008 Auteur Posté(e) le 23 mai 2008 Merci Bonuscad J'essaie ton code dès que possible. @+ PH PELLOUX
pelloux Posté(e) le 23 mai 2008 Auteur Posté(e) le 23 mai 2008 Bonuscad J'ai essayé ton lisp avec un fichier dwg. Ca semble fonctionner. J'ai essayé sur un bloc ("référence de bloc" dans les propriétés avec comme angle indiqué = 37) A la suite de la création de l'appli "pelloux2008", j'interroge le bloc : Commande: xdlist Choix de l'objet: Enter application name <*>: * Registered Application Name: pelloux2008 * Code 1002, Starting or ending brace: { * Code 1000, ASCII string: 36.6593 * Code 1040, Real number: 0.6398 * Code 1002, Starting or ending brace: } * Registered Application Name: E-DECHAR-APIC * Code 1002, Starting or ending brace: { * Code 1000, ASCII string: E-DECHAR2TYPE=DECHARGE * Code 1000, ASCII string: E-DECHAR2DIAMETRE=INCONNU * Code 1000, ASCII string: E-DECHAR2CODINSEE=76474 * Code 1000, ASCII string: E-DECHAR2NUMERO=76474-DV-3915 * Code 1002, Starting or ending brace: } Object has 16133 bytes of Xdata space available. Commande: 2 remarques. - Comment faire pour que le champ rotation ne fasse pas l'objet d'une nouvelle appli mais qu'il aille s'ajouter à celle déjà existante dans "E-DECHAR-APIC" ? - Lorsque j'essaie d'attacher un autre bloc avec pelloux 2008, ça ne fonctionne plus ??? Il me dit : commande: _vlide Choisir un bloc: "18.8418" Donnée de rotation à attacher à: pelloux2008 *Sélection non valable* Attend un point ou Dernier Merci. PHPELLOUX
bonuscad Posté(e) le 23 mai 2008 Posté(e) le 23 mai 2008 - Comment faire pour que le champ rotation ne fasse pas l'objet d'une nouvelle appli mais qu'il aille s'ajouter à celle déjà existante dans "E-DECHAR-APIC" ? Comme ceci (en me donnant le nom de l'appli c'est déjà plus simple) ;) : ((lambda ( / ang dxf_ent xd_list) (setq ang (cdr (assoc 50 (entget (car (entsel "\nChoisir un bloc: "))))) dxf_ent (entget (car (entsel "\nDonnée de rotation à attacher à: ")) (list "E-DECHAR-APIC")) xd_list (cdr (assoc -3 dxf_ent)) ) (entmod (append (vl-remove (assoc -3 dxf_ent) dxf_ent) (list (list -3 (append '("E-DECHAR-APIC") (append (list (cons 1002 "{") (cons 1000 (strcat "E-DECHAR2ROTATION="(angtos ang (getvar "AUNITS") 4)))) (cddar xd_list) ) ) ) ) ) ) (princ (strcat "\nLa donnée E-DECHAR2ROTATION=" (angtos ang (getvar "AUNITS") 4) " a été cumulée.")) (prin1) )) - Lorsque j'essaie d'attacher un autre bloc avec pelloux 2008, ça ne fonctionne plus ??? C'est normal, une fonction lambda ne reste pas en mémoire, il faut à chaque fois la réexécuter. NB: Tu peux changer ((lambda ( / ang dxf_ent xd_list) en par exmple (defun c:pelloux ( / ang dxf_ent xd_list)Enlever la parenthèse fermante supplémentaire en fin de code... puisque je ne développe pas. :casstet: Les Xdata sont surtout intéressantes justement si on développe, donc je reste dubitatif sur l'usage que tu peux en faire... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pelloux Posté(e) le 26 mai 2008 Auteur Posté(e) le 26 mai 2008 Bonuscad Ok ça fonctionne bien. Je ne veux pas abuser de ton temps. Sais tu comment je peux éviter d'avoir à ajouter le champ rotation objet par objet pour le faire en une seule fois sur tout le calque ? Si c'est vraiment trop long, dis le moi je comprendrais. Bonne journée et merci encore. PHPELLOUX PS : Effectivement je ne développe pas, j'ai acheté un bouquin pour voir comment on fait (en attendant que mon entreprise me paye une formation).
bonuscad Posté(e) le 26 mai 2008 Posté(e) le 26 mai 2008 Je connais pas du tout le contexte de ton dessin, il est peut être possible d'automatiser complètement, mais en l'absence d'exemple concret... En effet je ne peux pas deviner par programmation à quelle entité tu veux rattacher les données collectées. Cependant il est possible d'améliorer l'exemple ci-dessus pour diminuer le nombre d'intervention.Voici ce que je te propose (à tester...) ((lambda ( / e_model cod_dxf js n ang pt pt_sel dxf_ent xd_list) (princ "\nSélectionner une entité modèle: ") (while (null (setq e_model (ssget "_+.:E:S" '((0 . "INSERT")))))) (setq cod_dxf (entget (ssname e_model 0))) (setq js (ssget "_X" (list (assoc 0 cod_dxf) (assoc 2 cod_dxf) (assoc 8 cod_dxf))) n -1) (cond (js (repeat (sslength js) (setq ang (cdr (assoc 50 (entget (ssname js (setq n (1+ n)))))) pt (cdr (assoc 10 (entget (ssname js n)))) ) (initget 1) (setq pt_sel (getpoint pt "\nDonnée de rotation à attacher à: ") dxf_ent (entget (car (nentselp pt_sel)) (list "E-DECHAR-APIC")) xd_list (cdr (assoc -3 dxf_ent)) ) (entmod (append (vl-remove (assoc -3 dxf_ent) dxf_ent) (list (list -3 (append '("E-DECHAR-APIC") (append (list (cons 1002 "{") (cons 1000 (strcat "E-DECHAR2ROTATION="(angtos ang (getvar "AUNITS") 4)))) (cddar xd_list) ) ) ) ) ) ) (princ (strcat "\nLa donnée E-DECHAR2ROTATION=" (angtos ang (getvar "AUNITS") 4) " a été cumulée à " (cdr (assoc 0 dxf_ent)))) ) ) ) (prin1) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pelloux Posté(e) le 26 mai 2008 Auteur Posté(e) le 26 mai 2008 Bonuscad J'ai essayé mais ça me donne ceci : Sélectionner une entité modèle: Choix des objets: Donnée de rotation à attacher à: Et là je ne comprends plus ??? Il me met un fil à la patte au réticule ??? Pour rappel : J'ai des plans de réseaux d'assainissement (fourni par un délégataire) avec des xdata déjà existantes sur mes fichiers dwg. Les dessinateurs de mon entreprise crée des tampons d'assainissement sous forme de blocs qu'ils orientent suivant la direction de la canalisation. Je souhaite récupérer la valeur d'orientation de chaque tampon d'assainissement pour la mettre dans mes xdata. Sur un même calque, je cherche à récupérer tous les angles de mes tampons pour les mettre sur chacune des xdata existantes de mes tampons. En fait avec ton code le plus gros est fait puisqu'on peut le faire tampon par tampon. Le mieux, je crois, serait de pouvoir faire une sélection graphique de tous les objets souhaités sur le calque et de lui indiquer le nom de l'application E-DECHAR-APIC. Je ne sais pas si c'est clair ? Encore merci et @+ PH PELLOUX
bonuscad Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Et là je ne comprends plus ??? Il me met un fil à la patte au réticule ??? Je croyais que tu devais rattacher les Xdata à d'autres entités, canalisation par exemple. je cherche à récupérer tous les angles de mes tampons pour les mettre sur chacune des xdata existantes de mes tampons. En fait si je comprend bien les xdata sont à rattacher aux tampons sélectionnés. Je suis pas devin, il faut être plus précis dans les explications ou/et donner un extrait du dessin. Essayes ce qui suit: ((lambda ( / e_model cod_dxf js n dxf_ent ang xd_list) (princ "\nSélectionner une entité modèle: ") (while (null (setq e_model (ssget "_+.:E:S" '((0 . "INSERT")))))) (setq cod_dxf (entget (ssname e_model 0))) (setq js (ssget "_X" (list (assoc 0 cod_dxf) (assoc 2 cod_dxf) (assoc 8 cod_dxf))) n -1) (cond (js (repeat (sslength js) (setq dxf_ent (entget (ssname js (setq n (1+ n))) (list "E-DECHAR-APIC")) ang (cdr (assoc 50 dxf_ent)) xd_list (cdr (assoc -3 dxf_ent)) ) (entmod (append (vl-remove (assoc -3 dxf_ent) dxf_ent) (list (list -3 (append '("E-DECHAR-APIC") (append (list (cons 1002 "{") (cons 1000 (strcat "E-DECHAR2ROTATION="(angtos ang (getvar "AUNITS") 4)))) (cddar xd_list) ) ) ) ) ) ) (princ (strcat "\nLa donnée E-DECHAR2ROTATION=" (angtos ang (getvar "AUNITS") 4) " a été cumulée à " (cdr (assoc 0 dxf_ent)) " au point: " (rtos (car (cdr (assoc 10 dxf_ent)))) "," (rtos (cadr (cdr (assoc 10 dxf_ent)))) "," (rtos (caddr (cdr (assoc 10 dxf_ent)))) ) ) ) ) ) (prin1) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pelloux Posté(e) le 27 mai 2008 Auteur Posté(e) le 27 mai 2008 Bonuscad Ok merci :D c'est exactement ce que je cherche. Je continue de tester et je te dis dans quelques jours si on clôture le sujet. @+ Paul-Henri PELLOUX
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