Aller au contenu

[Résolu] Coordonnées des contour d'un Mtext


DenisHen

Messages recommandés

Bonjour à tous.

 

Voilà (je sais, je commence toujours par "Voilà"), aujourd'hui, je cherche à perfectionner une des routines que j'ai mise à disposition dans mes routines LISP.

 

Via une commande dans mon Lisp, je créé un Mtext en un seul point :

(command "_.-MTEXT" Pt_ins_Txt "R" Angl_Txt "J" OptionIns "H" Haut Pt_ins_Txt Text "")

Ou Pt_Ins_Txt est le point d'insertion du MText mais aussi le deuxième (ou dernier) point...

 

J'aimerai, lorsque je créé ce Mtext, l'encadrer. Il me faut donc pour cela, ses quatre coordonnées.

 

Est-ce possible ? Je pense qui oui, puisque je peut faire l'encadrement via les ExpressTools.

 

J'ai tenté de comprendre la commande "tcircle" qui se trouve dans "acettxt.lsp" des ExpressTools, mais c'est vraiment trop complexe pour moi...

 

Je suis preneur pour toute observation, conseil, astuce...

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

Si tu pointe un MText avec ces outils, tu auras le cadre :

 

(setq vlobjet (vlax-ename->vla-object (car(entsel))))
(vla-GetBoundingBox vlobjet 'MINP 'MAXP)
(setq pt1(vlax-safearray->list MINP)
     pt2(vlax-safearray->list MAXP))

  • Upvote 1

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Salut Tramber.

 

Merci pour ton aide, mais mes Mtext sont orientés. Ils ne sont parallèle ni au SCU ni à un autre d'ailleurs. Mon plan a juste subit une rotation par un autre LISP ("Orientation du plan") :

(command "_ucs" "_z" p1 p2)
(setvar "snapang" (angle p1 p2))

Mais je suis toujours en coordonnées d'origine. J'espère être clair...

 

Du coup, il me faudrait plutôt 4 coordonnées au lieu des 2 que propose ton code...

 

Merci encore...

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

Bonjour à tous.

 

Et merci à vous de m'aider.

 

@Tramber : merci pour le truc, je ne connaissais pas cette commande...

 

@(gile) : Merci pour ce Lisp, je m'y colle dès maintenant... Mais je sens que ça va être coton...

 

Et bonne journée...

 

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

Re,

 

Voilà, j'ai bien observé le Lisp de (gile) (et oui, ç'est coton pour un novice comme moi de décortiquer un code de Maître (gile) avec ses mapcar, lambda...), mais je bloque.

 

J'ai bien isolé son code :

;; Text2Box-plst (gile)
;; Retourne la liste des sommets (coordonnées SCO) de la boite englobant le texte après décalage
;;
;; Arguments
;; elst : liste DXF de l'entité
;; of : distance de décalage

(defun Text2box-plst (elst of / nor ref rot wid hgt jus org box plst)
 (if (= "MTEXT" (cdr (assoc 0 elst)))
   (setq nor  (cdr (assoc 210 elst))
         ref  (trans (cdr (assoc 10 elst)) 0 nor)
         rot  (angle '(0 0 0) (trans (cdr (assoc 11 elst)) 0 nor))
         wid  (cdr (assoc 42 elst))
         hgt  (cdr (assoc 43 elst))
         jus  (cdr (assoc 71 elst))
         org  (list (cond ((member jus '(2 5 8)) (/ wid -2))
                          ((member jus '(3 6 9)) (- wid))
                          (T 0.0)
                    ) ;_ Fin de cond
                    (cond ((member jus '(1 2 3)) (- hgt))
                          ((member jus '(4 5 6)) (/ hgt -2))
                          (T 0.0)
                    ) ;_ Fin de cond
              ) ;_ Fin de list
         plst (mapcar (function (lambda (p) (mapcar '+ org p)))
                      (list (list (- of) (- of))
                            (list (+ wid of) (- of))
                            (list (+ wid of) (+ hgt of))
                            (list (- of) (+ hgt of))
                      ) ;_ Fin de list
              ) ;_ Fin de mapcar
   ) ;_ Fin de setq
   (setq box  (textbox elst)
         ref  (cdr (assoc 10 elst))
         rot  (cdr (assoc 50 elst))
         plst (list (list (- (caar box) of) (- (cadar box) of))
                    (list (+ (caadr box) of) (- (cadar box) of))
                    (list (+ (caadr box) of) (+ (cadadr box) of))
                    (list (- (caar box) of) (+ (cadadr box) of))
              ) ;_ Fin de list
   ) ;_ Fin de setq
 ) ;_ Fin de if
 (setq mat  (list (list (cos rot) (- (sin rot)) 0)
                  (list (sin rot) (cos rot) 0)
                  '(0 0 1)
            ) ;_ Fin de list
       plst (mapcar (function
                      (lambda (p)
                        (mapcar '+ (mxv mat p) (list (car ref) (cadr ref)))
                      ) ;_ Fin de lambda
                    ) ;_ Fin de function
                    plst
            ) ;_ Fin de mapcar
 ) ;_ Fin de setq
) ;_ Fin de defun

Et j'ai ceci dans le mien (de code) :

  (command "_.-MTEXT" Pt_ins_Txt "R"        Angl_Txt   "J"
          OptionIns  "H"        Haut       Pt_ins_Txt Text
          ""
         ) ;_ Fin de command
;_ Fin de command
 (setq plst (text2box-plst (entlast) "0.1")
       olst (cons (vlax-ename->vla-object tx) olst)
 ) ;_ Fin de setq

En gros, j'écris mon texte et demande ses coordonnées, mais AutoCAD me répond :

; erreur: type d'argument incorrect: listp <Nom d'entité: 2387ac77800>

 

J'ai beau tenter plusieurs syntaxes, rien n'y fait ! Je pense que mon erreur est dans le (entlast).

 

Je suppose que plst est une suite ce coordonnées du type :

(2.25 5.69 2.54 5.88...)

 

Je tente de faire un encadrement partiel de mes coordonnées, comme celui-ci :

post-6426-0-72844700-1475154587_thumb.jpg

Donc, un trait avec :

- une ligne de P1 (angle P1 P2) et (/ (distance P1 P2) 2)

- une ligne de P1 (angle P1 P4) et (/ (distance P1 P4) 2)

et ainsi de suite pour les autres sommets...

 

Si didier passe par là, je lui serais grès de ses observations sur les copier/coller. Même s'il a raison. ;)

 

Je suis preneur pour toute observation, conseil, astuce...

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

Salut,

 

Il y a des commentaires pourtant...

il faut passer la liste DXF du MText (telle que retournée par entget) en argument pas son ename.

 

  (setq plst (text2box-plst (entget (entlast)) "0.1")
       olst (cons (vlax-ename->vla-object tx) olst)
 ) ;_ Fin de setq

  • Upvote 1

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Je pense que tu as mal tourné ta phrase en me disant que tu "m'en serais grés",

Je pense que tu voulais dire que tu m'en saurais gré.

 

Il n'empêche que si tu passais par les étapes classiques d'apprentissage tu aurais compris de toi-même ton erreur.

Car quand tu te tapes ton code tu réfléchis beaucoup plus et tu apprends dix fois plus vite.

Pour exemple, en ce moment je débute (comme toujours) en C# je peux te dire que je pars du début mais alors du début du début du commencement, j'essaie de tracer une ligne ...

Je ne prétends pas savoir courir avant d'avoir appris à marcher.

Ne prends-pas mal ce que je te dis, tu reconnais que j'ai raison, alors fais-le pour ton bien.

Et si tu as décidé de mal le prendre tant pis, j'estime que je dois le dire quand même.

Sur le site on a tous commencé quasiment en même temps, on a évolué et on continue, mais on est tous passé par cette méthode éprouvée.

Celui qui copie-colle se ment à lui-même en disant qu'il fait du lisp et si j’abhorre le mensonge chez les autres imagine pour moi-même.

 

Amicalement tout de même.

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous.

 

@(gile) : merci à toi, mais avec le code que tu viens de me donner, AutoCAD me répond :

; erreur: type d'argument incorrect: numberp: "0.1".
Alors que dans la console j'ai bien une liste de coordonnées :
_$ plst

((1.62122e+06 8.25088e+06) (1.62122e+06 8.25088e+06) (1.62122e+06 8.25088e+06) (1.62121e+06 8.25088e+06))

_$

Et oui, pour une fois, j'ai pensé à bien déclarer mes variables dans les deux routines. Comme tu me l'a fais souvent remarquer. ;)

 

@didier : je suis à 100% d'accord avec toi, c'est vrai que le copier/coller n'apprend qu'à se servir de la souris. Mais je fais du LISP en "clandestin", je ne suis que dessinateur (je sais, je ne suis pas le seul dans ce cas), mais je ne peux pas "comptabiliser" mon temps dans le secteur R&D, donc, je fais de mon mieux... Et on est tous dans ce cas.

Et oui, je t'en sais gré... ;)

 

En tous cas, merci à vous deux...

 

PS : Je viens de voir un truc bizarre, quoi que je fasse, plst est toujours pareil...

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

Re, et merci encore...

 

@(gile) : j'avais aussi essayé 0.1 au lieu de "0.1", mais j'ai la même erreur.

A la fin de ton code Text2box-plst, plst est bon, c'est bien une liste de coordonnées XY. Mais au retour dans le mien, j'ai toujours "; erreur: type d'argument incorrect: lentityp nil" et je n'arrive pas à me l'expliquer... :unsure:

 

@didier : je sais bien, je travaille aussi chez moi, mais je trouve difficilement le temps pour du boulo à la maison. Il y a quelques années, j'en avais du temps, c'est là que j'ai commencé à apprendre le Lisp (en plus du VBA, LibreOffice-Basic...). Mais maintenant, mon emploi du temps est plutôt "serrer"... Je dois privilégier ma santé et la famille...

 

C'est comme en cuisine, je suis à l'aise pour accommoder les restes, mais incapable de faire un plat en sauce...

 

Merci encore à vous deux...

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

J'ai résolu une partie de mon problème, c'est la ligne du olst qui faisait planter... Du coup, j'ai :

  (setq plst (text2box-plst (entget (entlast)) 0.1))

Et je n'ai plus de ligne d'erreur "...lentityp nil"

 

Mais plst est vide lorsqu'il revient de Text2box-plst. Pourtant, toutes mes variables sont déclarées...

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

Bon, j'ai résolu tant bien que mal mon problème...

 

J'ai maintenant "insérer" la routine de (gile) DANS la mienne...

 

Je poste le résultat dans mes routines partagées (elle se nomme "Cotation XYZ" en neuvième position)...

 

Encore merci messieurs...

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é