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); }