Aller au contenu

Récupérer angle polyligne


jeanmi66

Messages recommandés

Haaa zut, j'essai mais j'y arrive pas !!!! :(

 

En fait, j'ai des polylignes 2D et un texte simple que j'aimerai copier à certains endroits entre chaque pt constituant la polyligne. Ce serai l'équivalent d'une copie multiple. Mon idée était donc de récupérer dans une variable l'angle entre deux points mais je vois pas comment le rentrer dans une routine de copie multiple !

 

Quelqu'un peut m'aider svp ?

 

Merci, je continue à chercher en attendant...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Merci, je continue à chercher en attendant...

 

Je ne t'ai pas trop laissé cherché...

D'après tes souhaits, ceci aurai l'air de convenir.

 

(defun c:MultCopyAlign_text ( / js offset_txt vla_txt p_ent vla_po vla_obj pt deriv alpha)
 (princ "\nSélectionner le textes à copier/aligner de façon multiple. ")
 (while (null (setq js (ssget "_+.:E:S" '((0 . "TEXT"))))))
 (initget 7)
 (setq offset_txt (getdist "\nDistance de décalage du texte: "))
 (vl-load-com)
 (setq vla_txt (vlax-ename->vla-object (ssname js 0)))
 (while (setq p_ent (entsel "\nSélectionner la polyligne2D: "))
   (cond
     ((eq (cdr (assoc 0 (entget (car p_ent)))) "LWPOLYLINE")
       (setq
         vla_po (vlax-ename->vla-object (car p_ent))
         vla_obj (vlax-invoke-method vla_txt 'Copy)
         pt (vlax-curve-getClosestPointTo vla_po (cadr p_ent))
         deriv (vlax-curve-getfirstderiv vla_po (vlax-curve-getparamatpoint vla_po pt))
         alpha (- (atan (cadr deriv) (car deriv)) (angle '(0 0 0) (getvar "UCSXDIR")))
       )
       (vlax-put vla_obj 'Alignment 1)
       (vlax-put vla_obj 'Rotation (if (or (> alpha (* pi 0.5)) (< alpha (- (* pi 0.5)))) (+ alpha pi) alpha))
       (vlax-put vla_obj 'TextAlignmentPoint
         (polar pt (+ alpha (* pi 0.5))
           (if (or (> alpha (* pi 0.5)) (< alpha (- (* pi 0.5))))
             (+ (vlax-get vla_obj 'Height) offset_txt)
             offset_txt
           )
         )
       )
     )
     (T (princ "\nN'est pas une polyligne2D!"))
   ) 
 )
 (prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Une petite précision par rapport au dernier prog de BONUSCAD dans le message précédent...

 

Je travaille souvent en SCU VUE. Dans ce scu, je me débrouille pour que mon dessin (en vue de dessus) soit tjs orienté de manière à avoir l'axe Y du SCU GENERAL entre -PI/2 et +PI/2 d'un cercle trigo, dans ma vue (j'espère être clair).

 

Ce qui fait que les orientation de texte ne prennent pas en compte la différence angulaire entre les deux SCU.

 

Je croyais que je devais changer la variable UCSXDIR en UCSVIEW mais là, le prog de BONUSCAD marche plus. Je dois zapper un truc. Un petit coup de main des maîtres de cet univers svp ?

 

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Si j'ai bien compris, ça n'a rien à voir avec la vue courante, le texte devant s'aligner à la polyligne.

Il y a juste quelques petits oublis de la part de bonuscad.

Les fonctions vlax-curve-* fonctionnent toujours en coordonnées SCG alors que le point retourné par (cadr (entsel)) est en coordonnées SCU courant.

 

Il faut donc remplacer :

(vlax-curve-getClosestPointTo vla_po (cadr p_ent))

par :

(vlax-curve-getClosestPointTo vla_po (trans (cadr p_ent) 1 0))

 

Et dans le même esprit vlax-curve-getFirstDeriv retourne un vecteur défini dans le SCG, donc il est inutile de prendre en compte UCSXDIR.

Remplacer :

(- (atan (cadr deriv) (car deriv)) (angle '(0 0 0) (getvar "UCSXDIR")))

par :

(atan (cadr deriv) (car deriv))

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

J'ai modifié le code de bonuscad, le texte devrait s'afficher "à l'endroit" suivant la vue courante.

 

(defun c:MultCopyAlign_text (/	      js       offset_txt
		     vla_txt  p_ent    vla_po	vla_obj
		     pt	      deriv    alpha
		    )
 (princ
   "\nSélectionner le textes à copier/aligner de façon multiple. "
 )
 (while (null (setq js (ssget "_+.:E:S" '((0 . "TEXT"))))))
 (initget 7)
 (setq offset_txt (getdist "\nDistance de décalage du texte: "))
 (vl-load-com)
 (setq vla_txt (vlax-ename->vla-object (ssname js 0)))
 (while (setq p_ent (entsel "\nSélectionner la polyligne2D: "))
   (cond
     ((eq (cdr (assoc 0 (entget (car p_ent)))) "LWPOLYLINE")
      (setq
 vla_po	 (vlax-ename->vla-object (car p_ent))
 vla_obj (vlax-invoke-method vla_txt 'Copy)
 pt	 (vlax-curve-getClosestPointTo vla_po [surligneur](trans (cadr p_ent) 1 0))[/surligneur]
 deriv	 (vlax-curve-getfirstderiv
	   vla_po
	   (vlax-curve-getparamatpoint vla_po pt)
	 )
 alpha	 [surligneur](angle '(0 0 0) deriv)[/surligneur]
      )
      (vlax-put vla_obj 'Alignment 1)
      (vlax-put vla_obj
	 'Rotation
	[surligneur] (if (minusp (cos (+ alpha (getvar "VIEWTWIST"))))[/surligneur]
	   (+ alpha pi)
	   alpha
	   )
      )
      (vlax-put
 vla_obj
 'TextAlignmentPoint
 (polar	pt
	(+ alpha (* pi 0.5))
	[surligneur] (if (minusp (cos (+ alpha (getvar "VIEWTWIST"))))[/surligneur]
	  (+ (vlax-get vla_obj 'Height) offset_txt)
	  offset_txt
	)
 )
      )
     )
     (T (princ "\nN'est pas une polyligne2D!"))
   )
 )
 (prin1)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Il y a juste quelques petits oublis de la part de bonuscad.

 

Gentil de ta part, je ne maitrise pas tout simplement aussi bien la 3D que toi.

 

J'ai encore du mal à solutionner simplement (car je voudrais le faire simple et concis) les problèmes de 3D.

 

Je n'ai toujours pas compris et intégré la notion de l'axe arbitraire utilisé par Autocad. (bon je ne m'y penche pas souvent, la cafetière a du mal à suivre)

 

Je pense que si le jour arrive, TILT!, la remise en écriture des codes que j'ai pu faire sera indispensable.

 

Je m'en remet donc à toi pour la correction concernant la 3D et t'en remercie. Car mes résolutions restent encore tortueuses et fumeuses.

 

Enfin comme dirais l'autre: Je l'aurais un jour, je l'aurais

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Je ne voulais rien insinuer de "méchant" en disant qu'il y avait des oublis : moi, en lisp je m'y met quand j'ai 5 minutes, entre les gamins et le boulo pas facile. Je vous fais donc confiance à vous tous qui êtes forcément meilleur que moi dans ce domaine ;-)

 

Mes remerciements sont sincères. :D

Lien vers le commentaire
Partager sur d’autres sites

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é