Aller au contenu

[Résolu] Texte toujours "horizontal"


DenisHen

Messages recommandés

Bonjour à tous.

 

Voilà, je cherche à écrire un texte "horizontal", en fait, dans le sens de la lecture, de gauche à droite et non à l'envers...

 

J'ai l'angle en grade (x_alpha) et je cherche à en sortir l'angle "complémentaire pour que mon texte soit dans le "bon sens"...

 

J'ai écris ça, mais si je suis là, c'est que ça ne fonctionne pas...:

  (if (> (angtof x_alpha) (* pi 2))
   (setq x_alpha (angtos (- (angtof x_alpha) (* pi 2)) 2 3))
 ) ;_ Fin de if

L'origine des angles est au NORD (axe des Y) et je tourne dans le sens horaire.

 

En gros, si l'angle est supérieur à 200gr ou inférieur à -200gr, y ajouter un demis-tour.

 

Je ne suis pas très sûr d'être très claire...

 

Si quelqu'un a la solution, un conseil... Je suis preneur...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Première chose : angtof renvoie toujours l'angle en radians avec 0 à l'est et croissant en sens anti-horaire.

Ce sachant, la trigonométrie est ton amie :

 

(if (< (cos (angof x_alpha)) 0.)
 (setq x_alpha (angtos (+ (angof x_alpha) pi) 2 3))
)

 

PS : 2 * pi radians = 360° = 400g

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

Lien vers le commentaire
Partager sur d’autres sites

Que dire... C'est surtout (gile) l'ami des lispeurs... ;)

 

Je n'aurais JAMAIS pensé à passer par le cosinus...

 

Mille mercis... C'est gégnial ! ! !

 

PS : J'ai résolu le problème "d'horizontalité" du texte...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Je parlais de 100gr... Mais j'ai résolu le problème, c'est pour cela que j'ai effacé cette partie de mon poste, sans savoir que tu l'avais lu... :huh:

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Encore une petite question : comment se comporte ton code s'il y a une rotation du SCU ?

 

Car; quand j'ai une rotation de SCU, j'ai, dans un coin du DWG ((vlax-ldata-get "DenisH" "AngSCU")) la constante en grade et orienté au NORD...

 

Comment puis-je l'intégrer dans ton formidable code ? ? ?

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

En règle générale, en programmation, sauf à appeler les commandes avec (command ...) ou ses clones, on travaille toujours en radians, en sens trigonométrique avec le 0 à l'est et dans le SCG ou le SCO pour certaines entités 2D utilisées en 3D (dans des plans non parallèles au plan XY).

Essaye de penser comme ça, ça te simplifiera la vie. Par exemple la propriété Rotation d'un texte d'un bloc etc... (code DXF 50) est toujours exprimée en radians, sens trigo, 0 à l'est dans le SCO de l'entité (le SCO est identique au SCG pour tous les plans parallèles au plan XY).

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour.

 

J'ai tenté quelques trucs pour intégrer la variable SnapAng à ton code, mais rien...

 

Voici ce que j'ai écris et qui ne fonctionne pas :

  (if (< (cos (angtof x_alpha)) (angtos (getvar "snapang") 2 3))
   (setq x_alpha (angtos (+ (angtof x_alpha) pi) 2 3))
 ) ;_ Fin de if

 

Si quelqu'un a un conseil, une astuce... je suis preneur...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne comprends pas ce que tu veux faire (je ne vois pas le rapport avec SNAPANG) mais là, tu compares un cosinus et un angle...

 

Relis ce que je disais réponse #7.

Le code ci-dessous fonctionne quelles que soient les valeurs de ANGDIR, ANGBASE, AUNITS et le SCU courant.

 

(setq ucsAngle (angle '(0. 0. 0.) (getvar 'ucsxdir)))
(if (setq ss (ssget "_X" '((0 . "TEXT") (410 . "Model"))))
 (repeat (setq i (sslength ss))
   (setq texte    (ssname ss (setq i (1- i)))
         rotation (getpropertyvalue texte "Rotation")
   )
   (if (< (cos (- rotation ucsAngle)) 0.)
     (setpropertyvalue texte "Rotation" (+ rotation pi))
   )
 )
)

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

Lien vers le commentaire
Partager sur d’autres sites

Salut (gile), et merci de me répondre.

 

je pense que tu as bien saisi ce que je voulais dire, sauf que j'ai oublié de préciser que je suis toujours en SCU général (je ne pensais pas devoir le souligner, désolé).

 

C'est pour cela que je cherche la valeur de snapang. Habituellement, je fais une rotation de mon dessin mais je reste en SCU général.

 

Car la variable snapang est, de fait, la nouvelle origine de mon angle de référence (qui n'est plus 0).

 

Tout ça pour que mes textes soient toujours orientés de gauche à droite... A l'endroit pour une lecture sans faire le poirier... ;)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Pour comparer des cos ensemble, j'ai essayé ça, mais... Non...

(if (< (cos (+ (angtof x_alpha))) (cos (getvar "snapang")))
 (setq x_alpha (angtos (+ (angtof x_alpha) pi) 2 3))
) ;_ Fin de if

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Le principe est le même, si tu veux utiliser la valeur de SNAPANG comme angle de référence, il suffit de remplacer :

(setq ucsAngle (angle '(0. 0. 0.) (getvar 'ucsxdir)))

par :

(setq snapAngle (getvar 'snapang))

et ucsAngle par snapAngle dans le code donné plus haut.

(setq snapAngle (getvar 'snapang))
(if (setq ss (ssget "_X" '((0 . "TEXT") (410 . "Model"))))
 (repeat (setq i (sslength ss))
   (setq texte    (ssname ss (setq i (1- i)))
         rotation (getpropertyvalue texte "Rotation")
   )
   (if (< (cos (- rotation snapAngle)) 0.)
     (setpropertyvalue texte "Rotation" (+ rotation pi))
   )
 )
)

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous.

 

Voilà, grace à un membre de CadXP (je ne sais plus de qui est ce code qui m'a servi de base) et à Maître (gile), voici un lisp qui récupère l'angle d'une ligne ou celui d'un segment d'une polyligne.

 

Cette routine prend en compte la variable "snapang", pour le cas où le plan aurait une rotation avec le curseur parallèle à la fenêtre AutoCAD.

 

C'est ici

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é