var firstPoint = true;
var pointDepart = new Array();
var pointArrive = new Array();
var pointOrigine = new Array();
var lastLine = new Array();
var newLine = new Array();
var type = 'line';
function init()
{
ieCanvasInit();
xAddEventListener('drawing', 'click', onMouseclick, false);
xAddEventListener('drawing', 'mousemove', onMousemove, false);
document.getElementById("download").value = "";
document.getElementById("point_x").focus();
}
function scanTouche(evenement)
{
var reCarSpeciaux = /[\x00\x08\x0D\x03\x16\x18\x1A]/;
var reCarValides = /\d/;
var codeDecimal = codeTouche(evenement);
var car = String.fromCharCode(codeDecimal);
var autorisation = reCarValides.test(car) || reCarSpeciaux.test(car) || pressePapierNS6(evenement,car);
return autorisation;
}
function codeTouche(evenement)
{
for (prop in evenement)
{
if(prop == 'which') return(evenement.which);
}
return(evenement.keyCode);
}
function pressePapierNS6(evenement,touche)
{
var rePressePapierNS = /[cvxz]/i;
var isModifiers = false
for (prop in evenement) if (prop == 'ctrlKey') isModifiers = true;
if (isModifiers) return evenement.ctrlKey && rePressePapierNS.test(touche);
else return false;
}
function scanChamp(objChamp)
{
var reContenuValide = /^\d*$/; //Que des chiffres
if (!reContenuValide.test(objChamp.value))
{
objChamp.value = '';
objChamp.focus();
}
}
function onMousemove(evt)
{
var e = new xEvent(evt);
document.getElementById('pos_x').innerHTML = e.offsetX;
document.getElementById('pos_y').innerHTML = Math.abs(e.offsetY - 481);
}
function onMouseclick(evt)
{
var e = new xEvent(evt);
if(type == 'line')
{
document.getElementById('point_x').value = e.offsetX;
document.getElementById('point_y').value = Math.abs(e.offsetY - 481);
}
if(type == 'circle')
{
document.getElementById('center_x').value = e.offsetX;
document.getElementById('center_y').value = Math.abs(e.offsetY - 481);
}
pointArrive['x'] = e.offsetX;
pointArrive['y'] = e.offsetY;
}
function drawlinedxf(start_x, start_y, end_x, end_y, color, linewidth)
{
// ajouter les infos pour faire le DXF dans la textarea
document.getElementById("download").value = document.getElementById("download").value + "LINE\n";
document.getElementById("download").value = document.getElementById("download").value + "8\n";
document.getElementById("download").value = document.getElementById("download").value + "0\n";
document.getElementById("download").value = document.getElementById("download").value + "10\n";
document.getElementById("download").value = document.getElementById("download").value + start_x + ".0\n";
document.getElementById("download").value = document.getElementById("download").value + "20\n";
document.getElementById("download").value = document.getElementById("download").value + Math.abs(start_y-481) + ".0\n";
document.getElementById("download").value = document.getElementById("download").value + "11\n";
document.getElementById("download").value = document.getElementById("download").value + end_x + ".0\n";
document.getElementById("download").value = document.getElementById("download").value + "21\n";
document.getElementById("download").value = document.getElementById("download").value + Math.abs(end_y-481) + ".0\n";
document.getElementById("download").value = document.getElementById("download").value + "0\n";
}
function drawline(start_x, start_y, end_x, end_y, color, linewidth)
{
var ctx = document.getElementById('drawing').getContext('2d');
ctx.strokeStyle = color;
ctx.lineWidth = linewidth;
ctx.beginPath();
ctx.moveTo(start_x, start_y);
ctx.lineTo(end_x, end_y);
ctx.stroke();
}
function drawpoint(x,y, color)
{
var ctx = document.getElementById('drawing').getContext('2d');
ctx.strokeStyle = color;
ctx.lineWidth = 1;
ctx.beginPath();
start_angle = (Math.PI/180)*0;
end_angle = (Math.PI/180)*360;
ctx.arc(x, y, 1, start_angle, end_angle, true);
ctx.stroke();
}
function drawarc(center_x, center_y, radius, start_angle, end_angle, color, linewidth)
{
var ctx = document.getElementById('drawing').getContext('2d');
ctx.strokeStyle = color;
ctx.lineWidth = linewidth;
ctx.beginPath();
start_angle = (Math.PI/180)*start_angle;
end_angle = (Math.PI/180)*end_angle;
ctx.arc(center_x, center_y, radius, start_angle, end_angle, true);
ctx.stroke();
}
function drawarcdxf(center_x, center_y, radius, start_angle, end_angle, color, linewidth)
{
//document.getElementById("download").value = document.getElementById("download").value + "NOUVEL ARC : start : " + start_angle + " - end : " + end_angle + " \n";
if(start_angle == 90)
start_angle = 270;
else
{
if(start_angle == 270)
start_angle = 90;
}
if(end_angle == 90)
end_angle = 270;
else
{
if(end_angle == 270)
end_angle = 90;
}
//document.getElementById("download").value = document.getElementById("download").value + "NOUVEL ARC : start : " + start_angle + " - end : " + end_angle + " \n";
document.getElementById("download").value = document.getElementById("download").value + "ARC\n";
document.getElementById("download").value = document.getElementById("download").value + "8\n";
document.getElementById("download").value = document.getElementById("download").value + "0\n";
document.getElementById("download").value = document.getElementById("download").value + "10\n";
document.getElementById("download").value = document.getElementById("download").value + center_x + ".0\n";
document.getElementById("download").value = document.getElementById("download").value + "20\n";
document.getElementById("download").value = document.getElementById("download").value + Math.abs(center_y-481) + ".0\n";
document.getElementById("download").value = document.getElementById("download").value + "40\n";
document.getElementById("download").value = document.getElementById("download").value + radius + ".0\n";
document.getElementById("download").value = document.getElementById("download").value + "50\n";
document.getElementById("download").value = document.getElementById("download").value + start_angle + ".0\n";
document.getElementById("download").value = document.getElementById("download").value + "51\n";
document.getElementById("download").value = document.getElementById("download").value + end_angle + ".0\n";
document.getElementById("download").value = document.getElementById("download").value + "0\n";
}
function plot()
{
document.getElementById("drawing").style.backgroundImage = 'none';
if((document.getElementById("point_x").value == "") || (document.getElementById("point_y").value ==""))
return false;
if(firstPoint)
{
pointDepart['x'] = parseInt(document.getElementById("point_x").value);
pointDepart['y'] = 481 - parseInt(document.getElementById("point_y").value);
pointOrigine['x'] = parseInt(document.getElementById("point_x").value);
pointOrigine['y'] = 481 - parseInt(document.getElementById("point_y").value);
drawpoint(pointDepart['x'], pointDepart['y'], 'black');
document.getElementById('params').innerHTML = 'Start X : - Start Y : - Radius : - increment ';
firstPoint = false;
}
else
{
if(document.getElementById('offset').checked == true)
{
pointArrive['x'] = pointDepart['x'] + parseInt(document.getElementById('point_x').value);
pointArrive['y'] = pointDepart['y'] - parseInt(document.getElementById('point_y').value);
}
else
{
pointArrive['x'] = parseInt(document.getElementById('point_x').value);
pointArrive['y'] = 481 - parseInt(document.getElementById('point_y').value);
}
drawline(pointDepart['x'], pointDepart['y'], pointArrive['x'], pointArrive['y'], 'black', 1);
if (typeof(newLine) != "undefined")
{
lastLine = new Array();
lastLine['start_x'] = newLine['start_x'];
lastLine['start_y'] = newLine['start_y'];
lastLine['end_x'] = newLine['end_x'];
lastLine['end_y'] = newLine['end_y'];
document.getElementById("angle_radius").disabled = false;
}
newLine = new Array();
newLine['start_x'] = pointDepart['x'];
newLine['start_y'] = pointDepart['y'];
newLine['end_x'] = pointArrive['x'];
newLine['end_y'] = pointArrive['y'];
// si il ne faut pas gérer l'angle alors on peut directement écrire la ligne dans le DXF
if(document.getElementById("angle_radius").value == "")
{
drawlinedxf(pointDepart['x'], pointDepart['y'], pointArrive['x'], pointArrive['y'], 'black', 1);
}
else // si il faut gérer l'angle
{
var R = parseInt(document.getElementById("angle_radius").value);
// calculer les dénivelés des 2 lignes
var X1 = lastLine['end_x'] - lastLine['start_x'];
var Y1 = lastLine['end_y'] - lastLine['start_y'];
var X2 = newLine['end_x'] - newLine['start_x'];
var Y2 = newLine['end_y'] - newLine['start_y'];
// les 2 droites sont perpendiculaires
if (((X1 == 0) || (Y1 == 0)) && ((X2 == 0) || (Y2 == 0)))
{
var alpha1 = 0;
var alpha2 = 0;
var centreRayonX = 0;
var centreRayonY = 0;
var ligneDiagonale = new Array();
ligneDiagonale['start_x'] = lastLine['end_x'];
ligneDiagonale['start_y'] = lastLine['end_y'];
ligneDiagonale['end_x'] = newLine['start_x'];
ligneDiagonale['end_y'] = newLine['start_y'];
if (Y1 == 0)
{
if(X1 > 0)
{
alpha1 = 180;
centreRayonX = lastLine['end_x'] - R;
ligneDiagonale['start_x'] = lastLine['end_x'] - R;
}
else
{
alpha1 = 0;
centreRayonX = lastLine['end_x'] + R;
ligneDiagonale['start_x'] = lastLine['end_x'] + R;
}
}
if (X1 == 0)
{
if(Y1 > 0)
{
alpha1 = 90;
centreRayonY = lastLine['end_y'] - R;
ligneDiagonale['start_y'] = lastLine['end_y'] - R;
}
else
{
alpha1 = 270;
centreRayonY = lastLine['end_y'] + R;
ligneDiagonale['start_y'] = lastLine['end_y'] + R;
}
}
if (Y2 == 0)
{
if(X2 > 0)
{
alpha2 = 0;
centreRayonX = lastLine['end_x'] + R
ligneDiagonale['end_x'] = newLine['start_x'] + R;
}
else
{
alpha2 = 180;
centreRayonX = lastLine['end_x'] - R
ligneDiagonale['end_x'] = newLine['start_x'] - R;
}
}
if (X2 == 0)
{
if (Y2 < 0)
{
alpha2 = 90;
centreRayonY = lastLine['end_y'] - R;
ligneDiagonale['end_y'] = newLine['start_y'] - R;
}
else
{
alpha2 = 270;
centreRayonY = lastLine['end_y'] + R;
ligneDiagonale['end_y'] = newLine['start_y'] + R;
}
}
var startAngle = 0;
var endAngle = 0;
if (((alpha1 == 0) && (alpha2 == 90)) || ((alpha1 == 90) && (alpha2== 0)))
{
startAngle = 180;
endAngle = 90;
}
if (((alpha1 == 90) && (alpha2 == 180)) || ((alpha1 == 180) && (alpha2== 90)))
{
startAngle = 90;
endAngle = 0;
}
if (((alpha1 == 180) && (alpha2 == 270)) || ((alpha1 == 270) && (alpha2== 180)))
{
startAngle = 0;
endAngle = 270;
}
if (((alpha1 == 0) && (alpha2 == 270)) || ((alpha1 == 270) && (alpha2== 0)))
{
startAngle = 270;
endAngle = 180;
}
// effacer les lignes en trop
drawline(lastLine['end_x'], lastLine['end_y'], ligneDiagonale['start_x'], ligneDiagonale['start_y'],'white', 2);
drawline(newLine['start_x'], newLine['start_y'], ligneDiagonale['end_x'], ligneDiagonale['end_y'],'white', 2);
// mettre à jour le DXF
// retirer la fin de la ligne précédente
var txtarea = document.getElementById("download");
var positionDebutSuppression = txtarea.value.lastIndexOf("11\n", txtarea.textLength);
txtarea.value = txtarea.value.substring(0,positionDebutSuppression);
// écrire les nouvelles coordonnées de la fin
document.getElementById("download").value = document.getElementById("download").value + "11\n";
document.getElementById("download").value = document.getElementById("download").value + ligneDiagonale['start_x'] + ".0\n";
document.getElementById("download").value = document.getElementById("download").value + "21\n";
document.getElementById("download").value = document.getElementById("download").value + Math.abs(ligneDiagonale['start_y']-481) + ".0\n";
document.getElementById("download").value = document.getElementById("download").value + "0\n";
// écrire l'arc
drawarcdxf(centreRayonX, centreRayonY, R, startAngle, endAngle, 'black', 1);
// écrire la 2e ligne
drawlinedxf(ligneDiagonale['end_x'], ligneDiagonale['end_y'],pointArrive['x'], pointArrive['y'], 'white', 2);
// dessiner l'arc
drawarc(centreRayonX, centreRayonY, R, startAngle, endAngle, 'black', 1);
}
}
pointDepart = new Array();
pointDepart['x'] = pointArrive['x'];
pointDepart['y'] = pointArrive['y'];
pointArrive = new Array();
}
// redonner le focus à la coordonnée X
document.getElementById("point_x").focus();
document.getElementById("point_x").value = "";
document.getElementById("point_y").value = "";
document.getElementById("angle_radius").value = "";
// changer le texte
document.getElementById("text_start_x").innerHTML = "End X";
document.getElementById("text_start_y").innerHTML = "End Y";
return true;
}
function drawcircle()
{
if((document.getElementById("center_x").value == "") || (document.getElementById("center_y").value =="") || (document.getElementById("radius").value ==""))
return false;
pointArrive['x'] = parseInt(document.getElementById("center_x").value);
pointArrive['y'] = 479 - parseInt(document.getElementById("center_y").value);
// ajouter les infos pour faire le DXF dans la textarea
document.getElementById("download").value = document.getElementById("download").value + "CIRCLE";
document.getElementById("download").value = document.getElementById("download").value + "\n8";
document.getElementById("download").value = document.getElementById("download").value + "\n0";
document.getElementById("download").value = document.getElementById("download").value + "\n10";
document.getElementById("download").value = document.getElementById("download").value + "\n" + parseInt(document.getElementById("center_x").value);
document.getElementById("download").value = document.getElementById("download").value + "\n20";
document.getElementById("download").value = document.getElementById("download").value + "\n" + parseInt(document.getElementById("center_y").value);
document.getElementById("download").value = document.getElementById("download").value + "\n40";
document.getElementById("download").value = document.getElementById("download").value + "\n" + parseInt(document.getElementById("radius").value);
document.getElementById("download").value = document.getElementById("download").value + "\n0\n";
var radius = parseInt(document.getElementById("radius").value);
var ctx = document.getElementById('drawing').getContext('2d');
ctx.beginPath();
var angleArrive = (Math.PI/180)*360;
ctx.arc(pointArrive['x'], pointArrive['y'], radius, 0, angleArrive, true);
ctx.stroke();
pointArrive = new Array();
// redonner le focus à la coordonnée X
document.getElementById("center_x").focus();
document.getElementById("center_x").value = "";
document.getElementById("center_y").value = "";
document.getElementById("radius").value = "";
return true;
}
function roll(id, img)
{
document.getElementById(id).src = './images/' + img;
}
function changetype(newtype)
{
type = newtype;
if ( newtype == 'line')
{
document.getElementById("button1").innerHTML = '
';
document.getElementById("button2").innerHTML = '
';
document.getElementById("params").innerHTML = 'Start X : - Start Y : - Radius : - increment ';
document.getElementById("point_x").focus();
firstPoint = true;
}
if(newtype == 'circle')
{
document.getElementById("button1").innerHTML = '
';
document.getElementById("button2").innerHTML = '
';
document.getElementById("params").innerHTML = 'Center X : - Center Y : - Radius : ';
document.getElementById("center_x").focus();
}
}
function end()
{
drawline(pointDepart['x'], pointDepart['y'], pointOrigine['x'], pointOrigine['y'], 'black', 1);
drawlinedxf(pointDepart['x'], pointDepart['y'], pointOrigine['x'], pointOrigine['y'], 'black', 1);
}