Aller au contenu

arctext + hatch


Messages recommandés

Posté(e)

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]

Posté(e)

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

Posté(e)

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]

Posté(e)

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

Posté(e)

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

Posté(e)

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...

 

 

Posté(e)

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

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é