2010-08-07 6 views
1

J'ai deux points qui tracent une ligne lorsqu'ils sont connectés. La ligne peut être à la fois horizontale verticale, verticale ou (le plus souvent) diagonale.Alignement du texte sur le chemin diagonal

Je voudrais essayer le texte le long de ce chemin. J'utilise C# et WinForms, mais je pense que ce n'est pas aussi important qu'un simple code de psuedo qui peut inclure des maths (trig?) Nécessaires pour trouver l'angle du chemin vers lequel aligner le texte.

Répondre

1

Utilisez Math.atan2() pour calculer l'angle. Convertir à partir de radians en degrés en multipliant par 180/Math.Pi. Obtenir le centre de rotation pour RotateTransform() est l'étape critique pour aligner le texte correctement avec la ligne. r * Math.Cos (angle) pour le décalage X à partir du point de départ de la ligne, r * Sin (angle) pour le décalage Y où r est le décalage par rapport au point de départ de la ligne. Ajustez par la hauteur de la police pour l'obtenir au-dessus de la ligne.

+0

Que signifie 'r'? Rotation? – DMan

+0

À quelle distance du point de départ de la ligne vous dessinez le texte. –

+0

J'ai actuellement 'e.Graphics.TranslateTransform (point.X, point.Y);' comme l'endroit pour le point de départ. Cela semble fonctionner sans utiliser Math.Cos/Sin, cependant, il est maintenant sous la ligne dans certains cas. Que suggérez-vous que je fasse toujours au-dessus de la ligne, quel que soit l'angle que je dessine? – DMan

1

Si vous dessinez le texte dans une méthode OnPaint(), vous pouvez essayer (reference):

Graphics g = e.Graphics; // your graphics object. 
float deg = 45F; // an angle, this one is 45 degrees 

g.RotateTransform(deg); 
g.DrawString("slopey text is fun"); 
+0

Merci, cela semble fonctionner. Le seul problème que j'ai actuellement, c'est qu'il fait tourner toutes les lignes et tous les trucs que je dessine, même si je pense que je peux simplement créer un nouvel objet graphique à la place. – DMan

+1

Vous pouvez probablement faire pivoter le texte après avoir dessiné la chaîne avec 'g.RotateTransform (-deg)'. – kbrimington

+0

Cela fonctionne, merci. J'ai multiplié par -1, mais dans le même sens que vous avez posté. – DMan

Questions connexes