Aller au contenu

Opération sur texte


michouka

Messages recommandés

Bonjour à tous,

 

J'aurais besoin d'un petit coup de main (plutôt d'un gros d'ailleurs) n'étant pas très familier avec le lisp.

Voilà, je voudrais pouvoir insérer un texte (ou un bloc) dont la valeur serait la différence d'altitude entre deux points.

Concrétement, je souhaiterais cliquer sur le texte (déjà présent sur mon dessin) qui indique l'altitude de mon 1er point puis cliquer sur le second texte(lui aussi présent sur mon dessin) et ensuite cliquer sur le point d'insertion de mon nouveau texte (ou bloc) qui serait bien la différence entre les deux index de mes sélections précédentes.

J'ai bien vu une chose un peu similaire sur les champs, mais je suis incapable de l'adapter à mon cas.

 

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

Salut...

 

Pourquoi dis tu que ce n'est pas possible avec les champs?

J'ai déjà eu ce cas et cela fonctionne très bien avec les champs. Ton texte "différence" a un champ "formule" où tu inséres un nouveau champ "objet" avec "index" de ton 1° texte "-" nouveau champ "objet" avec "index" de ton 2° texte...

Si tu modifies tes textes par la suite, tu n'as plus qu'à faire un regen pour actualiser les résultats!

AutoCad Map 3D 2011 - Covadis v16.0d

Windows 7 - 64b

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne dis pas que ce n'est pas possible avec les champs. En effet, ta méthode fonctionne, je l'ai déjà utilisée à plusieurs reprises. Mais moi dans mon cas, je souhaite faire ça à la volée... J'ai pas mal de points à faire, et je gagnerai du temps en utilisant un lisp plutôt que de devoir refaire la même démarche par couple de points en passant par la boite de dialogue des champs. D'autant plus que les valeurs de départ correspondent à un semis de points de topo : du coup elles ne changent pas et donc les champs n'ont plus vraiment d'utilité dans mon cas.

Merci tout de même pour ta réponse.

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Michouka :

 

N'aurais-tu pas confondu le vocabulaire ?

Ce que tu cliques pour tes points topo, c'est un TEXTE ou une VALEUR D'ATTRIBUT ?

La différence est fondamentale.

 

Tu souhaites, puisque tu parles de points topo, te servir de la valeur textuelle ou attributaire (suivant la réponse à la première question) ou plutôt de servir de l'altitude d'insertion du point topo ?

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Salut Didier,

 

Non, je te rassure, je parle bien de texte et non pas d'attribut. Dans ma grande entreprise de transport ... nous utilisons des applications locales pour importer notre semis de points et dont l'altitude est reprise par un texte au même point d'insertion que le point lui même.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Une première approche vite faite.

 

(vl-load-com)
(defun c:diff_texte ( / AcDoc Space e1name e2name string1 string2 nw_obj key)
 (defun sel_onlyText (msg / js)
   (princ msg)
   (while
     (not
       (setq js
         (ssget "_+.:E:S:N" 
           (list
             (cons 0 "*TEXT,MULTILEADER,ATTRIB,INSERT,DIMENSION")
             (cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
             (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
           )
         )
       )
     )
   )
   (vlax-ename->vla-object (cadar (ssnamex js 0)))
 )
 (defun getvalue_text (ename)
   (cond
     ((vlax-property-available-p ename 'TextString) (vlax-get ename 'TextString))
     ((vlax-property-available-p ename 'TextOverride)
       (if (eq (vlax-get ename 'TextOverride) "")
         (strcat (vlax-get ename 'TextPrefix) (rtos (vlax-get ename 'Measurement) (vlax-get ename 'UnitsFormat) (vlax-get ename 'PrimaryUnitsPrecision)) (vlax-get ename 'TextSuffix))
         (vlax-get ename 'TextOverride)
       )
     )
   )
 )
 (setq
   AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
   Space
   (if (eq (getvar "CVPORT") 1)
     (vla-get-PaperSpace AcDoc)
     (vla-get-ModelSpace AcDoc)
   )
 )
 (setq
   e1name (sel_onlyText "\nSélectionner le 1er texte: ")
   string1 (getvalue_text e1name)
   e2name (sel_onlyText "\nSélectionner le 2ème texte: ")
   string2 (getvalue_text e2name)
 )
 (cond
   ((and string1 string2)
     (setq nw_obj
       (vla-addMtext Space
         (vlax-3d-point (getvar "VIEWCTR"))
         0.0
         (rtos (- (read string1) (read string2)) 2 2)
       )
     )
     (mapcar
       '(lambda (pr val)
         (vlax-put nw_obj pr val)
       )
       (list 'AttachmentPoint 'Height 'DrawingDirection 'StyleName 'Layer 'Rotation 'BackgroundFill)
       (list 5 (getvar "TEXTSIZE") 5 "Standard" (getvar "CLAYER") 0.0 0)
     )
     (while (and (setq key (grread T 4 0)) (/= (car key) 3))
       (cond
         ((eq (car key) 5)
           (vlax-put nw_obj 'InsertionPoint (trans (cadr key) 1 0))
         )
       )
     )
   )
 )
 (prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Plutôt que de dire que c'est vite fait, moi je dirais qu'en plus d'être vite fait, c'est bien fait !! Un grand merci à toi.

Par contre histoire d'être encore plus exigent, est-il possible d'obtenir le résultat de la différence avec un facteur de 1000? Mon calcul serait plutôt du genre 247.607-247.549 = 58 et non 0.058 et s'il était même possible de toujours ajouter d= comme préfixe (je sais, je commence à être plus qu'exigent !!) Comme ça la valeur affichée serait d=58.

 

Petite question en plus, pour définir le style du texte, sa hauteur, etc.. : tu vas bien rechercher la valeur par défaut dans Autocad de mon style de texte ou c'est "(list 5 (getvar "TEXTSIZE") 5 "Standard" (getvar "CLAYER") 0.0 0)" qui lui impose ?

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je pense qu'en changeant cette ligne :

(rtos (- (read string1) (read string2)) 2 2)

 

Par

(* (rtos (- (read string1) (read string2)) 2 2) 1000)

 

Mais je n'ai pas fais d'essai...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

est-il possible d'obtenir le résultat de la différence avec un facteur de 1000?

et s'il était même possible de toujours ajouter d=

 

Tu changes simplement

(rtos (- (read string1) (read string2)) 2 2)

en

(strcat "d=" (rtos (* 1000.0 (- (read string1) (read string2))) 2 0))

 

tu vas bien rechercher la valeur par défaut dans Autocad de mon style de texte

Non j'ai pris le style standard, mais tu peux remplacer

(list 5 (getvar "TEXTSIZE") 5 "Standard" (getvar "CLAYER") 0.0 0)

par

(list 5 (getvar "TEXTSIZE") 5 (getvar "TEXTSTYLE") (getvar "CLAYER") 0.0 0

 

Pour le 5 (le premier) tu peux aussi changer

Attachment point:

 

1 = Top left; 2 = Top center; 3 = Top right

 

4 = Middle left; 5 = Middle center; 6 = Middle right

 

7 = Bottom left; 8 = Bottom center; 9 = Bottom right

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Zut, j'ai oublié le "d=" ! !

 

Bravo Bonuscad...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é