-
Compteur de contenus
5 029 -
Inscription
-
Dernière visite
-
Jours gagnés
56
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bonuscad
-
COMMENT LANCER UN SCRIPT DANS UN SCRIPT ?
bonuscad a répondu à un(e) sujet de ahbv dans Personnalisation, macros, DIESEL
Alors essayer un autre encodage dans ton éditeur: UFT-8, ANSI, ISO Occidental, etc.. -
LISP ou commande pour couper une cote en 2 cotes
bonuscad a répondu à un(e) sujet de brunomu dans Routines LISP
De façon très sommaire, car je pense que les controles devrait être beaucoup plus approfondis. Donc bien faire une sélection des cotes seulement concernées par le regroupement. Si quelqu'un veux fiabiliser le code ne vous genez pas... (defun c:join_dim ( / js l_p1 l_p2 n ent_dim dxf_ent) (setq js (ssget (list (cons 0 "DIMENSION") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) l_p1 nil l_p2 nil ) (cond (js (repeat (setq n (sslength js)) (setq ent_dim (ssname js (setq n (1- n))) dxf_ent (entget ent_dim) ) (cond ((or (zerop (rem (cdr (assoc 70 dxf_ent)) 32)) (eq (rem (cdr (assoc 70 dxf_ent)) 32) 1)) (setq l_p1 (cons (cdr (assoc 13 dxf_ent)) l_p1) l_p2 (cons (cdr (assoc 14 dxf_ent)) l_p2) ) ) (T (princ "\nN'est pas une côte alignée, pivotée, horizontale ou verticale.") ) ) ) (cond ((and l_p1 l_p2) (foreach el l_p1 (if (and (member el l_p1) (member el l_p2)) (setq l_p1 (vl-remove el l_p1) l_p2 (vl-remove el l_p2)) ) ) (setq dxf_ent (subst (cons 13 (car l_p1)) (assoc 13 dxf_ent) dxf_ent)) (setq dxf_ent (subst (cons 14 (car l_p2)) (assoc 14 dxf_ent) dxf_ent)) (entmod dxf_ent) ) ) (repeat (setq n (sslength js)) (setq ent_dim (ssname js (setq n (1- n)))) (if (not (eq ent_dim (cdar dxf_ent))) (entdel ent_dim)) ) ) ) (prin1) ) -
COMMENT LANCER UN SCRIPT DANS UN SCRIPT ?
bonuscad a répondu à un(e) sujet de ahbv dans Personnalisation, macros, DIESEL
Utiliser peut être le format abrégé. Tu peux obtenir ce format en faisant DIR /X dans le terminal cmd Généralement pour les noms long il tronque en MAJUSCULE et rajoute un ~+ un entier incrémenté. C'est pour assurer une compatibilité avec l'ancien temps ou les noms de fichiers étaient limités en nombre de caractères. :(rires forts): -
Non, mais on peut avoir 2 style en utilisant le calque "DefPoints" (qui est non imprimable et dont le type de point est toujours 0 quelque soit la valeur de PDMODE) En fait PDMODE n'a aucune incidence sur la calque "DefPoints", le style est bloqué pour ce calque qui est destiné aux cotations. Pas trop d'interêt mais ça peut rendre service pour une certaine visibilité...
-
Sur AutoCADMap 2014: DDPTYPE = OK ; TYPEPT = NOK Par contre PTYPE ou _PTYPE = OK (me lance DDPTYPE)
-
LISP ou commande pour couper une cote en 2 cotes
bonuscad a répondu à un(e) sujet de brunomu dans Routines LISP
Bonjour, Pas testé en profondeur... (defun c:cut_dim ( / js n ent_dim dxf_ent lremov dxf_cod pt_break p1 p2 p_nw1 p_nw2) (setq js (ssget "_+.:E:S" (list (cons 0 "DIMENSION") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) (cond (js (setq ent_dim (ssname js 0) dxf_ent (entget ent_dim) lremov nil dxf_cod dxf_ent ) (cond ((or (zerop (rem (cdr (assoc 70 dxf_ent)) 32)) (eq (rem (cdr (assoc 70 dxf_ent)) 32) 1)) (foreach n dxf_cod (if (member (car n) '(2 5 330 -1)) (setq lremov (cons (car n) lremov)))) (foreach m lremov (setq dxf_cod (vl-remove (assoc m dxf_cod) dxf_cod)) ) (entmake dxf_cod) (setq dxf_cod (entget (entlast))) (initget 1) (setq pt_break (trans (getpoint "\nDonnez le point de coupure: ") 1 0) p1 (cdr (assoc 13 dxf_ent)) p2 (cdr (assoc 14 dxf_ent)) p_nw2 (polar p2 (angle p2 pt_break) (distance p2 pt_break)) dxf_ent (subst (cons 14 p_nw2) (assoc 14 dxf_ent) dxf_ent) ) (entmod dxf_ent) (setq p_nw1 (polar p1 (angle p1 pt_break) (distance p1 pt_break)) dxf_cod (subst (cons 13 p_nw1) (assoc 13 dxf_cod) dxf_cod) ) (entmod dxf_cod) ) (T (princ "\nN'est pas une côte alignée, pivotée, horizontale ou verticale.") ) ) ) ) (prin1) ) -
Autrement il y a ceci: PtDef-XYZ_Field.lsp Une recherche sur le site avec PtDef-XYZ_Field, te permettra de retrouver des discussions le concernant
-
Bonjour, J'ai retrouvé un truc fais il y a pas mal de temps (2007), je te le livre tel quel. (defun c:matricule (/ mat mlst ss n bloc att lst opt cnt ind pt) (if (and (setq mat (car (nentsel "\nSélectionnez un matricule: "))) (setq mlst (entget mat)) (= "ATTRIB" (cdr (assoc 0 mlst))) (= (type (read (cdr (assoc 1 mlst)))) 'INT) (setq ss (ssget "_X" (list '(0 . "INSERT") (assoc 2 (entget (cdr (assoc 330 mlst)))) ) ) ) ) (progn (repeat (setq n (sslength ss)) (setq bloc (ssname ss (setq n (1- n))) att (entnext bloc) ) (while (not (equal (assoc 2 (entget att)) (assoc 2 mlst))) (setq att (entnext att)) ) (setq lst (cons (cons (atoi (cdr (assoc 1 (entget att)))) (trans (cdr (assoc 10 (entget bloc))) bloc 1) ) lst ) ) ) (while (progn (initget "2d 3d") (setq opt (getkword "\nSpécifiez le type de polyligne [2d/3d] <Quitter>: " ) ) ) (cond ((= opt "2d") (command "_.pline")) ((= opt "3d") (command "_.3dpoly")) (T (command)) ) (setq cnt 0) (while (/= 0 (getvar "CMDACTIVE")) (setvar "CMDECHO" 0) (cond ((< 2 cnt) (initget "Clore annUler")) ((< 1 cnt) (initget "annUler")) ) (setq ind (getint (strcat "\nEntrez le matricule du point" (cond ((< cnt 2) "") ((< cnt 3) " ou [annUler]") (T " ou [Clore/annUler]") ) ": " ) ) ) (cond ((numberp ind) (cond ((setq pt (cdr (assoc ind lst))) (command "_none" pt) (setq cnt (1+ cnt)) ) (T (princ "\nMatricule non valide.") ) ) ) ((= ind "Clore") (command "_Close")) ((= ind "annUler") (command "_Undo") (setq cnt (1- cnt)) ) (T (command)) ) (setvar "CMDECHO" 1) ) ) ) ) (princ) ) [Edit] J'ai retrouvé dans la foulée un lien Celui du lien permet de relier automatiquement par matricule sucessifs. (par ex: du 553 au 637)
-
Enlever ligne de côte + flèche
bonuscad a répondu à un(e) sujet de francinez dans LISP et Visual LISP
Je suppose que ça s'adresse à moi? (vl-load-com) (defun c:DimSwicth_Line&Arrow ( / js ent obj pt_sel dxf_ent pt_first pt_snd key lpr) (setq js (ssget "_+.:E:S" (list (cons 0 "DIMENSION") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) (cond (js (setq obj (vlax-ename->vla-object (setq ent (ssname js 0)))) (cond ((or (eq (vlax-get obj "ObjectName") "AcDbRotatedDimension") (eq (vlax-get obj "ObjectName") "AcDbAlignedDimension") ) (setq pt_sel (cadar (cdddar (ssnamex js))) pt_first (cdr (assoc 13 (setq dxf_ent (entget ent)))) pt_snd (cdr (assoc 14 dxf_ent)) ) (if (> (distance pt_sel pt_snd) (distance pt_sel pt_first)) (setq lpr '("ExtLine1Suppress" "Arrowhead1Type")) (setq lpr '("ExtLine2Suppress" "Arrowhead2Type")) ) (foreach n (mapcar 'cons (mapcar '(lambda (x) (vlax-get obj x)) lpr) lpr) (if (zerop (car n)) (vlax-put obj (cdr n) (if (member (cdr n) '("ExtLine1Suppress" "ExtLine2Suppress")) -1 19)) (vlax-put obj (cdr n) 0) ) ) ) (T (princ "\nN'est pas une côte pivotée ou alignée")) ) ) (T (princ "\nPas de sélection valable")) ) (prin1) ) -
Enlever ligne de côte + flèche
bonuscad a répondu à un(e) sujet de francinez dans LISP et Visual LISP
Une variante en vlax, plus concise. (vl-load-com) (defun c:DimSwicth_Line&Arrow ( / js obj key lpr) (setq js (ssget "_+.:E:S" (list (cons 0 "DIMENSION") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) (cond (js (setq obj (vlax-ename->vla-object (ssname js 0))) (cond ((or (eq (vlax-get obj "ObjectName") "AcDbRotatedDimension") (eq (vlax-get obj "ObjectName") "AcDbAlignedDimension") ) (princ "\n<Click gauche> pour switcher l'état / <Click droit> pour valider") (while (and (not (member (setq key (grread T 4 2)) '((2 13) (2 32)))) (/= (car key) 25)) (cond ((eq (car key) 3) (setq lpr '("ExtLine1Suppress" "ExtLine2Suppress" "Arrowhead1Type" "Arrowhead2Type")) (foreach n (mapcar 'cons (mapcar '(lambda (x) (vlax-get obj x)) lpr) lpr) (if (zerop (car n)) (vlax-put obj (cdr n) (if (member (cdr n) '("ExtLine1Suppress" "ExtLine2Suppress")) -1 19)) (vlax-put obj (cdr n) 0) ) ) ) ) ) ) (T (princ "\nN'est pas une côte pivotée ou alignée")) ) ) (T (princ "\nPas de sélection valable")) ) (prin1) ) -
Création de côte avec soustraction constante
bonuscad a répondu à un(e) sujet de Johann dans AutoCAD 2015
Généralement quand on côte, on s'accroche en règle générale aux extrémités d'objets (ou on sélectionne directement l'objet) de façon à avoir la côte réelle. Nous sommes bien d'accord? Dans son cas il voulait réduire sa côte de 0.20. Pour fixer les points en relatif par rapport aux extrémité en manuel, bonjour la gymmastique, avec le lisp ça se fait tout seul. -
Création de côte avec soustraction constante
bonuscad a répondu à un(e) sujet de Johann dans AutoCAD 2015
Bonjour, Créer des côtes directement, je ne sais pas faire. Par contre une autre solution est possible: Tu crée ta/tes cotations de manière classique sans te préoccuper de la valeur de la côte, puis tu applique le lisp suivant. Inconvénient: Tes côtes ne seront plus associatives, les lignes d'attaches sont déplacées (ce n'est peut être pas ce que tu souhaite?), donc la valeur de la côte correspond aux position des lignes d'attaches. (defun c:dim-n ( / js n ent_dim dxf_ent p1 p2 p_nw1 p_nw2) (if (not value) (progn (initget 2) (setq value (getreal "\nValeur à retrancher à la côte sélectionnée <0.20>: ")) (if (not value) (setq value 0.2)) ) ) (or (setq js (ssget "_I" '((0 . "DIMENSION")))) (setq js (ssget "_P" '((0 . "DIMENSION")))) ) (cond (js (sssetfirst nil js) (initget "Existant Nouveau _Existent New") (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New") (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget '((0 . "DIMENSION"))))) ) ) (T (setq js (ssget '((0 . "DIMENSION"))))) ) (cond (js (repeat (setq n (sslength js)) (setq ent_dim (ssname js (setq n (1- n)))) (setq dxf_ent (entget ent_dim)) (cond ((or (zerop (rem (cdr (assoc 70 dxf_ent)) 32)) (eq (rem (cdr (assoc 70 dxf_ent)) 32) 1)) (setq p1 (cdr (assoc 13 dxf_ent)) p2 (cdr (assoc 14 dxf_ent))) (setq p_nw1 (polar p1 (angle p1 p2) (/ value 2.0)) p_nw2 (polar p2 (angle p2 p1) (/ value 2.0))) (setq dxf_ent (subst (cons 13 p_nw1) (assoc 13 dxf_ent) dxf_ent)) (setq dxf_ent (subst (cons 14 p_nw2) (assoc 14 dxf_ent) dxf_ent)) (entmod dxf_ent) ) (T (princ "\nN'est pas une côte alignée, pivotée, horizontale ou verticale.") ) ) ) ) ) (prin1) ) -
COMMENT LANCER UN SCRIPT DANS UN SCRIPT ?
bonuscad a répondu à un(e) sujet de ahbv dans Personnalisation, macros, DIESEL
Bonjour, En effet, cela fonctionne, mais un script qui a été appelé par un autre script NE REND PAS la main au script appelant. Donc tu peux faire des scripts en cascade mais pas itératif: Une fois en bas de la cascade, tu ne peux plus remonter... ;) Pour de l'itératif un autre language est indispensable; lisp ou autre... -
Je pense que si, car pour moi (AutocadMap 2014), c'est pareil, obligé de taper P au message choix des objets pour récupérer la selection précédente...
-
Oui c'est exact, mais à la différence que les hachures seront toutes orientées dans le même sens. (a moins de les modifier une pas une par l'édition de hachure) Dans le code lisp, le coté le plus long du bati est recherché pour chaque bati pour obtenir un angle de 45 par rapport à ce coté le plus long trouvé.
-
Bonjour, Je ne réponds pas à la question: Mais je trouve personnellement que le mode hachure multiple n'est pas adapté à une bonne représentation du hachurage du bati: l'angle du hachurage n'est pas individuel et que la représentation n'est pas tip-top. En plus de cette manière on obtient aussi une hachure unique, une modif et on est obligé de refaire l'ensemble des hachure. Pour faire un hachurage individuel et plus joli (correspondant d'ailleurs à la représentation classique papier du cadastre), j'utilise ceci: (defun c:multi_hatch-45 ( / js n model_hatch scale_hatch ang_hatch ent dxf_ent lst_pt lst_d where alpha) (setq js (ssget '((0 . "LWPOLYLINE") (-4 . "<AND") (-4 . "&") (70 . 1) (-4 . "AND>")))) (cond (js (setq n -1 model_hatch (getvar "HPNAME") scale_hatch (getvar "HPSCALE") ang_hatch (getvar "HPANG") ) (setvar "HPNAME" "ANSI31") (setvar "HPSCALE" (* (getvar "HPSCALE") (getvar "DIMSCALE"))) (repeat (sslength js) (setq ent (ssname js (setq n (1+ n))) dxf_ent (entget ent) lst_pt (mapcar '(lambda (x) (trans x ent 0)) (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent))) lst_d (mapcar 'distance lst_pt (cons (last lst_pt) lst_pt)) where (- (length lst_pt) (length (member (apply 'max lst_d) lst_d))) alpha (angle (if (zerop where) (last lst_pt) (nth (1- where) lst_pt)) (nth where lst_pt)) ) (setvar "HPANG" (angle (trans '(0 0 0) 0 1) (trans (polar '(0 0 0) alpha scale_hatch) 0 1))) (command "_.HATCH" "" "" "" ent "") ) (setvar "HPNAME" model_hatch) (setvar "HPSCALE" scale_hatch) (setvar "HPANG" ang_hatch) ) (T (princ "\nAucune LWPOLYLINE fermée trouvé !")) ) (princ) )
-
J'ai déjà eu une galère avec .NET framework. Le désinstaller n'est pas une mince affaire (j'avais plusieurs version + update d'installés dans mon cas) Pour supprimer une version ancienne, il faut impérativement désinstaller TOUTES les versions dans l'ordre chronologique et réinstaller seulement la dernière version. Malgré cette procédure suivie à la lettre, j'avais une version récalcitrante qui ne voulait pas se désinstaller. J'avais du recourir (de souvenir...) à un outil ou une manip de microsoft pour l'éradiquer. Bref, une bonne prise de tête, mais une fois fait tout était rentré dans l'ordre. J'avais eu recours aussi à CCleaner pour nettoyer toutes les clefs qui été restées présentes après désinstallation, histoire d'être sur qu'il n'y ait pas d'embrouille de mauvaise référence dans la base de registre lors de la réinstallation. J'avais pesté sur les nombreux redémarrage de l'ordi, ça m'avais pris un temps fou pour remettre tout ça d'équerre.
-
Bonjour, Ca depend de tes contraintes... Si tu as le choix opte pour : Avec ce système tu seras compatible avec les obligations d'INSPIRE Voir ici:http://www.ign.fr/institut/node/735
-
Bonjour, Assez exceptionnel comme photo. Une belette qui s'offre un vol sur la compagnie pivert ... http://4.bp.blogspot.com/-l2lqo007Ir8/VPWyoUshdNI/AAAAAAAAWo0/Au1B5XAH1cM/s1600/belette_et_pivert.jpg
-
Généralement il font un bon effet Larsen comme ça; on se bouche les oreilles... :(rires forts):
-
Pour moi c'est simplement un curseur... 35h = un curseur Départ à la retraite = un autre curseur Montant des impots et taxes = encore un autre curseur ... je vous laisse compléter la platine de mixage. Et à chaque fois qu'un curseur bouge, il bouge automatiquement les autres à plus ou moins long terme et on t'enfume... Un politique n'est qu'un disque-jockey derrière sa platine de mixage pour rester dans l'air de sa flûte enchantée, et il n'a pas peur des fausses notes...
-
Ben, doit y avoir une histoire de rafraichissement graphique. Hier soir, chez moi, j'ai eu beau le regarder longtemps, comme HBS62: dans le sens anti-horaire, il n'a jamais tourné dans l'autre sens. Ce matin, au boulot, il m'arrive de le voir tourner dans l'autre sens, mais le sens hanti-horaire reste majoritaire. Ou alors mon cerveau est plus ramolo le matin... :(rires forts):
-
Bonjour, Je pense que c'est un point calulé depuis LASTPOINT avec une distance de 1 et un angle fourni par la position de ton curseur lors de ta saisie. Il me semble que ça fonctionne comme cela. Mixer les entrées entre (getpoint) et (getint), je m'étais essayé à cela. La seule solution que j'avais trouvé satisfaisante était d'analyser les retours de (grread), sachant que le gros problème de cette fonction est que les accroches objets ne sont pas évalués. Donc grosse artillerie pour émuler un petit besoin... Je te livre ce que j'avais pondu, mais je pense pas que ce soit vraiment un chemin à suivre. De souvenir je crois que la fonction dessinait des accroches bizzare dans des SCU 3D. Honnêtement une saisie supplémentaire par l'utilisateur serait souhaitable pour orienté le code sur la bonne fonction. (Je sais on souhaite toujours le moins de saisie possible...) (defun gr-osmode (pt-i str-md / n pt md rap pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt56 pt67 pt78 pt85 one_o) (setq n (/ (cadr (getvar "screensize")) 5.0)) (setq pt (osnap pt-i str-md)) (while (and (eq (strlen (setq md (substr str-md 1 4))) 4) (not one_o)) (repeat 2 (setq rap (/ (getvar "viewsize") n) pt1 (list (- (car pt) rap) (- (cadr pt) rap) (caddr pt)) pt2 (list (+ (car pt) rap) (- (cadr pt) rap) (caddr pt)) pt3 (list (+ (car pt) rap) (+ (cadr pt) rap) (caddr pt)) pt4 (list (- (car pt) rap) (+ (cadr pt) rap) (caddr pt)) pt5 (list (car pt) (- (cadr pt) rap) (caddr pt)) pt6 (list (+ (car pt) rap) (cadr pt) (caddr pt)) pt7 (list (car pt) (+ (cadr pt) rap) (caddr pt)) pt8 (list (- (car pt) rap) (cadr pt) (caddr pt)) pt56 (polar pt (- (/ pi 4.0)) rap) pt67 (polar pt (/ pi 4.0) rap) pt78 (polar pt (- pi (/ pi 4.0)) rap) pt85 (polar pt (+ pi (/ pi 4.0)) rap) n (- n 16) ) (if (equal (osnap pt-i md) pt) (setq one_o T)) (cond ((and (eq "_end" md) one_o) (grdraw pt1 pt2 1) (grdraw pt2 pt3 1) (grdraw pt3 pt4 1) (grdraw pt4 pt1 1) ) ((and (eq "_mid" md) one_o) (grdraw pt1 pt2 1) (grdraw pt2 pt7 1) (grdraw pt7 pt1 1) ) ((and (eq "_cen" md) one_o) (grdraw pt5 pt56 1) (grdraw pt56 pt6 1) (grdraw pt6 pt67 1) (grdraw pt67 pt7 1) (grdraw pt7 pt78 1) (grdraw pt78 pt8 1) (grdraw pt8 pt85 1) (grdraw pt85 pt5 1) (grdraw pt5 pt7 7) (grdraw pt6 pt8 7) ) ((and (eq "_nod" md) one_o) (grdraw pt5 pt56 1) (grdraw pt56 pt6 1) (grdraw pt6 pt67 1) (grdraw pt67 pt7 1) (grdraw pt7 pt78 1) (grdraw pt78 pt8 1) (grdraw pt8 pt85 1) (grdraw pt85 pt5 1) (grdraw pt1 pt3 1) (grdraw pt2 pt4 1) ) ((and (eq "_qua" md) one_o) (grdraw pt5 pt6 1) (grdraw pt6 pt7 1) (grdraw pt7 pt8 1) (grdraw pt8 pt5 1) ) ((and (eq "_int" md) one_o) (grdraw pt1 pt3 1) (grdraw pt2 pt4 1) ) ((and (eq "_ins" md) one_o) (grdraw pt5 pt2 1) (grdraw pt2 pt6 1) (grdraw pt6 pt8 1) (grdraw pt8 pt4 1) (grdraw pt4 pt7 1) (grdraw pt7 pt5 1) ) ((and (eq "_per" md) one_o) (grdraw pt1 pt2 1) (grdraw pt1 pt4 1) (grdraw pt8 pt 1) (grdraw pt pt5 1) ) ((and (eq "_tan" md) one_o) (grdraw pt5 pt56 1) (grdraw pt56 pt6 1) (grdraw pt6 pt67 1) (grdraw pt67 pt7 1) (grdraw pt7 pt78 1) (grdraw pt78 pt8 1) (grdraw pt8 pt85 1) (grdraw pt85 pt5 1) (grdraw pt3 pt4 1) ) ((and (eq "_nea" md) one_o) (grdraw pt1 pt2 1) (grdraw pt2 pt4 1) (grdraw pt4 pt3 1) (grdraw pt3 pt1 1) ) ) ) (setq str-md (substr str-md 6) n (/ (cadr (getvar "screensize")) 5.0)) ) ) (defun get-int_point ( / o loop value mod key pt) (setq o (getvar "osmode") loop T value "") (if (or (zerop o) (eq (boole 1 o 16384) 16384)) (setq mod "_none") (progn (setq mod "") (mapcar '(lambda (xi xs) (if (not (zerop (boole 1 o xi))) (if (zerop (strlen mod)) (setq mod (strcat mod xs)) (setq mod (strcat mod "," xs)) ) ) ) '(1 2 4 8 16 32 64 128 256 512) '("_end" "_mid" "_cen" "_nod" "_qua" "_int" "_ins" "_per" "_tan" "_nea") ) ) ) (princ "\nGive a point or integer: ") (while (and (setq key (grread T 4 0)) (/= (car key) 3) loop) (cond ((eq (car key) 5) (redraw) (if (and (/= mod "_none") (osnap (cadr key) mod)) (progn (gr-osmode (cadr key) mod) (setq pt (osnap (cadr key) mod)) ) (setq pt (list (caadr key) (cadadr key) 0.0)) ) ) ((or (member key '((2 13) (2 32))) (eq (car key) 25)) (if (and (not (zerop (strlen value))) (eq (type (read value)) 'INT)) (setq pt (read value)) (setq pt nil) ) (setq loop nil) (princ "\n") ) (T (if (eq (cadr key) 8) (progn (setq value (substr value 1 (1- (strlen value)))) (princ (chr 8)) (princ (chr 32)) ) (setq value (strcat value (chr (cadr key))) pt nil) ) (princ (chr (cadr key))) ) ) ) (redraw) (princ pt) (prin1) )
-
[Résolu] Lisp pour extraire coordonnées et insérer dans Autocad
bonuscad a répondu à un(e) sujet de Maxime85 dans Pour aller plus loin en LISP
Ou encore cet autre, que j'avais fais pour quelqu'un qui voulait renseigner automatiquement les sommets d'une polyligne. Les possibilités sont multiples, suffit de les écrire... (defun inc_txt (Txt / Boucle Decalage Val_Txt Ascii_Txt) (setq Boucle 1 Val_txt "") (while (<= Boucle (strlen Txt)) (setq Ascii_Txt (vl-string-elt Txt (- (strlen Txt) Boucle))) (if (not Decalage) (setq Ascii_Txt (1+ Ascii_Txt)) ) (if (or (= Ascii_Txt 58) (= Ascii_Txt 91) (= Ascii_Txt 123)) (setq Ascii_Txt (cond ((= Ascii_Txt 58) 48) ((= Ascii_Txt 91) 65) ((= Ascii_Txt 123) 97) ) Decalage nil ) (setq Decalage T) ) (setq Val_Txt (strcat (chr Ascii_Txt) Val_Txt)) (setq Boucle (1+ Boucle)) ) (if (not Decalage) (setq Val_Txt (strcat (cond ((< Ascii_Txt 58) "0") ((< Ascii_Txt 91) "A") ((< Ascii_Txt 123) "a") ) Val_Txt ) ) ) Val_Txt ) (defun c:BlockAtt2Vtx ( / js lst_posatt n nb_e ent dxf_ent dxf_210 lst_pt lst_dist lst_num vlaobj perim_obj pr n_ini n_next pt abs_curv nb nb_dec inc x y z d num ang pos_att) (cond ((eq (getvar "cvport") 1) (princ "\n** Commande autorisée uniquement dans l'espace objet.") ) (T (if (not (tblsearch "STYLE" "Arial")) (entmake '( (0 . "STYLE") (5 . "40") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "Arial") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 2.5) (3 . "arial.ttf") (4 . "") ) ) ) (if (not (tblsearch "BLOCK" "Pointer")) (progn (entmake '((0 . "BLOCK") (2 . "Pointer") (70 . 2) (8 . "0") (62 . 256) (6 . "ByLayer") (370 . -2) (10 0.0 0.0 0.0)) ) (entmake '( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 1) (100 . "AcDbPolyline") (90 . 7) (70 . 1) (43 . 0.5) (38 . 0.0) (39 . 0.0) (10 19.0 11.0) (40 . 0.5) (41 . 0.5) (42 . 0.0) (91 . 0) (10 19.0 8.0) (40 . 0.5) (41 . 0.5) (42 . 0.0) (91 . 0) (10 75.0 8.0) (40 . 0.5) (41 . 0.5) (42 . 0.0) (91 . 0) (10 75.0 -8.0) (40 . 0.5) (41 . 0.5) (42 . 0.0) (91 . 0) (10 19.0 -8.0) (40 . 0.5) (41 . 0.5) (42 . 0.0) (91 . 0) (10 19.0 -11.0) (40 . 0.5) (41 . 0.5) (42 . 0.0) (91 . 0) (10 0.0 0.0) (40 . 0.5) (41 . 0.5) (42 . 0.0) (91 . 0) (210 0.0 0.0 1.0) ) ) (entmake '( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 1) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.5) (38 . 0.0) (39 . 0.0) (10 41.0 8.0) (40 . 0.5) (41 . 0.5) (42 . 0.0) (91 . 0) (10 41.0 -8.0) (40 . 0.5) (41 . 0.5) (42 . 0.0) (91 . 0) (210 0.0 0.0 1.0) ) ) (entmake '( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 1) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.5) (38 . 0.0) (39 . 0.0) (10 46.0 8.0) (40 . 0.5) (41 . 0.5) (42 . 0.0) (91 . 0) (10 46.0 -8.0) (40 . 0.5) (41 . 0.5) (42 . 0.0) (91 . 0) (210 0.0 0.0 1.0) ) ) (entmake '( (0 . "TEXT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 1) (100 . "AcDbText") (10 42.6909 5.0 0.0) (40 . 2.0) (1 . "L") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 0) ) ) (entmake '( (0 . "TEXT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 1) (100 . "AcDbText") (10 42.6909 2.0 0.0) (40 . 2.0) (1 . "X") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 0) ) ) (entmake '( (0 . "TEXT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 1) (100 . "AcDbText") (10 42.6909 -1.0 0.0) (40 . 2.0) (1 . "Y") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 0) ) ) (entmake '( (0 . "TEXT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 1) (100 . "AcDbText") (10 42.6909 -4.0 0.0) (40 . 2.0) (1 . "Z") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 0) ) ) (entmake '( (0 . "TEXT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 1) (100 . "AcDbText") (10 42.6909 -7.0 0.0) (40 . 2.0) (1 . "D") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 0) ) ) (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 53.0334 -4.0 0.0) (40 . 8.0) (1 . "-") (50 . 0.0) (41 . 0.65) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 1) (11 60.5 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "Tag No") (2 . "TAG") (70 . 0) (73 . 0) (74 . 2) (280 . 1) ) ) (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 27.6671 5.0 0.0) (40 . 2.0) (1 . "-") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 2) (11 39.0 5.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "Length") (2 . "LENGTH") (70 . 0) (73 . 0) (74 . 0) (280 . 1) ) ) (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 28.91 2.0 0.0) (40 . 2.0) (1 . "-") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 2) (11 39.0 2.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "X Cooordinate") (2 . "XCORD") (70 . 0) (73 . 0) (74 . 0) (280 . 1) ) ) (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 28.91 -1.0 0.0) (40 . 2.0) (1 . "-") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 2) (11 39.0 -1.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "Y Cooordinate") (2 . "YCORD") (70 . 0) (73 . 0) (74 . 0) (280 . 1) ) ) (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 29.0668 -4.0 0.0) (40 . 2.0) (1 . "-") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 2) (11 39.0 -4.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "ZCooordinate") (2 . "ZCORD") (70 . 0) (73 . 0) (74 . 0) (280 . 1) ) ) (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 31.2374 -7.0 0.0) (40 . 2.0) (1 . "-") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 2) (11 39.0 -7.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "Description") (2 . "DESC") (70 . 0) (73 . 0) (74 . 0) (280 . 1) ) ) (entmake '((0 . "ENDBLK") (8 . "0") (62 . 256) (6 . "ByLayer") (370 . -2))) ) ) (princ "\nSélectionner les Polylignes où placer un bloc avec attributs") (setq js (ssget '((0 . "*POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>")))) (cond (js (setq lst_posatt '((60.5 0.0 0.0) (39.0 5.0 0.0) (39.0 2.0 0.0) (39.0 -1.0 0.0) (39.0 -4.0 0.0) (39.0 -7.0 0.0))) (repeat (setq n (sslength js)) (setq dxf_ent (entget (setq ent (ssname js (setq n (1- n))))) dxf_210 (cdr (assoc 210 dxf_ent)) lst_pt nil lst_dist nil lst_num nil) (setq vlaobj (vlax-ename->vla-object ent) perim_obj (vlax-curve-getDistAtParam vlaobj (vlax-curve-getEndParam vlaobj)) pr -1 ) (if (not n_next) (setq n_ini (getstring "\nIncrementer en débutant à [chiffre/lettre/alphanumérique]: ") n_next (if (eq n_ini "") "0" n_ini) ) (progn (initget "Oui Non _Yes No") (if (eq (getkword "\nRéinitialiser l'incrémentation [Oui/Non] <Non>: ") "Yes") (setq n_ini (getstring "\nIncrementer en débutant à [chiffre/lettre/alphanumérique]: ") n_next (if (eq n_ini "") "0" n_ini) ) (setq n_ini n_next) ) ) ) (repeat (setq nb_e (if (zerop (vlax-get vlaobj 'Closed)) (1+ (fix (vlax-curve-getEndParam vlaobj))) (fix (vlax-curve-getEndParam vlaobj)))) (setq pt (vlax-curve-GetPointAtParam vlaobj (setq pr (1+ pr))) lst_pt (cons pt lst_pt) abs_curv (vlax-curve-getDistAtPoint vlaobj (vlax-curve-getClosestPointTo vlaobj (trans pt 1 0))) lst_dist (cons abs_curv lst_dist) lst_num (cons n_next lst_num) ) (setq n_ini n_next) (cond ((eq (type (read n_ini)) 'INT) (setq n_next (itoa (1+ (atoi n_ini)))) ) ((eq (type (read n_ini)) 'REAL) (setq nb 0) (repeat (strlen n_ini) (if (eq (substr n_ini (setq nb (1+ nb)) 1) ".") (setq nb_dec (1- (strlen (substr n_ini nb)))) ) ) (setq inc 1.0) (repeat nb_dec (setq inc (/ inc 10))) (setq n_next (rtos (+ inc (atof n_ini)) 2 nb_dec)) ) ((eq (type n_ini) 'STR) (setq n_next (inc_txt n_ini)) ) ) ) (foreach pto lst_pt (setq x (car pto) y (cadr pto) z (caddr pto) d (car lst_dist) num (car lst_num) ang (+ (* 0.5 pi) (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv vlaobj (vlax-curve-getParamAtPoint vlaobj pto)))) pos_att (mapcar '(lambda (x) (polar (trans '(0.0 0.0 0.0) dxf_210 0) (+ (angle (trans '(0.0 0.0 0.0) dxf_210 0) (trans x dxf_210 0)) ang) (distance (trans '(0.0 0.0 0.0) dxf_210 0) (trans x dxf_210 0)))) lst_posatt) ) (entmake (append '( (0 . "INSERT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (100 . "AcDbBlockReference") (66 . 1) (2 . "Pointer") (41 . 1.0) (42 . 1.0) (43 . 1.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) ) (list (cons 50 ang) (cons 10 (trans pto 0 dxf_210)) (cons 210 dxf_210)) ) ) (entmake (append '( (0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (100 . "AcDbText") ) (list (cons 50 ang) (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210)) (cons 1 num) ) '( (40 . 8.0) (41 . 0.65) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 1) ) (list (cons 11 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210)) (cons 210 dxf_210) ) '( (100 . "AcDbAttribute") (2 . "TAG") (70 . 0) (73 . 0) (74 . 2) ) ) ) (setq pos_att (cdr pos_att)) (entmake (append '( (0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (100 . "AcDbText") ) (list (cons 50 ang) (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210)) (cons 1 (rtos d 2 4)) ) '( (40 . 1.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 2) ) (list (cons 11 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210)) (cons 210 dxf_210) ) '( (100 . "AcDbAttribute") (2 . "LENGTH") (70 . 0) (73 . 0) (74 . 0) ) ) ) (setq pos_att (cdr pos_att)) (entmake (append '( (0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (100 . "AcDbText") ) (list (cons 50 ang) (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210)) (cons 1 (rtos x 2 4)) ) '( (40 . 1.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 2) ) (list (cons 11 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210)) (cons 210 dxf_210) ) '( (100 . "AcDbAttribute") (2 . "XCORD") (70 . 0) (73 . 0) (74 . 0) ) ) ) (setq pos_att (cdr pos_att)) (entmake (append '( (0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (100 . "AcDbText") ) (list (cons 50 ang) (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210)) (cons 1 (rtos y 2 4)) ) '( (40 . 1.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 2) (11 0.0 0.0 0.0) ) (list (cons 11 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210)) (cons 210 dxf_210) ) '( (100 . "AcDbAttribute") (2 . "YCORD") (70 . 0) (73 . 0) (74 . 0) ) ) ) (setq pos_att (cdr pos_att)) (entmake (append '( (0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (100 . "AcDbText") ) (list (cons 50 ang) (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210)) (cons 1 (rtos z 2 4)) ) '( (40 . 1.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 2) ) (list (cons 11 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210)) (cons 210 dxf_210) ) '( (100 . "AcDbAttribute") (2 . "ZCORD") (70 . 0) (73 . 0) (74 . 0) ) ) ) (setq pos_att (cdr pos_att)) (entmake (append '( (0 . "ATTRIB") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (100 . "AcDbText") ) (list (cons 50 ang) (cons 10 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210))) '( (1 . "EXISTING") (40 . 1.0) (41 . 1.0) (51 . 0.0) (7 . "Arial") (71 . 0) (72 . 2) ) (list (cons 11 (trans (list (+ (car pto) (caar pos_att)) (+ (cadr pto) (cadar pos_att)) (+ (caddr pto) (caddar pos_att))) 0 dxf_210)) (cons 210 dxf_210) ) '( (100 . "AcDbAttribute") (2 . "DESC") (70 . 0) (73 . 0) (74 . 0) ) ) ) (entmake '((0 . "SEQEND") (62 . 256) (6 . "ByLayer") (370 . -2))) (setq lst_dist (cdr lst_dist) lst_num (cdr lst_num)) ) (princ (strcat "\n" (itoa nb_e) " blocs \"Pointer\" placés et renseignés.")) ) ) (T (princ "\nSélection non valide ou vide.")) ) ) ) (prin1) ) -
[Résolu] Lisp pour extraire coordonnées et insérer dans Autocad
bonuscad a répondu à un(e) sujet de Maxime85 dans Pour aller plus loin en LISP
Bonjour, Une autre proposition (avec les champs; un point est créé...) (defun c:coord-xy_field ( / AcDoc Space pt_pos pt_field htx rtx rtx0 ncol obj js nw_obj l_max p1 p2 p3) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (while (setq pt_pos (getpoint "\nPosition à repérer?: ")) (initget 9) (setq pt_field (getpoint pt_pos "\nEmplacement du texte?: ")) (initget 6) (setq htx (getdist pt_field (strcat "\nSpécifiez la hauteur du champ <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (if (not (setq rtx (getorient pt_field "\nSpécifiez l'orientation du champ <0.0>: "))) (setq rtx 0.0)) (setq rtx0 (+ (angle '(0 0 0) (getvar "UCSXDIR")) rtx) ncol '(96 2)) (foreach n '("Id-XY" "Id-Point") (cond ((null (tblsearch "LAYER" n)) (vlax-put (vla-add (vla-get-layers AcDoc) n) 'color (car ncol)) ) ) (setq ncol (cdr ncol)) ) (cond ((null (tblsearch "STYLE" "Romand-Field")) (setq nw_style (vla-add (vla-get-textstyles AcDoc) "Romand-Field")) (mapcar '(lambda (pr val) (vlax-put nw_style pr val) ) (list 'FontFile 'Height 'ObliqueAngle 'Width 'TextGenerationFlag) (list "romand.shx" 0.0 (/ (* 15.0 pi) 180) 1.0 0.0) ) ) ) (vlax-put (vla-AddPoint Space (vlax-3d-point pt_pos)) 'layer "Id-Point") (setq obj (entlast) js (ssadd)) (mapcar '(lambda (lx) (apply '(lambda (ins_point value_field att_point txt_height dwg_dir name_style name_layer txt_rot / nw_obj) (setq nw_obj (vla-addMtext Space (vlax-3d-point ins_point) 0.0 (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (itoa (vla-get-ObjectID (vlax-ename->vla-object obj))) value_field ) ) js (ssadd (entlast) js) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation) (list att_point txt_height dwg_dir ins_point name_style name_layer txt_rot) ) ) lx ) ) (list (list (mapcar '+ pt_field (list (- (* (getvar "TEXTSIZE") (cos rtx0)) (* (* (getvar "TEXTSIZE") 0.5) (sin rtx0))) (+ (* (getvar "TEXTSIZE") (sin rtx0)) (* (* (getvar "TEXTSIZE") 0.5) (cos rtx0))) 0.0 ) ) ">%).Coordinates \\f \"%lu2%pt1%pr3%ps[X=,]\">%" 7 (getvar "TEXTSIZE") 5 "Romand-Field" "Id-XY" rtx ) (list (mapcar '+ pt_field (list (- (* (getvar "TEXTSIZE") (cos rtx0)) (* (- (* (getvar "TEXTSIZE") 0.5)) (sin rtx0))) (+ (* (getvar "TEXTSIZE") (sin rtx0)) (* (- (* (getvar "TEXTSIZE") 0.5)) (cos rtx0))) 0.0 ) ) ">%).Coordinates \\f \"%lu2%pt2%pr3%ps[Y=,]\">%" 1 (getvar "TEXTSIZE") 5 "Romand-Field" "Id-XY" rtx ) ) ) (setq l_max nil) (foreach n (append (textbox (list (assoc 1 (entget (ssname js 0))))) (textbox (list (assoc 1 (entget (ssname js 1)))))) (setq l_max (cons (apply 'max n) l_max))) (setq l_max (apply 'max l_max)) (command "_.pline" "_none" pt_pos "_none" pt_field "_none" (setq p1 (polar pt_field (+ rtx (* 0.5 pi)) (* 2.0 (getvar "TEXTSIZE")))) "_none" (setq p2 (polar p1 rtx (+ l_max (* (getvar "TEXTSIZE") 3.0)))) "_none" (setq p3 (polar p2 (- rtx (* 0.5 pi)) (* 4.0 (getvar "TEXTSIZE")))) "_none" (polar p3 (+ rtx pi) (+ l_max (* (getvar "TEXTSIZE") 3.0))) "_close" ) ) (prin1) ) Si la police ne te convient pas, il te suffit d'en affecter une autre après coup au style Romman-field et de regénérer ton dessin. Si les points sont déplacés, les champs seront mis à jour.
