Steven Posté(e) le 8 août 2016 Posté(e) le 8 août 2016 Salut à tous, J'ai actuellement des dessins avec un immeuble qui à des parties de façade arrondies.Autour de l'immeuble, il y a des numéros de trames qui sont perpendiculaires à la façade. Tous ces numéros de trame sont sous forme de Texte ou Mtext. Je souhaiterais pouvoir transformer ces Textes ou Mtext en bloc avec attriut. Actuellement, j'ai un lisp que m'avait fait Didier, il y a quelques années pour transformer des Textes en attributs. Le soucis est que lorsque les textes deviennent des attributs, ceux-ci s'orientent à 0° et sont donc tous horizontaux. Y a-t-il donc un moyen de transformer les textes, en attribut mais que ceux-ci conservent leurs orientations? Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
didier Posté(e) le 8 août 2016 Posté(e) le 8 août 2016 oui Éternel débutant... Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 8 août 2016 Posté(e) le 8 août 2016 Hello Steven Je suis comme toi, j'ai en stock une routine US qui fait le boulot mais qui insere a l'horizontale le Bloc avec UN attribut ... Je joins le code source car je sais que la Modif est facile pour un Lispeur ... Bye, lecrabe ;; ;; Routine : Txt2Blk (Text to Block with ONE attribute) by Moshe ;; 1. now it handles the default block name ;; 2. it take the middle point of the imaginary box surrounding the text (no matter the text justification) ;; 3. what do you mean by 'in case of negative answer?' ;; you can individually select each text object and place your circle around ;; but it is better to put the circle inside the block ;; (defun get_block_name (/ blkName) (if (eq (getvar "users5") "") (prompt "\nBlock name: ") (prompt (strcat "\nBlock name <" (getvar "users5") ">: ")) ); if (if (= (setq blkName (getstring t)) "") (setq blkName (getvar "users5")) (setvar "users5" blkName) ); if (if (/= blkName "") (if (null (tblsearch "block" blkName)) (progn (vlr-beep-reaction) (prompt (strcat "\nBlock " (strcase blkName) " is not exist.")) (setvar "users5" (setq blkName "")) ) ) ) blkName ) (defun get_middle_text_point (e / insPt box t0 t1 p0 p1) (setq ins (cdr (assoc '10 e))) (setq box (textbox (list (assoc '1 e)))) (setq t0 (car box) t1 (cadr box)) (setq p0 (list (+ (car ins) (car t0)) (+ (cadr ins) (cadr t0)))) (setq p1 (list (+ (car ins) (car t1)) (+ (cadr ins) (cadr t1)))) (polar p0 (angle p0 p1) (/ (distance p0 p1) 2)) ) (defun c:Txt2Blk (/ savOSmode savAttdia savAttreq blkName ss i ent e p10 text) (vl-load-com) (setvar "cmdecho" 0) ; disable command echo (command "._undo" "_begin") (setq savOSmode (getvar "osmode")) ; save osnap (setq savAttdia (getvar "attdia")) ; save attdia (setq savAttreq (getvar "attreq")) ; save attreq (setvar "attdia" 0) ; disable attribute dialog (setvar "attreq" 1) ; enable attribute request (if (/= (setq blkName (get_block_name)) "") (if (setq ss (ssget (list '(0 . "*TEXT")))) ; select only *TEXT objects (progn (setvar "osmode" 0) ; disable osnap (setq i -1) (repeat (sslength ss) (setq i (1+ i)) (setq e (entget (setq ent (ssname ss i)))) (setq p10 (get_middle_text_point e)) (setq text (cdr (assoc '1 e))) ;;; (command ".insert" blkName p10 "" "" "" text) ;; ._-insert (command "._-insert" blkName p10 "" "" "" text) ;; ._-insert (entdel ent) ); repeat (setvar "osmode" savOSmode) ); progn ); if ); if (setvar "attdia" savAttdia) ; restore attdia (setvar "attreq" savAttreq) ; restore attreq (command "._undo" "_end") (setvar "cmdecho" 1) ; restore command echo (princ) ); defun Autodesk Expert Elite Team
Steven Posté(e) le 8 août 2016 Auteur Posté(e) le 8 août 2016 oui Cool :P Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
didier Posté(e) le 9 août 2016 Posté(e) le 9 août 2016 Coucou à Steven... Je t'ai répondu, qu'est-ce qu'il te faut de plus ????(hihihi) C'est la routine qui insère un bloc "numerodeposte" ? (2009) Amitiés Éternel débutant... Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 9 août 2016 Posté(e) le 9 août 2016 Hello Vieux Hibou Grincheux 1) SVP Eventuellement tu pourrais nous fournir TA routine amelioree ? 2) Ou bien nous faire la Micro-Amelioration sur la routine US que j'ai fournie ? En esperant ta contribution, je te souhaite une excellente journee ... Bye, lecrabe Autodesk Expert Elite Team
didier Posté(e) le 9 août 2016 Posté(e) le 9 août 2016 Coucou Allez ! je vais me fendre d'une amélioration et peut-être que la populace cessera de persiflerLà didier, tu te remets à délirer, retourne chez ton psy et vite fait !!!! Blague à part, j'ai rajouté une ligne à cette routine qui date quelque peu Ça fonctionne même si aujourd'hui on fait plus "propre" en termes de code... (setq jeusel (ssget )) (setq n 0) (repeat (sslength jeusel) (setq ent (ssname jeusel n)) (command "_insert" "numerodeposte" (cdr(assoc 10 (entget ent))) "" "" (* (/ (- (* pi 2.0) (cdr(assoc 50 (entget ent)))) pi)200.0) (cdr(assoc 1 (entget ent))) ) (setq n ( + 1 n)) (entdel ent) ) Il faut que le bloc "numerodeposte" existe dans le dessin, y'a pas de contrôles. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Steven Posté(e) le 9 août 2016 Auteur Posté(e) le 9 août 2016 Salut à tous, Le lisp que Didier m'avait fait il y a quelques années est celui en pièce jointe.TAT.lsp Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
didier Posté(e) le 9 août 2016 Posté(e) le 9 août 2016 Coucou Il est tout à fait possible que ce soit moi qui te l'ai fait passer mais il est clair que je n'en suis pas l'auteurJ'avais retrouvé dans mes archives une routine faite pour Toi et (celle-là de moi) et c'est de cette dernière que je suis parti pour te filer le code du message #7. Tiens-nous au courant si ça fonctionne ou pas. Amitiés Éternel débutant... Mon site perso : Programmer dans AutoCAD
Steven Posté(e) le 10 août 2016 Auteur Posté(e) le 10 août 2016 Salut à tous, Bon, je ne sais plus trop où j'en suis, là, entre le lisp fourni par lecrabe, le mien et la ligne de Didier à rajouter. Donc, J'ai des numéros de trame rayonnants sur des façades courbes: http://pix.toile-libre.org/upload/img/1470830083.png Ces numéro de trames sont actuellement sous forme de texte.Je souhaite transformer ces textes sous forme de bloc avec attribut. Le isp fourni par le crabe transforme bien les textes en bloc avec attribut mais ceux-ci ne conservent pas l'orientation d'origine des textes et se mettent à l'horizontale. Le lisp que m'avait fourni Didier, que j'ai aussi mis à disposition, transforme aussi les textes en bloc mais l'orientation n'est pas, non plus, conservé. Je ne sais pas où rajouter la ligne que Didier a mis à disposition. Bref, je suis un peu dans le vague :mellow: Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
Patrick_35 Posté(e) le 10 août 2016 Posté(e) le 10 août 2016 Salut Tu ajoutes cette ligne (cons 50 (dxf 50 en)) ; *************** Insert the block ****** (entmake (list '(0 . "INSERT") '(100 . "AcDbEntity") (cons 8 lyr) '(100 . "AcDbBlockReference") '(66 . 1) (cons 2 bname) (cons 10 ins-pt) ) ;_ list ) ;_ entmake (entmake (list '(0 . "ATTRIB") '(100 . "AcDbEntity") (cons 8 lyr) '(100 . "AcDbText") (cons 10 ins-pt) (cons 40 txt-ht) (cons 50 (dxf 50 en)) (cons 1 txt-str) (cons 7 txt-style) '(100 . "AcDbAttribute") (cons 2 t-str) '(70 . 0) ) ;_ list ) ;_ entmake @+ ps : le surlignage ne passe pas dans les balises code Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lecrabe Posté(e) le 10 août 2016 Posté(e) le 10 août 2016 Hello Mr P35 SVP quelle serait la Micro-Amelioration (Recuperer la rotation du Texte dans l'Attribut insere) sur le Lisp (de Moshe) que j'ai fourni ? Merci d'avance, Bye, lecrabe Autodesk Expert Elite Team
Patrick_35 Posté(e) le 10 août 2016 Posté(e) le 10 août 2016 Salut Lecrabe Ton lisp ne fonctionne pas correctement.Déjà il demande un bloc existant.Si le bloc a des attributs, le remplissage n'est pas correcte.Si le bloc n'a pas d'attributs, et bien le texte est remplacé par le bloc. Sinon, il faut logiquement remplacer(command "._-insert" blkName p10 "" "" "" text) ;; ._-insert par(command "._-insert" blkName p10 "" "" (* 180.0 (/ (cdr (assoc 50 e)) pi)) text) ;; ._-insert @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lecrabe Posté(e) le 10 août 2016 Posté(e) le 10 août 2016 Hello Mr P35 Je ne te suis pas bien ! ... Il est sur qu'il n'est pas parfait !! Mais je l'ai deja utilise sur un Bloc avec UN SEUL attribut (deja defini dans le DWG) et dans CE cas, je trouve qu'il fonctionne bien !? Sinon MERCI pour la ligne que je vais implementer ... Bye, lecrabe Autodesk Expert Elite Team
Steven Posté(e) le 13 août 2016 Auteur Posté(e) le 13 août 2016 Salut Tu ajoutes cette ligne (cons 50 (dxf 50 en)) ; *************** Insert the block ****** (entmake (list '(0 . "INSERT") '(100 . "AcDbEntity") (cons 8 lyr) '(100 . "AcDbBlockReference") '(66 . 1) (cons 2 bname) (cons 10 ins-pt) ) ;_ list ) ;_ entmake (entmake (list '(0 . "ATTRIB") '(100 . "AcDbEntity") (cons 8 lyr) '(100 . "AcDbText") (cons 10 ins-pt) (cons 40 txt-ht) (cons 50 (dxf 50 en)) (cons 1 txt-str) (cons 7 txt-style) '(100 . "AcDbAttribute") (cons 2 t-str) '(70 . 0) ) ;_ list ) ;_ entmake @+ ps : le surlignage ne passe pas dans les balises code Salut Patrick_35, J'ajoute cette ligne dans le lisp fourni par lecrabe ou celui que m'avait fourni Didier? Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
didier Posté(e) le 14 août 2016 Posté(e) le 14 août 2016 Coucou Je ne comprends pas bien ta demandeCe qu'il y a dans le message 7 est opérationnelRien à rajouter par toi, je l'ai déjà fait Tiens-moi au courant mon copain Éternel débutant... Mon site perso : Programmer dans AutoCAD
Patrick_35 Posté(e) le 14 août 2016 Posté(e) le 14 août 2016 Salut Patrick_35, J'ajoute cette ligne dans le lisp fourni par lecrabe ou celui que m'avait fourni Didier?Salut Dans le lisp que tu as joint. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Steven Posté(e) le 17 août 2016 Auteur Posté(e) le 17 août 2016 Coucou Je ne comprends pas bien ta demandeCe qu'il y a dans le message 7 est opérationnelRien à rajouter par toi, je l'ai déjà fait Tiens-moi au courant mon copain Salut Didier, J'ai ajouté la ligne que tu as indiqué.J'ai créé un bloc "numerodeposte" pour que celui-ci existe dans le dessin et quand je charge le lisp, je dois sélectionner des objets. je sélectionne mes objets Texte et ceux-ci sont remplacés par le bloc "numerodeposte" mais avec une autre orientation. Salut Dans le lisp que tu as joint. @+ Salut Patrick_35, J'ao bien ajouté ton code au lisp que j'ai fourni mais ça ne fonctionne toujours pas. Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
Steven Posté(e) le 17 août 2016 Auteur Posté(e) le 17 août 2016 Bon, je n'y arrive pas. Laissez tomber, de toute façon, je me suis pris la tête pour rien, j'ai utilisé la commande "Rechercher" pour remplacer une partie des numéros de trame par une autre. Je n'avais pas besoin de remplacer les textes par un bloc avec attributs. Il va vraiment falloir que je me prenne des vacances... Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
Patrick_35 Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Salut C'est juste la ligne (cons 50 (dxf 50 en)) à ajouter dans le lisp que tu as fournit.J'ai donné un morceau de code plus complet pour indiquer où mettre cette ligne. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Steven Posté(e) le 17 août 2016 Auteur Posté(e) le 17 août 2016 Salut C'est juste la ligne (cons 50 (dxf 50 en)) à ajouter dans le lisp que tu as fournit.J'ai donné un morceau de code plus complet pour indiquer où mettre cette ligne. @+ Aaaaah, d'accooooord.Je comprends mieux, maintenant le :ps : le surlignage ne passe pas dans les balises code En effet, ça marche tout de suite mieux :D Merci ;) Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
didier Posté(e) le 17 août 2016 Posté(e) le 17 août 2016 Coucou C'est pas normal !Tu peux faire passer une partie du fichier dessin pour comprendre ? Amitiés Éternel débutant... Mon site perso : Programmer dans AutoCAD
Steven Posté(e) le 17 août 2016 Auteur Posté(e) le 17 août 2016 Coucou C'est pas normal !Tu peux faire passer une partie du fichier dessin pour comprendre ? Amitiés Salut Didier, Le voici ;)TRAME.zip Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
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