Il s'agit en quelque sorte d'une suite à la réponse précédente, mais elle apporte un petit plus (espérons-le).
Ce que je veux surtout clarifier, c'est que d'habitude on pense à dessiner des choses comme draw a rectangle at 10, 3
.
Donc si nous pensons à ça comme ça : move origin to 10, 3
entonces draw rectangle at 0, 0
. Il ne nous reste plus qu'à ajouter une rotation entre les deux.
Un autre point important est l'alignement du texte. Il est plus facile de dessiner le texte à 0, 0, donc utiliser l'alignement correct peut nous permettre de le faire sans mesurer la largeur du texte.
Nous devrions toujours déplacer le texte d'un certain montant pour le centrer verticalement, et malheureusement, le canevas ne supporte pas bien la hauteur de ligne, donc c'est une question de supposition et de vérification (corrigez-moi s'il y a quelque chose de mieux).
J'ai créé 3 exemples qui fournissent un point et un texte avec 3 alignements, pour montrer quel est le point réel sur l'écran où la police ira.
var font, lineHeight, x, y;
x = 100;
y = 100;
font = 20;
lineHeight = 15; // this is guess and check as far as I know
this.context.font = font + 'px Arial';
// Right Aligned
this.context.save();
this.context.translate(x, y);
this.context.rotate(-Math.PI / 4);
this.context.textAlign = 'right';
this.context.fillText('right', 0, lineHeight / 2);
this.context.restore();
this.context.fillStyle = 'red';
this.context.fillRect(x, y, 2, 2);
// Center
this.context.fillStyle = 'black';
x = 150;
y = 100;
this.context.save();
this.context.translate(x, y);
this.context.rotate(-Math.PI / 4);
this.context.textAlign = 'center';
this.context.fillText('center', 0, lineHeight / 2);
this.context.restore();
this.context.fillStyle = 'red';
this.context.fillRect(x, y, 2, 2);
// Left
this.context.fillStyle = 'black';
x = 200;
y = 100;
this.context.save();
this.context.translate(x, y);
this.context.rotate(-Math.PI / 4);
this.context.textAlign = 'left';
this.context.fillText('left', 0, lineHeight / 2);
this.context.restore();
this.context.fillStyle = 'red';
this.context.fillRect(x, y, 2, 2);
La ligne this.context.fillText('right', 0, lineHeight / 2);
est en fait 0, 0
sauf que nous déplaçons légèrement le texte pour qu'il soit centré près du point.
0 votes
Avez-vous envisagé d'examiner les solutions graphiques existantes plutôt que d'essayer de créer la vôtre ? flot ( code.google.com/p/flot ) est un exemple qui utilise le canevas.