pingoo666 Posté(e) le 11 août 2005 Posté(e) le 11 août 2005 Bonjour, Je dois faire un traitemet d'un TN en 2D pour le passer en 3D J'ai donc décidé de faire un lisp qui me prend l'a valeur du texte et qui me l'injecte dans le Z d'un point. J'ai commencé a faire celà (defun c:setz () (princ "Choisir une Cote") (setq ent_txt (car (entsel))) (princ "Choisir un Point") (setq ent_pt (car (entsel))) ; on récupère le texte de la cote (setq txt_z (assoc 1 (entget ent_txt))) ; on injecte la cote dans le z (setq pt_z (assoc 30 (entget ent_pt))) (setq nv_ent (subst pt_z txt_z (entget ent_pt))) (entmod nv_ent) ) Problème ca ne marche pas.En fait j'ai l'impression que le Z n'est pas injecté correctement. Des idées?
mlon Posté(e) le 11 août 2005 Posté(e) le 11 août 2005 je dois avoir ce qu'il te faut :(defun c:mmtext (/ selection1 taille_sel1 inc mmtexttemp text1 nomtext1 ttesprop valtext1 essai ytext xtext textmètre3d proptext2 text2 htext ) (setq text2 (entsel "\nsélectionnez un texte altimétrique de la bdu (calque Annot ou bdu-z-tn)\n" ) ) (setq proptext2 (entget (car text2))) (setq htext (assoc 40 proptext2)) (setq selection1 (ssget "x" (list (cons 0 "text") htext ) ) ) ;met dans un jeu de sélection "selection1" la liste des objets étant à la fois du text et de hauteur de texte 0.3 (setq taille_sel1 (sslength selection1) ) ;nombre d'éléments dans la sélection (setq inc 0) (while (< inc taille_sel1) ;création de la boucle permettant de sélectionner les éléments 1 à 1 dans le prog de modification de texte (setq mmtexttemp (ssname selection1 inc) ) (setq inc (+ 1 inc)) ;inc=incrémenteur ;voila on rattrappe le prog de modif de texte (setq ttesprop (entget mmtexttemp)) ;met dans ttesprop(=toutes propriétés) toutes les propriétés du texte de base sous forme de (liste . point) (setq valtext1 ;met dans valtext1 la valeur de ce qui suit ;qui est le réel correspondant au texte et directement en mètres (cvunit ;change les centimètres en mètre (atof ;change une chaine de texte en réel ex: "2085" devient 2085.0 (cdr (car (cdddr (cddddr (cddddr ttesprop))))) ;extrait de ttesprop la valeur du texte soit celle associée à (1 . "2085") ;je crois que cette ligne pourrait etre simplifiée à l'aide de assoc ) "centimètre" "mètre" ) ) (setq essai (assoc 1 ttesprop)) (setq ytext (caddr (assoc 10 ttesprop))) (setq xtext (cadr (assoc 10 ttesprop))) (setq textmètre3d (subst (cons 1 (rtos valtext1 2 2)) (assoc 1 ttesprop) ttesprop ) ;end subst ) ;end setq ;; textmètre3d a son texte se mettant au mètre (setq textmètre3d (subst (cons 10 (list xtext ytext valtext1)) (assoc 10 ttesprop) textmètre3d ) ;end subst ) ;end setq ;; textmètre3d a son altitude se mettant en 3d (setq textmètre3d (subst (cons 8 "bdu-z-tn") (assoc 8 ttesprop) textmètre3d ) ;end subst ) ;end setq ;; textmètre3d se met dans le calque "bdu-z-tn" (entmod textmètre3d) )) je sais ce que je sais mais comment connaître mon ignorance
Patrick_35 Posté(e) le 11 août 2005 Posté(e) le 11 août 2005 Salut,D'après ce que je comprends, c'est un point qu'il faut élever à une valeur Z depuis un texte @+ (defun c:setz () (setq ent_txt (car (entsel "\nChoisir une Cote : "))) (setq ent_pt (car (entsel "\nChoisir un Point : "))) ; on récupère le texte de la cote (setq txt_z (cdr (assoc 1 (entget ent_txt)))) (setq ent_pt (entget ent_pt)) ; on injecte la cote dans le z (setq ent_pt (subst (cons 10 (list (car (cdr (assoc 10 ent_pt)))(cadr (cdr (assoc 10 ent_pt))) (atof txt_z))) (assoc 10 ent_pt) ent_pt)) (entmod ent_pt) (entpud (cdr (assoc -1 ent_pt))) ) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
mlon Posté(e) le 11 août 2005 Posté(e) le 11 août 2005 au fait cela va te permettre de mettre ton texte qui était à z=0 à z=valeur du texteMais attention la sélection prendra tous les textes de hauteur identiques au texte sélectionné (cela correspond au besoin que j'ai eu) donc dans la selection du départ il faut mettre les objets que tu désires....Si tu ne vois pas comment modifier le code il faut que tu me dises ou sont situés tes textes et quelles propriétés porraient permettre de les reconnaitre par rapport aux autres textes de ton fichier (si il n'y a que des textes altimétriques, c'est tres simple).Au fait moi je partais d'une base de données en cm et donc a transformer en mètres je sais ce que je sais mais comment connaître mon ignorance
mlon Posté(e) le 11 août 2005 Posté(e) le 11 août 2005 :calim: ouinnnnnnnnnnn pour une fois que je pensais pouvoir aider quelqu'un!!! je sais ce que je sais mais comment connaître mon ignorance
mlon Posté(e) le 11 août 2005 Posté(e) le 11 août 2005 ben non en fait pas ouin car ca va etre long de sélectionner tous les textes un a un... enfin tout dépends du nombre de points que tu as.Au fait il faut une manip supplémentaire si tu utilises Covadis pour que ce dernier ne calcule ton mnt ;-) (si tant est que tu utilises Covadis) je sais ce que je sais mais comment connaître mon ignorance
mlon Posté(e) le 11 août 2005 Posté(e) le 11 août 2005 au fait patrick je viens d'essayer ton code c'est quoi "entpud"? je sais ce que je sais mais comment connaître mon ignorance
Patrick_35 Posté(e) le 11 août 2005 Posté(e) le 11 août 2005 Au contraire, plus il y a de solutions, mieux c'est. Je voulais juste lui montrer où cela ne fonctionnait pas pour qu'il continue son lisp Il n'est pas toujours évident de bien comprendre le besoin, surtout lorsque l'on n'est pas du métier On s'est juste croisé ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
mlon Posté(e) le 11 août 2005 Posté(e) le 11 août 2005 ouep de toute façons moi j'ai fait un copier coller du programme que j'avais réalisé pour moi ;)donc a moins qu'il ne travaille avec le meme genre de base de données que moi ...c'etait le premier programme que j'ai fait quand j'ai appris le lisp :'( j'en verse une petite larmichette :d je sais ce que je sais mais comment connaître mon ignorance
Patrick_35 Posté(e) le 11 août 2005 Posté(e) le 11 août 2005 Ah, j'ai inversé deux lettres, c'est en réalité entupd, c'est ce qui permet de mettre à jour à l'écran l'entité qui a été modifiée. Cela évite un regen @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 11 août 2005 Posté(e) le 11 août 2005 Souvenir, souvenir Cela permet de voir aussi la progression de notre niveau de lisp aussiC'est vrai qu'en revoyant certain de mes lisps, ils seront à réecrire, mais bon, c'est du temps et ils marchent très bien comme ça @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
pingoo666 Posté(e) le 11 août 2005 Auteur Posté(e) le 11 août 2005 merci beaucoup pour vos deux lisp. Ils corrspondent a deux besoins que j'ai (le lisp de mlon me permettra de me passer de MX pour mouliner le TN...) Je vais passer un peu de temps pour les étudier afin de continuer mon programme.
Susana Posté(e) le 12 août 2005 Posté(e) le 12 août 2005 Bonjour, J'utilise Autodesk CIVIL 3D 2006, et cette requette simple existe déjà dans le dessin gabarit .dwt fourni par ARES. Elle exporte dans un .txt les 3 colonnes XYZ des textes(la valeur Z étant récupérée dans le texte 2D).Ce fichier XYZ peut ensuite être importé comme un nuage de points pour créer le MNT. (setq ade_cmddia_before_qry (getvar "cmddia"))(setvar "cmddia" 0)(ade_qryclear)(ade_qrysettype "report" nil ".X1,.Y1,.STRING" "C:\\XYZ des TEXTES.txt")(ade_qrysetreptransform nil)(ade_qrydefine '("" "" "" "Property" ("objtype" "=" "TEXT")""))(setvar "cmddia" ade_cmddia_before_qry) Sus ;)
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