Aller au contenu

Messages recommandés

Posté(e)

Salut!

 

la réponse est bien-sur oui, mais quel angle? car tu peux avoir plusieurs points dans

ta polyligne, sans qu'ils ne soient alignés.

 

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

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

Posté(e)

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

Posté(e)

Bouducon C'est ENOOOOOOOOOORME !!!! Exactement ce que je cherchais !!!!!!!!!!!!!!!!!!!!!! :o

 

Mais quand je vois ton code, j'étais à des années lumière !!!!! Chapeau bas, l'artiste ! Mille merci et... respect ! :D

Posté(e)

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.

Posté(e)

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

Posté(e)

Voilà le résultat : je suis dans mon SCU VUE. Si je résonne avec un cercle trigo attaché, les polyligne se trouvant entre 0 et PI/2 et entre PI et 3PI/2 ne permettent pas d'avoir un texte "à l'endroit", le texte est renversé. Bizarre.

 

Vous savez pourquoi ?

Posté(e)

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

Posté(e)

Pour l'orientation, parfait Giles, merci beaucoup. :D :D :D

 

Le seul Hic, c'est dans le quartier 0 à PI/2, la distance de décalage n'est pas respectée, elle est plus grande, exactement 3 fois plus grande !? Normal ça ? :casstet:

 

Merci ;)

Posté(e)

Il faut faire le même test que pour le calcul de l'angle de rotation dans l'expression (polar ...) qui calcule le point d'insertion.

 

Je modifie le code ci dessus.

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

Posté(e)

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

Posté(e)

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

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é