le_chti Posté(e) le 2 février 2008 Posté(e) le 2 février 2008 Bonjour, Je souhaite ecrire du texte en suivant une courbe; et ensuite hachurer ce texte. Pour cela jutilise la fonction arctext dans les express tools. jusque là tout va bien.Par contre, pour avoir le contour du text, je n'arrive pas a utiliser la fonction txtexp:il ne trouve pas d'objet. Je pense que cela vient des proprietes du texte "arcaligned" car txtexp fonctionne bien avec un texte du type "textmult". Avez vous une idée pour faire apparaitre le contour d'un texte qui suis une courbe? D'avance merci pour votre aide. Le chti. [Edité le 2/2/2008 par le_chti]
(gile) Posté(e) le 3 février 2008 Posté(e) le 3 février 2008 Salut, Un petit LISP vite fait.L'utilisateur choisit un texte en arc de cercle, puis spécifie le décalage du cadre par rapport au texte. Le cadre créé est une polyligne fermée. (defun c:cat (/ ent elst ofst r1 r2 start end ang cen) (while (not (and (setq ent (car (entsel))) (setq elst (entget ent)) (= (cdr (assoc 0 elst)) "ARCALIGNEDTEXT") ) ) (princ "\nL'objet sélectionné n'est pas un \"ARCALIGNEDTEXT\"." ) ) (while (not (setq ofst (getdist "\nSpécifiez le décalage du cadre: ")) ) ) (setq r1 (cdr (assoc 40 elst)) start (+ (cdr (assoc 50 elst)) (/ (cdr (assoc 45 elst)) r1) (/ (- ofst) r1) ) end (+ (cdr (assoc 51 elst)) (- (/ (cdr (assoc 46 elst)) r1)) (/ ofst r1) ) ang (/ (- end start) 4.0) r1 (+ r1 (cdr (assoc 44 elst))) r2 (+ r1 (cdr (assoc 42 elst)) ofst) r1 (- r1 ofst) cen (trans (cdr (assoc 10 elst)) 0 (cdr (assoc 210 elst))) ) (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 4) '(70 . 1) (cons 38 (caddr cen)) (cons 10 (polar cen end r1)) (cons 42 (- (/ (sin ang) (cos ang)))) (cons 10 (polar cen start r1)) (cons 10 (polar cen start r2)) (cons 42 (/ (sin ang) (cos ang))) (cons 10 (polar cen end r2)) (assoc 210 elst) ) ) (princ) ) [Edité le 3/2/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
le_chti Posté(e) le 3 février 2008 Auteur Posté(e) le 3 février 2008 Salut Gile,Merci bien pour ton aide. Je viens d'executer ton lisp.Je ne sais pas si je m'y prends correctement, mais lorsque j'indique un decalage de 0 il me cré une polyligne qui encadre tout le texte. Ce que je recherche est de creer une polyligne qui fait le contour de chaque lettre en police arial par exemple et de pourvoir ensuite hachurer l'interieur de chaque caractere. Merci,Le Chti. [Edité le 3/2/2008 par le_chti]
(gile) Posté(e) le 3 février 2008 Posté(e) le 3 février 2008 Je ne sais pas si je m'y prends correctement, mais lorsque j'indique un decalage de 0 il me cré une polyligne qui encadre tout le texte. Oui, tu t'y prends bien, je pensais que c'était ce que tu voulais.Je vais essayer de voir si je peux faire ce que tu demandes. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 3 février 2008 Posté(e) le 3 février 2008 Cecic répond peut-être mieux à ce que tu attends. J'ai laissé le texte décomposé parceque la décomposition du texte d'origine décale plus ou moins certaines lettres. (defun c:catc (/ makebox ent elst ofst ss n) (defun mxv (m v) (mapcar (function (lambda (r) (apply '+ (mapcar '* r v)))) m ) ) (defun makebox (elst ofst / box ref rot plst mat) (setq box (textbox elst) ref (cdr (assoc 10 elst)) rot (cdr (assoc 50 elst)) plst (list (list (- (caar box) ofst) (- (cadar box) ofst)) (list (+ (caadr box) ofst) (- (cadar box) ofst)) (list (+ (caadr box) ofst) (+ (cadadr box) ofst)) (list (- (caar box) ofst) (+ (cadadr box) ofst)) ) mat (list (list (cos rot) (- (sin rot)) 0) (list (sin rot) (cos rot) 0) '(0 0 1) ) plst (mapcar (function (lambda (p) (mapcar '+ (mxv mat p) (list (car ref) (cadr ref))) ) ) plst ) ) (entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") (assoc 8 elst) '(100 . "AcDbPolyline") '(90 . 4) '(70 . 1) (cons 38 (caddr (cdr (assoc 10 elst)))) (assoc 210 elst) ) (mapcar (function (lambda (x) (cons 10 x))) plst) ) ) ) (while (not (and (setq ent (car (entsel))) (setq elst (entget ent)) (= (cdr (assoc 0 elst)) "ARCALIGNEDTEXT") ) ) (princ "\nL'objet sélectionné n'est pas un \"ARCALIGNEDTEXT\"." ) ) (while (not (setq ofst (getdist "\nSpécifiez le décalage du cadre: ")) ) ) (command "_.explode" ent "") (setq ss (ssget "_P")) (repeat (setq n (sslength ss)) (setq elst (entget (ssname ss (setq n (1- n))))) (if (/= (cdr (assoc 1 elst)) " ") (makebox elst ofst) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
le_chti Posté(e) le 3 février 2008 Auteur Posté(e) le 3 février 2008 Merci gile.C'est presque ce que je recherche sauf que le texte devient filaire. En fait je voudrais la meme chose lorsque tu fait un "txtexp" d'un texte crée par "mtxt" en police arial : Le resultat de l'explosion du texte est une polyligne qui decrit le contour de chaque caractere. La fonction "txtexp" fonctionne bien avec du text multiligne mais pas avec du text arcaligned...
(gile) Posté(e) le 3 février 2008 Posté(e) le 3 février 2008 Je n'avais encore pas compris. txtexp des express tools ne fonctionne que sur les objets TEXT ou MTEXT. Les objets ARCALIGNEDTEXT peuvent, eux, être décomposés avec la commande DECOMPOS (_EXPLODE) et donnent un objet TEXT par caractère.Il suffit donc de décomposer le ARCALIGNEDTEXT puis de décomposer le résultat avec txtexp. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
le_chti Posté(e) le 3 février 2008 Auteur Posté(e) le 3 février 2008 ok nikel;merci à toi gile.Domage que txtexp ne fonctionne pas directement avec un arcaligned texte... ;)
(gile) Posté(e) le 3 février 2008 Posté(e) le 3 février 2008 Tu peux te faire une macro dans un bouton ou un menu : ^C^C_.explode;\txtexp;p; Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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