let JV = require('../jpc_value_define'); let JpcAreaHelper = { outputArea: function(areaNode, band, unitFactor, rowAmount, rowIdx, colAmount, colIdx, multipleDispCol, multipleColIdx,syncHeight, syncWidth) { let rst = {}, maxMultiColumns = 3; if (multipleDispCol > 0 && multipleDispCol <= maxMultiColumns) { //1. calculate left/right let areaWidth = 1.0 * (band[JV.PROP_RIGHT] - band[JV.PROP_LEFT]) / multipleDispCol; areaWidth = areaWidth / colAmount; let innerLeft = 0.0, innerRight = areaWidth; // if (typeof areaNode[JV.PROP_H_CALCULATION] === "string") { switch (areaNode[JV.PROP_H_CALCULATION]) { case JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE] : innerLeft = (1.0 * areaNode[JV.PROP_LEFT] * areaWidth / JV.HUNDRED_PERCENT); innerRight = (1.0 * areaNode[JV.PROP_RIGHT] * areaWidth / JV.HUNDRED_PERCENT); break; case JV.CAL_TYPE[JV.CAL_TYPE_ABSTRACT] : innerLeft = 1.0 * areaNode[JV.PROP_LEFT] * unitFactor; innerRight = 1.0 * areaNode[JV.PROP_RIGHT] * unitFactor; break; } } else { //颗粒度更加细化的控制,可能左右两边的计算坐标方式都不同 if (areaNode[JV.PROP_H_CALCULATION][JV.PROP_LEFT] === JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE]) { innerLeft = (1.0 * areaNode[JV.PROP_LEFT] * areaWidth / JV.HUNDRED_PERCENT); } else { innerLeft = 1.0 * areaNode[JV.PROP_LEFT] * unitFactor; } if (areaNode[JV.PROP_H_CALCULATION][JV.PROP_RIGHT] === JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE]) { innerRight = (1.0 * areaNode[JV.PROP_RIGHT] * areaWidth / JV.HUNDRED_PERCENT); } else { innerRight = 1.0 * areaNode[JV.PROP_RIGHT] * unitFactor; } } //2. calculate top/bottom let areaHeight = 1.0 * (band[JV.PROP_BOTTOM] - band[JV.PROP_TOP]); areaHeight = areaHeight / rowAmount; let innerTop = 0.0, innerBottom = areaHeight; if (typeof areaNode[JV.PROP_V_CALCULATION] === "string") { switch (areaNode[JV.PROP_V_CALCULATION]) { case JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE] : innerTop = (1.0 * areaNode[JV.PROP_TOP] * areaHeight / JV.HUNDRED_PERCENT); innerBottom = (1.0 * areaNode[JV.PROP_BOTTOM] * areaHeight / JV.HUNDRED_PERCENT); break; case JV.CAL_TYPE[JV.CAL_TYPE_ABSTRACT] : innerTop = 1.0 * areaNode[JV.PROP_TOP] * unitFactor; innerBottom = 1.0 * areaNode[JV.PROP_BOTTOM] * unitFactor; break; } } else { //颗粒度更加细化的控制,可能上下两边的计算坐标方式都不同 if (areaNode[JV.PROP_V_CALCULATION][JV.PROP_TOP] === JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE]) { innerTop = (1.0 * areaNode[JV.PROP_TOP] * areaHeight / JV.HUNDRED_PERCENT); } else { innerTop = 1.0 * areaNode[JV.PROP_TOP] * unitFactor; } if (areaNode[JV.PROP_V_CALCULATION][JV.PROP_BOTTOM] === JV.CAL_TYPE[JV.CAL_TYPE_PERCENTAGE]) { innerBottom = (1.0 * areaNode[JV.PROP_BOTTOM] * areaHeight / JV.HUNDRED_PERCENT); } else { innerBottom = 1.0 * areaNode[JV.PROP_BOTTOM] * unitFactor; } } // let rstLeft = 0.0, rstRight = 0.0, rstTop = 0.0, rstBottom = 0.0; if (syncHeight) { rstBottom = Math.round(1.0 * band[JV.PROP_TOP] + areaHeight * (rowIdx + 1) + innerTop); } else { rstBottom = Math.round(1.0 * band[JV.PROP_TOP] + areaHeight * rowIdx + innerBottom); } if (syncWidth) { rstRight = Math.round(1.0 * band[JV.PROP_LEFT] + areaWidth * (colIdx + 1) + innerLeft + multipleColIdx * areaWidth); } else { rstRight = Math.round(1.0 * band[JV.PROP_LEFT] + areaWidth * colIdx + innerRight + multipleColIdx * areaWidth); } rstLeft = Math.round(1.0 * band[JV.PROP_LEFT] + areaWidth * colIdx + innerLeft + multipleColIdx * areaWidth); rstTop = Math.round(1.0 * band[JV.PROP_TOP] + areaHeight * rowIdx + innerTop); rst[JV.PROP_LEFT] = rstLeft; rst[JV.PROP_RIGHT] = rstRight; rst[JV.PROP_TOP] = rstTop; rst[JV.PROP_BOTTOM] = rstBottom; } return rst; } }; module.exports = JpcAreaHelper;