Bonsoir!... ou bonjour! (selon).
Voilà passer des heures a essayer de faire un prototype d'un rectangle avec coins arrondis.
Mais j'ai beau relire et relire mon code, je vois pas ou se trouve le/les erreurs...
Là ça me donne juste un trait qui part du haut gauche de la scène et qui (apparament) s'arrête au premier point de mon premier angle...
Si quelqu'un a du courage...:
MovieClip.prototype.dRCA=function(largeur,hauteur,arrondi,rotation,x,y){
//on invoque la méthode (dRCA=dessin rectangle coins arrondis) if(largeur<(arrondi*2)){
largeur=arrondi*2;
}
if(hauteur<(arrondi*2)){
hauteur=arrondi*2;
}
//il faut que la dimension du rectangle soit au moins aussi large que les coins... rotation=Math.PI*rotation/180;
//on convertit la rotation de degrés en radians var r=Math.sqrt(Math.pow(largeur/2,2)+Math.pow(hauteur/2,2));
//on calcule la distance du centre au coin réel (virtuel) du rectangle var rx=Math.sqrt(Math.pow(largeur/2,2)+Math.pow((largeur/2)-arrondi,2));
//on calcule la distance du centre au bord extérieur du coin inférieur droit var ry=Math.sqrt(Math.pow((largeur/2)-arrondi,2)+Math.pow(hauteur/2,2));
//on calcule la distance du centre au bord intérieur du coin inférieur droit var r1Angle=Math.atan(((hauteur/2)-arrondi)/(largeur/2));
var r2Angle=Math.atan((hauteur/2)/(largeur/2))-r1Angle;
var r3Angle=Math.atan(((largeur/2)-arrondi)/(hauteur/2));
var r4Angle=(Math.PI/2)-r1Angle-r2Angle-r4Angle;
//r1Angle est l'angle compris entre l'axe des X qui passe par le centre et la ligne rx
//r2Angle est l'angle compris entre rx et r
//r3Angle est l'angle compris entre r et ry
//r4Angle est l'angle compris entre ry et l'axe des Y qui passe par le centre var ctrl1Dist=Math.sqrt(2*Math.pow(arrondi,2));
//on calcule la distance du point de contrôle au centre de l'arrondi var ctrl1X,ctrl1Y;
//déclaration des variables pour calculer le point de contrôle rotation+=r1Angle+r2Angle+r3Angle;
var x1=x+ry*Math.cos(rotation);
var y1=y+ry*Math.sin(rotation);
//on calcule le point de départ du premier côté this.moveTo(x1,y1);
rotation+=2*r4Angle;
x1=x+ry*Math.cos(rotation);
y1=y+ry*Math.sin(rotation);
this.lineTo(x1,y1);
//on trace le segment rotation+=r3Angle+r2Angle;
x1=x+rx*Math.cos(rotation);
y1=y+rx*Math.sin(rotation);
//définit rotation au point de départ du second segment
//on calcule les coordonnées x,y if(arrondi>0){
ctrl1x=x+r*Math.cos(rotation-r2Angle);
ctrl1Y=y+r*Math.sin(rotation-r2Angle);
this.curveTo(ctrl1X,ctrl1Y,x1,y1);
//si les coins sont arrondis,on calcule le point de contrôle et on dessine la courbe }
rotation+=2*r1Angle;
x1=x+rx*Math.cos(rotation);
y1=y+rx*Math.sin(rotation);
this.lineTo(x1,y1);
//point terminal du second côté rotation+=r2Angle+r3Angle;
x1=x+ry*Math.cos(rotation);
y1=y+ry*Math.sin(rotation);
//on calcule le point de départ du troisième côté if(arrondi>0){
ctrl1X=x+r*Math.cos(rotation-r3Angle);
ctrl1Y=y+r*Math.sin(rotation-r3Angle);
this.curveTo(ctrl1X,ctrl1Y,x1,y1);
//dessine le coin arrondi (si besoin) }
rotation+=2*r4Angle;
x1=x+ry*Math.cos(rotation);
y1=y+ry*Math.sin(rotation);
this.lineTo(x1,y1);
//on calcule le point terminal du troisième côté rotation+=r3Angle+r2Angle;
x1=x+rx*Math.cos(rotation);
y1=y+rx*Math.sin(rotation);
//point de départ du quatrième côté if(arrondi>0){
ctrl1X=x+r*Math.cos(rotation-r2Angle);
ctrl1Y=y+r*Math.sin(rotation-r2Angle);
this.curveTo(ctrl1X,ctrl1Y,x1,y1);
//dessine le coin si besoin }
rotation+=2*r1Angle;
x1=x+rx*Math.cos(rotation);
y1=y+rx*Math.sin(rotation);
this.lineTo(x1,y1);
//on calcule le point terminal du quatrième côté rotation+=r3Angle+r2angle;
x1=x+ry*Math.cos(rotation);
y1=y+ry*Math.sin(rotation);
if(arrondi<0){
ctrl1X=x+r*Math.cos(rotation-r3Angle);
ctrl1Y=y+r*Math.sin(rotation-r3Angle);
this.curveTo(ctrl1X,ctrl1Y,x1,y1);
//on calcule le point terminal de l'arrondi et on le dessine si besoin
} };
this.createEmptyMovieClip("monarrondi",1);
monarrondi.lineStyle(1.5,0x000000,100);
monarrondi.dRCA(100,50,15,0,200,200);
Toutes réponses même une simple piste seraient la bien venue...
Mais peut-être qu'il y'a moyen de faire plus simple?
Un Grand Merci à tout ceux qui se pencheront là-dessus!
A++.