in public/bubblesets.js [1178:1232]
function getRectDistSq(rect, tempX, tempY) {
// test current point to see if it is inside rectangle
if(!rect.containsPt(tempX, tempY)) {
// which edge of rectangle is closest
var outcode = rect.outcode(tempX, tempY);
// top
if((outcode & Rectangle.OUT_TOP) === Rectangle.OUT_TOP) {
// and left
if((outcode & Rectangle.OUT_LEFT) === Rectangle.OUT_LEFT) {
// linear distance from upper left corner
return Point.ptsDistanceSq(tempX, tempY, rect.minX(), rect.minY());
} else {
// and right
if((outcode & Rectangle.OUT_RIGHT) === Rectangle.OUT_RIGHT) {
// linear distance from upper right corner
return Point.ptsDistanceSq(tempX, tempY, rect.maxX(), rect.minY());
} else {
// distance from top line segment
return (rect.minY() - tempY) * (rect.minY() - tempY);
}
}
} else {
// bottom
if((outcode & Rectangle.OUT_BOTTOM) === Rectangle.OUT_BOTTOM) {
// and left
if((outcode & Rectangle.OUT_LEFT) === Rectangle.OUT_LEFT) {
// linear distance from lower left corner
return Point.ptsDistanceSq(tempX, tempY, rect.minX(), rect.maxY());
} else {
// and right
if((outcode & Rectangle.OUT_RIGHT) === Rectangle.OUT_RIGHT) {
// linear distance from lower right corner
return Point.ptsDistanceSq(tempX, tempY, rect.maxX(), rect.maxY());
} else {
// distance from bottom line segment
return (tempY - rect.maxY()) * (tempY - rect.maxY());
}
}
} else {
// left only
if((outcode & Rectangle.OUT_LEFT) === Rectangle.OUT_LEFT) {
// linear distance from left edge
return (rect.minX() - tempX) * (rect.minX() - tempX);
} else {
// right only
if((outcode & Rectangle.OUT_RIGHT) === Rectangle.OUT_RIGHT) {
// linear distance from right edge
return (tempX - rect.maxX()) * (tempX - rect.maxX());
}
}
}
}
}
return 0;
}