DenisHen Posté(e) le 28 septembre 2016 Posté(e) le 28 septembre 2016 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)
Tramber Posté(e) le 28 septembre 2016 Posté(e) le 28 septembre 2016 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)) 1 Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
DenisHen Posté(e) le 28 septembre 2016 Auteur Posté(e) le 28 septembre 2016 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)
Tramber Posté(e) le 28 septembre 2016 Posté(e) le 28 septembre 2016 Il faut utiliser TRANS, tout simplement. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 28 septembre 2016 Posté(e) le 28 septembre 2016 Il faut utiliser TRANS, tout simplement.Je ne pense pas que ce soit aussi simple que ça. À DenisH, Tu peux regarder le LISP Cadre&Masque sur cette page ou sur celle-là et plus particulièrement la routine Text2box-plst. 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 29 septembre 2016 Auteur Posté(e) le 29 septembre 2016 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)
DenisHen Posté(e) le 29 septembre 2016 Auteur Posté(e) le 29 septembre 2016 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 :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)
(gile) Posté(e) le 29 septembre 2016 Posté(e) le 29 septembre 2016 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 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 29 septembre 2016 Posté(e) le 29 septembre 2016 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. Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 30 septembre 2016 Auteur Posté(e) le 30 septembre 2016 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)
(gile) Posté(e) le 30 septembre 2016 Posté(e) le 30 septembre 2016 Oupss!.. Il fallait lire : (setq plst (text2box-plst (entget (entlast)) 0.1) olst (cons (vlax-ename->vla-object tx) olst) ) ;_ Fin de setq Encore une erreur due à un copier/coller... 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 30 septembre 2016 Posté(e) le 30 septembre 2016 Coucou Et comment crois-tu qu'on ait appris ce qu'on sait ?Pendant les heures de travail ?On est tous dans ce cas comme tu dis. Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 30 septembre 2016 Auteur Posté(e) le 30 septembre 2016 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)
DenisHen Posté(e) le 30 septembre 2016 Auteur Posté(e) le 30 septembre 2016 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)
DenisHen Posté(e) le 30 septembre 2016 Auteur Posté(e) le 30 septembre 2016 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)
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