import svgObject from "./svgOjbect"
|
import ConstParas from "@/utils/constParas.js"
|
import UnitHelper from "@/utils/unit.js"
|
|
var LxpSpectrumChart = function () {
|
|
var m_svg;//ElementPrototype
|
var m_unit = { Q: 1, H: 0, P: 1 };//功率、流量、扬程单位集合
|
|
|
var m_chartSize;
|
var m_localizationType = 0;//中文zhCN = 0, zhTW = 1, enUS = 2
|
var m_divChartName;//容器DIV名称
|
var m_coordinatePara;//坐标信息
|
|
var svgClick = function (e, svg) {
|
|
};
|
|
var svgMove = function (e, svg) {
|
//alert("svgMove");
|
};
|
|
|
|
//转成Bezier曲线模型
|
var transBezierCurveModel = function (pixelPoints) {
|
if (pixelPoints == null || pixelPoints.length < 4)
|
return null;
|
|
var iPointCout = pixelPoints.length;
|
var a = 0.09;
|
var b = 0.09;
|
var controlPoint = new Array();
|
|
for (var i = 0; i < iPointCout - 1; i++) {
|
var bezier = {};
|
bezier.Point0 = pixelPoints[i];
|
if (i == 0) {
|
var x1 = pixelPoints[i].X + a * (pixelPoints[i + 1].X - pixelPoints[i].X);
|
var y1 = pixelPoints[i].Y + a * (pixelPoints[i + 1].Y - pixelPoints[i].Y);
|
bezier.Point1 = {
|
"X": x1,
|
"Y": y1
|
};
|
}
|
else {
|
var x1 = pixelPoints[i].X + a * (pixelPoints[i + 1].X - pixelPoints[i - 1].X);
|
var y1 = pixelPoints[i].Y + a * (pixelPoints[i + 1].Y - pixelPoints[i - 1].Y);
|
bezier.Point1 = {
|
"X": x1,
|
"Y": y1
|
}
|
}
|
|
if (i == iPointCout - 2) {
|
var x2 = pixelPoints[i + 1].X - b * (pixelPoints[i + 1].X - pixelPoints[i].X);
|
var y2 = pixelPoints[i + 1].Y - b * (pixelPoints[i + 1].Y - pixelPoints[i].Y);
|
bezier.Point2 = {
|
"X": x2,
|
"Y": y2
|
}
|
}
|
else {
|
var x2 = pixelPoints[i + 1].X - b * (pixelPoints[i + 2].X - pixelPoints[i].X);
|
var y2 = pixelPoints[i + 1].Y - b * (pixelPoints[i + 2].Y - pixelPoints[i].Y);
|
bezier.Point2 = {
|
"X": x2,
|
"Y": y2
|
}
|
}
|
|
bezier.Point3 = pixelPoints[i + 1];
|
controlPoint.push(bezier);
|
}
|
return controlPoint;
|
};
|
|
//转成曲线路径
|
var transBezierCurveToPath = function (pixelPoints) {
|
var bezierCurveValue = transBezierCurveModel(pixelPoints);
|
if (bezierCurveValue == null) {
|
return;
|
}
|
var pathValue = new Array();
|
for (var h = 0; h < bezierCurveValue.length; h++) {
|
if (h == 0) {
|
pathValue.push("M ", bezierCurveValue[h].Point0.X, " ", bezierCurveValue[h].Point0.Y);
|
pathValue.push(" C ", bezierCurveValue[h].Point1.X, " ", bezierCurveValue[h].Point1.Y, " ", bezierCurveValue[h].Point2.X, " ", bezierCurveValue[h].Point2.Y, " ", bezierCurveValue[h].Point3.X, " ", bezierCurveValue[h].Point3.Y);
|
}
|
else {
|
pathValue.push(" L ", bezierCurveValue[h].Point0.X, " ", bezierCurveValue[h].Point0.Y);
|
pathValue.push(" C ", bezierCurveValue[h].Point1.X, " ", bezierCurveValue[h].Point1.Y, " ", bezierCurveValue[h].Point2.X, " ", bezierCurveValue[h].Point2.Y, " ", bezierCurveValue[h].Point3.X, " ", bezierCurveValue[h].Point3.Y);
|
}
|
if (h == bezierCurveValue.length - 1) {
|
pathValue.push(" L ", bezierCurveValue[h].Point3.X, " ", bezierCurveValue[h].Point3.Y);
|
}
|
}
|
return pathValue;
|
};
|
|
|
var getActualValue = function (actualMinValue, actualMaxValue, pixelMinValue, pixelMaxValue, pixelValue) {
|
var actual = null;
|
actual = (pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue) * (actualMaxValue - actualMinValue) + actualMinValue;
|
// actual = (pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue) * (actualMaxValue - actualMinValue) + pixelMinValue;
|
return actual;
|
};
|
|
//取对数
|
var getPixelValue = function (actualValue, actualMinValue, actualMaxValue, pixelMinValue, pixelMaxValue) {
|
return (Math.log(actualValue) - Math.log(actualMinValue)) / (Math.log(actualMaxValue) - Math.log(actualMinValue)) * (pixelMaxValue - pixelMinValue) + pixelMinValue;
|
// return (actualValue - actualMinValue) / (actualMaxValue - actualMinValue) * (pixelMaxValue - pixelMinValue) + pixelMinValue;
|
};
|
|
|
|
var getSectPoint4Pixel = function (curve, x) {
|
|
var iPtCount = curve.length;
|
|
if (x < curve[0].Point0.X) {
|
return null;
|
}
|
if (x > curve[iPtCount - 1].Point3.X) {
|
return null;
|
}
|
|
for (var i = 0; i < iPtCount; i++) {
|
|
if (x > curve[i].Point0.X && x < curve[i].Point3.X) {
|
var ptBizer = curve[i];
|
//
|
try {
|
//alert(i);
|
var minDis = Math.abs(ptBizer.Point3.X - ptBizer.Point0.X);
|
//alert(x + " " + curve[i].Point0.X + " " + curve[i].Point3.X);
|
var sectY = 0;
|
var sectX = 0;
|
for (var uu = 0; uu <= 1; uu = uu + 0.05) {
|
var x0 = ptBizer.Point0.X * uu * uu * uu;
|
var x1 = 3 * ptBizer.Point1.X * uu * uu * (1 - uu);
|
var x2 = 3 * ptBizer.Point2.X * uu * (1 - uu) * (1 - uu);
|
var x3 = ptBizer.Point3.X * (1 - uu) * (1 - uu) * (1 - uu);
|
|
var curveX = x0 + x1 + x2 + x3;
|
if (Math.abs(curveX - x) < minDis) {
|
var y0 = ptBizer.Point0.Y * uu * uu * uu;
|
var y1 = 3 * ptBizer.Point1.Y * uu * uu * (1 - uu);
|
var y2 = 3 * ptBizer.Point2.Y * uu * (1 - uu) * (1 - uu);
|
var y3 = ptBizer.Point3.Y * (1 - uu) * (1 - uu) * (1 - uu);
|
minDis = Math.abs(curveX - x);
|
sectY = y0 + y1 + y2 + y3;
|
sectX = curveX;
|
}
|
}
|
return {
|
x: sectX, y: sectY
|
};
|
}
|
catch (ex) {
|
alert(ex.message);
|
}
|
}
|
|
}
|
};
|
|
|
//
|
var getLineString = function (pt1_x, pt1_y, pt2_x, pt2_y) {
|
return "M " + pt1_x + " " + pt1_y + " L " + pt2_x + " " + pt2_y;
|
};
|
|
//绘制曲线
|
var createCurve = function (curveName, curvePoints, style) {
|
if (curvePoints == null) {
|
return;
|
};
|
|
var coordinates = new Array();
|
for (var v = 0; v < curvePoints.length; v++) {
|
var x = getPixelValue(calcToChartQ(curvePoints[v].X), m_coordinatePara.CoordMinQ, m_coordinatePara.CoordMaxQ, m_chartSize.SpaceLeft, m_chartSize.DiagramRightX);
|
var y = getPixelValue(curvePoints[v].Y, m_coordinatePara.CoordMinH, m_coordinatePara.CoordMaxH, m_chartSize.DiagramBottomY, m_chartSize.SpaceTop);
|
coordinates.push({ "X": x, "Y": y });
|
}
|
|
var bezierCurveValue = transBezierCurveModel(coordinates);
|
if (bezierCurveValue == null) {
|
return;
|
}
|
|
var pathValue = new Array();
|
for (var h = 0; h < bezierCurveValue.length; h++) {
|
if (h == 0) {
|
pathValue.push("M ", bezierCurveValue[h].Point0.X, " ", bezierCurveValue[h].Point0.Y);
|
pathValue.push(" C ", bezierCurveValue[h].Point1.X, " ", bezierCurveValue[h].Point1.Y, " ",
|
bezierCurveValue[h].Point2.X, " ", bezierCurveValue[h].Point2.Y, " ", bezierCurveValue[h].Point3.X, " ", bezierCurveValue[h].Point3.Y);
|
}
|
else {
|
pathValue.push(" L ", bezierCurveValue[h].Point0.X, " ", bezierCurveValue[h].Point0.Y);
|
pathValue.push(" C ", bezierCurveValue[h].Point1.X, " ", bezierCurveValue[h].Point1.Y, " ",
|
bezierCurveValue[h].Point2.X, " ", bezierCurveValue[h].Point2.Y, " ", bezierCurveValue[h].Point3.X, " ", bezierCurveValue[h].Point3.Y);
|
}
|
if (h == bezierCurveValue.length - 1) {
|
pathValue.push(" L ", bezierCurveValue[h].Point3.X, " ", bezierCurveValue[h].Point3.Y);
|
}
|
};
|
|
|
m_svg.createPath(curveName, pathValue.join(''), {
|
"id": curveName
|
}, style);
|
|
},
|
|
//产生包络线
|
createRegionCurveList = function (dataCurves) {
|
|
if (dataCurves == null)
|
return;
|
var style = {
|
"stroke-width": 2,
|
"stroke": "#2F4F2F",
|
"fill": "none",
|
"stroke-opacity": '0.8',
|
"fill-opacity": "0.8",
|
"shape-rendering": "optimizeSpeed",
|
"zIndex:": 100
|
};
|
//if (m_workRegionCurve != null) {
|
// style.stroke = "#cccccc";
|
//}
|
for (var i = 0; i < dataCurves.length; i++) {
|
var curveInfo = dataCurves[i]["Points"];
|
//console.log(dataCurves[i]);
|
//判断类型
|
var curveName = "SpectrumShape1_" + dataCurves[i].ID;
|
if (curveInfo.length >= 4) {//曲线
|
// console.log(curveName);
|
createCurve(curveName, curveInfo, style);
|
} else if (path.length == 3) {//直线
|
m_svg.createPath(curveName, getLineString(calcToChartQ(dataCurves[0].X), dataCurves[0].Y, calcToChartQ(dataCurves[2].X), dataCurves[2].Y), xAttr, xStyle);
|
} else if (path.length == 2) {//直线
|
m_svg.createPath(curveName, getLineString(calcToChartQ(dataCurves[0].X), dataCurves[0].Y, calcToChartQ(dataCurves[1].X), dataCurves[1].Y), xAttr, xStyle);
|
} else if (path.length == 1) {
|
//点
|
var attr = {
|
"cx": calcToChartQ(dataCurves[0].X),
|
"cy": dataCurves[0].Y,
|
"r": 2,
|
"stroke": "#2F4F2F",
|
"fill": "#2F4F2F"
|
};
|
|
m_svg.createCircle(curveName, attr, style);
|
}
|
}
|
},
|
|
//产生型谱
|
createSpectrumShapeList = function (dataCurves) {
|
//console.log(dataCurves,280)
|
if (dataCurves == null)
|
return;
|
|
for (var i = 0; i < dataCurves.length; i++) {
|
createSpectrumCurve(dataCurves[i]);
|
createSpectrumShape(dataCurves[i]);
|
}
|
},
|
|
//参数型谱
|
createSpectrumShape = function (data) {
|
if (data == null)
|
return;
|
var style = {
|
"stroke-width": 2,
|
"stroke": "2F4F2F",
|
"fill": "white",
|
"stroke-opacity": '0.1',
|
"fill-opacity": "0.5",
|
"shape-rendering": "optimizeSpeed",
|
"zIndex:": 110
|
};
|
|
var coordinates_1 = new Array();
|
for (var v = 0; v < data["LeftParabolaPoints"].length; v++) {
|
var x = getPixelValue(data["LeftParabolaPoints"][v].X, m_coordinatePara.CoordMinQ, m_coordinatePara.CoordMaxQ, m_chartSize.SpaceLeft, m_chartSize.DiagramRightX);
|
var y = getPixelValue(data["LeftParabolaPoints"][v].Y, m_coordinatePara.CoordMinH, m_coordinatePara.CoordMaxH, m_chartSize.DiagramBottomY, m_chartSize.SpaceTop);
|
coordinates_1.push({ "X": x, "Y": y });
|
}
|
for (var v = 0; v < data["BasePoints"].length; v++) {
|
var x = getPixelValue(data["BasePoints"][v].X, m_coordinatePara.CoordMinQ, m_coordinatePara.CoordMaxQ, m_chartSize.SpaceLeft, m_chartSize.DiagramRightX);
|
var y = getPixelValue(data["BasePoints"][v].Y, m_coordinatePara.CoordMinH, m_coordinatePara.CoordMaxH, m_chartSize.DiagramBottomY, m_chartSize.SpaceTop);
|
coordinates_1.push({ "X": x, "Y": y });
|
}
|
|
var coordinates_2 = new Array();
|
for (var v = 0; v < data["SimularPoints"].length; v++) {
|
var x = getPixelValue(data["SimularPoints"][v].X, m_coordinatePara.CoordMinQ, m_coordinatePara.CoordMaxQ, m_chartSize.SpaceLeft, m_chartSize.DiagramRightX);
|
var y = getPixelValue(data["SimularPoints"][v].Y, m_coordinatePara.CoordMinH, m_coordinatePara.CoordMaxH, m_chartSize.DiagramBottomY, m_chartSize.SpaceTop);
|
coordinates_2.push({ "X": x, "Y": y });
|
}
|
for (var v = 0; v < data["RightParabolaPoints"].length; v++) {
|
var x = getPixelValue(data["RightParabolaPoints"][v].X, m_coordinatePara.CoordMinQ, m_coordinatePara.CoordMaxQ, m_chartSize.SpaceLeft, m_chartSize.DiagramRightX);
|
var y = getPixelValue(data["RightParabolaPoints"][v].Y, m_coordinatePara.CoordMinH, m_coordinatePara.CoordMaxH, m_chartSize.DiagramBottomY, m_chartSize.SpaceTop);
|
coordinates_2.push({ "X": x, "Y": y });
|
}
|
|
|
var pathValue_1 = transBezierCurveToPath(coordinates_1);
|
var pathValue_2 = transBezierCurveToPath(coordinates_2);
|
// console.log(data);
|
//有时会报错,加上这个就没事 tangxu 20151122
|
if (pathValue_1.toString().indexOf("M ,NaN, ,NaN") == 0 || pathValue_2.toString().indexOf("M ,NaN, ,NaN") == 0) {
|
return;
|
};
|
|
//
|
var attr;
|
m_svg.createPath("SpectrumShape1_" + data.PumpID, pathValue_1.join(''), attr, style);
|
m_svg.createPath("SpectrumShape2_" + data.PumpID, pathValue_2.join(''), attr, style);
|
},
|
|
//
|
createSpectrumCurve = function (data) {
|
if (data == null)
|
return;
|
var style = {
|
"stroke-width": 1,
|
"stroke": "#2F4F2F",
|
"fill": "none",
|
"stroke-opacity": '0.8',
|
"fill-opacity": "0.8",
|
"shape-rendering": "optimizeSpeed",
|
"zIndex:": 100
|
};
|
|
|
|
createCurve("LeftParabolaPoints", data["LeftParabolaPoints"], style);
|
|
createCurve("BasePoints", data["BasePoints"], style);
|
|
|
createCurve("SimularPoints", data["SimularPoints"], style);
|
|
createCurve("RightParabolaPoints", data["RightParabolaPoints"], style);
|
|
|
|
},
|
|
|
//产生文字(自动绘制等效线值的文字位置)
|
createCurveName1 = function (dataCurves) {
|
if (dataCurves == null)
|
return;
|
|
//字体
|
var styleText = "font-size: 10px;fill:#2F4F2F;";
|
//if (systemPlantType == 1) {//0: 电脑 1:手机页面 tangxu 20150824
|
// styleText = "font-size: 8px;fill:#2F4F2F;";
|
//}
|
for (var i = 0; i < dataCurves.length; i++) {
|
var curveInfo = dataCurves[i]["PointInfo"];
|
var maxX = 0;
|
var maxY = 0;
|
for (var j = 0; j < curveInfo.length; j++) {
|
if (j == 0) {
|
maxY = curveInfo[j].Y;
|
maxX = curveInfo[j].X;
|
} else {
|
if (maxX < curveInfo[j].X) {
|
maxY = curveInfo[j].Y;
|
maxX = curveInfo[j].X;
|
}
|
}
|
}
|
var attrTextPosi = {
|
"x": calcToChartQ(maxX),
|
"y": maxY
|
};
|
attrTextPosi.x = getPixelValue(attrTextPosi.x, m_coordinatePara.CoordMinQ, m_coordinatePara.CoordMaxQ, m_chartSize.SpaceLeft, m_chartSize.DiagramRightX);
|
attrTextPosi.y = getPixelValue(attrTextPosi.y, m_coordinatePara.CoordMinH, m_coordinatePara.CoordMaxH, m_chartSize.DiagramBottomY, m_chartSize.SpaceTop);
|
|
//显示等效线的值 tangxu 20150824
|
if (systemPlantType == 0) {//0: 电脑
|
m_svg.createText(attrTextPosi, styleText, dataCurves[i]["CurvePara"]);
|
}
|
else if (systemPlantType == 1) {//1:手机页面
|
if (i % 2 == 0) {
|
m_svg.createText(attrTextPosi, styleText, dataCurves[i]["CurvePara"]);
|
}
|
}
|
}
|
},
|
|
//产生文字(文字位置根据数据库中存储的设置)
|
createCurveName2 = function (dataAnnos) {
|
if (dataAnnos == null)
|
return;
|
|
//显示等效线的值 tangxu 20150824
|
var coordSpaceQ = m_coordinatePara.AxisLabelQ[1] - m_coordinatePara.AxisLabelQ[0];
|
var coordSpaceH = m_coordinatePara.AxisLabelH[1] - m_coordinatePara.AxisLabelH[0];
|
|
//字体
|
var styleText = "font-size: 10px;fill:#2F4F2F;";
|
if (systemPlantType == 1) {//0: 电脑 1:手机页面 tangxu 20150824
|
styleText = "font-size: 8px;fill:#2F4F2F;";
|
}
|
for (var i = 0; i < dataAnnos.length; i++) {
|
var attrTextPosi = null;
|
if (dataAnnos[i]["TextAligment"] == "0") {//Right = 0,
|
//console.log("Right");
|
attrTextPosi =
|
{
|
"x": dataAnnos[i].X + coordSpaceQ / 5,
|
"y": dataAnnos[i].Y
|
};
|
}
|
else if (dataAnnos[i]["TextAligment"] == "1") {//Bottom = 1,
|
//console.log("Bottom");
|
attrTextPosi =
|
{
|
"x": dataAnnos[i].X,
|
"y": dataAnnos[i].Y - coordSpaceH / 4
|
};
|
}
|
else if (dataAnnos[i]["TextAligment"] == "2") {//Left = 2,
|
attrTextPosi =
|
{
|
"x": dataAnnos[i].X - coordSpaceQ / 2,
|
"y": dataAnnos[i].Y
|
};
|
}
|
else if (dataAnnos[i]["TextAligment"] == "3") {//Top = 3,
|
attrTextPosi =
|
{
|
"x": dataAnnos[i].X,
|
"y": dataAnnos[i].Y + coordSpaceH / 4
|
};
|
}
|
else {
|
attrTextPosi =
|
{
|
"x": dataAnnos[i].X,
|
"y": dataAnnos[i].Y
|
};
|
}
|
|
attrTextPosi.x = calcToChartQ(getPixelValue(attrTextPosi.x, m_coordinatePara.CoordMinQ, m_coordinatePara.CoordMaxQ, m_chartSize.SpaceLeft, m_chartSize.DiagramRightX));
|
attrTextPosi.y = getPixelValue(attrTextPosi.y, m_coordinatePara.CoordMinH, m_coordinatePara.CoordMaxH, m_chartSize.DiagramBottomY, m_chartSize.SpaceTop);
|
|
m_svg.createText(attrTextPosi, styleText, dataAnnos[i]["Text"]);
|
}
|
},
|
|
//初始化面板
|
initialMainPanel = function (divName) {
|
if (divName == null) {
|
return;
|
}
|
if (m_chartSize == null) {
|
return;
|
}
|
|
var space_left = 55;
|
var space_right = 20;
|
var space_top = 10;
|
var space_bottom = 58;
|
|
|
m_chartSize.DiagramWidth = m_chartSize.TotalWidth - space_left - space_right;
|
m_chartSize.DiagramHeight = m_chartSize.TotalHeight - space_top - space_bottom;
|
|
m_chartSize.SpaceLeft = space_left;
|
m_chartSize.SpaceTop = space_top;
|
m_chartSize.SpaceRight = space_right;
|
m_chartSize.SpaceBottom = space_bottom;
|
|
m_chartSize.DiagramRightX = m_chartSize.TotalWidth - space_right;
|
m_chartSize.DiagramBottomY = m_chartSize.TotalHeight - space_bottom;
|
|
|
|
//把间隙弄小点
|
var areaAttr = {
|
x: space_left,
|
y: space_top,
|
width: m_chartSize.DiagramWidth,
|
height: m_chartSize.DiagramHeight
|
};
|
|
var areaStyle = {
|
"stroke-width": "1px",
|
"stroke": "#cccccc",
|
"fill": "#ffffff",
|
|
"fill-opacity": "0.5",
|
"zIndex:": 5
|
};
|
|
//
|
var m_svgID = "FeatCurveSvg";
|
m_svg = new svgObject().init(divName, m_chartSize.TotalWidth, m_chartSize.TotalHeight, svgClick, svgMove, m_svgID);
|
//
|
m_svg.createArea(areaAttr, areaStyle);
|
},
|
|
|
|
|
//流量转换计算
|
calcToChartQ = function (v) {
|
return v;
|
//if (unitQ == 0) {//LS = 0,
|
// return v / 3.6;
|
//}
|
//else if (unitQ == 1) {//M3H = 1,
|
// return v;
|
//}
|
//else {
|
// return v;
|
//}
|
},
|
|
//产生网格线竖直方向
|
createGridLineX = function () {
|
var attrGridLineX = {
|
"stroke": "#cccccc",
|
"stroke-width": "1",
|
"fill": "none",
|
"zIndex": 10
|
};
|
|
|
//文字
|
var label_y = m_chartSize.DiagramBottomY + 15;
|
var attrAxisLabelX = {
|
"opacity": 1,
|
"x": 5,
|
"y": label_y + 2,
|
"text-anchor": "middle"
|
};
|
|
//刻度文字
|
var styleAxisLabelX = "font-size:10px;fill:red;fill-opacity:1;fill:black;";//font-weight:bold
|
|
for (var i = 0; i < m_coordinatePara.AxisLabelQ.length; i++) {
|
var q = m_coordinatePara.AxisLabelQ[i];
|
|
var content = UnitHelper.valueFormat(UnitHelper.getDispValueQ(UnitHelper.ConvertQ_fromM3H(m_unit.Q, q)));
|
|
var posiX_grid =
|
getPixelValue(q, m_coordinatePara.CoordMinQ, m_coordinatePara.CoordMaxQ, m_chartSize.SpaceLeft, m_chartSize.DiagramRightX);
|
|
var valueTemp = new Array();
|
valueTemp.push("M ", posiX_grid, " ", m_chartSize.SpaceTop, " L ", posiX_grid, " ", m_chartSize.DiagramBottomY);
|
m_svg.createPath("GridLienX" + i, valueTemp.join(''), attrGridLineX, null);
|
|
attrAxisLabelX.x = posiX_grid;
|
var rotate_x = posiX_grid;
|
var rotate_y = label_y;
|
var transform = "rotate(45 " + rotate_x + "," + rotate_y + ")";
|
|
m_svg.createText(attrAxisLabelX, styleAxisLabelX, content, 10, null, transform);
|
}
|
|
|
//标题文字
|
var styleAxisTitleX = "font-size:12px;fill:red;fill-opacity:1;fill:black;font-weight:bold;";
|
let unit_name = UnitHelper.GetUnitNameQ(m_unit.Q);
|
|
var attrAxisTitleX = {
|
"opacity": 1,
|
"x": (m_chartSize.SpaceLeft + m_chartSize.DiagramRightX) / 2 - 1,
|
"y": m_chartSize.DiagramBottomY + 48,
|
"text-anchor": "middle"
|
};
|
|
m_svg.createText(attrAxisTitleX, styleAxisTitleX, getTranslateString("流量") + " (" + unit_name + ")");
|
|
},
|
|
//产生网格线水平方向
|
createGridLineY = function () {
|
var attrGridLineH = {
|
"stroke": "#cccccc",
|
"stroke-width": "1",
|
"fill": "none",
|
"zIndex": 10
|
};
|
//刻度文字
|
var styleAxisLabelH = "font-size:10px; fill-opacity:1; fill:black;";
|
//标签
|
var styleAxisTitleH = "font-size:12px; ;fill-opacity:1; font-weight:bold; fill:black;";
|
|
for (var i = 0; i < m_coordinatePara.AxisLabelH.length; i++) {
|
var h = m_coordinatePara.AxisLabelH[i];
|
var content = UnitHelper.valueFormat(UnitHelper.getDispValueH(UnitHelper.ConvertH_fromM(m_unit.H, h)));
|
var posiY_grid =
|
getPixelValue(content, m_coordinatePara.CoordMinH, m_coordinatePara.CoordMaxH, m_chartSize.DiagramBottomY, m_chartSize.SpaceTop);
|
var valueTemp = new Array();
|
valueTemp.push("M ", m_chartSize.SpaceLeft, " ", posiY_grid, " L ", m_chartSize.DiagramRightX, " ", posiY_grid);
|
m_svg.createPath("GridLienY" + i, valueTemp.join(''), attrGridLineH, null);
|
|
|
//文字
|
var attrAxisLabelH = {
|
"opacity": 1,
|
"x": m_chartSize.SpaceLeft - 8,
|
"y": posiY_grid + 5,
|
"text-anchor": "end"
|
};
|
|
m_svg.createText(attrAxisLabelH, styleAxisLabelH, content);
|
}
|
|
//标签
|
var styleAxisTitleH = "font-size:12px; ;fill-opacity:1; font-weight:bold; fill:black;";
|
|
let unit_h_name = UnitHelper.GetUnitNameH(m_unit.H);
|
//标签
|
var attrAxisTitleH = {
|
"opacity": 1,
|
"x": m_chartSize.SpaceLeft - 35,
|
"y": (m_chartSize.DiagramBottomY + m_chartSize.SpaceTop) / 2 - 10,
|
"text-anchor": "middle"
|
};
|
attrAxisTitleH.y = attrAxisTitleH.y + 8;
|
|
var content = getTranslateString("扬程") + " (" + unit_h_name + ")";
|
if (m_unit.H == UnitHelper.H.MPa || m_unit.H == UnitHelper.H.KPa) {
|
var content = getTranslateString("压力") + " (" + unit_h_name + ")";
|
}
|
var transform = "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")";
|
m_svg.createText(attrAxisTitleH, styleAxisTitleH, content, 10, null, transform);
|
|
};
|
//翻译
|
var getTranslateString = function (cn) {
|
if (m_localizationType == 0)
|
return cn;
|
if (cn == "流量")
|
return "Flow";
|
else if (cn == "压力")
|
return "Press";
|
else if (cn == "扬程")
|
return "Head";
|
else if (cn == "效率")
|
return "Eta";
|
else if (cn == "功率")
|
return "Power";
|
else
|
return cn;
|
};
|
//设置容器
|
this.setContainerDiv = function (divChartName, divWidth, divHeight) {
|
m_divChartName = divChartName;
|
|
if (m_chartSize == null) {
|
m_chartSize = {};
|
}
|
|
if (divWidth != null) {
|
m_chartSize.TotalWidth = divWidth;
|
}
|
else {
|
m_chartSize.TotalWidth = document.getElementById(divChartName).clientWidth;
|
}
|
|
if (divHeight != null) {
|
m_chartSize.TotalHeight = divHeight;
|
}
|
else {
|
m_chartSize.TotalHeight = document.getElementById(divName).clientHeight;
|
}
|
};
|
/** ----------------对外函数-------------------- **/
|
|
//设置设计点公差
|
this.SetUnit = function (unitQ, unitH, unitP) {
|
m_unit.Q = unitQ;
|
m_unit.H = unitH;
|
m_unit.P = unitP;
|
};
|
//设置语言 中文zhCN = 0, zhTW = 1, enUS = 2
|
this.setLocalizationType = function (localizationType) {
|
m_localizationType = localizationType;
|
};
|
|
//初始化
|
this.initialChart = function (ChartType, coordinate_paras, region_curves, spectrum_shapes, displayStyle) {
|
if (!m_divChartName)
|
return;
|
if (coordinate_paras == null)
|
return;
|
|
m_coordinatePara = coordinate_paras;
|
|
|
////初始化面板
|
initialMainPanel(m_divChartName);
|
|
//绘制网格线
|
createGridLineX();
|
createGridLineY();
|
|
|
////
|
if (region_curves != null)
|
createRegionCurveList(region_curves);
|
if (spectrum_shapes != null)
|
createSpectrumShapeList(spectrum_shapes);
|
|
|
|
////回调
|
//if (typeof param.loadChartCallBack === "function") {
|
// param.loadChartCallBack(workCurveGroup);
|
//}
|
return this;
|
};
|
|
|
|
|
//绘制设计点
|
this.drawDesignPoint = function (pointQ, pointH, callback) {
|
//console.log(pointQ,pointH,746)
|
var style = {
|
"stroke-width": 4,
|
"stroke": "red",
|
"fill": "none",
|
"stroke-opacity": '0.8',
|
"shape-rendering": "optimizeSpeed",
|
"zIndex:": 101
|
};
|
|
var x11 = getPixelValue(pointQ * 0.92, m_coordinatePara.CoordMinQ, m_coordinatePara.CoordMaxQ, m_chartSize.SpaceLeft, m_chartSize.DiagramRightX);
|
var x12 = getPixelValue(pointQ * 1.08, m_coordinatePara.CoordMinQ, m_coordinatePara.CoordMaxQ, m_chartSize.SpaceLeft, m_chartSize.DiagramRightX);
|
var y1 = getPixelValue(pointH, m_coordinatePara.CoordMinH, m_coordinatePara.CoordMaxH, m_chartSize.DiagramBottomY, m_chartSize.SpaceTop);
|
|
m_svg.createPath("DesignPointH", getLineString(calcToChartQ(x11), y1, calcToChartQ(x12), y1), null, style);
|
|
|
var x2 = getPixelValue(pointQ, m_coordinatePara.CoordMinQ, m_coordinatePara.CoordMaxQ, m_chartSize.SpaceLeft, m_chartSize.DiagramRightX);
|
var y21 = getPixelValue(pointH * 0.95, m_coordinatePara.CoordMinH, m_coordinatePara.CoordMaxH, m_chartSize.DiagramBottomY, m_chartSize.SpaceTop);
|
var y22 = getPixelValue(pointH * 1.05, m_coordinatePara.CoordMinH, m_coordinatePara.CoordMaxH, m_chartSize.DiagramBottomY, m_chartSize.SpaceTop);
|
m_svg.createPath("DesignPointQ", getLineString(calcToChartQ(x2), y21, calcToChartQ(x2), y22), null, style);
|
|
|
if (typeof callback == "function") {
|
var p = callback(x1, x2, y1, y2);
|
x1 = p[0];
|
x2 = p[1];
|
y1 = p[2];
|
y2 = p[3];
|
}
|
};
|
};
|
export default LxpSpectrumChart;
|