Aller au contenu

Lisp qui transforme un texte en élévation


pingoo666

Messages recommandés

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?

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

au fait cela va te permettre de mettre ton texte qui était à z=0 à z=valeur du texte

Mais 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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Souvenir, souvenir

 

Cela permet de voir aussi la progression de notre niveau de lisp aussi

C'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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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

;)

Lien vers le commentaire
Partager sur d’autres sites

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é