Salve a tutti.. Ho bisogno di un grossissimo aiuto...
Dallo script qui sotto come potete notare creo un "poligono"..
Adesso io vorrei crearci una selezione che mi <<sezioni>> questo poligono in strisce orizzontali.... come posso fare????![]()
![]()
questo è lo script.
var m_IE = document.all?true:false;
function getMouseXY(e)
{
var tempX = 0;
var tempY = 0;
if (m_IE)
{ // grab the x-y pos.s if browser is IE
tempX = event.clientX + document.body.scrollLeft;
tempY = event.clientY + document.body.scrollTop;
}
else
{ // grab the x-y pos.s if browser is NS
tempX = e.pageX;
tempY = e.pageY;
}
// catch possible negative values in NS4
if (tempX < 0)
{
tempX = 0;
}
if (tempY < 0)
{
tempY = 0;
}
//alert(tempX + ", " + tempY);
result = new Array();
result[0] = tempX;
result[1] = tempY;
return result;
}
//Get an array of matches value
function GetMatches(key, text)
{
try
{
if (key.length > 0 && text.length > 0)
{
var myRe = new RegExp(key , "g");
var arrResult = new Array();
while ((arr = myRe.exec(text)) != null)
{
arrResult.push(arr[0]);
}
return arrResult;
}
else
return "";
}
catch(e)
{
alert("GetMatches");
}
}
function DecToHex(d)
{
try
{
var hD="0123456789ABCDEF";
var h = hD.substr(d&15,1);
while(d>15) {d>>=4;h=hD.substr(d&15,1)+h;}
return h;
}
catch(e)
{
alert("DecToHex");
}
}
function HexToDec(h)
{
try
{
var hex = "0123456789ABCDEF";
var esp = h.length;
var valore = 0;
var result = 0;
for (iii=0; iii<h.length; iii++)
{
valore = hex.indexOf(h.substring(iii,iii+1)) * Math.pow(16,esp-(iii+1));
result = result + valore;
}
if (result < 0)
return "";
return result;
}
catch(e)
{
return alert(e.description);
}
}
/////////////////////////////////////////////////////////////
//////////////////Atlas BAIMage function//////////////////
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
//////////////////CallBack BAIMage function//////////////////
/////////////////////////////////////////////////////////////
//function GetDvg(field)
//{
// CallBackDvg(field,"");
//}
////DVG Cache
//var _arrDgv;
//function JavaScriptCallBackDvg(dvg, context)
//{
// try
// {
// var key = dvg.substring(0, 7);
// _arrDgv = new Array();
// _arrDgv[key] = dvg;
// }
// catch(e)
// {
// alert("JavaScriptCallBackDvg");
// }
//}
//var strDVG = "<Color [A=255, R=160, G=15, B=0]>:14A:::149:145:143:13A:130:12C:12A:121:11D::11E:1 23:128:12F:133:135:137:135:12E::12F:134:140::145:: 141:147:;64;6D;76;77;82;83;85;8E;99;A4;A6;A5;A4;A0 ;96;8C;83;78;6C;60;54;52;4F;4B;4C;4D;4E;58;59;5D;6 3;<Color [A=255, R=136, G=19, B=0]>:12B:130:131:133:132:12E:127:122:11D:11C:112:108: 100:FD:FE:100:102:103:104:105:104:103::10C:115:11E :123:;55;60;69;72;78;83;8C;96;A0;;A3;A6;A7;A5;A0;9 4;88;7C;73;69;60;57;52;;;;53;";
//alert(ReBuildDVG(strDVG));
function ReBuildDVG( DVG )
{
var arrTag;
var arrStringa;
var oldX = 0;
var oldY = 0;
var pointX;
var pointY;
var elem;
arrTag = DVG.split("<");
arrTag.splice(0,1);
for(conta=0; conta<arrTag.length; conta++)
{
arrStringa = arrTag[conta].split(":");
for(i=0; i<arrStringa.length; i++)
{
if (arrStringa[i].indexOf(">") < 0 && arrStringa[i].indexOf(";") < 0)
{
pointX = arrStringa[i];
if (oldX === 0)
{
oldX = pointX;
pointX = HexToDec(oldX);
oldX = pointX;
}
else
{
pointX = (pointX === null || pointX === undefined || pointX.length === 0) ? oldX : HexToDec(pointX.toString());
oldX = pointX;
}
arrStringa[i] = pointX;
}
}
arrTag[conta] = arrStringa.join(":");
arrStringa = arrTag[conta].split(";");
for(i=0; i<arrStringa.length; i++)
{
if (arrStringa[i].indexOf(">") < 0 && arrStringa[i].indexOf(":") < 0)
{
pointY = arrStringa[i];
if (oldY === 0)
{
oldY = pointY;
pointY = HexToDec(oldY);
oldY = pointY;
}
else
{
pointY = (pointY === null || pointY === undefined || pointY.length === 0) ? oldY : HexToDec(pointY.toString());
oldY = pointY;
}
arrStringa[i] = pointY;
}
}
arrTag[conta] = arrStringa.join(";");
}
DVG = arrTag.join("<");
return DVG;
}
//alert(HexToDec("224"));
/////////////////////////////////////////////////////////////
//////////////////Graphics function//////////////////
/////////////////////////////////////////////////////////////
function AddRemovePoligon(sElement /*elementName string*/, bRemove /*bool*/)
{
try
{
var xStart, yStart, xEnd, yEnd;
var i = 0;
if(!bRemove)
{
_canvas = new Canvas("paintarea")
var arrX = _arrPointsX[sElement + "x"];
var arrY = _arrPointsY[sElement + "y"];
for(i=0; i<arrX.length-1; i++)
{
xStart = parseInt(arrX[i]);
yStart = parseInt(arrY[i]);
xEnd = parseInt(arrX[i+1]);
yEnd = parseInt(arrY[i+1]);
//alert("(" + xStart + ", " + yStart + ")" + ";" + "(" + xEnd + ", " + yEnd + ")");
//if(!isNaN(x) && !isNaN(y))
//{
var line= new Line();
line.setLineWidth(2);
line.setColor(new Color(255,0,120));
line.setStartPoint(xStart, yStart);
line.setEndPoint(xEnd, yEnd);
_canvas.addFigure(line);
_arrLine.push(line);
//}
}
}else
{
for(i=0; i<_arrLine.length; i++)
{
_canvas.removeFigure(_arrLine[i]);
}
_canvas = null;
_arrLine.length = 0;
}
}
catch(e)
{
alert(e.description);
}
}
function GetPathArr(sDvg /* fildvg */, sCol /* tag color */)
{
var result;
var iStart = sDvg.indexOf(sCol) + sCol.length;
var iEnd = sDvg.indexOf("<", iStart);
result = sDvg.substring(iStart, iEnd);
return result.split("|");
}
//////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////InsidePolygon//////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////***Sample***///////////
//var m_arrPointsX = new Array();
//var m_arrPointsY = new Array();
//var m_vertexNumber = 4;
//var m_pointX = 3;
//var m_pointY = 3;
//m_arrPointsX[0] = 2;
//m_arrPointsX[1] = 2;
//m_arrPointsX[2] = 4;
//m_arrPointsX[3] = 4;
//m_arrPointsX[4] = 2;
//m_arrPointsY[0] = 2;
//m_arrPointsY[1] = 4;
//m_arrPointsY[2] = 4;
//m_arrPointsY[3] = 2;
//m_arrPointsY[4] = 2;
//alert(InsidePolygon(m_arrPointsX, m_arrPointsY, m_vertexNumber, m_pointX, m_pointY));
/////////////////////////////////
function InsidePolygon(arrPointsX /* x points array */, arrPointsY /* y points array */
, vertexNumber /* number of vertex */, pointX /* x point to match */, pointY /* y point to match */)
{
//
// InsidePoint definisce la posizione di un punto rispetto
// a un poligono (interno o esterno)
//
// input arrPointsX = ascisse vertici del poligono
// arrPointsY = ordinate vertici poligono
// vertexNumber = nr. vertici poligono
// pointX & pointY = coord. punto
//
// output loc
//
// return 0 n. vertici < 3
// return 1 il punto e' esterno al poligono
// return 2 il punto coincide con un vertice
// return 3 il punto sta sulla frontiera del poligono
// return 4 il punto e' interno al poligono
//
var i = 0;
var theta = 0;
var alfa = 0;
var xnew = 0;
var ynew = 0;
var pi = 4 * Math.atan(1);
var angle = 0;
if (vertexNumber < 3)
{
return 0; // poligono inesistente
}
for (i = 0; i <= vertexNumber; i++)
{
if (pointX == arrPointsX[i] && pointY == arrPointsY[i])
{
return 2;
}
}
arrPointsX[vertexNumber] = arrPointsX[0]; // forza la chisura del poligono
arrPointsY[vertexNumber] = arrPointsY[0]; //
for (i=0; i<vertexNumber; i++)
{
theta = Math.atan2(arrPointsY[i] - pointY, arrPointsX[i] - pointX)
xnew = (arrPointsX[i + 1] - pointX) * Math.cos(theta) + (arrPointsY[i + 1] - pointY) * Math.sin(theta)
ynew = (arrPointsY[i + 1] - pointY) * Math.cos(theta) - (arrPointsX[i + 1] - pointX) * Math.sin(theta)
alfa = Math.atan2(ynew, xnew)
if (Math.abs(alfa/10000) == Math.abs(pi/10000))
{
return 3; // punto sul lato del poligono
}
angle = angle + alfa;
}
if (Math.abs(angle) < 0.0001)
return 1; // Punto esterno
if (Math.abs(angle) > pi)
return 4; // punto interno
}
/////////////////////////////////////////////////////////////////////////////////////////////
Grazie in anticipo a tutti.. e spero che qualcuno possa darmi un aiuto!:master: