require("topsin.genmath") var genMath = new GenMath(); function featsToLimits(feats) { feats.forEach(function(item) { if(item.feats) { var polygon = genMath.profile2Polygon(item.feats.join("\n"),0) var res = polygon.reduce(function(a,b){ a.xmin = b.x > a.xmin ? a.xmin : b.x; a.ymin = b.y > a.ymin ? a.ymin : b.y; a.xmax = b.x < a.xmax ? a.xmax : b.x; a.ymax = b.y < a.ymax ? a.ymax : b.y; return a }, { xmin: polygon[0].x, ymin: polygon[0].y, xmax: polygon[0].x, ymax: polygon[0].y }) res.xsize = Math.abs(res.xmax - res.xmin) res.ysize = Math.abs(res.ymax - res.ymin) res.xc = res.xmin + res.xsize/2 res.yc = res.ymin + res.ysize/2 item.limits = res } }) } function changeLine(line, length) { line.xs = Number(line.xs) line.ys = Number(line.ys) line.xe = Number(line.xe) line.ye = Number(line.ye) if (line.xe - line.xs == 0 || line.ye - line.ys == 0) { if (line.xe - line.xs == 0 ) { return { xs: line.xs, ys: line.ys + (line.ye - line.ys > 0 ? -length : length), xe: line.xe, ye: line.ye + (line.ye - line.ys > 0 ? length : -length) } } else { return { xs: line.xs - (line.xe - line.xs > 0 ? length : -length), ys: line.ys, xe: line.xe - (line.xe - line.xs > 0 ? -length : length), ye: line.ye } } } var width = Math.sqrt( (line.xe - line.xs)*(line.xe - line.xs) + (line.ye - line.ys)*(line.ye - line.ys) ) var k = length / width; var x = line.xe - line.xs; var y = line.ye - line.ys; return { xs: line.xs - k * x, ys: line.ys - k * y, xe: line.xe + k * x, ye: line.ye + k * y } }