| | |
| | | import svgObject from "./svgOjbect" |
| | | import ConstParas from "@/utils/constParas.js" |
| | | import UnitHelper from "@/utils/unit.js" |
| | | import PointToleranceConfig from "./PointToleranceConfig.js" |
| | | import svgObject from "./svgOjbect"; |
| | | import ConstParas from "@/utils/constParas.js"; |
| | | import UnitHelper from "@/utils/unit.js"; |
| | | import PointToleranceConfig from "./PointToleranceConfig.js"; |
| | | import languageHelper from "@/utils/languageHelper.js"; |
| | | |
| | | var MultiSpeedChartDiagram = function () { |
| | | var m_svg; |
| | | var m_svg; |
| | | |
| | | var m_unit = { Q: 1, H: 0, P: 1,NPSH:0 };//功率、流量、扬程单位集合 |
| | | var m_divChartName;//容器DIV名称 |
| | | var m_chartSize;//图表尺寸 |
| | | var m_localizationType;//语言类型 |
| | | var m_toolTipContent;//内容提示DIV容器 |
| | | var m_equipZeroH = 0; |
| | | var m_unit = { Q: 1, H: 0, P: 1, NPSH: 0 }; //功率、流量、扬程单位集合 |
| | | var m_divChartName; //容器DIV名称 |
| | | var m_chartSize; //图表尺寸 |
| | | var m_localizationType; //语言类型 |
| | | |
| | | var m_isDispCurveSpeed = true; |
| | | var m_isDispCurveHz = false; |
| | | var m_pumpInfo; //基本信息 |
| | | var m_chartPointPara; |
| | | var m_chartObject; |
| | | var m_coordinatePara; //坐标 |
| | | |
| | | var m_pumpInfo;//基本信息 |
| | | var m_chartPointPara; |
| | | var m_chartObject; |
| | | var m_coordinatePara;//坐标 |
| | | var m_maxSpeedCurve; |
| | | var m_simuSpeedCurves; |
| | | var onChangeSpeedListCb; //修改了列表通知外部 |
| | | |
| | | var m_maxSpeedCurve; |
| | | var m_simuSpeedCurves; |
| | | var onChangeSpeedListCb;//修改了列表通知外部 |
| | | var m_spectrumShape = null; //型谱 |
| | | |
| | | var m_chartSetting;//设置 |
| | | var m_displayStyle;//显示设置 |
| | | var m_chartSetting; //设置 |
| | | var m_displayStyle; //显示设置 |
| | | var m_queryLinePixel = 0; |
| | | |
| | | var m_chartDiagramPanelStyle = ConstParas.ChartDiagramPanelStyle.Two; |
| | | // |
| | | var m_dispVerticalLine1 = false;//查询线 是否显示 |
| | | var onChangeQueryDataCb = null;//查询外部回调 |
| | | |
| | | var m_isDispCurveQE = false; //是否显示效率 |
| | | var m_isDispCurveNPSH = false; //是否显示效率 |
| | | var m_isHaveNpsh = false; //是否显示汽蚀 |
| | | var m_colorArray = [ |
| | | "#6A5ACD", |
| | | "#7B68EE", |
| | | "#8470FF", |
| | | "#1E90FF", |
| | | "#00BFFF", |
| | | "#800080", |
| | | "#87CEFA", |
| | | "#f391a9", |
| | | "#8B4513", |
| | | "#ed1941", |
| | | "#f47a55", |
| | | "#224b8f", |
| | | "#2a5caa", |
| | | "#9b95c9", |
| | | "#f0dc70", |
| | | ]; |
| | | var m_curveMaxId = 1; |
| | | |
| | | var m_chartDiagramPanelStyle = ConstParas.ChartDiagramPanelStyle.Two; |
| | | var m_designPointTolerance = [0.91, 1.09, 0.95, 1.05]; //设计点公差 |
| | | |
| | | var m_isDispCurveQE = false;//是否显示效率 |
| | | var m_isDispCurveNPSH = false;//是否显示效率 |
| | | var m_isHaveNpsh = false;//是否显示汽蚀 |
| | | var m_colorArray = ["#426ab3", "#b2d235", "#840228", "#33a3dc", "#cd9a5b", "#96582a", "#f58220", "#f47920", "#f391a9", "#ed1941", "#f47a55", "#224b8f", "#2a5caa", "#9b95c9", "#f0dc70"]; |
| | | |
| | | |
| | | var m_designPointTolerance = [0.91, 1.09, 0.95, 1.05];//设计点公差 |
| | | |
| | | //设置颜色 |
| | | var setObjectColor = function (isMonorColor) { |
| | | m_displayStyle.IsMonoColor = isMonorColor; |
| | | if (m_displayStyle.IsMonoColor) { |
| | | m_displayStyle.ColorH = "#000000"; |
| | | m_displayStyle.ColorE = "#000000"; |
| | | m_displayStyle.ColorP = "#000000"; |
| | | m_displayStyle.ColorNPSH = "#000000"; |
| | | m_displayStyle.ColorEquipment = "#000000"; |
| | | m_displayStyle.ColorEqualParaCurvesE = "#000000"; |
| | | m_displayStyle.ColorSpectrumFill = "#f2eada"; |
| | | m_displayStyle.ColorGridLine = "#cccccc" |
| | | } |
| | | else { |
| | | m_displayStyle.ColorH = "#000000"; |
| | | m_displayStyle.ColorE = "#000000"; |
| | | m_displayStyle.ColorP = "#000000"; |
| | | m_displayStyle.ColorNPSH = "#000000"; |
| | | m_displayStyle.ColorEquipment = "#013317"; |
| | | m_displayStyle.ColorEqualParaCurvesE = "#402db7"; |
| | | m_displayStyle.ColorSpectrumFill = "Aquamarine"; |
| | | m_displayStyle.ColorGridLine = "#cccccc"; |
| | | } |
| | | }; |
| | | |
| | | var m_curveMaxId = 1; |
| | | |
| | | //初始化显示设置 |
| | | var initialDispStyle = function (displayStyle, chartSetting) { |
| | | if (displayStyle != null) { |
| | | m_displayStyle = displayStyle; |
| | | } |
| | | else { |
| | | m_displayStyle = {}; |
| | | m_displayStyle.IsMonoColor = false; |
| | | m_displayStyle.IsDispSpectrum = false;//默认不显示型谱 |
| | | m_displayStyle.DesignPointDispType = 0;//设计点显示方式(eDesignPointDispType) Cross 0 LeftDownTriangle 2 |
| | | } |
| | | |
| | | |
| | | //console.log(m_displayStyle) |
| | | |
| | | m_isHaveNpsh = true; |
| | | if (m_chartObject != null && m_chartObject.MaxWaterCurveNPSH == null) |
| | | m_isHaveNpsh = false; |
| | | |
| | | m_displayStyle.FeatCurveSize = 10; |
| | | m_displayStyle.EqualCurveSize = 9; |
| | | if (m_displayStyle.IsDispCurveLabel == null) |
| | | m_displayStyle.IsDispCurveLabel = true; |
| | | |
| | | m_displayStyle.isDrawWaterMark = true; |
| | | m_displayStyle.isDispEquipmentCurve = false; |
| | | //是否显示子刻度 |
| | | m_displayStyle.isDispMiniTick = true; |
| | | m_displayStyle.isRotateLabelX = false; |
| | | m_displayStyle.isAxisIntervalX = false; |
| | | m_displayStyle.MiniTickNumber = 4; |
| | | |
| | | |
| | | setObjectColor(m_displayStyle.IsMonoColor); |
| | | }; |
| | | // |
| | | var initialSvg = function () { |
| | | if (m_divChartName == null) { |
| | | return false; |
| | | } |
| | | // |
| | | var m_svgID = "MultiSpeedCurveSvg";//暂时不知道做啥用 |
| | | m_svg = new svgObject().init(m_divChartName, m_chartSize.TotalWidth, m_chartSize.TotalHeight, svgClick, svgMove, m_svgID); |
| | | |
| | | return true; |
| | | //设置颜色 |
| | | var setObjectColor = function (isMonorColor) { |
| | | m_displayStyle.IsMonoColor = isMonorColor; |
| | | if (m_displayStyle.IsMonoColor) { |
| | | m_displayStyle.ColorH = "#000000"; |
| | | m_displayStyle.ColorE = "#000000"; |
| | | m_displayStyle.ColorP = "#000000"; |
| | | m_displayStyle.ColorNPSH = "#000000"; |
| | | m_displayStyle.ColorEquipment = "#000000"; |
| | | m_displayStyle.ColorEqualParaCurvesE = "#000000"; |
| | | m_displayStyle.ColorGridLine = "#cccccc"; |
| | | } else { |
| | | m_displayStyle.ColorH = "#000000"; |
| | | m_displayStyle.ColorE = "#000000"; |
| | | m_displayStyle.ColorP = "#000000"; |
| | | m_displayStyle.ColorNPSH = "#000000"; |
| | | m_displayStyle.ColorEquipment = "#013317"; |
| | | m_displayStyle.ColorEqualParaCurvesE = "#402db7"; |
| | | m_displayStyle.ColorGridLine = "#cccccc"; |
| | | } |
| | | //初始化面板尺寸 |
| | | var initialPanelSize = function () { |
| | | if (!initialSvg()) |
| | | return; |
| | | m_displayStyle.SpectrumColor = "LightSkyBlue"; |
| | | }; |
| | | |
| | | if (m_coordinatePara == null) |
| | | return; |
| | | //初始化显示设置 |
| | | var initialDispStyle = function (displayStyle, chartSetting) { |
| | | if (displayStyle != null) { |
| | | m_displayStyle = displayStyle; |
| | | } else { |
| | | m_displayStyle = {}; |
| | | m_displayStyle.IsMonoColor = false; |
| | | m_displayStyle.IsDispSpectrum = true; //默认显示型谱 |
| | | m_displayStyle.DesignPointDispType = 0; //设计点显示方式(eDesignPointDispType) Cross 0 LeftDownTriangle 2 |
| | | } |
| | | |
| | | if (m_chartSize == null) { |
| | | m_chartSize = {}; |
| | | m_chartSize.TotalWidth = document.getElementById(m_divChartName).clientWidth; |
| | | m_chartSize.TotalHeight = document.getElementById(m_divChartName).clientHeight; |
| | | //console.log(m_displayStyle) |
| | | |
| | | m_isHaveNpsh = true; |
| | | if (m_chartObject != null && m_chartObject.MaxWaterCurveNPSH == null) |
| | | m_isHaveNpsh = false; |
| | | |
| | | m_displayStyle.FeatCurveSize = 10; |
| | | m_displayStyle.EqualCurveSize = 9; |
| | | if (m_displayStyle.IsDispCurveLabel == null) |
| | | m_displayStyle.IsDispCurveLabel = true; |
| | | |
| | | m_displayStyle.isDrawWaterMark = true; |
| | | m_displayStyle.isDispEquipmentCurve = false; |
| | | //是否显示子刻度 |
| | | m_displayStyle.isDispMiniTick = true; |
| | | m_displayStyle.isRotateLabelX = false; |
| | | m_displayStyle.isAxisIntervalX = false; |
| | | m_displayStyle.MiniTickNumber = 4; |
| | | |
| | | setObjectColor(m_displayStyle.IsMonoColor); |
| | | }; |
| | | // |
| | | var initialSvg = function () { |
| | | if (m_divChartName == null) { |
| | | return false; |
| | | } |
| | | // |
| | | var m_svgID = "MultiSpeedCurveSvg"; //暂时不知道做啥用 |
| | | m_svg = new svgObject().init( |
| | | m_divChartName, |
| | | m_chartSize.TotalWidth, |
| | | m_chartSize.TotalHeight, |
| | | svgClick, |
| | | svgMove, |
| | | m_svgID |
| | | ); |
| | | |
| | | return true; |
| | | }; |
| | | //初始化面板尺寸 |
| | | var initialPanelSize = function () { |
| | | if (!initialSvg()) return; |
| | | |
| | | if (m_coordinatePara == null) return; |
| | | |
| | | if (m_chartSize == null) { |
| | | m_chartSize = {}; |
| | | m_chartSize.TotalWidth = |
| | | document.getElementById(m_divChartName).clientWidth; |
| | | m_chartSize.TotalHeight = |
| | | document.getElementById(m_divChartName).clientHeight; |
| | | } |
| | | |
| | | if (m_chartSize.TotalHeight < 500) m_chartSize.TotalHeight = 500; |
| | | |
| | | var space_left = 70; |
| | | var space_right = 60; |
| | | var space_top = 10; |
| | | var space_bottom = 60; |
| | | if (m_coordinatePara.SpaceP > 99) { |
| | | space_left = 80; |
| | | } |
| | | if (m_coordinatePara.SpaceP <= 0.1) { |
| | | space_left = 80; |
| | | } |
| | | if (m_localizationType >= 2) { |
| | | space_left = 75; |
| | | space_right = 75; |
| | | } |
| | | |
| | | m_chartSize.SpaceTop = space_top; |
| | | m_chartSize.SpaceRight = space_right; |
| | | m_chartSize.SpaceBottom = space_bottom; |
| | | m_chartSize.SpaceLeft = space_left; |
| | | |
| | | m_chartSize.DiagramTop = space_top; |
| | | m_chartSize.DiagramLeft = space_left; |
| | | m_chartSize.DiagramRight = m_chartSize.TotalWidth - space_right; |
| | | m_chartSize.DiagramBottom = m_chartSize.TotalHeight - space_bottom; |
| | | |
| | | m_chartSize.DiagramWidth = |
| | | m_chartSize.TotalWidth - space_left - space_right; |
| | | m_chartSize.DiagramHeight = |
| | | m_chartSize.TotalHeight - space_top - space_bottom; |
| | | |
| | | m_chartSize.SpaceGridX = |
| | | m_chartSize.DiagramWidth / m_coordinatePara.GridNumberX; |
| | | |
| | | if (m_chartDiagramPanelStyle == ConstParas.ChartDiagramPanelStyle.Whole) { |
| | | m_chartSize.UpDiagram = {}; |
| | | m_chartSize.UpDiagram.Up = space_top; |
| | | m_chartSize.UpDiagram.Bottom = m_chartSize.TotalHeight - space_bottom; |
| | | m_chartSize.UpDiagram.SpaceGridY = |
| | | m_chartSize.DiagramHeight / m_coordinatePara.GridNumberY; |
| | | m_chartSize.UpDiagram.GridNumberY = m_coordinatePara.GridNumberY; |
| | | |
| | | m_chartSize.DownDiagram = {}; //一样 |
| | | m_chartSize.DownDiagram.Up = space_top; |
| | | m_chartSize.DownDiagram.Bottom = m_chartSize.TotalHeight - space_bottom; |
| | | m_chartSize.DownDiagram.SpaceGridY = |
| | | m_chartSize.DiagramHeight / m_coordinatePara.GridNumberY; |
| | | m_chartSize.DownDiagram.GridNumberY = m_coordinatePara.GridNumberY; |
| | | |
| | | m_chartSize.PanelH = {}; |
| | | m_chartSize.PanelH.Bottom = |
| | | m_chartSize.UpDiagram.Bottom - |
| | | m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.StartLineNoH; |
| | | m_chartSize.PanelH.Up = |
| | | m_chartSize.UpDiagram.Bottom - |
| | | m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.EndLineNoH; |
| | | |
| | | m_chartSize.PanelE = {}; |
| | | m_chartSize.PanelE.Bottom = |
| | | m_chartSize.UpDiagram.Bottom - |
| | | m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.StartLineNoE; |
| | | m_chartSize.PanelE.Up = |
| | | m_chartSize.UpDiagram.Bottom - |
| | | m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.EndLineNoE; |
| | | |
| | | m_chartSize.PanelP = {}; |
| | | m_chartSize.PanelP.Bottom = |
| | | m_chartSize.UpDiagram.Bottom - |
| | | m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.StartLineNoP; |
| | | m_chartSize.PanelP.Up = |
| | | m_chartSize.UpDiagram.Bottom - |
| | | m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.EndLineNoP; |
| | | |
| | | m_chartSize.PanelNPSH = {}; |
| | | m_chartSize.PanelNPSH.Bottom = |
| | | m_chartSize.UpDiagram.Bottom - |
| | | m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.StartLineNoNPSH; |
| | | m_chartSize.PanelNPSH.Up = |
| | | m_chartSize.UpDiagram.Bottom - |
| | | m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.EndLineNoNPSH; |
| | | |
| | | //console.log(m_chartSize) |
| | | //把间隙弄小点 |
| | | 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, |
| | | }; |
| | | |
| | | // |
| | | m_svg.createArea(areaAttr, areaStyle); |
| | | } else { |
| | | var panel_space = 35; |
| | | m_chartSize.PanelSpace = panel_space; |
| | | |
| | | var grid_num_h = |
| | | m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH; |
| | | var grid_num_e = |
| | | m_coordinatePara.EndLineNoE - m_coordinatePara.StartLineNoE; |
| | | |
| | | var grid_num_up = Math.max(grid_num_h, grid_num_e); |
| | | if (m_coordinatePara.DislocationNumUp > 0) |
| | | grid_num_up = grid_num_up + m_coordinatePara.DislocationNumUp; |
| | | else grid_num_up = grid_num_up + 2; //多两条 |
| | | if (!m_isDispCurveQE) { |
| | | grid_num_up = |
| | | m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH; |
| | | } |
| | | //console.log(grid_num_up, grid_num_h, grid_num_e) ; |
| | | var grid_num_NPSH = |
| | | m_coordinatePara.EndLineNoNPSH - m_coordinatePara.StartLineNoNPSH; |
| | | var grid_num_p = |
| | | m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP; |
| | | var grid_num_down = grid_num_p; |
| | | |
| | | if (m_isDispCurveNPSH) { |
| | | grid_num_down = |
| | | Math.max(grid_num_NPSH, grid_num_p) + |
| | | m_coordinatePara.DislocationNumDown; |
| | | } |
| | | |
| | | m_chartSize.UpDiagram = {}; |
| | | m_chartSize.UpDiagram.Up = space_top; |
| | | m_chartSize.UpDiagram.SpaceGridY = |
| | | (m_chartSize.DiagramHeight - panel_space) / |
| | | (grid_num_up + grid_num_down); |
| | | m_chartSize.UpDiagram.Bottom = |
| | | space_top + grid_num_up * m_chartSize.UpDiagram.SpaceGridY; |
| | | m_chartSize.UpDiagram.GridNumberY = grid_num_up; |
| | | |
| | | m_chartSize.DownDiagram = {}; |
| | | m_chartSize.DownDiagram.Up = m_chartSize.UpDiagram.Bottom + panel_space; |
| | | m_chartSize.DownDiagram.SpaceGridY = |
| | | (m_chartSize.DiagramHeight - panel_space) / |
| | | (grid_num_up + grid_num_down); |
| | | m_chartSize.DownDiagram.Bottom = m_chartSize.TotalHeight - space_bottom; |
| | | m_chartSize.DownDiagram.GridNumberY = grid_num_down; |
| | | |
| | | m_chartSize.PanelH = {}; |
| | | m_chartSize.PanelH.Bottom = |
| | | m_chartSize.UpDiagram.Up + |
| | | m_chartSize.UpDiagram.SpaceGridY * grid_num_h; |
| | | m_chartSize.PanelH.Up = m_chartSize.UpDiagram.Up; |
| | | |
| | | m_chartSize.PanelE = {}; |
| | | m_chartSize.PanelE.Bottom = m_chartSize.UpDiagram.Bottom; |
| | | m_chartSize.PanelE.Up = |
| | | m_chartSize.UpDiagram.Bottom - |
| | | m_chartSize.UpDiagram.SpaceGridY * grid_num_e; |
| | | |
| | | m_chartSize.PanelP = {}; |
| | | m_chartSize.PanelP.Up = m_chartSize.DownDiagram.Up; |
| | | m_chartSize.PanelP.Bottom = |
| | | m_chartSize.DownDiagram.Up + |
| | | m_chartSize.DownDiagram.SpaceGridY * grid_num_p; |
| | | |
| | | m_chartSize.PanelNPSH = {}; |
| | | m_chartSize.PanelNPSH.Bottom = m_chartSize.DownDiagram.Bottom; |
| | | m_chartSize.PanelNPSH.Up = |
| | | m_chartSize.DownDiagram.Bottom - |
| | | m_chartSize.DownDiagram.SpaceGridY * grid_num_NPSH; |
| | | } |
| | | }; |
| | | //检查坐标范围是否超过曲线范围 |
| | | var checkCoordinate = function () { |
| | | if (m_maxSpeedCurve == null || m_maxSpeedCurve.RealQH == null) |
| | | return false; |
| | | if (m_coordinatePara == null) |
| | | return false; |
| | | //检查最大值 |
| | | var curve_max_q = m_maxSpeedCurve.RealQH[m_maxSpeedCurve.RealQH.length - 1].X; |
| | | var curve_max_h = m_maxSpeedCurve.RealQH[0].Y; |
| | | var curve_max_p = m_maxSpeedCurve.RealQP[m_maxSpeedCurve.RealQP.length - 1].Y; |
| | | var isNeedRefresh = false; |
| | | var dist_head = m_coordinatePara.SpaceH / 2; |
| | | var dist_pwer = m_coordinatePara.SpaceP / 5; |
| | | for (var i = 0; i < 10; i++) { |
| | | |
| | | if (curve_max_h < m_coordinatePara.DispMaxH - m_coordinatePara.SpaceH - dist_head) { |
| | | m_coordinatePara.DispMaxH = m_coordinatePara.DispMaxH - m_coordinatePara.SpaceH; |
| | | m_coordinatePara.EndLineNoH = m_coordinatePara.EndLineNoH - 1; |
| | | isNeedRefresh = true; |
| | | |
| | | continue; |
| | | } |
| | | |
| | | break; |
| | | } |
| | | for (var i = 0; i < 5; i++) { |
| | | |
| | | if (curve_max_p < m_coordinatePara.DispMaxP - m_coordinatePara.SpaceP - dist_pwer) { |
| | | m_coordinatePara.DispMaxP = m_coordinatePara.DispMaxP - m_coordinatePara.SpaceP; |
| | | m_coordinatePara.EndLineNoP = m_coordinatePara.EndLineNoP - 1; |
| | | isNeedRefresh = true; |
| | | |
| | | continue; |
| | | } |
| | | |
| | | break; |
| | | } |
| | | |
| | | for (var i = 0; i < 5; i++) { |
| | | |
| | | if (curve_max_q < m_coordinatePara.DispMaxQ - m_coordinatePara.SpaceQ * 2) { |
| | | m_coordinatePara.DispMaxQ = m_coordinatePara.DispMaxQ - m_coordinatePara.SpaceQ; |
| | | m_coordinatePara.GridNumberX = m_coordinatePara.GridNumberX - 1; |
| | | isNeedRefresh = true; |
| | | |
| | | continue; |
| | | } |
| | | |
| | | break; |
| | | } |
| | | |
| | | if (m_simuSpeedCurves == null || m_simuSpeedCurves.length == 0) |
| | | return isNeedRefresh; |
| | | if (m_simuSpeedCurves[0].RealQH == null) |
| | | return isNeedRefresh; |
| | | |
| | | //检查最小值 |
| | | var curve_min_h = m_simuSpeedCurves[0].RealQH[m_simuSpeedCurves[0].RealQH.length - 1].Y; |
| | | var curve_min_p = m_simuSpeedCurves[0].RealQP[0].Y; |
| | | for (var i = 1; i < m_simuSpeedCurves.length; i++) { |
| | | var qh = m_simuSpeedCurves[i].RealQH; |
| | | var qp = m_simuSpeedCurves[i].RealQP; |
| | | curve_min_h = Math.min(curve_min_h, qh[qh.length - 1].Y); |
| | | curve_min_p = Math.min(curve_min_p, qp[0].Y); |
| | | } |
| | | if (curve_min_p < 0.1) |
| | | curve_min_p = 0; |
| | | |
| | | |
| | | |
| | | |
| | | //扬程 |
| | | for (var i = 0; i < 30; i++) { |
| | | if (m_coordinatePara.DispMinH < 0) break; |
| | | if (curve_min_h > m_coordinatePara.DispMinH) break; |
| | | m_coordinatePara.StartLineNoH = m_coordinatePara.StartLineNoH - 1; |
| | | m_coordinatePara.DispMinH = |
| | | m_coordinatePara.DispMinH - m_coordinatePara.SpaceH; |
| | | isNeedRefresh = true; |
| | | } |
| | | |
| | | if ( |
| | | m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH > 12 || |
| | | m_coordinatePara.StartLineNoH < 0 |
| | | ) { |
| | | var spaceh2 = m_coordinatePara.SpaceH * 2; |
| | | m_coordinatePara.StartLineNoH = |
| | | m_coordinatePara.EndLineNoH - |
| | | parseInt( |
| | | (m_coordinatePara.DispMaxH - m_coordinatePara.DispMinH) / spaceh2 |
| | | ) - |
| | | 1; |
| | | m_coordinatePara.DispMinH = |
| | | m_coordinatePara.DispMaxH - |
| | | spaceh2 * (m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH); |
| | | |
| | | m_coordinatePara.SpaceH = spaceh2; |
| | | isNeedRefresh = true; |
| | | if ( |
| | | m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH > 10 || |
| | | m_coordinatePara.StartLineNoH < 0 |
| | | ) { |
| | | var spaceh4 = m_coordinatePara.SpaceH * 2; |
| | | m_coordinatePara.StartLineNoH = |
| | | m_coordinatePara.EndLineNoH - |
| | | parseInt( |
| | | (m_coordinatePara.DispMaxH - m_coordinatePara.DispMinH) / spaceh4 |
| | | ) - |
| | | 1; |
| | | m_coordinatePara.DispMinH = |
| | | m_coordinatePara.DispMaxH - |
| | | spaceh4 * |
| | | (m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH); |
| | | |
| | | m_coordinatePara.SpaceH = spaceh4; |
| | | isNeedRefresh = true; |
| | | } |
| | | } |
| | | |
| | | //扬程上部是否又多余空格 |
| | | |
| | | |
| | | |
| | | |
| | | for (var i = 0; i < 30; i++) { |
| | | if (m_coordinatePara.DispMinP < 0) break; |
| | | if (curve_min_p > m_coordinatePara.DispMinP) break; |
| | | m_coordinatePara.StartLineNoP = m_coordinatePara.StartLineNoP - 1; |
| | | m_coordinatePara.DispMinP = |
| | | m_coordinatePara.DispMinP - m_coordinatePara.SpaceP; |
| | | m_coordinatePara.MinP = m_coordinatePara.DispMinP - m_coordinatePara.StartLineNoP * m_coordinatePara.SpaceP; |
| | | isNeedRefresh = true; |
| | | } |
| | | |
| | | if ( |
| | | m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP > 10 || |
| | | m_coordinatePara.StartLineNoP < 0 |
| | | ) { |
| | | var spacep2 = m_coordinatePara.SpaceP * 2; |
| | | |
| | | m_coordinatePara.StartLineNoP = |
| | | m_coordinatePara.EndLineNoP - |
| | | parseInt( |
| | | (m_coordinatePara.DispMaxP - m_coordinatePara.DispMinP) / spacep2 |
| | | ) - |
| | | 1; |
| | | m_coordinatePara.DispMinP = |
| | | m_coordinatePara.DispMaxP - |
| | | spacep2 * (m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP); |
| | | |
| | | m_coordinatePara.SpaceP = spacep2; |
| | | isNeedRefresh = true; |
| | | |
| | | if ( |
| | | m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP > 10 || |
| | | m_coordinatePara.StartLineNoP < 0 |
| | | ) { |
| | | var spacep4 = m_coordinatePara.SpaceP * 4; |
| | | |
| | | m_coordinatePara.StartLineNoP = |
| | | m_coordinatePara.EndLineNoP - |
| | | parseInt( |
| | | (m_coordinatePara.DispMaxP - m_coordinatePara.DispMinP) / spacep4 |
| | | ) - |
| | | 1; |
| | | m_coordinatePara.DispMinP = |
| | | m_coordinatePara.DispMaxP - |
| | | spacep4 * |
| | | (m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP); |
| | | |
| | | m_coordinatePara.SpaceP = spacep4; |
| | | } |
| | | m_coordinatePara.MinP = m_coordinatePara.DispMinP - m_coordinatePara.StartLineNoP * m_coordinatePara.SpaceP; |
| | | } |
| | | |
| | | // |
| | | if (m_coordinatePara.DispMinQ > 0) { |
| | | var min_flow = 100000; |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | var simu_curve = m_simuSpeedCurves[i]; |
| | | if (simu_curve.RealQH == null) continue; |
| | | min_flow = Math.min(min_flow, simu_curve.RealQH[0].X); |
| | | } |
| | | |
| | | if (min_flow < m_coordinatePara.DispMinQ) { |
| | | m_coordinatePara.DispMinQ = |
| | | m_coordinatePara.DispMinQ - m_coordinatePara.SpaceQ; |
| | | m_coordinatePara.GridNumberX++; |
| | | m_coordinatePara.MinQ = m_coordinatePara.MinQ - m_coordinatePara.SpaceQ; |
| | | if (min_flow < m_coordinatePara.DispMinQ) { |
| | | m_coordinatePara.DispMinQ = |
| | | m_coordinatePara.DispMinQ - m_coordinatePara.SpaceQ; |
| | | m_coordinatePara.MinQ = |
| | | m_coordinatePara.MinQ - m_coordinatePara.SpaceQ; |
| | | m_coordinatePara.GridNumberX++; |
| | | } |
| | | if (min_flow < m_coordinatePara.DispMinQ) { |
| | | m_coordinatePara.DispMinQ = |
| | | m_coordinatePara.DispMinQ - m_coordinatePara.SpaceQ; |
| | | m_coordinatePara.MinQ = |
| | | m_coordinatePara.MinQ - m_coordinatePara.SpaceQ; |
| | | m_coordinatePara.GridNumberX++; |
| | | } |
| | | |
| | | if (m_chartSize.TotalHeight < 500) |
| | | m_chartSize.TotalHeight = 500; |
| | | isNeedRefresh = true; |
| | | } |
| | | } |
| | | |
| | | var space_left = 70; |
| | | var space_right = 60; |
| | | var space_top = 10; |
| | | var space_bottom = 60; |
| | | if (m_coordinatePara.SpaceP > 99) { |
| | | space_left = 80; |
| | | // if (isNeedRefresh) { |
| | | // document.getElementById(m_divChartName).innerHTML = ""; |
| | | |
| | | // //初始化面板尺寸 |
| | | // initialPanelSize(); |
| | | |
| | | // drawDiagramPanel(); |
| | | |
| | | // drawDiagramCurve(); |
| | | // } |
| | | return isNeedRefresh; |
| | | }; |
| | | // |
| | | var getSvgObjByName = function (objName) { |
| | | return m_svg.getPathByName(objName); |
| | | }; |
| | | var removeElementById = function (id) { |
| | | var obj = document.getElementById(id); |
| | | if (obj != null) { |
| | | //console.log(id+ " is remove") |
| | | obj.remove(); |
| | | } |
| | | }; |
| | | var hideElementById = function (id) { |
| | | var obj = document.getElementById(id); |
| | | if (obj != null) { |
| | | //console.log(id+ " is remove") |
| | | obj.style.display = "none"; |
| | | } |
| | | }; |
| | | var showElementById = function (id) { |
| | | var obj = document.getElementById(id); |
| | | if (obj != null) { |
| | | obj.style.display = ""; |
| | | } |
| | | }; |
| | | // |
| | | var svgClick = function (e) { }; |
| | | // |
| | | var svgMove = function (e) { |
| | | //alert("svgMove"); |
| | | }; |
| | | |
| | | //翻译 |
| | | var getTranslateString = function (cn) { |
| | | if (m_localizationType == 0) return cn; |
| | | return languageHelper.translateString(m_localizationType, cn); |
| | | }; |
| | | |
| | | //绘制x坐标(含标题) |
| | | var createXAxis = function (bottom_posi, title_space) { |
| | | if (m_coordinatePara == null) { |
| | | return; |
| | | } |
| | | |
| | | //刻度线 |
| | | var attrAxisTickX = { |
| | | stroke: "black", |
| | | "stroke-width": "1", |
| | | fill: "none", |
| | | zIndex: 10, |
| | | }; |
| | | |
| | | //刻度长度 |
| | | var minTickLength = 4; |
| | | var tickLength = 6; |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelX = "font-size:11px;fill-opacity:1;fill:black;"; //font-weight:bold |
| | | |
| | | //标题文字 |
| | | var styleAxisTitleX = |
| | | "font-size:14px;fill-opacity:1;fill:black;font-weight:bold;"; |
| | | |
| | | // |
| | | for (var i = 0; i <= m_coordinatePara.GridNumberX; i++) { |
| | | let q = m_coordinatePara.MinQ + i * m_coordinatePara.SpaceQ; |
| | | //console.log(q) |
| | | var content = UnitHelper.valueFormat( |
| | | UnitHelper.getDispValueQ(UnitHelper.ConvertQ_fromM3H(m_unit.Q, q)) |
| | | ); |
| | | var posiX_grid = m_chartSize.DiagramLeft + m_chartSize.SpaceGridX * i; |
| | | //刻度线 |
| | | var valueMain = []; |
| | | valueMain.push( |
| | | "M ", |
| | | posiX_grid, |
| | | " ", |
| | | bottom_posi, |
| | | " L ", |
| | | posiX_grid, |
| | | " ", |
| | | bottom_posi + tickLength |
| | | ); |
| | | m_svg.createPath(null, valueMain.join(""), attrAxisTickX, null); //"TickLineX" + i |
| | | |
| | | //文字 m_displayStyle.isAxisIntervalX |
| | | var label_y = bottom_posi + tickLength + 15; |
| | | if (m_displayStyle.isRotateLabelX) label_y = label_y + 1; |
| | | var attrAxisLabelX = { |
| | | opacity: 1, |
| | | x: posiX_grid, |
| | | y: label_y, |
| | | "text-anchor": "middle", |
| | | }; |
| | | var transform = null; |
| | | if (m_displayStyle.isRotateLabelX) |
| | | transform = "rotate(45 " + posiX_grid + "," + label_y + ")"; |
| | | if (m_displayStyle.isAxisIntervalX) { |
| | | if (i % 2 == 0) |
| | | m_svg.createText( |
| | | attrAxisLabelX, |
| | | styleAxisLabelX, |
| | | content, |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } else { |
| | | m_svg.createText( |
| | | attrAxisLabelX, |
| | | styleAxisLabelX, |
| | | content, |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != m_coordinatePara.GridNumberX) { |
| | | for (var j = 0; j <= m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = |
| | | posiX_grid + |
| | | (m_chartSize.SpaceGridX * j) / (m_displayStyle.MiniTickNumber + 1); |
| | | var valueMini = []; |
| | | valueMini.push( |
| | | "M ", |
| | | pois_minTick, |
| | | " ", |
| | | bottom_posi, |
| | | " L ", |
| | | pois_minTick, |
| | | " ", |
| | | bottom_posi + minTickLength |
| | | ); |
| | | m_svg.createPath(null, valueMini.join(""), attrAxisTickX, null); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (title_space > 0) { |
| | | var attrAxisTitleX = { |
| | | opacity: 1, |
| | | x: (m_chartSize.DiagramLeft + m_chartSize.DiagramRight) / 2, |
| | | y: bottom_posi + title_space, |
| | | "text-anchor": "middle", |
| | | }; |
| | | if (m_displayStyle.isRotateLabelX) |
| | | attrAxisTitleX.y = attrAxisTitleX.y + 12; |
| | | |
| | | let unit_name = UnitHelper.GetUnitNameQ(m_unit.Q); |
| | | m_svg.createText( |
| | | attrAxisTitleX, |
| | | styleAxisTitleX, |
| | | getTranslateString("流量") + " (" + unit_name + ")" |
| | | ); |
| | | } |
| | | }; |
| | | //绘制Y坐标(含标题) |
| | | var createYAxis_Whole = function () { |
| | | if (m_coordinatePara == null) { |
| | | return; |
| | | } |
| | | |
| | | //刻度长度 |
| | | var minTickLength = 3; |
| | | var tickLength = 6; |
| | | |
| | | //扬程 |
| | | if (m_coordinatePara.EndLineNoH > m_coordinatePara.StartLineNoH) { |
| | | //刻度线 |
| | | var attrAxisTickH = { |
| | | stroke: m_displayStyle.ColorH, |
| | | "stroke-width": "1", |
| | | fill: "none", |
| | | }; |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelH = |
| | | "font-size:11px; fill-opacity:1; fill:" + m_displayStyle.ColorH + ";"; |
| | | //标签 |
| | | var styleAxisTitleH = |
| | | "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + |
| | | m_displayStyle.ColorH + |
| | | ";"; |
| | | |
| | | let unit_h_name = UnitHelper.GetUnitNameH(m_unit.H); |
| | | |
| | | //标签 |
| | | var attrAxisTitleH = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramLeft - 52, |
| | | y: |
| | | m_chartSize.UpDiagram.Bottom - |
| | | m_chartSize.UpDiagram.SpaceGridY * |
| | | ((m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH) / 2 + |
| | | m_coordinatePara.StartLineNoH) - |
| | | 10, |
| | | "text-anchor": "middle", |
| | | }; |
| | | if (m_localizationType == 0) { |
| | | //中文 |
| | | if (m_unit.H == UnitHelper.H.MPa || m_unit.H == UnitHelper.H.KPa) { |
| | | attrAxisTitleH.y = attrAxisTitleH.y - 5; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "压"); |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 15; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "力"); |
| | | |
| | | attrAxisTitleH.x = attrAxisTitleH.x + 3; |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 21; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")"; |
| | | if (m_unit.H == UnitHelper.H.MPa) |
| | | m_svg.createText( |
| | | attrAxisTitleH, |
| | | styleAxisTitleH, |
| | | "(MPa)", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | else if (m_unit.H == UnitHelper.H.MPa) |
| | | m_svg.createText( |
| | | attrAxisTitleH, |
| | | styleAxisTitleH, |
| | | "(kPa)", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } else { |
| | | attrAxisTitleH.y = attrAxisTitleH.y - 5; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "扬"); |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 15; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "程"); |
| | | |
| | | if (m_unit.H == 0) { |
| | | attrAxisTitleH.x = attrAxisTitleH.x + 3; |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 21; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")"; //不用多出空格否则全屏会有问题expandChartFullScreen |
| | | m_svg.createText( |
| | | attrAxisTitleH, |
| | | styleAxisTitleH, |
| | | "(" + unit_h_name + ")", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } |
| | | } |
| | | } else { |
| | | var content = "Head (" + unit_h_name + ")"; |
| | | if (m_unit.H == UnitHelper.H.MPa) { |
| | | content = "Press (MPa)"; |
| | | } |
| | | if (m_unit.H == UnitHelper.H.KPa) { |
| | | content = "Press (KPa)"; |
| | | } |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")"; //不用多出空格否则全屏会有问题expandChartFullScreen |
| | | m_svg.createText( |
| | | attrAxisTitleH, |
| | | styleAxisTitleH, |
| | | content, |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } |
| | | |
| | | // |
| | | for ( |
| | | var i = m_coordinatePara.StartLineNoH; |
| | | i <= m_coordinatePara.EndLineNoH; |
| | | i++ |
| | | ) { |
| | | var posiY_grid = |
| | | m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * i; |
| | | |
| | | //主刻度 |
| | | var valueMain = []; |
| | | valueMain.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft, |
| | | " ", |
| | | posiY_grid, |
| | | " L ", |
| | | m_chartSize.DiagramLeft - tickLength, |
| | | " ", |
| | | posiY_grid |
| | | ); |
| | | m_svg.createPath(null, valueMain.join(""), attrAxisTickH, null); |
| | | |
| | | //文字 |
| | | var attrAxisLabelH = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramLeft - 10, |
| | | y: posiY_grid + 5, |
| | | "text-anchor": "end", |
| | | }; |
| | | var content = UnitHelper.valueFormat( |
| | | m_coordinatePara.DispMinH + |
| | | (i - m_coordinatePara.StartLineNoH) * m_coordinatePara.SpaceH |
| | | ); |
| | | m_svg.createText(attrAxisLabelH, styleAxisLabelH, content); |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != m_coordinatePara.EndLineNoH) { |
| | | for (var j = 1; j <= m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = |
| | | posiY_grid - |
| | | (m_chartSize.UpDiagram.SpaceGridY * j) / |
| | | (m_displayStyle.MiniTickNumber + 1); |
| | | var valueMini = []; |
| | | valueMini.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft, |
| | | " ", |
| | | pois_minTick, |
| | | " L ", |
| | | m_chartSize.DiagramLeft - minTickLength, |
| | | " ", |
| | | pois_minTick |
| | | ); |
| | | m_svg.createPath(null, valueMini.join(""), attrAxisTickH, null); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //效率 |
| | | if ( |
| | | m_coordinatePara.EndLineNoE > m_coordinatePara.StartLineNoE && |
| | | m_isDispCurveQE |
| | | ) { |
| | | //刻度线 |
| | | var attrAxisTickE = { |
| | | stroke: m_displayStyle.ColorE, |
| | | "stroke-width": "1", |
| | | fill: "none", |
| | | }; |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelE = |
| | | "font-size:10px; fill-opacity:1; fill:" + m_displayStyle.ColorE + ";"; |
| | | //标签 |
| | | var styleAxisTitleE = |
| | | "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + |
| | | m_displayStyle.ColorE + |
| | | ";"; |
| | | // |
| | | var attrAxisTitleE = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramRight + 44, |
| | | y: |
| | | m_chartSize.UpDiagram.Bottom - |
| | | m_chartSize.UpDiagram.SpaceGridY * |
| | | ((m_coordinatePara.EndLineNoE - m_coordinatePara.StartLineNoE) / 2 + |
| | | m_coordinatePara.StartLineNoE) - |
| | | 10, |
| | | "text-anchor": "middle", |
| | | }; |
| | | |
| | | //标签 |
| | | if (m_localizationType == 0) { |
| | | //中文 |
| | | attrAxisTitleE.y = attrAxisTitleE.y - 5; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "效"); |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 15; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "率"); |
| | | |
| | | attrAxisTitleE.x = attrAxisTitleE.x + 6; |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 24; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleE.x + "," + attrAxisTitleE.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleE, |
| | | styleAxisTitleE, |
| | | "(%)", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } else { |
| | | attrAxisTitleE.x = attrAxisTitleE.x + 6; |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 24; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleE.x + "," + attrAxisTitleE.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleE, |
| | | styleAxisTitleE, |
| | | "Eta (%)", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } |
| | | |
| | | // |
| | | for ( |
| | | var i = m_coordinatePara.StartLineNoE; |
| | | i <= m_coordinatePara.EndLineNoE; |
| | | i++ |
| | | ) { |
| | | var content = m_coordinatePara.MinE + i * m_coordinatePara.SpaceE; |
| | | var posiY_grid = |
| | | m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = []; |
| | | valueMain.push( |
| | | "M ", |
| | | m_chartSize.DiagramRight, |
| | | " ", |
| | | posiY_grid, |
| | | " L ", |
| | | m_chartSize.DiagramRight + tickLength, |
| | | " ", |
| | | posiY_grid |
| | | ); |
| | | m_svg.createPath(null, valueMain.join(""), attrAxisTickE, null); |
| | | |
| | | //文字 |
| | | var attrAxisLabelE = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramRight + 10, |
| | | y: posiY_grid + 5, |
| | | }; |
| | | m_svg.createText(attrAxisLabelE, styleAxisLabelE, content); |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != m_coordinatePara.EndLineNoE) { |
| | | for (var j = 0; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = |
| | | posiY_grid - |
| | | (m_chartSize.UpDiagram.SpaceGridY * j) / |
| | | m_displayStyle.MiniTickNumber; |
| | | var valueMini = []; |
| | | valueMini.push( |
| | | "M ", |
| | | m_chartSize.DiagramRight, |
| | | " ", |
| | | pois_minTick, |
| | | " L ", |
| | | m_chartSize.DiagramRight + minTickLength, |
| | | " ", |
| | | pois_minTick |
| | | ); |
| | | m_svg.createPath(null, valueMini.join(""), attrAxisTickE, null); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //功率 |
| | | if (m_coordinatePara.EndLineNoP > m_coordinatePara.StartLineNoP) { |
| | | //刻度线 |
| | | var attrAxisTickP = { |
| | | stroke: m_displayStyle.ColorP, |
| | | "stroke-width": "1", |
| | | fill: "none", |
| | | }; |
| | | |
| | | let unit_p_name = UnitHelper.GetUnitNameP(m_unit.P); |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelP = |
| | | "font-size:10px; fill-opacity:1; fill:" + m_displayStyle.ColorP + ";"; |
| | | //标签 |
| | | var styleAxisTitleP = |
| | | "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + |
| | | m_displayStyle.ColorP + |
| | | ";"; |
| | | |
| | | //标签 |
| | | if (m_localizationType == 0) { |
| | | //中文 |
| | | var attrAxisTitleP = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramLeft - 52, |
| | | y: |
| | | m_chartSize.DownDiagram.Bottom - |
| | | m_chartSize.DownDiagram.SpaceGridY * |
| | | ((m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP) / |
| | | 2 + |
| | | m_coordinatePara.StartLineNoP), |
| | | "text-anchor": "middle", |
| | | }; |
| | | if (m_coordinatePara.SpaceP <= 0.1) { |
| | | space_left = 80; |
| | | attrAxisTitleP.x = attrAxisTitleP.x - 5; |
| | | } |
| | | if (m_localizationType >= 2) { |
| | | space_left = 75; |
| | | space_right = 75; |
| | | attrAxisTitleP.y = attrAxisTitleP.y - 5; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "功"); |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 15; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "率"); |
| | | |
| | | attrAxisTitleP.x = attrAxisTitleP.x + 2; |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 25; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleP.x + "," + attrAxisTitleP.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleP, |
| | | styleAxisTitleP, |
| | | "(" + unit_p_name + ")", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } else { |
| | | var attrAxisTitleP = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramLeft - 60, |
| | | y: |
| | | m_chartSize.DownDiagram.Bottom - |
| | | m_chartSize.DownDiagram.SpaceGridY * |
| | | ((m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP) / |
| | | 2 + |
| | | m_coordinatePara.StartLineNoP) - |
| | | 10, |
| | | "text-anchor": "middle", |
| | | }; |
| | | if (m_coordinatePara.SpaceP <= 0.1) { |
| | | attrAxisTitleP.x = attrAxisTitleP.x - 5; |
| | | } |
| | | attrAxisTitleP.x = attrAxisTitleP.x + 13; |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 25; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleP.x + "," + attrAxisTitleP.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleP, |
| | | styleAxisTitleP, |
| | | "Power (" + unit_p_name + ")", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } |
| | | |
| | | m_chartSize.SpaceTop = space_top; |
| | | m_chartSize.SpaceRight = space_right; |
| | | m_chartSize.SpaceBottom = space_bottom; |
| | | m_chartSize.SpaceLeft = space_left; |
| | | // |
| | | for ( |
| | | var i = m_coordinatePara.StartLineNoP; |
| | | i <= m_coordinatePara.EndLineNoP; |
| | | i++ |
| | | ) { |
| | | var content = UnitHelper.valueFormat( |
| | | m_coordinatePara.MinP + i * m_coordinatePara.SpaceP |
| | | ); |
| | | |
| | | m_chartSize.DiagramTop = space_top; |
| | | m_chartSize.DiagramLeft = space_left; |
| | | m_chartSize.DiagramRight = m_chartSize.TotalWidth - space_right; |
| | | m_chartSize.DiagramBottom = m_chartSize.TotalHeight - space_bottom; |
| | | content = UnitHelper.formatToFixed( |
| | | parseFloat(UnitHelper.ConvertP(UnitHelper.P.KW, m_unit.P, content)), |
| | | 1 |
| | | ); |
| | | |
| | | m_chartSize.DiagramWidth = m_chartSize.TotalWidth - space_left - space_right; |
| | | m_chartSize.DiagramHeight = m_chartSize.TotalHeight - space_top - space_bottom; |
| | | var posiY_grid = |
| | | m_chartSize.DownDiagram.Bottom - |
| | | m_chartSize.DownDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = []; |
| | | valueMain.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft, |
| | | " ", |
| | | posiY_grid, |
| | | " L ", |
| | | m_chartSize.DiagramLeft - tickLength, |
| | | " ", |
| | | posiY_grid |
| | | ); |
| | | m_svg.createPath(null, valueMain.join(""), attrAxisTickP, null); |
| | | |
| | | m_chartSize.SpaceGridX = m_chartSize.DiagramWidth / m_coordinatePara.GridNumberX; |
| | | |
| | | if (m_chartDiagramPanelStyle == ConstParas.ChartDiagramPanelStyle.Whole) { |
| | | |
| | | m_chartSize.UpDiagram = {}; |
| | | m_chartSize.UpDiagram.Up = space_top; |
| | | m_chartSize.UpDiagram.Bottom = m_chartSize.TotalHeight - space_bottom; |
| | | m_chartSize.UpDiagram.SpaceGridY = m_chartSize.DiagramHeight / m_coordinatePara.GridNumberY; |
| | | m_chartSize.UpDiagram.GridNumberY = m_coordinatePara.GridNumberY; |
| | | |
| | | m_chartSize.DownDiagram = {};//一样 |
| | | m_chartSize.DownDiagram.Up = space_top; |
| | | m_chartSize.DownDiagram.Bottom = m_chartSize.TotalHeight - space_bottom; |
| | | m_chartSize.DownDiagram.SpaceGridY = m_chartSize.DiagramHeight / m_coordinatePara.GridNumberY; |
| | | m_chartSize.DownDiagram.GridNumberY = m_coordinatePara.GridNumberY; |
| | | |
| | | |
| | | m_chartSize.PanelH = {}; |
| | | m_chartSize.PanelH.Bottom = m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.StartLineNoH; |
| | | m_chartSize.PanelH.Up = m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.EndLineNoH; |
| | | |
| | | m_chartSize.PanelE = {}; |
| | | m_chartSize.PanelE.Bottom = m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.StartLineNoE; |
| | | m_chartSize.PanelE.Up = m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.EndLineNoE; |
| | | |
| | | m_chartSize.PanelP = {}; |
| | | m_chartSize.PanelP.Bottom = m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.StartLineNoP; |
| | | m_chartSize.PanelP.Up = m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.EndLineNoP; |
| | | |
| | | m_chartSize.PanelNPSH = {}; |
| | | m_chartSize.PanelNPSH.Bottom = m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.StartLineNoNPSH; |
| | | m_chartSize.PanelNPSH.Up = m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * m_coordinatePara.EndLineNoNPSH; |
| | | |
| | | //console.log(m_chartSize) |
| | | //把间隙弄小点 |
| | | 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 |
| | | }; |
| | | |
| | | // |
| | | m_svg.createArea(areaAttr, areaStyle); |
| | | } |
| | | else { |
| | | var panel_space = 35; |
| | | m_chartSize.PanelSpace = panel_space; |
| | | |
| | | var grid_num_h = m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH; |
| | | var grid_num_e = m_coordinatePara.EndLineNoE - m_coordinatePara.StartLineNoE; |
| | | |
| | | var grid_num_up = Math.max(grid_num_h, grid_num_e); |
| | | grid_num_up = grid_num_up + 2;//多两条 |
| | | if (!m_isDispCurveQE) { |
| | | grid_num_up = m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH; |
| | | } |
| | | //console.log(grid_num_up, grid_num_h, grid_num_e) ; |
| | | var grid_num_NPSH = m_coordinatePara.EndLineNoNPSH - m_coordinatePara.StartLineNoNPSH; |
| | | var grid_num_p = m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP; |
| | | var grid_num_down = Math.max(grid_num_NPSH, grid_num_p) + 1; |
| | | |
| | | |
| | | m_chartSize.UpDiagram = {}; |
| | | m_chartSize.UpDiagram.Up = space_top; |
| | | m_chartSize.UpDiagram.SpaceGridY = (m_chartSize.DiagramHeight - panel_space) / (grid_num_up + grid_num_down); |
| | | m_chartSize.UpDiagram.Bottom = space_top + grid_num_up * m_chartSize.UpDiagram.SpaceGridY; |
| | | m_chartSize.UpDiagram.GridNumberY = grid_num_up; |
| | | |
| | | |
| | | m_chartSize.DownDiagram = {}; |
| | | m_chartSize.DownDiagram.Up = m_chartSize.UpDiagram.Bottom + panel_space; |
| | | m_chartSize.DownDiagram.SpaceGridY = (m_chartSize.DiagramHeight - panel_space) / (grid_num_up + grid_num_down); |
| | | m_chartSize.DownDiagram.Bottom = m_chartSize.TotalHeight - space_bottom; |
| | | m_chartSize.DownDiagram.GridNumberY = grid_num_down; |
| | | |
| | | |
| | | |
| | | m_chartSize.PanelH = {}; |
| | | m_chartSize.PanelH.Bottom = m_chartSize.UpDiagram.Up + m_chartSize.UpDiagram.SpaceGridY * grid_num_h; |
| | | m_chartSize.PanelH.Up = m_chartSize.UpDiagram.Up; |
| | | |
| | | m_chartSize.PanelE = {}; |
| | | m_chartSize.PanelE.Bottom = m_chartSize.UpDiagram.Bottom; |
| | | m_chartSize.PanelE.Up = m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * grid_num_e; |
| | | |
| | | m_chartSize.PanelP = {}; |
| | | m_chartSize.PanelP.Up = m_chartSize.DownDiagram.Up; |
| | | m_chartSize.PanelP.Bottom = m_chartSize.DownDiagram.Up + m_chartSize.DownDiagram.SpaceGridY * grid_num_p; |
| | | |
| | | |
| | | m_chartSize.PanelNPSH = {}; |
| | | m_chartSize.PanelNPSH.Bottom = m_chartSize.DownDiagram.Bottom; |
| | | m_chartSize.PanelNPSH.Up = m_chartSize.DownDiagram.Bottom - m_chartSize.DownDiagram.SpaceGridY * grid_num_NPSH; |
| | | |
| | | //console.log(m_chartSize) |
| | | } |
| | | }; |
| | | // |
| | | var getSvgObjByName = function (objName) { |
| | | return m_svg.getPathByName(objName); |
| | | }; |
| | | //代码临时注释 |
| | | var svgClick = function (e) { |
| | | |
| | | }; |
| | | // |
| | | var svgMove = function (e) { |
| | | //alert("svgMove"); |
| | | }; |
| | | |
| | | //翻译 |
| | | var getTranslateString = function (cn) { |
| | | if (m_localizationType == 0) |
| | | return cn; |
| | | if(m_localizationType == 6){//ko |
| | | if (cn == "流量") |
| | | return "유량"; |
| | | else if (cn == "压力") |
| | | return "압력받다"; |
| | | else if (cn == "扬程") |
| | | return "양정"; |
| | | else if (cn == "效率") |
| | | return "효율성"; |
| | | else if (cn == "功率") |
| | | return "파워"; |
| | | } |
| | | if(m_localizationType == 8){//es |
| | | if (cn == "流量") |
| | | return "Caudal"; |
| | | else if (cn == "压力") |
| | | return "Presión"; |
| | | else if (cn == "扬程") |
| | | return "Cabezal"; |
| | | else if (cn == "效率") |
| | | return "Eficiencia"; |
| | | else if (cn == "功率") |
| | | return "Potencia"; |
| | | } |
| | | if(m_localizationType == 5){//ru |
| | | if (cn == "流量") |
| | | return "поток"; |
| | | else if (cn == "压力") |
| | | return "давление"; |
| | | else if (cn == "扬程") |
| | | return "напор"; |
| | | else if (cn == "效率") |
| | | return "эффективность"; |
| | | else if (cn == "功率") |
| | | return "мощность "; |
| | | } |
| | | 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 if (cn == "汽蚀") |
| | | return "NPSHr"; |
| | | else |
| | | return cn; |
| | | }; |
| | | //绘制x坐标(含标题) |
| | | var createXAxis = function (bottom_posi, title_space) { |
| | | if (m_coordinatePara == null) { |
| | | return; |
| | | } |
| | | |
| | | //刻度线 |
| | | var attrAxisTickX = { |
| | | "stroke": "black", |
| | | "stroke-width": "1", |
| | | "fill": "none", |
| | | "zIndex": 10 |
| | | //文字 |
| | | var attrAxisLabelP = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramLeft - 10, |
| | | y: posiY_grid + 5, |
| | | "text-anchor": "end", |
| | | }; |
| | | |
| | | //刻度长度 |
| | | var minTickLength = 4; |
| | | var tickLength = 6; |
| | | m_svg.createText(attrAxisLabelP, styleAxisLabelP, content); |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelX = "font-size:11px;fill-opacity:1;fill:black;";//font-weight:bold |
| | | |
| | | //标题文字 |
| | | var styleAxisTitleX = "font-size:14px;fill-opacity:1;fill:black;font-weight:bold;"; |
| | | |
| | | // |
| | | for (var i = 0; i <= m_coordinatePara.GridNumberX; i++) { |
| | | |
| | | let q = m_coordinatePara.MinQ + i * m_coordinatePara.SpaceQ; |
| | | //console.log(q) |
| | | var content = UnitHelper.valueFormat(UnitHelper.getDispValueQ(UnitHelper.ConvertQ_fromM3H(m_unit.Q, q))); |
| | | var posiX_grid = m_chartSize.DiagramLeft + m_chartSize.SpaceGridX * i; |
| | | //刻度线 |
| | | var valueMain = new Array(); |
| | | valueMain.push("M ", posiX_grid, " ", bottom_posi, " L ", posiX_grid, " ", bottom_posi + tickLength); |
| | | m_svg.createPath(null, valueMain.join(''), attrAxisTickX, null);//"TickLineX" + i |
| | | |
| | | //文字 m_displayStyle.isAxisIntervalX |
| | | var label_y = bottom_posi + tickLength + 15; |
| | | if (m_displayStyle.isRotateLabelX) |
| | | label_y = label_y + 1; |
| | | var attrAxisLabelX = { |
| | | "opacity": 1, |
| | | "x": posiX_grid, |
| | | "y": label_y, |
| | | "text-anchor": "middle" |
| | | }; |
| | | var transform = null; |
| | | if (m_displayStyle.isRotateLabelX) |
| | | transform = "rotate(45 " + posiX_grid + "," + label_y + ")"; |
| | | if (m_displayStyle.isAxisIntervalX) { |
| | | if (i % 2 == 0) |
| | | m_svg.createText(attrAxisLabelX, styleAxisLabelX, content, 10, null, transform); |
| | | } |
| | | else { |
| | | m_svg.createText(attrAxisLabelX, styleAxisLabelX, content, 10, null, transform); |
| | | } |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != m_coordinatePara.GridNumberX) { |
| | | for (var j = 0; j <= m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = posiX_grid + m_chartSize.SpaceGridX * j / (m_displayStyle.MiniTickNumber + 1); |
| | | var valueMini = new Array(); |
| | | valueMini.push("M ", pois_minTick, " ", bottom_posi, " L ", pois_minTick, " ", bottom_posi + minTickLength); |
| | | m_svg.createPath(null, valueMini.join(''), attrAxisTickX, null); |
| | | } |
| | | } |
| | | //子刻度线 |
| | | if ( |
| | | m_displayStyle.isDispMiniTick && |
| | | i != m_coordinatePara.EndLineNoP && |
| | | i != m_coordinatePara.EndLineNoE |
| | | ) { |
| | | for (var j = 1; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = |
| | | posiY_grid - |
| | | (m_chartSize.DownDiagram.SpaceGridY * j) / |
| | | m_displayStyle.MiniTickNumber; |
| | | var valueMini = []; |
| | | valueMini.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft, |
| | | " ", |
| | | pois_minTick, |
| | | " L ", |
| | | m_chartSize.DiagramLeft - minTickLength, |
| | | " ", |
| | | pois_minTick |
| | | ); |
| | | m_svg.createPath(null, valueMini.join(""), attrAxisTickP, null); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (title_space > 0) { |
| | | var attrAxisTitleX = { |
| | | "opacity": 1, |
| | | "x": (m_chartSize.DiagramLeft + m_chartSize.DiagramRight) / 2, |
| | | "y": bottom_posi + title_space, |
| | | "text-anchor": "middle" |
| | | }; |
| | | if (m_displayStyle.isRotateLabelX) |
| | | attrAxisTitleX.y = attrAxisTitleX.y + 12; |
| | | //汽蚀 |
| | | if ( |
| | | m_isHaveNpsh && |
| | | m_coordinatePara.EndLineNoNPSH > m_coordinatePara.StartLineNoNPSH |
| | | ) { |
| | | //刻度线 |
| | | var attrAxisTickNPSH = { |
| | | stroke: m_displayStyle.ColorNPSH, |
| | | "stroke-width": "1", |
| | | fill: "none", |
| | | }; |
| | | |
| | | let unit_name = UnitHelper.GetUnitNameQ(m_unit.Q); |
| | | m_svg.createText(attrAxisTitleX, styleAxisTitleX, getTranslateString("流量") + " (" + unit_name + ")"); |
| | | //刻度文字 |
| | | var styleAxisLabelNPSH = |
| | | "font-size:10px; fill-opacity:1; fill:" + |
| | | m_displayStyle.ColorNPSH + |
| | | ";"; |
| | | //标签 |
| | | var styleAxisTitleNPSH = |
| | | "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + |
| | | m_displayStyle.ColorNPSH + |
| | | ";"; |
| | | |
| | | //标签 |
| | | var attrAxisTitleNPSH = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramRight + 44, |
| | | y: |
| | | m_chartSize.DownDiagram.Bottom - |
| | | m_chartSize.DownDiagram.SpaceGridY * |
| | | ((m_coordinatePara.EndLineNoNPSH - |
| | | m_coordinatePara.StartLineNoNPSH) / |
| | | 2 + |
| | | m_coordinatePara.StartLineNoNPSH) - |
| | | 10, |
| | | "text-anchor": "middle", |
| | | }; |
| | | if (m_localizationType == 0) { |
| | | //中文 |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y - 5; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, "汽"); |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 15; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, "蚀"); |
| | | attrAxisTitleNPSH.x = attrAxisTitleNPSH.x + 6; |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 24; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleNPSH.x + "," + attrAxisTitleNPSH.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleNPSH, |
| | | styleAxisTitleNPSH, |
| | | "(m)", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } else { |
| | | attrAxisTitleNPSH.x = attrAxisTitleNPSH.x + 6; |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 24; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleNPSH.x + "," + attrAxisTitleNPSH.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleNPSH, |
| | | styleAxisTitleNPSH, |
| | | "NPSHr (m)", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } |
| | | |
| | | // |
| | | for ( |
| | | var i = m_coordinatePara.StartLineNoNPSH; |
| | | i <= m_coordinatePara.EndLineNoNPSH; |
| | | i++ |
| | | ) { |
| | | var content = UnitHelper.valueFormat( |
| | | m_coordinatePara.MinNPSH + i * m_coordinatePara.SpaceNPSH |
| | | ); |
| | | var posiY_grid = |
| | | m_chartSize.DownDiagram.Bottom - |
| | | m_chartSize.DownDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = []; |
| | | valueMain.push( |
| | | "M ", |
| | | m_chartSize.DiagramRight, |
| | | " ", |
| | | posiY_grid, |
| | | " L ", |
| | | m_chartSize.DiagramRight + tickLength, |
| | | " ", |
| | | posiY_grid |
| | | ); |
| | | m_svg.createPath(null, valueMain.join(""), attrAxisTickNPSH, null); |
| | | |
| | | //文字 |
| | | var attrAxisLabelNPSH = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramRight + 10, |
| | | y: posiY_grid + 5, |
| | | }; |
| | | m_svg.createText(attrAxisLabelNPSH, styleAxisLabelNPSH, content); |
| | | |
| | | //子刻度线 |
| | | if ( |
| | | m_displayStyle.isDispMiniTick && |
| | | i != m_coordinatePara.EndLineNoNPSH |
| | | ) { |
| | | for (var j = 0; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = |
| | | posiY_grid - |
| | | (m_chartSize.DownDiagram.SpaceGridY * j) / |
| | | m_displayStyle.MiniTickNumber; |
| | | var valueMini = []; |
| | | valueMini.push( |
| | | "M ", |
| | | m_chartSize.DiagramRight, |
| | | " ", |
| | | pois_minTick, |
| | | " L ", |
| | | m_chartSize.DiagramRight + minTickLength, |
| | | " ", |
| | | pois_minTick |
| | | ); |
| | | m_svg.createPath(null, valueMini.join(""), attrAxisTickNPSH, null); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | //绘制Y坐标(含标题) |
| | | var createYAxis_TwoPanel = function () { |
| | | if (m_coordinatePara == null) { |
| | | return; |
| | | } |
| | | |
| | | }; |
| | | //绘制Y坐标(含标题) |
| | | var createYAxis_Whole = function () { |
| | | if (m_coordinatePara == null) { |
| | | return; |
| | | //刻度长度 |
| | | var minTickLength = 3; |
| | | var tickLength = 6; |
| | | |
| | | //扬程 |
| | | if (m_coordinatePara.EndLineNoH > m_coordinatePara.StartLineNoH) { |
| | | //刻度线 |
| | | var attrAxisTickH = { |
| | | stroke: m_displayStyle.ColorH, |
| | | "stroke-width": "1", |
| | | fill: "none", |
| | | }; |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelH = |
| | | "font-size:11px; fill-opacity:1; fill:" + m_displayStyle.ColorH + ";"; |
| | | //标签 |
| | | var styleAxisTitleH = |
| | | "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + |
| | | m_displayStyle.ColorH + |
| | | ";"; |
| | | |
| | | let unit_h_name = UnitHelper.GetUnitNameH(m_unit.H); |
| | | |
| | | //标签 |
| | | var attrAxisTitleH = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramLeft - 52, |
| | | y: (m_chartSize.PanelH.Bottom + m_chartSize.PanelH.Up) / 2 - 10, |
| | | "text-anchor": "middle", |
| | | }; |
| | | if (m_localizationType == 0) { |
| | | //中文 |
| | | if (m_unit.H == UnitHelper.H.MPa || m_unit.H == UnitHelper.H.KPa) { |
| | | attrAxisTitleH.y = attrAxisTitleH.y - 5; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "压"); |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 15; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "力"); |
| | | |
| | | attrAxisTitleH.x = attrAxisTitleH.x + 3; |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 21; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleH, |
| | | styleAxisTitleH, |
| | | "(MPa)", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } else { |
| | | attrAxisTitleH.y = attrAxisTitleH.y - 5; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "扬"); |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 15; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "程"); |
| | | |
| | | if (m_unit.H == 0) { |
| | | attrAxisTitleH.x = attrAxisTitleH.x + 3; |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 21; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")"; //不用多出空格否则全屏会有问题expandChartFullScreen |
| | | m_svg.createText( |
| | | attrAxisTitleH, |
| | | styleAxisTitleH, |
| | | "(" + unit_h_name + ")", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } |
| | | } |
| | | |
| | | //刻度长度 |
| | | var minTickLength = 3; |
| | | var tickLength = 6; |
| | | |
| | | //扬程 |
| | | if (m_coordinatePara.EndLineNoH > m_coordinatePara.StartLineNoH) { |
| | | //刻度线 |
| | | var attrAxisTickH = { |
| | | "stroke": m_displayStyle.ColorH, |
| | | "stroke-width": "1", |
| | | "fill": "none" |
| | | }; |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelH = "font-size:11px; fill-opacity:1; fill:" + m_displayStyle.ColorH + ";"; |
| | | //标签 |
| | | var styleAxisTitleH = "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + m_displayStyle.ColorH + ";"; |
| | | |
| | | let unit_h_name = UnitHelper.GetUnitNameH(m_unit.H); |
| | | |
| | | //标签 |
| | | var attrAxisTitleH = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramLeft - 52, |
| | | "y": m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * ((m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH) / 2 + |
| | | m_coordinatePara.StartLineNoH) - 10, |
| | | "text-anchor": "middle" |
| | | }; |
| | | if (m_localizationType == 0) {//中文 |
| | | if (m_unit.H == UnitHelper.H.MPa || m_unit.H == UnitHelper.H.KPa) { |
| | | attrAxisTitleH.y = attrAxisTitleH.y - 5; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "压"); |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 15; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "力"); |
| | | |
| | | attrAxisTitleH.x = attrAxisTitleH.x + 3; |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 21; |
| | | var transform = "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")"; |
| | | if (m_unit.H == UnitHelper.H.MPa) |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "(MPa)", 10, null, transform); |
| | | else if (m_unit.H == UnitHelper.H.MPa) |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "(kPa)", 10, null, transform); |
| | | |
| | | } |
| | | else { |
| | | attrAxisTitleH.y = attrAxisTitleH.y - 5; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "扬"); |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 15; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "程"); |
| | | |
| | | if (m_unit.H == 0) { |
| | | attrAxisTitleH.x = attrAxisTitleH.x + 3; |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 21; |
| | | var transform = "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")";//不用多出空格否则全屏会有问题expandChartFullScreen |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "(" + unit_h_name + ")", 10, null, transform); |
| | | } |
| | | } |
| | | } |
| | | else { |
| | | var content = "Head (" + unit_h_name + ")"; |
| | | if (m_unit.H == UnitHelper.H.MPa) { |
| | | content = "Press (MPa)"; |
| | | } |
| | | if (m_unit.H == UnitHelper.H.KPa) { |
| | | content = "Press (KPa)"; |
| | | } |
| | | var transform = "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")";//不用多出空格否则全屏会有问题expandChartFullScreen |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, content, 10, null, transform); |
| | | } |
| | | |
| | | |
| | | // |
| | | for (var i = m_coordinatePara.StartLineNoH; i <= m_coordinatePara.EndLineNoH; i++) { |
| | | |
| | | var posiY_grid = m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * i; |
| | | |
| | | //主刻度 |
| | | var valueMain = new Array(); |
| | | valueMain.push("M ", m_chartSize.DiagramLeft, " ", posiY_grid, " L ", m_chartSize.DiagramLeft - tickLength, " ", posiY_grid); |
| | | m_svg.createPath(null, valueMain.join(''), attrAxisTickH, null); |
| | | |
| | | //文字 |
| | | var attrAxisLabelH = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramLeft - 10, |
| | | "y": posiY_grid + 5, |
| | | "text-anchor": "end" |
| | | }; |
| | | var content = UnitHelper.valueFormat(m_coordinatePara.MinH + i * m_coordinatePara.SpaceH); |
| | | m_svg.createText(attrAxisLabelH, styleAxisLabelH, content); |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != m_coordinatePara.EndLineNoH) { |
| | | for (var j = 1; j <= m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = posiY_grid - m_chartSize.UpDiagram.SpaceGridY * j / (m_displayStyle.MiniTickNumber + 1); |
| | | var valueMini = new Array(); |
| | | valueMini.push("M ", m_chartSize.DiagramLeft, " ", pois_minTick, " L ", m_chartSize.DiagramLeft - minTickLength, " ", pois_minTick); |
| | | m_svg.createPath(null, valueMini.join(''), attrAxisTickH, null); |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | var content = "Head (" + unit_h_name + ")"; |
| | | if (m_unit.H == UnitHelper.H.MPa) { |
| | | content = "Press (MPa)"; |
| | | } |
| | | |
| | | |
| | | //效率 |
| | | if (m_coordinatePara.EndLineNoE > m_coordinatePara.StartLineNoE && m_isDispCurveQE) { |
| | | //刻度线 |
| | | var attrAxisTickE = { |
| | | "stroke": m_displayStyle.ColorE, |
| | | "stroke-width": "1", |
| | | "fill": "none" |
| | | }; |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelE = "font-size:10px; fill-opacity:1; fill:" + m_displayStyle.ColorE + ";"; |
| | | //标签 |
| | | var styleAxisTitleE = "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + m_displayStyle.ColorE + ";"; |
| | | // |
| | | var attrAxisTitleE = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramRight + 44, |
| | | "y": m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * ((m_coordinatePara.EndLineNoE - m_coordinatePara.StartLineNoE) / 2 + |
| | | m_coordinatePara.StartLineNoE) - 10, |
| | | "text-anchor": "middle" |
| | | }; |
| | | |
| | | //标签 |
| | | if (m_localizationType == 0) {//中文 |
| | | attrAxisTitleE.y = attrAxisTitleE.y - 5; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "效"); |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 15; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "率"); |
| | | |
| | | attrAxisTitleE.x = attrAxisTitleE.x + 6; |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 24; |
| | | var transform = "rotate(-90 " + attrAxisTitleE.x + "," + attrAxisTitleE.y + ")"; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "(%)", 10, null, transform); |
| | | } |
| | | else { |
| | | attrAxisTitleE.x = attrAxisTitleE.x + 6; |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 24; |
| | | var transform = "rotate(-90 " + attrAxisTitleE.x + "," + attrAxisTitleE.y + ")"; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "Eta (%)", 10, null, transform); |
| | | } |
| | | |
| | | // |
| | | for (var i = m_coordinatePara.StartLineNoE; i <= m_coordinatePara.EndLineNoE; i++) { |
| | | var content = m_coordinatePara.MinE + i * m_coordinatePara.SpaceE; |
| | | var posiY_grid = m_chartSize.UpDiagram.Bottom - m_chartSize.UpDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = new Array(); |
| | | valueMain.push("M ", m_chartSize.DiagramRight, " ", posiY_grid, " L ", m_chartSize.DiagramRight + tickLength, " ", posiY_grid); |
| | | m_svg.createPath(null, valueMain.join(''), attrAxisTickE, null); |
| | | |
| | | //文字 |
| | | var attrAxisLabelE = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramRight + 10, |
| | | "y": posiY_grid + 5 |
| | | }; |
| | | m_svg.createText(attrAxisLabelE, styleAxisLabelE, content); |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != m_coordinatePara.EndLineNoE) { |
| | | for (var j = 0; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = posiY_grid - m_chartSize.UpDiagram.SpaceGridY * j / m_displayStyle.MiniTickNumber; |
| | | var valueMini = new Array(); |
| | | valueMini.push("M ", m_chartSize.DiagramRight, " ", pois_minTick, " L ", m_chartSize.DiagramRight + minTickLength, " ", pois_minTick); |
| | | m_svg.createPath(null, valueMini.join(''), attrAxisTickE, null); |
| | | } |
| | | } |
| | | |
| | | } |
| | | if (m_unit.H == UnitHelper.H.KPa) { |
| | | content = "Press (MPa)"; |
| | | } |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")"; //不用多出空格否则全屏会有问题expandChartFullScreen |
| | | m_svg.createText( |
| | | attrAxisTitleH, |
| | | styleAxisTitleH, |
| | | content, |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } |
| | | |
| | | //功率 |
| | | if (m_coordinatePara.EndLineNoP > m_coordinatePara.StartLineNoP) { |
| | | //刻度线 |
| | | var attrAxisTickP = { |
| | | "stroke": m_displayStyle.ColorP, |
| | | "stroke-width": "1", |
| | | "fill": "none" |
| | | }; |
| | | // |
| | | for ( |
| | | var i = 0; |
| | | i <= m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH; |
| | | i++ |
| | | ) { |
| | | var posiY_grid = |
| | | m_chartSize.PanelH.Bottom - m_chartSize.UpDiagram.SpaceGridY * i; |
| | | |
| | | let unit_p_name = UnitHelper.GetUnitNameP(m_unit.P); |
| | | //主刻度 |
| | | var valueMain = []; |
| | | valueMain.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft, |
| | | " ", |
| | | posiY_grid, |
| | | " L ", |
| | | m_chartSize.DiagramLeft - tickLength, |
| | | " ", |
| | | posiY_grid |
| | | ); |
| | | m_svg.createPath(null, valueMain.join(""), attrAxisTickH, null); |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelP = "font-size:10px; fill-opacity:1; fill:" + m_displayStyle.ColorP + ";"; |
| | | //标签 |
| | | var styleAxisTitleP = "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + m_displayStyle.ColorP + ";"; |
| | | //文字 |
| | | var attrAxisLabelH = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramLeft - 10, |
| | | y: posiY_grid + 5, |
| | | "text-anchor": "end", |
| | | }; |
| | | var axis_h = UnitHelper.ConvertH_fromM( |
| | | m_unit.H, |
| | | m_coordinatePara.DispMinH + i * m_coordinatePara.SpaceH |
| | | ); |
| | | if (axis_h < -0.01) continue; |
| | | var content = UnitHelper.valueFormat(axis_h); |
| | | m_svg.createText(attrAxisLabelH, styleAxisLabelH, content); |
| | | |
| | | //标签 |
| | | if (m_localizationType == 0) {//中文 |
| | | var attrAxisTitleP = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramLeft - 52, |
| | | "y": m_chartSize.DownDiagram.Bottom - m_chartSize.DownDiagram.SpaceGridY * ((m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP) / 2 + |
| | | m_coordinatePara.StartLineNoP), |
| | | "text-anchor": "middle" |
| | | }; |
| | | if (m_coordinatePara.SpaceP <= 0.1) { |
| | | attrAxisTitleP.x = attrAxisTitleP.x - 5; |
| | | } |
| | | attrAxisTitleP.y = attrAxisTitleP.y - 5; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "功"); |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 15; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "率"); |
| | | |
| | | attrAxisTitleP.x = attrAxisTitleP.x + 2; |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 25; |
| | | var transform = "rotate(-90 " + attrAxisTitleP.x + "," + attrAxisTitleP.y + ")"; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "(" + unit_p_name + ")", 10, null, transform); |
| | | } |
| | | else { |
| | | var attrAxisTitleP = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramLeft - 60, |
| | | "y": m_chartSize.DownDiagram.Bottom - m_chartSize.DownDiagram.SpaceGridY * ((m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP) / 2 + |
| | | m_coordinatePara.StartLineNoP) - 10, |
| | | "text-anchor": "middle" |
| | | }; |
| | | if (m_coordinatePara.SpaceP <= 0.1) { |
| | | attrAxisTitleP.x = attrAxisTitleP.x - 5; |
| | | } |
| | | attrAxisTitleP.x = attrAxisTitleP.x + 13; |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 25; |
| | | var transform = "rotate(-90 " + attrAxisTitleP.x + "," + attrAxisTitleP.y + ")"; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "Power (" + unit_p_name + ")", 10, null, transform); |
| | | } |
| | | |
| | | // |
| | | for (var i = m_coordinatePara.StartLineNoP; i <= m_coordinatePara.EndLineNoP; i++) { |
| | | var content = UnitHelper.valueFormat(m_coordinatePara.MinP + i * m_coordinatePara.SpaceP); |
| | | |
| | | content = UnitHelper.formatToFixed(parseFloat(UnitHelper.ConvertP(UnitHelper.P.KW, m_unit.P, content)), 1) |
| | | |
| | | var posiY_grid = m_chartSize.DownDiagram.Bottom - m_chartSize.DownDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = new Array(); |
| | | valueMain.push("M ", m_chartSize.DiagramLeft, " ", posiY_grid, " L ", m_chartSize.DiagramLeft - tickLength, " ", posiY_grid); |
| | | m_svg.createPath(null, valueMain.join(''), attrAxisTickP, null); |
| | | |
| | | //文字 |
| | | var attrAxisLabelP = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramLeft - 10, |
| | | "y": posiY_grid + 5, |
| | | "text-anchor": "end" |
| | | }; |
| | | |
| | | m_svg.createText(attrAxisLabelP, styleAxisLabelP, content); |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != m_coordinatePara.EndLineNoP && i != m_coordinatePara.EndLineNoE) { |
| | | for (var j = 1; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = posiY_grid - m_chartSize.DownDiagram.SpaceGridY * j / m_displayStyle.MiniTickNumber; |
| | | var valueMini = new Array(); |
| | | valueMini.push("M ", m_chartSize.DiagramLeft, " ", pois_minTick, " L ", m_chartSize.DiagramLeft - minTickLength, " ", pois_minTick); |
| | | m_svg.createPath(null, valueMini.join(''), attrAxisTickP, null); |
| | | } |
| | | } |
| | | |
| | | } |
| | | //子刻度线 |
| | | if ( |
| | | m_displayStyle.isDispMiniTick && |
| | | i != m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH |
| | | ) { |
| | | for (var j = 1; j <= m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = |
| | | posiY_grid - |
| | | (m_chartSize.UpDiagram.SpaceGridY * j) / |
| | | (m_displayStyle.MiniTickNumber + 1); |
| | | var valueMini = []; |
| | | valueMini.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft, |
| | | " ", |
| | | pois_minTick, |
| | | " L ", |
| | | m_chartSize.DiagramLeft - minTickLength, |
| | | " ", |
| | | pois_minTick |
| | | ); |
| | | m_svg.createPath(null, valueMini.join(""), attrAxisTickH, null); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //效率 |
| | | if ( |
| | | m_coordinatePara.EndLineNoE > m_coordinatePara.StartLineNoE && |
| | | m_isDispCurveQE |
| | | ) { |
| | | //刻度线 |
| | | var attrAxisTickE = { |
| | | stroke: m_displayStyle.ColorE, |
| | | "stroke-width": "1", |
| | | fill: "none", |
| | | }; |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelE = |
| | | "font-size:10px; fill-opacity:1; fill:" + m_displayStyle.ColorE + ";"; |
| | | //标签 |
| | | var styleAxisTitleE = |
| | | "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + |
| | | m_displayStyle.ColorE + |
| | | ";"; |
| | | // |
| | | var attrAxisTitleE = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramRight + 44, |
| | | y: (m_chartSize.UpDiagram.Bottom + m_chartSize.UpDiagram.Up) / 2 - 10, |
| | | "text-anchor": "middle", |
| | | }; |
| | | |
| | | //标签 |
| | | if (m_localizationType == 0) { |
| | | //中文 |
| | | attrAxisTitleE.y = attrAxisTitleE.y - 5; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "效"); |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 15; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "率"); |
| | | |
| | | //汽蚀 |
| | | if (m_isHaveNpsh && m_coordinatePara.EndLineNoNPSH > m_coordinatePara.StartLineNoNPSH) { |
| | | //刻度线 |
| | | var attrAxisTickNPSH = { |
| | | "stroke": m_displayStyle.ColorNPSH, |
| | | "stroke-width": "1", |
| | | "fill": "none" |
| | | }; |
| | | attrAxisTitleE.x = attrAxisTitleE.x + 6; |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 24; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleE.x + "," + attrAxisTitleE.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleE, |
| | | styleAxisTitleE, |
| | | "(%)", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } else { |
| | | attrAxisTitleE.x = attrAxisTitleE.x + 6; |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 24; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleE.x + "," + attrAxisTitleE.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleE, |
| | | styleAxisTitleE, |
| | | "Eta (%)", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelNPSH = "font-size:10px; fill-opacity:1; fill:" + m_displayStyle.ColorNPSH + ";"; |
| | | //标签 |
| | | var styleAxisTitleNPSH = "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + m_displayStyle.ColorNPSH + ";"; |
| | | // |
| | | for ( |
| | | var i = 0; |
| | | i <= m_coordinatePara.EndLineNoE - m_coordinatePara.StartLineNoE; |
| | | i++ |
| | | ) { |
| | | var posiY_grid = |
| | | m_chartSize.PanelE.Bottom - m_chartSize.UpDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = []; |
| | | valueMain.push( |
| | | "M ", |
| | | m_chartSize.DiagramRight, |
| | | " ", |
| | | posiY_grid, |
| | | " L ", |
| | | m_chartSize.DiagramRight + tickLength, |
| | | " ", |
| | | posiY_grid |
| | | ); |
| | | m_svg.createPath(null, valueMain.join(""), attrAxisTickE, null); |
| | | |
| | | //标签 |
| | | var attrAxisTitleNPSH = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramRight + 44, |
| | | "y": m_chartSize.DownDiagram.Bottom - m_chartSize.DownDiagram.SpaceGridY * ((m_coordinatePara.EndLineNoNPSH - m_coordinatePara.StartLineNoNPSH) / 2 + |
| | | m_coordinatePara.StartLineNoNPSH) - 10, |
| | | "text-anchor": "middle" |
| | | }; |
| | | if (m_localizationType == 0) {//中文 |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y - 5; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, "汽"); |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 15; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, "蚀"); |
| | | attrAxisTitleNPSH.x = attrAxisTitleNPSH.x + 6; |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 24; |
| | | var transform = "rotate(-90 " + attrAxisTitleNPSH.x + "," + attrAxisTitleNPSH.y + ")"; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, "(m)", 10, null, transform); |
| | | } |
| | | else { |
| | | attrAxisTitleNPSH.x = attrAxisTitleNPSH.x + 6; |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 24; |
| | | var transform = "rotate(-90 " + attrAxisTitleNPSH.x + "," + attrAxisTitleNPSH.y + ")"; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, "NPSHr (m)", 10, null, transform); |
| | | } |
| | | //文字 |
| | | var attrAxisLabelE = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramRight + 10, |
| | | y: posiY_grid + 5, |
| | | }; |
| | | var axis_e = |
| | | m_coordinatePara.MinE + |
| | | (i + m_coordinatePara.StartLineNoE) * m_coordinatePara.SpaceE; |
| | | if (axis_e < -0.01) continue; |
| | | |
| | | // |
| | | for (var i = m_coordinatePara.StartLineNoNPSH; i <= m_coordinatePara.EndLineNoNPSH; i++) { |
| | | var content = UnitHelper.valueFormat(m_coordinatePara.MinNPSH + i * m_coordinatePara.SpaceNPSH); |
| | | var posiY_grid = m_chartSize.DownDiagram.Bottom - m_chartSize.DownDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = new Array(); |
| | | valueMain.push("M ", m_chartSize.DiagramRight, " ", posiY_grid, " L ", m_chartSize.DiagramRight + tickLength, " ", posiY_grid); |
| | | m_svg.createPath(null, valueMain.join(''), attrAxisTickNPSH, null); |
| | | var content = UnitHelper.valueFormat(axis_e); |
| | | m_svg.createText(attrAxisLabelE, styleAxisLabelE, content); |
| | | |
| | | //文字 |
| | | var attrAxisLabelNPSH = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramRight + 10, |
| | | "y": posiY_grid + 5 |
| | | }; |
| | | m_svg.createText(attrAxisLabelNPSH, styleAxisLabelNPSH, content); |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != m_coordinatePara.EndLineNoNPSH) { |
| | | for (var j = 0; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = posiY_grid - m_chartSize.DownDiagram.SpaceGridY * j / m_displayStyle.MiniTickNumber; |
| | | var valueMini = new Array(); |
| | | valueMini.push("M ", m_chartSize.DiagramRight, " ", pois_minTick, " L ", m_chartSize.DiagramRight + minTickLength, " ", pois_minTick); |
| | | m_svg.createPath(null, valueMini.join(''), attrAxisTickNPSH, null); |
| | | } |
| | | } |
| | | } |
| | | //子刻度线 |
| | | if ( |
| | | m_displayStyle.isDispMiniTick && |
| | | i != m_coordinatePara.EndLineNoE - m_coordinatePara.StartLineNoE |
| | | ) { |
| | | for (var j = 0; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = |
| | | posiY_grid - |
| | | (m_chartSize.UpDiagram.SpaceGridY * j) / |
| | | m_displayStyle.MiniTickNumber; |
| | | var valueMini = []; |
| | | valueMini.push( |
| | | "M ", |
| | | m_chartSize.DiagramRight, |
| | | " ", |
| | | pois_minTick, |
| | | " L ", |
| | | m_chartSize.DiagramRight + minTickLength, |
| | | " ", |
| | | pois_minTick |
| | | ); |
| | | m_svg.createPath(null, valueMini.join(""), attrAxisTickE, null); |
| | | } |
| | | } |
| | | }; |
| | | //绘制Y坐标(含标题) |
| | | var createYAxis_TwoPanel = function () { |
| | | if (m_coordinatePara == null) { |
| | | return; |
| | | } |
| | | } |
| | | |
| | | //功率 |
| | | if (m_coordinatePara.EndLineNoP > m_coordinatePara.StartLineNoP) { |
| | | //刻度线 |
| | | var attrAxisTickP = { |
| | | stroke: m_displayStyle.ColorP, |
| | | "stroke-width": "1", |
| | | fill: "none", |
| | | }; |
| | | |
| | | let unit_p_name = UnitHelper.GetUnitNameP(m_unit.P); |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelP = |
| | | "font-size:10px; fill-opacity:1; fill:" + m_displayStyle.ColorP + ";"; |
| | | //标签 |
| | | var styleAxisTitleP = |
| | | "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + |
| | | m_displayStyle.ColorP + |
| | | ";"; |
| | | |
| | | //标签 |
| | | if (m_localizationType == 0) { |
| | | //中文 |
| | | var attrAxisTitleP = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramLeft - 52, |
| | | y: (m_chartSize.PanelP.Bottom + m_chartSize.PanelP.Up) / 2 - 10, |
| | | "text-anchor": "middle", |
| | | }; |
| | | if (m_coordinatePara.SpaceP <= 0.1) { |
| | | attrAxisTitleP.x = attrAxisTitleP.x - 5; |
| | | } |
| | | attrAxisTitleP.y = attrAxisTitleP.y - 5; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "功"); |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 15; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "率"); |
| | | |
| | | //刻度长度 |
| | | var minTickLength = 3; |
| | | var tickLength = 6; |
| | | |
| | | //扬程 |
| | | if (m_coordinatePara.EndLineNoH > m_coordinatePara.StartLineNoH) { |
| | | //刻度线 |
| | | var attrAxisTickH = { |
| | | "stroke": m_displayStyle.ColorH, |
| | | "stroke-width": "1", |
| | | "fill": "none" |
| | | }; |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelH = "font-size:11px; fill-opacity:1; fill:" + m_displayStyle.ColorH + ";"; |
| | | //标签 |
| | | var styleAxisTitleH = "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + m_displayStyle.ColorH + ";"; |
| | | |
| | | let unit_h_name = UnitHelper.GetUnitNameH(m_unit.H); |
| | | |
| | | //标签 |
| | | var attrAxisTitleH = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramLeft - 52, |
| | | "y": (m_chartSize.PanelH.Bottom + m_chartSize.PanelH.Up) / 2 - 10, |
| | | "text-anchor": "middle" |
| | | }; |
| | | if (m_localizationType == 0) {//中文 |
| | | if (m_unit.H == UnitHelper.H.MPa || m_unit.H == UnitHelper.H.KPa) { |
| | | attrAxisTitleH.y = attrAxisTitleH.y - 5; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "压"); |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 15; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "力"); |
| | | |
| | | attrAxisTitleH.x = attrAxisTitleH.x + 3; |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 21; |
| | | var transform = "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")"; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "(MPa)", 10, null, transform); |
| | | } |
| | | else { |
| | | attrAxisTitleH.y = attrAxisTitleH.y - 5; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "扬"); |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 15; |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "程"); |
| | | |
| | | if (m_unit.H == 0) { |
| | | attrAxisTitleH.x = attrAxisTitleH.x + 3; |
| | | attrAxisTitleH.y = attrAxisTitleH.y + 21; |
| | | var transform = "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")";//不用多出空格否则全屏会有问题expandChartFullScreen |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, "(" + unit_h_name + ")", 10, null, transform); |
| | | } |
| | | } |
| | | } |
| | | else { |
| | | var content = "Head (" + unit_h_name + ")"; |
| | | if (m_unit.H == UnitHelper.H.MPa) { |
| | | content = "Press (MPa)"; |
| | | } |
| | | if (m_unit.H == UnitHelper.H.KPa) { |
| | | content = "Press (MPa)"; |
| | | } |
| | | var transform = "rotate(-90 " + attrAxisTitleH.x + "," + attrAxisTitleH.y + ")";//不用多出空格否则全屏会有问题expandChartFullScreen |
| | | m_svg.createText(attrAxisTitleH, styleAxisTitleH, content, 10, null, transform); |
| | | } |
| | | |
| | | |
| | | // |
| | | for (var i = 0; i <= m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH; i++) { |
| | | |
| | | var posiY_grid = m_chartSize.PanelH.Bottom - m_chartSize.UpDiagram.SpaceGridY * i; |
| | | |
| | | //主刻度 |
| | | var valueMain = new Array(); |
| | | valueMain.push("M ", m_chartSize.DiagramLeft, " ", posiY_grid, " L ", m_chartSize.DiagramLeft - tickLength, " ", posiY_grid); |
| | | m_svg.createPath(null, valueMain.join(''), attrAxisTickH, null); |
| | | |
| | | //文字 |
| | | var attrAxisLabelH = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramLeft - 10, |
| | | "y": posiY_grid + 5, |
| | | "text-anchor": "end" |
| | | }; |
| | | var axis_h = UnitHelper.ConvertH_fromM(m_unit.H,m_coordinatePara.MinH + (i + m_coordinatePara.StartLineNoH) * m_coordinatePara.SpaceH); |
| | | if(axis_h < -0.01) |
| | | continue; |
| | | var content = UnitHelper.valueFormat(axis_h); |
| | | m_svg.createText(attrAxisLabelH, styleAxisLabelH, content); |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != (m_coordinatePara.EndLineNoH - m_coordinatePara.StartLineNoH)) { |
| | | for (var j = 1; j <= m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = posiY_grid - m_chartSize.UpDiagram.SpaceGridY * j / (m_displayStyle.MiniTickNumber + 1); |
| | | var valueMini = new Array(); |
| | | valueMini.push("M ", m_chartSize.DiagramLeft, " ", pois_minTick, " L ", m_chartSize.DiagramLeft - minTickLength, " ", pois_minTick); |
| | | m_svg.createPath(null, valueMini.join(''), attrAxisTickH, null); |
| | | } |
| | | } |
| | | } |
| | | attrAxisTitleP.x = attrAxisTitleP.x + 2; |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 25; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleP.x + "," + attrAxisTitleP.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleP, |
| | | styleAxisTitleP, |
| | | "(" + unit_p_name + ")", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } else { |
| | | var attrAxisTitleP = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramLeft - 60, |
| | | y: (m_chartSize.PanelP.Bottom + m_chartSize.PanelP.Up) / 2 - 10, |
| | | "text-anchor": "middle", |
| | | }; |
| | | if (m_coordinatePara.SpaceP <= 0.1) { |
| | | attrAxisTitleP.x = attrAxisTitleP.x - 5; |
| | | } |
| | | attrAxisTitleP.x = attrAxisTitleP.x + 13; |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 25; |
| | | var transform = |
| | | "rotate(-90 " + attrAxisTitleP.x + "," + attrAxisTitleP.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleP, |
| | | styleAxisTitleP, |
| | | "Power (" + unit_p_name + ")", |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } |
| | | |
| | | // |
| | | for ( |
| | | var i = 0; |
| | | i <= m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP; |
| | | i++ |
| | | ) { |
| | | var posiY_grid = |
| | | m_chartSize.PanelP.Bottom - m_chartSize.DownDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = []; |
| | | valueMain.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft, |
| | | " ", |
| | | posiY_grid, |
| | | " L ", |
| | | m_chartSize.DiagramLeft - tickLength, |
| | | " ", |
| | | posiY_grid |
| | | ); |
| | | m_svg.createPath(null, valueMain.join(""), attrAxisTickP, null); |
| | | |
| | | //效率 |
| | | if (m_coordinatePara.EndLineNoE > m_coordinatePara.StartLineNoE && m_isDispCurveQE) { |
| | | //刻度线 |
| | | var attrAxisTickE = { |
| | | "stroke": m_displayStyle.ColorE, |
| | | "stroke-width": "1", |
| | | "fill": "none" |
| | | }; |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelE = "font-size:10px; fill-opacity:1; fill:" + m_displayStyle.ColorE + ";"; |
| | | //标签 |
| | | var styleAxisTitleE = "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + m_displayStyle.ColorE + ";"; |
| | | // |
| | | var attrAxisTitleE = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramRight + 44, |
| | | "y": (m_chartSize.UpDiagram.Bottom + m_chartSize.UpDiagram.Up) / 2 - 10, |
| | | "text-anchor": "middle" |
| | | }; |
| | | |
| | | //标签 |
| | | if (m_localizationType == 0) {//中文 |
| | | attrAxisTitleE.y = attrAxisTitleE.y - 5; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "效"); |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 15; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "率"); |
| | | |
| | | attrAxisTitleE.x = attrAxisTitleE.x + 6; |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 24; |
| | | var transform = "rotate(-90 " + attrAxisTitleE.x + "," + attrAxisTitleE.y + ")"; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "(%)", 10, null, transform); |
| | | } |
| | | else { |
| | | attrAxisTitleE.x = attrAxisTitleE.x + 6; |
| | | attrAxisTitleE.y = attrAxisTitleE.y + 24; |
| | | var transform = "rotate(-90 " + attrAxisTitleE.x + "," + attrAxisTitleE.y + ")"; |
| | | m_svg.createText(attrAxisTitleE, styleAxisTitleE, "Eta (%)", 10, null, transform); |
| | | } |
| | | |
| | | // |
| | | for (var i = 0; i <= m_coordinatePara.EndLineNoE - m_coordinatePara.StartLineNoE; i++) { |
| | | |
| | | var posiY_grid = m_chartSize.PanelE.Bottom - m_chartSize.UpDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = new Array(); |
| | | valueMain.push("M ", m_chartSize.DiagramRight, " ", posiY_grid, " L ", m_chartSize.DiagramRight + tickLength, " ", posiY_grid); |
| | | m_svg.createPath(null, valueMain.join(''), attrAxisTickE, null); |
| | | |
| | | //文字 |
| | | var attrAxisLabelE = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramRight + 10, |
| | | "y": posiY_grid + 5 |
| | | }; |
| | | var axis_e = m_coordinatePara.MinE + (i + m_coordinatePara.StartLineNoE) * m_coordinatePara.SpaceE; |
| | | if(axis_e < -0.01) |
| | | continue; |
| | | |
| | | var content = UnitHelper.valueFormat(axis_e); |
| | | m_svg.createText(attrAxisLabelE, styleAxisLabelE, content); |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != (m_coordinatePara.EndLineNoE - m_coordinatePara.StartLineNoE)) { |
| | | for (var j = 0; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = posiY_grid - m_chartSize.UpDiagram.SpaceGridY * j / m_displayStyle.MiniTickNumber; |
| | | var valueMini = new Array(); |
| | | valueMini.push("M ", m_chartSize.DiagramRight, " ", pois_minTick, " L ", m_chartSize.DiagramRight + minTickLength, " ", pois_minTick); |
| | | m_svg.createPath(null, valueMini.join(''), attrAxisTickE, null); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | //功率 |
| | | if (m_coordinatePara.EndLineNoP > m_coordinatePara.StartLineNoP) { |
| | | //刻度线 |
| | | var attrAxisTickP = { |
| | | "stroke": m_displayStyle.ColorP, |
| | | "stroke-width": "1", |
| | | "fill": "none" |
| | | }; |
| | | |
| | | let unit_p_name = UnitHelper.GetUnitNameP(m_unit.P); |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelP = "font-size:10px; fill-opacity:1; fill:" + m_displayStyle.ColorP + ";"; |
| | | //标签 |
| | | var styleAxisTitleP = "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + m_displayStyle.ColorP + ";"; |
| | | |
| | | //标签 |
| | | if (m_localizationType == 0) {//中文 |
| | | var attrAxisTitleP = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramLeft - 52, |
| | | "y": (m_chartSize.PanelP.Bottom + m_chartSize.PanelP.Up) / 2 - 10, |
| | | "text-anchor": "middle" |
| | | }; |
| | | if (m_coordinatePara.SpaceP <= 0.1) { |
| | | attrAxisTitleP.x = attrAxisTitleP.x - 5; |
| | | } |
| | | attrAxisTitleP.y = attrAxisTitleP.y - 5; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "功"); |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 15; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "率"); |
| | | |
| | | attrAxisTitleP.x = attrAxisTitleP.x + 2; |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 25; |
| | | var transform = "rotate(-90 " + attrAxisTitleP.x + "," + attrAxisTitleP.y + ")"; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "(" + unit_p_name + ")", 10, null, transform); |
| | | } |
| | | else { |
| | | var attrAxisTitleP = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramLeft - 60, |
| | | "y": (m_chartSize.PanelP.Bottom + m_chartSize.PanelP.Up) / 2 - 10, |
| | | "text-anchor": "middle" |
| | | }; |
| | | if (m_coordinatePara.SpaceP <= 0.1) { |
| | | attrAxisTitleP.x = attrAxisTitleP.x - 5; |
| | | } |
| | | attrAxisTitleP.x = attrAxisTitleP.x + 13; |
| | | attrAxisTitleP.y = attrAxisTitleP.y + 25; |
| | | var transform = "rotate(-90 " + attrAxisTitleP.x + "," + attrAxisTitleP.y + ")"; |
| | | m_svg.createText(attrAxisTitleP, styleAxisTitleP, "Power (" + unit_p_name + ")", 10, null, transform); |
| | | } |
| | | |
| | | // |
| | | for (var i = 0; i <= m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP; i++) { |
| | | |
| | | var posiY_grid = m_chartSize.PanelP.Bottom - m_chartSize.DownDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = new Array(); |
| | | valueMain.push("M ", m_chartSize.DiagramLeft, " ", posiY_grid, " L ", m_chartSize.DiagramLeft - tickLength, " ", posiY_grid); |
| | | m_svg.createPath(null, valueMain.join(''), attrAxisTickP, null); |
| | | |
| | | //文字 |
| | | var attrAxisLabelP = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramLeft - 10, |
| | | "y": posiY_grid + 5, |
| | | "text-anchor": "end" |
| | | }; |
| | | var aixs_p = UnitHelper.ConvertP_fromKW(m_unit.P,m_coordinatePara.MinP + (i + m_coordinatePara.StartLineNoP) * m_coordinatePara.SpaceP); |
| | | aixs_p = UnitHelper.getDispValueP(aixs_p); |
| | | if (aixs_p < -0.01) |
| | | continue; |
| | | var content = aixs_p.toString(); |
| | | m_svg.createText(attrAxisLabelP, styleAxisLabelP, content); |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != m_coordinatePara.EndLineNoP |
| | | && i != (m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP)) { |
| | | for (var j = 1; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = posiY_grid - m_chartSize.DownDiagram.SpaceGridY * j / m_displayStyle.MiniTickNumber; |
| | | var valueMini = new Array(); |
| | | valueMini.push("M ", m_chartSize.DiagramLeft, " ", pois_minTick, " L ", m_chartSize.DiagramLeft - minTickLength, " ", pois_minTick); |
| | | m_svg.createPath(null, valueMini.join(''), attrAxisTickP, null); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //汽蚀 |
| | | if (m_isHaveNpsh && m_isDispCurveNPSH && m_coordinatePara.EndLineNoNPSH > m_coordinatePara.StartLineNoNPSH) { |
| | | //刻度线 |
| | | var attrAxisTickNPSH = { |
| | | "stroke": m_displayStyle.ColorNPSH, |
| | | "stroke-width": "1", |
| | | "fill": "none" |
| | | }; |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelNPSH = "font-size:10px; fill-opacity:1; fill:" + m_displayStyle.ColorNPSH + ";"; |
| | | //标签 |
| | | var styleAxisTitleNPSH = "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + m_displayStyle.ColorNPSH + ";"; |
| | | |
| | | //标签 |
| | | var attrAxisTitleNPSH = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramRight + 44, |
| | | "y": (m_chartSize.PanelNPSH.Bottom + m_chartSize.PanelNPSH.Up) / 2 - 10, |
| | | "text-anchor": "middle" |
| | | }; |
| | | var unit_npsh_str = "("+UnitHelper.GetUnitNameNPSH(m_unit.NPSH)+")"; |
| | | if (m_localizationType == 0) {//中文 |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y - 5; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, "汽"); |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 15; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, "蚀"); |
| | | attrAxisTitleNPSH.x = attrAxisTitleNPSH.x - 4; |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 24; |
| | | var transform = "rotate(90 " + attrAxisTitleNPSH.x + "," + attrAxisTitleNPSH.y + ")"; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, unit_npsh_str, 10, null, transform); |
| | | } |
| | | else { |
| | | attrAxisTitleNPSH.x = attrAxisTitleNPSH.x + 6; |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 24; |
| | | var transform = "rotate(90 " + attrAxisTitleNPSH.x + "," + attrAxisTitleNPSH.y + ")"; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, "NPSHr "+unit_npsh_str, 10, null, transform); |
| | | } |
| | | |
| | | // |
| | | for (var i = 0; i <= m_coordinatePara.EndLineNoNPSH - m_coordinatePara.StartLineNoNPSH; i++) { |
| | | |
| | | var posiY_grid = m_chartSize.PanelNPSH.Bottom - m_chartSize.DownDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = new Array(); |
| | | valueMain.push("M ", m_chartSize.DiagramRight, " ", posiY_grid, " L ", m_chartSize.DiagramRight + tickLength, " ", posiY_grid); |
| | | m_svg.createPath(null, valueMain.join(''), attrAxisTickNPSH, null); |
| | | |
| | | //文字 |
| | | var attrAxisLabelNPSH = { |
| | | "opacity": 1, |
| | | "x": m_chartSize.DiagramRight + 10, |
| | | "y": posiY_grid + 5 |
| | | }; |
| | | var axis_npsh = m_coordinatePara.MinNPSH + (i + m_coordinatePara.StartLineNoNPSH) * m_coordinatePara.SpaceNPSH; |
| | | axis_npsh = UnitHelper.ConvertNPSH_fromM(m_unit.NPSH, axis_npsh); |
| | | if(axis_npsh < -0.01) |
| | | continue; |
| | | var content = UnitHelper.valueFormat(axis_npsh); |
| | | m_svg.createText(attrAxisLabelNPSH, styleAxisLabelNPSH, content); |
| | | |
| | | //子刻度线 |
| | | if (m_displayStyle.isDispMiniTick && i != (m_coordinatePara.EndLineNoNPSH - m_coordinatePara.StartLineNoNPSH)) { |
| | | for (var j = 0; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = posiY_grid - m_chartSize.DownDiagram.SpaceGridY * j / m_displayStyle.MiniTickNumber; |
| | | var valueMini = new Array(); |
| | | valueMini.push("M ", m_chartSize.DiagramRight, " ", pois_minTick, " L ", m_chartSize.DiagramRight + minTickLength, " ", pois_minTick); |
| | | m_svg.createPath(null, valueMini.join(''), attrAxisTickNPSH, null); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | //绘制面板 |
| | | var drawDiagramPanel = function () { |
| | | if (m_chartDiagramPanelStyle == ConstParas.ChartDiagramPanelStyle.Whole) { |
| | | //绘制网格线 |
| | | createGridLineDiagram_Whole(); |
| | | |
| | | //绘制X坐标 |
| | | createXAxis(m_chartSize.DownDiagram.Bottom, 40); |
| | | |
| | | //绘制Y坐标 |
| | | createYAxis_Whole(); |
| | | } |
| | | else { |
| | | //绘制网格线 |
| | | createGridLineDiagram_TwoPanel(); |
| | | |
| | | //绘制X坐标 |
| | | createXAxis(m_chartSize.UpDiagram.Bottom, 0); |
| | | createXAxis(m_chartSize.DownDiagram.Bottom, 40); |
| | | |
| | | //绘制Y坐标 |
| | | createYAxis_TwoPanel(); |
| | | } |
| | | }; |
| | | //产生装置曲线 |
| | | var drawEquipmentCurve = function () { |
| | | $("#EquipmentCurve").remove(); |
| | | if (m_chartObject.EquipmentSectPt == null) |
| | | return; |
| | | var pointNumber = 20; |
| | | var EquipmentCurve = []; |
| | | var space = m_chartObject.EquipmentSectPt.X / (pointNumber - 1); |
| | | var k = (m_chartObject.EquipmentSectPt.Y - m_equipZeroH) / (m_chartObject.EquipmentSectPt.X * m_chartObject.EquipmentSectPt.X); |
| | | for (var i = 0; i < pointNumber; i++) { |
| | | var pt = {}; |
| | | pt.X = space * i; |
| | | pt.Y = m_equipZeroH + k * pt.X * pt.X; |
| | | EquipmentCurve.push(pt); |
| | | } |
| | | createCurveQH("EquipmentCurve", EquipmentCurve, 1, m_displayStyle.ColorEquipment, m_displayStyle.isDispEquipmentCurve); |
| | | }; |
| | | |
| | | |
| | | |
| | | //绘制曲线(流量扬程) |
| | | var createCurveQH = function (curveElementName, curvePoints, curveWidth, curveColor, curveIsDisp, curveDashType) { |
| | | if (curvePoints == null) { |
| | | return; |
| | | } |
| | | if (curveElementName == null) { |
| | | return; |
| | | } |
| | | |
| | | var pixelPoints = new Array(); |
| | | for (var v = 0; v < curvePoints.length; v++) { |
| | | var pt = curvePoints[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueH(pt.Y); |
| | | pixelPoints.push({ "X": x, "Y": y }); |
| | | } |
| | | |
| | | return createCurveQH_pixel(curveElementName, pixelPoints, curveWidth, curveColor, curveIsDisp, curveDashType); |
| | | }; |
| | | //绘制曲线(流量扬程) : 像素点 |
| | | var createCurveQH_pixel = function (curveElementName, pixelPoints, curveWidth, curveColor, isDisp, curveDashType) { |
| | | if (pixelPoints == null || pixelPoints.length < 3) { |
| | | return; |
| | | } |
| | | if (curveElementName == null) { |
| | | return; |
| | | } |
| | | var pathValue = transBezierCurveToPath(pixelPoints); |
| | | if (pathValue == null || pathValue == undefined) |
| | | return; |
| | | //有时会报错,加上这个就没事 tangxu 20151122 |
| | | if (pathValue.toString().indexOf("M ,NaN, ,NaN") == 0) { |
| | | return; |
| | | //文字 |
| | | var attrAxisLabelP = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramLeft - 10, |
| | | y: posiY_grid + 5, |
| | | "text-anchor": "end", |
| | | }; |
| | | |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | "stroke": m_displayStyle.ColorH, |
| | | "fill": "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7 |
| | | }; |
| | | if (curveWidth != null) { |
| | | style["stroke-width"] = curveWidth; |
| | | } |
| | | if (curveColor != null) { |
| | | style["stroke"] = curveColor; |
| | | } |
| | | if (curveDashType != null) { |
| | | style["stroke-dasharray"] = curveDashType;//'10, 10';//'10, 10, 5, 5' |
| | | } |
| | | //console.log(curveElementName,pathValue) |
| | | //绘制 |
| | | m_svg.createPath(curveElementName, pathValue.join(''), { |
| | | "id": curveElementName |
| | | }, style); |
| | | //是否显示 |
| | | if (isDisp != null && !isDisp) { |
| | | $("#" + curveElementName).hide(); |
| | | } |
| | | var aixs_p = UnitHelper.ConvertP_fromKW( |
| | | m_unit.P, |
| | | m_coordinatePara.MinP + |
| | | (i + m_coordinatePara.StartLineNoP) * m_coordinatePara.SpaceP |
| | | ); |
| | | aixs_p = UnitHelper.getDispValueP(aixs_p); |
| | | //console.log(aixs_p) |
| | | if (aixs_p < -0.01) continue; |
| | | var content = aixs_p.toString(); |
| | | m_svg.createText(attrAxisLabelP, styleAxisLabelP, content); |
| | | |
| | | //绘制定义点 |
| | | /*pixelPoints.forEach(pixel_pt => { |
| | | //子刻度线 |
| | | if ( |
| | | m_displayStyle.isDispMiniTick && |
| | | i != m_coordinatePara.EndLineNoP && |
| | | i != m_coordinatePara.EndLineNoP - m_coordinatePara.StartLineNoP |
| | | ) { |
| | | for (var j = 1; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = |
| | | posiY_grid - |
| | | (m_chartSize.DownDiagram.SpaceGridY * j) / |
| | | m_displayStyle.MiniTickNumber; |
| | | var valueMini = []; |
| | | valueMini.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft, |
| | | " ", |
| | | pois_minTick, |
| | | " L ", |
| | | m_chartSize.DiagramLeft - minTickLength, |
| | | " ", |
| | | pois_minTick |
| | | ); |
| | | m_svg.createPath(null, valueMini.join(""), attrAxisTickP, null); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | //汽蚀 |
| | | if ( |
| | | m_isHaveNpsh && |
| | | m_isDispCurveNPSH && |
| | | m_coordinatePara.EndLineNoNPSH > m_coordinatePara.StartLineNoNPSH |
| | | ) { |
| | | //刻度线 |
| | | var attrAxisTickNPSH = { |
| | | stroke: m_displayStyle.ColorNPSH, |
| | | "stroke-width": "1", |
| | | fill: "none", |
| | | }; |
| | | |
| | | //刻度文字 |
| | | var styleAxisLabelNPSH = |
| | | "font-size:10px; fill-opacity:1; fill:" + |
| | | m_displayStyle.ColorNPSH + |
| | | ";"; |
| | | //标签 |
| | | var styleAxisTitleNPSH = |
| | | "font-size:14px; ;fill-opacity:1; font-weight:bold; fill:" + |
| | | m_displayStyle.ColorNPSH + |
| | | ";"; |
| | | |
| | | //标签 |
| | | var attrAxisTitleNPSH = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramRight + 44, |
| | | y: (m_chartSize.PanelNPSH.Bottom + m_chartSize.PanelNPSH.Up) / 2 - 10, |
| | | "text-anchor": "middle", |
| | | }; |
| | | var unit_npsh_str = "(" + UnitHelper.GetUnitNameNPSH(m_unit.NPSH) + ")"; |
| | | if (m_localizationType == 0) { |
| | | //中文 |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y - 5; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, "汽"); |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 15; |
| | | m_svg.createText(attrAxisTitleNPSH, styleAxisTitleNPSH, "蚀"); |
| | | attrAxisTitleNPSH.x = attrAxisTitleNPSH.x - 4; |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 24; |
| | | var transform = |
| | | "rotate(90 " + attrAxisTitleNPSH.x + "," + attrAxisTitleNPSH.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleNPSH, |
| | | styleAxisTitleNPSH, |
| | | unit_npsh_str, |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } else { |
| | | attrAxisTitleNPSH.x = attrAxisTitleNPSH.x + 6; |
| | | attrAxisTitleNPSH.y = attrAxisTitleNPSH.y + 24; |
| | | var transform = |
| | | "rotate(90 " + attrAxisTitleNPSH.x + "," + attrAxisTitleNPSH.y + ")"; |
| | | m_svg.createText( |
| | | attrAxisTitleNPSH, |
| | | styleAxisTitleNPSH, |
| | | "NPSHr " + unit_npsh_str, |
| | | 10, |
| | | null, |
| | | transform |
| | | ); |
| | | } |
| | | |
| | | // |
| | | for ( |
| | | var i = 0; |
| | | i <= m_coordinatePara.EndLineNoNPSH - m_coordinatePara.StartLineNoNPSH; |
| | | i++ |
| | | ) { |
| | | var posiY_grid = |
| | | m_chartSize.PanelNPSH.Bottom - m_chartSize.DownDiagram.SpaceGridY * i; |
| | | //主刻度 |
| | | var valueMain = []; |
| | | valueMain.push( |
| | | "M ", |
| | | m_chartSize.DiagramRight, |
| | | " ", |
| | | posiY_grid, |
| | | " L ", |
| | | m_chartSize.DiagramRight + tickLength, |
| | | " ", |
| | | posiY_grid |
| | | ); |
| | | m_svg.createPath(null, valueMain.join(""), attrAxisTickNPSH, null); |
| | | |
| | | //文字 |
| | | var attrAxisLabelNPSH = { |
| | | opacity: 1, |
| | | x: m_chartSize.DiagramRight + 10, |
| | | y: posiY_grid + 5, |
| | | }; |
| | | var axis_npsh = |
| | | m_coordinatePara.MinNPSH + |
| | | (i + m_coordinatePara.StartLineNoNPSH) * m_coordinatePara.SpaceNPSH; |
| | | axis_npsh = UnitHelper.ConvertNPSH_fromM(m_unit.NPSH, axis_npsh); |
| | | if (axis_npsh < -0.01) continue; |
| | | var content = UnitHelper.valueFormat(axis_npsh); |
| | | m_svg.createText(attrAxisLabelNPSH, styleAxisLabelNPSH, content); |
| | | |
| | | //子刻度线 |
| | | if ( |
| | | m_displayStyle.isDispMiniTick && |
| | | i != m_coordinatePara.EndLineNoNPSH - m_coordinatePara.StartLineNoNPSH |
| | | ) { |
| | | for (var j = 0; j < m_displayStyle.MiniTickNumber; j++) { |
| | | var pois_minTick = |
| | | posiY_grid - |
| | | (m_chartSize.DownDiagram.SpaceGridY * j) / |
| | | m_displayStyle.MiniTickNumber; |
| | | var valueMini = []; |
| | | valueMini.push( |
| | | "M ", |
| | | m_chartSize.DiagramRight, |
| | | " ", |
| | | pois_minTick, |
| | | " L ", |
| | | m_chartSize.DiagramRight + minTickLength, |
| | | " ", |
| | | pois_minTick |
| | | ); |
| | | m_svg.createPath(null, valueMini.join(""), attrAxisTickNPSH, null); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | //绘制面板 |
| | | var drawDiagramPanel = function () { |
| | | if (m_chartDiagramPanelStyle == ConstParas.ChartDiagramPanelStyle.Whole) { |
| | | //绘制网格线 |
| | | createGridLineDiagram_Whole(); |
| | | |
| | | //绘制X坐标 |
| | | createXAxis(m_chartSize.DownDiagram.Bottom, 40); |
| | | |
| | | //绘制Y坐标 |
| | | createYAxis_Whole(); |
| | | } else { |
| | | //绘制网格线 |
| | | createGridLineDiagram_TwoPanel(); |
| | | |
| | | //绘制X坐标 |
| | | createXAxis(m_chartSize.UpDiagram.Bottom, 0); |
| | | createXAxis(m_chartSize.DownDiagram.Bottom, 40); |
| | | |
| | | //绘制Y坐标 |
| | | createYAxis_TwoPanel(); |
| | | } |
| | | }; |
| | | |
| | | //产生型谱 |
| | | var drawSpectrumShape = function () { |
| | | // console.log(m_spectrumShape); |
| | | if (m_spectrumShape == null) return; |
| | | removeElementById("SpectrumShape"); |
| | | |
| | | var pathValue = []; |
| | | |
| | | var pixelPoints_Left = []; |
| | | var points_left = m_spectrumShape["LeftParabolaPoints"]; |
| | | for (var v = 0; v < points_left.length; v++) { |
| | | var pt = points_left[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueH(pt.Y); |
| | | pixelPoints_Left.push({ X: x, Y: y }); |
| | | } |
| | | var bezierCurve_points_Left = transBezierCurveModel(pixelPoints_Left); |
| | | for (var h = 0; h < bezierCurve_points_Left.length; h++) { |
| | | var b_pt = bezierCurve_points_Left[h]; |
| | | if (h == 0) { |
| | | pathValue.push("M ", b_pt.Point0.X, " ", b_pt.Point0.Y); |
| | | pathValue.push( |
| | | " C ", |
| | | b_pt.Point1.X, |
| | | " ", |
| | | b_pt.Point1.Y, |
| | | " ", |
| | | b_pt.Point2.X, |
| | | " ", |
| | | b_pt.Point2.Y, |
| | | " ", |
| | | b_pt.Point3.X, |
| | | " ", |
| | | b_pt.Point3.Y |
| | | ); |
| | | } else { |
| | | pathValue.push(" L ", b_pt.Point0.X, " ", b_pt.Point0.Y); |
| | | pathValue.push( |
| | | " C ", |
| | | b_pt.Point1.X, |
| | | " ", |
| | | b_pt.Point1.Y, |
| | | " ", |
| | | b_pt.Point2.X, |
| | | " ", |
| | | b_pt.Point2.Y, |
| | | " ", |
| | | b_pt.Point3.X, |
| | | " ", |
| | | b_pt.Point3.Y |
| | | ); |
| | | } |
| | | } |
| | | |
| | | var pixelPoints_Top = []; |
| | | var points_top = m_spectrumShape["BasePoints"]; |
| | | for (var v = 0; v < points_top.length; v++) { |
| | | var pt = points_top[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueH(pt.Y); |
| | | pixelPoints_Top.push({ X: x, Y: y }); |
| | | } |
| | | var bezierCurve_points_top = transBezierCurveModel(pixelPoints_Top); |
| | | for (var h = 0; h < bezierCurve_points_top.length; h++) { |
| | | var b_pt = bezierCurve_points_top[h]; |
| | | pathValue.push(" L ", b_pt.Point0.X, " ", b_pt.Point0.Y); |
| | | pathValue.push( |
| | | " C ", |
| | | b_pt.Point1.X, |
| | | " ", |
| | | b_pt.Point1.Y, |
| | | " ", |
| | | b_pt.Point2.X, |
| | | " ", |
| | | b_pt.Point2.Y, |
| | | " ", |
| | | b_pt.Point3.X, |
| | | " ", |
| | | b_pt.Point3.Y |
| | | ); |
| | | } |
| | | |
| | | var pixelPoints_bottom = []; |
| | | var points_bottom = m_spectrumShape["SimularPoints"]; |
| | | for (var v = 0; v < points_bottom.length; v++) { |
| | | var pt = points_bottom[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueH(pt.Y); |
| | | pixelPoints_bottom.push({ X: x, Y: y }); |
| | | } |
| | | var bezierCurve_points_bottom = transBezierCurveModel(pixelPoints_bottom); |
| | | for (var h = 0; h < bezierCurve_points_bottom.length; h++) { |
| | | var b_pt = bezierCurve_points_bottom[h]; |
| | | pathValue.push(" L ", b_pt.Point0.X, " ", b_pt.Point0.Y); |
| | | pathValue.push( |
| | | " C ", |
| | | b_pt.Point1.X, |
| | | " ", |
| | | b_pt.Point1.Y, |
| | | " ", |
| | | b_pt.Point2.X, |
| | | " ", |
| | | b_pt.Point2.Y, |
| | | " ", |
| | | b_pt.Point3.X, |
| | | " ", |
| | | b_pt.Point3.Y |
| | | ); |
| | | } |
| | | |
| | | var pixelPoints_right = []; |
| | | var points_right = m_spectrumShape["RightParabolaPoints"]; |
| | | for (var v = 0; v < points_right.length; v++) { |
| | | var pt = points_right[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueH(pt.Y); |
| | | pixelPoints_right.push({ X: x, Y: y }); |
| | | } |
| | | var bezierCurve_points_right = transBezierCurveModel(pixelPoints_right); |
| | | for (var h = 0; h < bezierCurve_points_right.length; h++) { |
| | | var b_pt = bezierCurve_points_right[h]; |
| | | pathValue.push(" L ", b_pt.Point0.X, " ", b_pt.Point0.Y); |
| | | pathValue.push( |
| | | " C ", |
| | | b_pt.Point1.X, |
| | | " ", |
| | | b_pt.Point1.Y, |
| | | " ", |
| | | b_pt.Point2.X, |
| | | " ", |
| | | b_pt.Point2.Y, |
| | | " ", |
| | | b_pt.Point3.X, |
| | | " ", |
| | | b_pt.Point3.Y |
| | | ); |
| | | if (h == bezierCurve_points_right.length - 1) { |
| | | pathValue.push(" L ", b_pt.Point3.X, " ", b_pt.Point3.Y); |
| | | } |
| | | } |
| | | |
| | | if (pathValue.toString().indexOf("M ,NaN, ,NaN") == 0) { |
| | | return; |
| | | } |
| | | |
| | | if (m_displayStyle.SpectrumColor == null) |
| | | m_displayStyle.SpectrumColor = "Aquamarine"; |
| | | var style = { |
| | | "stroke-width": "1", |
| | | stroke: "none", |
| | | fill: m_displayStyle.SpectrumColor, |
| | | "stroke-opacity": "0.1", |
| | | "fill-opacity": "0.3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": -1, |
| | | }; |
| | | m_svg.createPath("SpectrumShape", pathValue.join(""), null, style); |
| | | }; |
| | | |
| | | //绘制曲线(流量扬程) |
| | | var createCurveQH = function ( |
| | | curveElementName, |
| | | curvePoints, |
| | | curveWidth, |
| | | curveColor, |
| | | curveIsDisp, |
| | | curveDashType |
| | | ) { |
| | | if (curvePoints == null) { |
| | | return; |
| | | } |
| | | if (curveElementName == null) { |
| | | return; |
| | | } |
| | | |
| | | var pixelPoints = []; |
| | | for (var v = 0; v < curvePoints.length; v++) { |
| | | var pt = curvePoints[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueH(pt.Y); |
| | | pixelPoints.push({ X: x, Y: y }); |
| | | } |
| | | |
| | | return createCurveQH_pixel( |
| | | curveElementName, |
| | | pixelPoints, |
| | | curveWidth, |
| | | curveColor, |
| | | curveIsDisp, |
| | | curveDashType |
| | | ); |
| | | }; |
| | | //绘制曲线(流量扬程) : 像素点 |
| | | var createCurveQH_pixel = function ( |
| | | curveElementName, |
| | | pixelPoints, |
| | | curveWidth, |
| | | curveColor, |
| | | isDisp, |
| | | curveDashType |
| | | ) { |
| | | if (pixelPoints == null || pixelPoints.length < 3) { |
| | | return; |
| | | } |
| | | if (curveElementName == null) { |
| | | return; |
| | | } |
| | | var pathValue = transBezierCurveToPath(pixelPoints); |
| | | if (pathValue == null || pathValue == undefined) return; |
| | | if (pathValue.toString().indexOf("M ,NaN, ,NaN") == 0) { |
| | | return; |
| | | } |
| | | |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | stroke: m_displayStyle.ColorH, |
| | | fill: "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7, |
| | | }; |
| | | if (curveWidth != null) { |
| | | style["stroke-width"] = curveWidth; |
| | | } |
| | | if (curveColor != null) { |
| | | style["stroke"] = curveColor; |
| | | } |
| | | if (curveDashType != null) { |
| | | style["stroke-dasharray"] = curveDashType; //'10, 10';//'10, 10, 5, 5' |
| | | } |
| | | |
| | | //绘制 |
| | | m_svg.createPath( |
| | | curveElementName, |
| | | pathValue.join(""), |
| | | { |
| | | id: curveElementName, |
| | | }, |
| | | style |
| | | ); |
| | | //是否显示 |
| | | if (isDisp != null && !isDisp) { |
| | | hideElementById(curveElementName); |
| | | } |
| | | |
| | | //绘制定义点 |
| | | /*pixelPoints.forEach(pixel_pt => { |
| | | // console.log(pixel_pt) |
| | | var attr_pt = { |
| | | "cx": pixel_pt.X, |
| | |
| | | m_svg.createCircle(null, attr_pt, style_pt); |
| | | });*/ |
| | | |
| | | return pixelPoints; |
| | | }; |
| | | //绘制直线 |
| | | var createLineQH = function ( |
| | | curveElementName, |
| | | point1, |
| | | point2, |
| | | curveWidth, |
| | | curveColor, |
| | | objTag |
| | | ) { |
| | | if (point1 == null || point2 == null) { |
| | | return; |
| | | } |
| | | if (curveElementName == null) { |
| | | return; |
| | | } |
| | | var x1 = getPixelValueQ(point1.X); |
| | | var y1 = getPixelValueH(point1.Y); |
| | | |
| | | return pixelPoints; |
| | | var x2 = getPixelValueQ(point2.X); |
| | | var y2 = getPixelValueH(point2.Y); |
| | | |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | stroke: m_displayStyle.ColorH, |
| | | fill: "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7, |
| | | }; |
| | | //绘制直线 |
| | | var createLineQH = function (curveElementName, point1, point2, curveWidth, curveColor, objTag) { |
| | | if (point1 == null || point2 == null) { |
| | | return; |
| | | if (curveWidth != null) { |
| | | style["stroke-width"] = curveWidth; |
| | | } |
| | | if (curveColor != null) { |
| | | style["stroke"] = curveColor; |
| | | } |
| | | var temp = "M x1 y1 L x2 y2"; |
| | | var pathValue = temp |
| | | .replace("x1", x1) |
| | | .replace("y1", y1) |
| | | .replace("x2", x2) |
| | | .replace("y2", y2); |
| | | if (objTag == null) |
| | | m_svg.createPath(curveElementName, pathValue, null, style); |
| | | else m_svg.createPath(curveElementName, pathValue, { tag: objTag }, style); |
| | | }; |
| | | //绘制点 |
| | | var createPointQH = function ( |
| | | curveElementName, |
| | | point, |
| | | circleSize, |
| | | circleColor |
| | | ) { |
| | | if (point == null) { |
| | | return; |
| | | } |
| | | if (curveElementName == null) { |
| | | return; |
| | | } |
| | | |
| | | var xPixel = getPixelValueQ(point.X); |
| | | var yPixel = getPixelValueH(point.Y); |
| | | |
| | | var attr = { |
| | | cx: xPixel, |
| | | cy: yPixel, |
| | | r: 2, |
| | | }; |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | stroke: m_displayStyle.ColorH, |
| | | fill: "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7, |
| | | }; |
| | | if (circleSize != null) { |
| | | attr.r = circleSize; |
| | | } |
| | | if (circleColor != null) { |
| | | style["stroke"] = circleColor; |
| | | } |
| | | |
| | | m_svg.createCircle(curveElementName, attr, style); |
| | | }; |
| | | //绘制文字 textAnchor 文字对齐 start | middle | end |
| | | var drawTextByQH = function ( |
| | | curveElementName, |
| | | text, |
| | | point, |
| | | textSize, |
| | | textColor, |
| | | offsetPixelX, |
| | | offsetPixelY, |
| | | textAnchor |
| | | ) { |
| | | if (!text) { |
| | | return; |
| | | } |
| | | if (!point) { |
| | | return; |
| | | } |
| | | |
| | | var xPixel = getPixelValueQ(point.X); |
| | | var yPixel = getPixelValueH(point.Y); |
| | | if (offsetPixelX != null) { |
| | | xPixel += offsetPixelX; |
| | | } |
| | | if (offsetPixelY != null) { |
| | | yPixel -= offsetPixelY; |
| | | } |
| | | |
| | | var textStyle = "stroke-width:1px; "; //font-weight:bold; fill-opacity:0.9; |
| | | if (textColor != null) { |
| | | textStyle += " fill:" + textColor + ";"; |
| | | } else { |
| | | textStyle += " fill:#000000;"; |
| | | } |
| | | if (textSize != null) { |
| | | textStyle += " font-size:" + textSize + "px;"; |
| | | } else { |
| | | textStyle += " font-size:12px;"; |
| | | } |
| | | if (textAnchor != null) { |
| | | textStyle += " text-anchor:" + textAnchor + ";"; |
| | | } |
| | | if (curveElementName == null) { |
| | | return m_svg.createText( |
| | | { |
| | | opacity: 0.5, |
| | | y: yPixel, |
| | | x: xPixel, |
| | | }, |
| | | textStyle, |
| | | text |
| | | ); |
| | | } else { |
| | | return m_svg.createText( |
| | | { |
| | | id: curveElementName, |
| | | opacity: 0.5, |
| | | y: yPixel, |
| | | x: xPixel, |
| | | }, |
| | | textStyle, |
| | | text |
| | | ); |
| | | } |
| | | }; |
| | | //转速文字 |
| | | var drawSpeedTextByQH = function (curveElementName, curveInfo, point) { |
| | | if (!point) { |
| | | return; |
| | | } |
| | | |
| | | var speed = Math.round(curveInfo.speed); |
| | | var hz = Math.round(curveInfo.hz, 1); |
| | | |
| | | var xPixel = getPixelValueQ(point.X) + 12; |
| | | var yPixel = getPixelValueH(point.Y) + 8; |
| | | |
| | | var textStyle = "font-size:12px;text-anchor:start;font-family:sans-serif;"; //fill-opacity:0.9 stroke-width:1px; |
| | | textStyle += " fill:" + curveInfo.color + ";"; |
| | | |
| | | if (curveInfo.type == 2) { |
| | | textStyle += "font-weight:bold;"; // 工作曲线 加粗 |
| | | } |
| | | var text = ""; |
| | | if (m_isDispCurveSpeed && m_isDispCurveHz) { |
| | | text = speed + " rpm" + "(" + hz + "HZ)"; |
| | | } else if (m_isDispCurveSpeed && !m_isDispCurveHz) { |
| | | text = speed + " rpm"; |
| | | } else if (!m_isDispCurveSpeed && m_isDispCurveHz) { |
| | | text = hz + " HZ"; |
| | | } else { |
| | | return; |
| | | } |
| | | |
| | | return m_svg.createText( |
| | | { |
| | | id: curveElementName, |
| | | opacity: 0.5, |
| | | y: yPixel, |
| | | x: xPixel, |
| | | }, |
| | | textStyle, |
| | | text |
| | | ); |
| | | }; |
| | | var drawSpeedTextByQP = function ( |
| | | curveElementName, |
| | | curveInfo, |
| | | point |
| | | ) { |
| | | if (!point) { |
| | | return; |
| | | } |
| | | |
| | | var xPixel = getPixelValueQ(point.X) + 11; |
| | | var yPixel = getPixelValueP(point.Y) + 4; |
| | | |
| | | var textStyle = "font-size:12px;text-anchor:start;font-weight:bold;"; //加粗 stroke-width:1px; fill-opacity:0.9 |
| | | textStyle += " fill:" + curveInfo.color + ";"; |
| | | |
| | | var speed = Math.round(curveInfo.speed); |
| | | var hz = Math.round(curveInfo.hz); |
| | | |
| | | var text = ""; |
| | | if (m_isDispCurveSpeed && m_isDispCurveHz) { |
| | | text = speed + " rpm" + "(" + hz + "HZ)"; |
| | | } else if (m_isDispCurveSpeed && !m_isDispCurveHz) { |
| | | text = speed + " rpm"; |
| | | } else if (!m_isDispCurveSpeed && m_isDispCurveHz) { |
| | | text = hz + " HZ"; |
| | | } else { |
| | | return; |
| | | } |
| | | |
| | | return m_svg.createText( |
| | | { |
| | | id: curveElementName, |
| | | opacity: 0.5, |
| | | y: yPixel, |
| | | x: xPixel, |
| | | }, |
| | | textStyle, |
| | | text |
| | | ); |
| | | }; |
| | | //绘制设计点 |
| | | var drawDesignPoint = function (dp_name, dp_color, dp_x, dp_y) { |
| | | if (dp_x == null || dp_y == null) |
| | | return; |
| | | |
| | | var attr_pt = { |
| | | "cx": getPixelValueQ(dp_x), |
| | | "cy": getPixelValueH(dp_y), |
| | | "r": 5 |
| | | } |
| | | var style_pt = { |
| | | "stroke-width": "2px", |
| | | "stroke": dp_color, |
| | | "fill": dp_color, |
| | | "fill-opacity": "0.5", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7 |
| | | }; |
| | | |
| | | m_svg.createCircle(dp_name, attr_pt, style_pt); |
| | | |
| | | |
| | | }; |
| | | |
| | | //绘制曲线(流量效率) |
| | | var createCurveQE = function ( |
| | | curveElementName, |
| | | points, |
| | | curveWidth, |
| | | curveColor, |
| | | curveIsDisp, |
| | | curveDashType |
| | | ) { |
| | | if (points == null) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | var isForceZeroPt = true; |
| | | if (curveElementName == "RegionBlodCurveQE_Allow") isForceZeroPt = false; |
| | | if (curveElementName == "PerferBlodCurveQE_Allow") isForceZeroPt = false; |
| | | |
| | | var pixelPoints = []; |
| | | for (var v = 0; v < points.length; v++) { |
| | | if (isForceZeroPt && v == 0 && points[0].X < 10) { |
| | | //强制归零 |
| | | points[0].X = 0; |
| | | points[0].Y = 0; |
| | | } |
| | | var pt = points[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueE(pt.Y); |
| | | pixelPoints.push({ X: x, Y: y }); |
| | | } |
| | | |
| | | return createCurveQE_pixel( |
| | | curveElementName, |
| | | pixelPoints, |
| | | curveWidth, |
| | | curveColor, |
| | | curveIsDisp, |
| | | curveDashType |
| | | ); |
| | | }; |
| | | //绘制曲线(流量效率) : 像素点 |
| | | var createCurveQE_pixel = function ( |
| | | curveElementName, |
| | | pixelPoints, |
| | | curveWidth, |
| | | curveColor, |
| | | isDisp, |
| | | curveDashType |
| | | ) { |
| | | if (pixelPoints == null || pixelPoints.length < 3) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | var pathValue = transBezierCurveToPath(pixelPoints); |
| | | if (pathValue == null || pathValue == undefined) return null; |
| | | //有时会报错,加上这个就没事 tangxu 20151122 |
| | | if (pathValue.toString().indexOf("M ,NaN, ,NaN") == 0) { |
| | | return null; |
| | | } |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | stroke: m_displayStyle.ColorE, |
| | | fill: "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7, |
| | | }; |
| | | if (curveWidth != null) { |
| | | style["stroke-width"] = curveWidth; |
| | | } |
| | | if (curveColor != null) { |
| | | style["stroke"] = curveColor; |
| | | } |
| | | |
| | | if (curveDashType != null) { |
| | | style["stroke-dasharray"] = curveDashType; //'10, 10';//'10, 10, 5, 5' |
| | | } |
| | | |
| | | m_svg.createPath( |
| | | curveElementName, |
| | | pathValue.join(""), |
| | | { |
| | | id: curveElementName, |
| | | }, |
| | | style |
| | | ); |
| | | if (isDisp != null && !isDisp) { |
| | | hideElementById(curveElementName); |
| | | } |
| | | return pixelPoints; |
| | | }; |
| | | //绘制曲线(流量功率) |
| | | var createCurveQP = function ( |
| | | curveElementName, |
| | | points, |
| | | curveWidth, |
| | | curveColor, |
| | | curveIsDisp, |
| | | curveDashType |
| | | ) { |
| | | if (points == null) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | |
| | | var pixelPoints = []; |
| | | for (var v = 0; v < points.length; v++) { |
| | | var pt = points[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueP(pt.Y); |
| | | pixelPoints.push({ X: x, Y: y }); |
| | | } |
| | | return createCurveQP_pixel( |
| | | curveElementName, |
| | | pixelPoints, |
| | | curveWidth, |
| | | curveColor, |
| | | curveIsDisp, |
| | | curveDashType |
| | | ); |
| | | }; |
| | | //绘制曲线(流量功率) : 像素点 |
| | | var createCurveQP_pixel = function ( |
| | | curveElementName, |
| | | pixelPoints, |
| | | curveWidth, |
| | | curveColor, |
| | | curveIsDisp, |
| | | curveDashType |
| | | ) { |
| | | if (pixelPoints == null || pixelPoints.length < 3) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | var pathValue = transBezierCurveToPath(pixelPoints); |
| | | if (pathValue == null || pathValue == undefined) return null; |
| | | //有时会报错,加上这个就没事 tangxu 20151122 |
| | | if (pathValue.toString().indexOf("M ,NaN, ,NaN") == 0) { |
| | | return null; |
| | | } |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | stroke: m_displayStyle.ColorP, |
| | | fill: "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7, |
| | | }; |
| | | if (curveWidth != null) { |
| | | style["stroke-width"] = curveWidth; |
| | | } |
| | | if (curveColor != null) { |
| | | style["stroke"] = curveColor; |
| | | } |
| | | //m_svg.createPath(curveElementName, pathValue.join(''), { |
| | | // "id": curveElementName |
| | | //}, style); |
| | | if (curveDashType != null) { |
| | | style["stroke-dasharray"] = curveDashType; //'10, 10';//'10, 10, 5, 5' |
| | | } |
| | | |
| | | m_svg.createPath( |
| | | curveElementName, |
| | | pathValue.join(""), |
| | | { |
| | | id: curveElementName, |
| | | }, |
| | | style |
| | | ); |
| | | if (curveIsDisp != null && !curveIsDisp) { |
| | | hideElementById(curveElementName); |
| | | } |
| | | |
| | | return pixelPoints; |
| | | }; |
| | | //绘制曲线(流量汽蚀) |
| | | var createCurveNPSH = function ( |
| | | curveElementName, |
| | | points, |
| | | curveWidth, |
| | | curveColor, |
| | | curveIsDisp, |
| | | curveDashType |
| | | ) { |
| | | if (points == null || m_coordinatePara.SpaceNPSH < 0.02) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | |
| | | var pixelPoints = []; |
| | | for (var v = 0; v < points.length; v++) { |
| | | var pt = points[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueNPSH(pt.Y); |
| | | pixelPoints.push({ X: x, Y: y }); |
| | | } |
| | | |
| | | return createCurveNPSH_pixel( |
| | | curveElementName, |
| | | pixelPoints, |
| | | curveWidth, |
| | | curveColor, |
| | | curveIsDisp, |
| | | curveDashType |
| | | ); |
| | | }; |
| | | //绘制曲线(流量功率) : 像素点 |
| | | var createCurveNPSH_pixel = function ( |
| | | curveElementName, |
| | | pixelPoints, |
| | | curveWidth, |
| | | curveColor, |
| | | curveIsDisp, |
| | | curveDashType |
| | | ) { |
| | | if (pixelPoints == null || pixelPoints.length < 3) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | var pathValue = transBezierCurveToPath(pixelPoints); |
| | | if (pathValue == null || pathValue == undefined) return; |
| | | //有时会报错,加上这个就没事 tangxu 20151122 |
| | | if (pathValue.toString().indexOf("M ,NaN, ,NaN") == 0) { |
| | | return; |
| | | } |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | stroke: m_displayStyle.ColorNPSH, |
| | | fill: "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7, |
| | | }; |
| | | if (curveWidth != null) { |
| | | style["stroke-width"] = curveWidth; |
| | | } |
| | | if (curveColor != null) { |
| | | style["stroke"] = curveColor; |
| | | } |
| | | if (curveDashType != null) { |
| | | style["stroke-dasharray"] = curveDashType; //'10, 10';//'10, 10, 5, 5' |
| | | } |
| | | m_svg.createPath( |
| | | curveElementName, |
| | | pathValue.join(""), |
| | | { |
| | | id: curveElementName, |
| | | }, |
| | | style |
| | | ); |
| | | if (curveIsDisp != null && !curveIsDisp) { |
| | | hideElementById(curveElementName); |
| | | } |
| | | }; |
| | | //清理 |
| | | var ClearCurveElement = function () { }; |
| | | |
| | | //绘制等效线 |
| | | var drawEquepEtaCurveList = function () { |
| | | // |
| | | if (m_chartObject.EqualParaCurvesE != null) { |
| | | for (var i = 0; i < m_chartObject.EqualParaCurvesE.length; i++) { |
| | | var points = m_chartObject.EqualParaCurvesE[i].PointInfo; |
| | | if (points.length >= 4) { |
| | | //曲线 |
| | | createCurveQH( |
| | | "EqualParaCurvesE" + i, |
| | | points, |
| | | 1, |
| | | m_displayStyle.ColorEqualParaCurvesE |
| | | ); |
| | | drawTextByQH( |
| | | "EqualParaCurvesEText" + i, |
| | | m_chartObject.EqualParaCurvesE[i].CurvePara + "%", |
| | | points[0], |
| | | m_displayStyle.EqualCurveSize, |
| | | m_displayStyle.ColorEqualParaCurvesE, |
| | | 2, |
| | | 6, |
| | | "middle" |
| | | ); |
| | | } else if (points.length == 2 || points.length == 3) { |
| | | //直线 |
| | | createLineQH( |
| | | "EqualParaCurvesE" + i, |
| | | points[0], |
| | | points[1], |
| | | 1, |
| | | m_displayStyle.ColorEqualParaCurvesE |
| | | ); |
| | | drawTextByQH( |
| | | "EqualParaCurvesEText" + i, |
| | | m_chartObject.EqualParaCurvesE[i].CurvePara + "%", |
| | | points[0], |
| | | m_displayStyle.EqualCurveSize, |
| | | m_displayStyle.ColorEqualParaCurvesE, |
| | | 2, |
| | | 6, |
| | | "middle" |
| | | ); |
| | | } else if (points.length == 1) { |
| | | createPointQH( |
| | | "EqualParaCurvesE" + i, |
| | | points[0], |
| | | 3, |
| | | m_displayStyle.ColorEqualParaCurvesE |
| | | ); |
| | | drawTextByQH( |
| | | "EqualParaCurvesEText" + i, |
| | | m_chartObject.EqualParaCurvesE[i].CurvePara + "%", |
| | | points[0], |
| | | m_displayStyle.EqualCurveSize, |
| | | m_displayStyle.ColorEqualParaCurvesE, |
| | | 2, |
| | | 6, |
| | | "middle" |
| | | ); |
| | | } |
| | | if (curveElementName == null) { |
| | | return; |
| | | } |
| | | var x1 = getPixelValueQ(point1.X); |
| | | var y1 = getPixelValueH(point1.Y); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | //绘制水印(文字) |
| | | var drawTextWaterMark = function (text) { |
| | | if (!text) { |
| | | return; |
| | | } |
| | | |
| | | var x2 = getPixelValueQ(point2.X); |
| | | var y2 = getPixelValueH(point2.Y); |
| | | var logoStyle = |
| | | "-webkit-transform: rotate(5deg);-moz-transform: rotate(5deg);transform: rotate(15deg);fill:#000000;fill-opacity:0.6;font-weight:bold;stroke-width:1px;font-size:16px;z-index:0"; |
| | | |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | "stroke": m_displayStyle.ColorH, |
| | | "fill": "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7 |
| | | var w = 30; |
| | | var h = 80; |
| | | var isDrawSecond = true; |
| | | var left = |
| | | (m_chartSize.DiagramRight - m_chartSize.DiagramLeft - text.length * w) / |
| | | 2; |
| | | |
| | | for (var i = 0; i < text.length; i++) { |
| | | m_svg.createText( |
| | | { |
| | | opacity: 0.5, |
| | | y: m_chartSize.SpaceTop + h + i * 10, |
| | | x: m_chartSize.DiagramLeft + left + i * w, |
| | | }, |
| | | logoStyle, |
| | | text[i], |
| | | 0, |
| | | "WaterMarkText1" |
| | | ); |
| | | |
| | | if (isDrawSecond) { |
| | | var endHeight = h + text.length * 10; //: h + text.length * 10 - 80; |
| | | m_svg.createText( |
| | | { |
| | | opacity: 0.5, |
| | | y: m_chartSize.UpDiagram.Bottom - endHeight + i * 10, |
| | | x: m_chartSize.DiagramLeft + left + i * w, |
| | | }, |
| | | logoStyle, |
| | | text[i], |
| | | 0, |
| | | "WaterMarkText1" |
| | | ); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | //绘制水印(图片) |
| | | var drawLogoWaterMark = function () { |
| | | var watermark_img_url = "static/img/watermark.png"; |
| | | |
| | | removeElementById("mscWaterMarkImage1"); |
| | | removeElementById("mscWaterMarkImage2"); |
| | | removeElementById("mscWaterMarkImage3"); |
| | | removeElementById("mscWaterMarkImage4"); |
| | | |
| | | var img_watermark = new Image(); |
| | | img_watermark.src = watermark_img_url; |
| | | img_watermark.onload = function () { |
| | | var watermark_image_width_real = img_watermark.width; |
| | | var watermark_image_height_real = img_watermark.height; |
| | | |
| | | //console.log('m_chartSize',m_chartSize)//TotalHeight TotalWidth |
| | | var ratio_byHeight = |
| | | (m_chartSize.TotalHeight * 0.2) / watermark_image_height_real; |
| | | var ratio_byWidth = |
| | | (m_chartSize.TotalWidth * 0.2) / watermark_image_width_real; |
| | | //console.log('m_chartSize',ratio_byHeight,ratio_byWidth)//TotalHeight TotalWidth |
| | | var ratio_waterMark = Math.min(ratio_byHeight, ratio_byWidth); |
| | | |
| | | var watermark_image_width = watermark_image_width_real * ratio_waterMark; |
| | | var watermark_image_height = |
| | | watermark_image_height_real * ratio_waterMark; |
| | | |
| | | var logoStyle = |
| | | "-webkit-transform: rotate(5deg);-moz-transform: rotate(5deg);transform: rotate(15deg);fill:#000000;fill-opacity:0.6;font-weight:bold;stroke-width:1px;font-size:16px;z-index:0"; |
| | | var logoPosi1 = { |
| | | opacity: 0.9, |
| | | y: (m_chartSize.TotalHeight * 1) / 4 - watermark_image_height / 2, |
| | | x: (m_chartSize.TotalWidth * 1) / 4 - watermark_image_width / 2, |
| | | width: watermark_image_width, |
| | | height: watermark_image_height, |
| | | }; |
| | | m_svg.createImage( |
| | | logoPosi1, |
| | | logoStyle, |
| | | "mscWaterMarkImage1", |
| | | watermark_img_url |
| | | ); |
| | | |
| | | var logoPosi2 = { |
| | | opacity: 0.9, |
| | | y: (m_chartSize.TotalHeight * 3) / 4 - watermark_image_height / 2, |
| | | x: (m_chartSize.TotalWidth * 1) / 4 - watermark_image_width / 2, |
| | | width: watermark_image_width, |
| | | height: watermark_image_height, |
| | | }; |
| | | m_svg.createImage( |
| | | logoPosi2, |
| | | logoStyle, |
| | | "mscWaterMarkImage2", |
| | | watermark_img_url |
| | | ); |
| | | |
| | | var logoPosi3 = { |
| | | opacity: 0.9, |
| | | y: (m_chartSize.TotalHeight * 1) / 4 - watermark_image_height / 2, |
| | | x: (m_chartSize.TotalWidth * 3) / 4 - watermark_image_width / 2, |
| | | width: watermark_image_width, |
| | | height: watermark_image_height, |
| | | }; |
| | | m_svg.createImage( |
| | | logoPosi3, |
| | | logoStyle, |
| | | "mscWaterMarkImage3", |
| | | watermark_img_url |
| | | ); |
| | | |
| | | var logoPosi4 = { |
| | | opacity: 0.9, |
| | | y: (m_chartSize.TotalHeight * 3) / 4 - watermark_image_height / 2, |
| | | x: (m_chartSize.TotalWidth * 3) / 4 - watermark_image_width / 2, |
| | | width: watermark_image_width, |
| | | height: watermark_image_height, |
| | | }; |
| | | m_svg.createImage( |
| | | logoPosi4, |
| | | logoStyle, |
| | | "mscWaterMarkImage4", |
| | | watermark_img_url |
| | | ); |
| | | }; |
| | | }; |
| | | |
| | | //获取x在curve的(X Y)点值 (像素点) |
| | | var getBezierPointY = function (curve, x) { |
| | | if (curve == null) return null; |
| | | var iPtCount = curve.length; |
| | | |
| | | if (x < curve[0].Point0.X - 1) { |
| | | return null; |
| | | } |
| | | if (x > curve[iPtCount - 1].Point3.X + 1) { |
| | | return null; |
| | | } |
| | | |
| | | for (var i = 0; i < iPtCount; i++) { |
| | | if (x == curve[i].Point0.X) { |
| | | return { |
| | | X: curve[i].Point0.X, |
| | | Y: curve[i].Point0.Y, |
| | | }; |
| | | if (curveWidth != null) { |
| | | style["stroke-width"] = curveWidth; |
| | | } |
| | | if (curveColor != null) { |
| | | style["stroke"] = curveColor; |
| | | } |
| | | var temp = "M x1 y1 L x2 y2"; |
| | | var pathValue = temp.replace("x1", x1).replace("y1", y1).replace("x2", x2).replace("y2", y2); |
| | | if (objTag == null) |
| | | m_svg.createPath(curveElementName, pathValue, null, style); |
| | | else |
| | | m_svg.createPath(curveElementName, pathValue, { "tag": objTag }, style); |
| | | }; |
| | | //绘制点 |
| | | var createPointQH = function (curveElementName, point, circleSize, circleColor) { |
| | | if (point == null) { |
| | | return; |
| | | } |
| | | if (curveElementName == null) { |
| | | return; |
| | | } |
| | | |
| | | var xPixel = getPixelValueQ(point.X); |
| | | var yPixel = getPixelValueH(point.Y); |
| | | |
| | | var attr = { |
| | | "cx": xPixel, |
| | | "cy": yPixel, |
| | | "r": 2 |
| | | } |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | "stroke": m_displayStyle.ColorH, |
| | | "fill": "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7 |
| | | } |
| | | if (x == curve[i].Point3.X) { |
| | | return { |
| | | X: curve[i].Point3.X, |
| | | Y: curve[i].Point3.Y, |
| | | }; |
| | | if (circleSize != null) { |
| | | attr.r = circleSize; |
| | | } |
| | | if (circleColor != null) { |
| | | style["stroke"] = circleColor; |
| | | } |
| | | |
| | | m_svg.createCircle(curveElementName, attr, style); |
| | | }; |
| | | //绘制文字 textAnchor 文字对齐 start | middle | end |
| | | var drawTextByQH = function (curveElementName, text, point, textSize, textColor, offsetPixelX, offsetPixelY, textAnchor) { |
| | | if (!text) { |
| | | return; |
| | | } |
| | | if (!point) { |
| | | return; |
| | | } |
| | | |
| | | var xPixel = getPixelValueQ(point.X); |
| | | var yPixel = getPixelValueH(point.Y); |
| | | if (offsetPixelX != null) { |
| | | xPixel += offsetPixelX; |
| | | } |
| | | if (offsetPixelY != null) { |
| | | yPixel -= offsetPixelY; |
| | | } |
| | | |
| | | var textStyle = "stroke-width:1px; ";//font-weight:bold; fill-opacity:0.9; |
| | | if (textColor != null) { |
| | | textStyle += " fill:" + textColor + ";"; |
| | | } |
| | | else { |
| | | textStyle += " fill:#000000;"; |
| | | } |
| | | if (textSize != null) { |
| | | textStyle += " font-size:" + textSize + "px;" |
| | | } else { |
| | | textStyle += " font-size:12px;"; |
| | | } |
| | | if (textAnchor != null) { |
| | | textStyle += " text-anchor:" + textAnchor + ";"; |
| | | } |
| | | if (curveElementName == null) { |
| | | return m_svg.createText({ |
| | | "opacity": 0.5, |
| | | "y": yPixel, |
| | | "x": xPixel |
| | | }, textStyle, text); |
| | | } |
| | | else { |
| | | return m_svg.createText({ |
| | | "id": curveElementName, |
| | | "opacity": 0.5, |
| | | "y": yPixel, |
| | | "x": xPixel |
| | | }, textStyle, text); |
| | | } |
| | | }; |
| | | //转速文字 |
| | | var drawSpeedTextByQH = function (curveElementName, speed, point, textColor) { |
| | | |
| | | if (!point) { |
| | | return; |
| | | } |
| | | |
| | | var xPixel = getPixelValueQ(point.X) + 12; |
| | | var yPixel = getPixelValueH(point.Y) + 8; |
| | | |
| | | var textStyle = "font-size:13px;text-anchor:start; font-weight:bold; ";//加粗 fill-opacity:0.9 stroke-width:1px; |
| | | textStyle += " fill:" + textColor + ";"; |
| | | |
| | | var text = speed + " rpm"; |
| | | return m_svg.createText({ |
| | | "id": curveElementName, |
| | | "opacity": 0.5, |
| | | "y": yPixel, |
| | | "x": xPixel |
| | | }, textStyle, text); |
| | | |
| | | }; |
| | | var drawSpeedTextByQP = function (curveElementName, speed, point, textColor) { |
| | | |
| | | if (!point) { |
| | | return; |
| | | } |
| | | |
| | | var xPixel = getPixelValueQ(point.X) + 11; |
| | | var yPixel = getPixelValueP(point.Y) + 4; |
| | | |
| | | var textStyle = "font-size:13px;text-anchor:start;font-weight:bold;";//加粗 stroke-width:1px; fill-opacity:0.9 |
| | | textStyle += " fill:" + textColor + ";"; |
| | | |
| | | var text = speed + " rpm"; |
| | | return m_svg.createText({ |
| | | "id": curveElementName, |
| | | "opacity": 0.5, |
| | | "y": yPixel, |
| | | "x": xPixel |
| | | }, textStyle, text); |
| | | |
| | | }; |
| | | //绘制设计点 |
| | | var drawDesignPoint = function () { |
| | | if (m_chartObject.DesignPoint4StdUnit == null) |
| | | return; |
| | | var defaultDp = m_chartObject.DesignPoint4StdUnit; |
| | | |
| | | var DispStyleType = m_displayStyle.DesignPointDispType; |
| | | if (DispStyleType == 2) {//倒三角 |
| | | |
| | | var xPixel = getPixelValueQ(defaultDp.X); |
| | | var yPixel = getPixelValueH(defaultDp.Y); |
| | | |
| | | var xTri = m_chartSize.DiagramWidth / 20; |
| | | var yTri = xTri / 2; |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | "stroke": "red", |
| | | "fill": "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 18 |
| | | }; |
| | | //if (curveWidth != null) { |
| | | // style["stroke-width"] = curveWidth; |
| | | //} |
| | | //if (curveColor != null) { |
| | | // style["stroke"] = curveColor; |
| | | //} |
| | | |
| | | |
| | | var temp = "M x1 y1 L x2 y2"; |
| | | var pathValue = temp.replace("x1", xPixel).replace("y1", yPixel).replace("x2", (xPixel - xTri)).replace("y2", yPixel); |
| | | m_svg.createPath("DesignPointWater1", pathValue, { |
| | | //"class": "DesignPoint1", |
| | | "tag": "DesignPoint1" |
| | | }, style); |
| | | pathValue = temp.replace("x1", xPixel).replace("y1", yPixel).replace("x2", xPixel).replace("y2", (yPixel + yTri)); |
| | | m_svg.createPath("DesignPointWater2", pathValue, { |
| | | //"class": "DesignPoint1", |
| | | "tag": "DesignPoint1" |
| | | }, style); |
| | | pathValue = temp.replace("x1", xPixel - xTri).replace("y1", yPixel).replace("x2", xPixel).replace("y2", (yPixel + yTri)); |
| | | m_svg.createPath("DesignPointWater3", pathValue, { |
| | | //"class": "DesignPoint1", |
| | | "tag": "DesignPoint1" |
| | | }, style); |
| | | |
| | | |
| | | //m_svg.createPath(objName, pathValue.join(''), { |
| | | // "id": objName |
| | | //}, style); |
| | | |
| | | pathValue = temp.replace("x1", xPixel - xTri / 3).replace("y1", yPixel).replace("x2", xPixel).replace("y2", (yPixel + yTri / 3)); |
| | | m_svg.createPath("DesignPointWater4", pathValue, { |
| | | //"class": "DesignPoint1", |
| | | "tag": "DesignPoint1" |
| | | }, style); |
| | | |
| | | pathValue = temp.replace("x1", xPixel - xTri * 2 / 3).replace("y1", yPixel).replace("x2", xPixel).replace("y2", (yPixel + yTri * 2 / 3)); |
| | | m_svg.createPath("DesignPointWater5", pathValue, { |
| | | //"class": "DesignPoint1", |
| | | "tag": "DesignPoint1" |
| | | }, style); |
| | | |
| | | } |
| | | else {//十字线 |
| | | var x = defaultDp.X; |
| | | var y = defaultDp.Y; |
| | | var point1 = { X: x, Y: y * m_designPointTolerance[2] }; |
| | | var point2 = { X: x, Y: y * m_designPointTolerance[3] }; |
| | | createLineQH("DesignPointWater1", point1, point2, 3, "red", "DesignPoint1"); |
| | | |
| | | point1 = { X: x * m_designPointTolerance[0], Y: y }; |
| | | point2 = { X: x * m_designPointTolerance[1], Y: y }; |
| | | createLineQH("DesignPointWater2", point1, point2, 3, "red", "DesignPoint1"); |
| | | } |
| | | |
| | | }; |
| | | |
| | | //绘制曲线(流量效率) |
| | | var createCurveQE = function (curveElementName, points, curveWidth, curveColor, curveIsDisp, curveDashType) { |
| | | if (points == null) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | var isForceZeroPt = true; |
| | | if (curveElementName == "RegionBlodCurveQE_Allow") |
| | | isForceZeroPt = false; |
| | | if (curveElementName == "PerferBlodCurveQE_Allow") |
| | | isForceZeroPt = false; |
| | | |
| | | var pixelPoints = new Array(); |
| | | for (var v = 0; v < points.length; v++) { |
| | | if (isForceZeroPt && v == 0 && points[0].X < 10) {//强制归零 |
| | | points[0].X = 0; |
| | | points[0].Y = 0; |
| | | } |
| | | var pt = points[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueE(pt.Y); |
| | | pixelPoints.push({ "X": x, "Y": y }); |
| | | } |
| | | |
| | | return createCurveQE_pixel(curveElementName, pixelPoints, curveWidth, curveColor, curveIsDisp, curveDashType); |
| | | }; |
| | | //绘制曲线(流量效率) : 像素点 |
| | | var createCurveQE_pixel = function (curveElementName, pixelPoints, curveWidth, curveColor, isDisp, curveDashType) { |
| | | if (pixelPoints == null || pixelPoints.length < 3) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | var pathValue = transBezierCurveToPath(pixelPoints); |
| | | if (pathValue == null || pathValue == undefined) |
| | | return null; |
| | | //有时会报错,加上这个就没事 tangxu 20151122 |
| | | if (pathValue.toString().indexOf("M ,NaN, ,NaN") == 0) { |
| | | return null; |
| | | }; |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | "stroke": m_displayStyle.ColorE, |
| | | "fill": "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7 |
| | | }; |
| | | if (curveWidth != null) { |
| | | style["stroke-width"] = curveWidth; |
| | | } |
| | | if (curveColor != null) { |
| | | style["stroke"] = curveColor; |
| | | } |
| | | |
| | | if (curveDashType != null) { |
| | | style["stroke-dasharray"] = curveDashType;//'10, 10';//'10, 10, 5, 5' |
| | | } |
| | | |
| | | m_svg.createPath(curveElementName, pathValue.join(''), { |
| | | "id": curveElementName |
| | | }, style); |
| | | if (isDisp != null && !isDisp) { |
| | | $("#" + curveElementName).hide(); |
| | | } |
| | | return pixelPoints; |
| | | }; |
| | | //绘制曲线(流量功率) |
| | | var createCurveQP = function (curveElementName, points, curveWidth, curveColor, curveIsDisp, curveDashType) { |
| | | if (points == null) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | |
| | | var pixelPoints = new Array(); |
| | | for (var v = 0; v < points.length; v++) { |
| | | var pt = points[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueP(pt.Y); |
| | | pixelPoints.push({ "X": x, "Y": y }); |
| | | } |
| | | return createCurveQP_pixel(curveElementName, pixelPoints, curveWidth, curveColor, curveIsDisp, curveDashType); |
| | | }; |
| | | //绘制曲线(流量功率) : 像素点 |
| | | var createCurveQP_pixel = function (curveElementName, pixelPoints, curveWidth, curveColor, curveIsDisp, curveDashType) { |
| | | if (pixelPoints == null || pixelPoints.length < 3) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | var pathValue = transBezierCurveToPath(pixelPoints); |
| | | if (pathValue == null || pathValue == undefined) |
| | | return null; |
| | | //有时会报错,加上这个就没事 tangxu 20151122 |
| | | if (pathValue.toString().indexOf("M ,NaN, ,NaN") == 0) { |
| | | return null; |
| | | }; |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | "stroke": m_displayStyle.ColorP, |
| | | "fill": "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7 |
| | | }; |
| | | if (curveWidth != null) { |
| | | style["stroke-width"] = curveWidth; |
| | | } |
| | | if (curveColor != null) { |
| | | style["stroke"] = curveColor; |
| | | } |
| | | //m_svg.createPath(curveElementName, pathValue.join(''), { |
| | | // "id": curveElementName |
| | | //}, style); |
| | | if (curveDashType != null) { |
| | | style["stroke-dasharray"] = curveDashType;//'10, 10';//'10, 10, 5, 5' |
| | | } |
| | | |
| | | m_svg.createPath(curveElementName, pathValue.join(''), { |
| | | "id": curveElementName |
| | | }, style); |
| | | if (curveIsDisp != null && !curveIsDisp) { |
| | | $("#" + curveElementName).hide(); |
| | | } |
| | | |
| | | return pixelPoints; |
| | | }; |
| | | //绘制曲线(流量汽蚀) |
| | | var createCurveNPSH = function (curveElementName, points, curveWidth, curveColor, curveIsDisp, curveDashType) { |
| | | if (points == null || m_coordinatePara.SpaceNPSH < 0.02) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | |
| | | var pixelPoints = new Array(); |
| | | for (var v = 0; v < points.length; v++) { |
| | | var pt = points[v]; |
| | | var x = getPixelValueQ(pt.X); |
| | | var y = getPixelValueNPSH(pt.Y); |
| | | pixelPoints.push({ "X": x, "Y": y }); |
| | | } |
| | | |
| | | return createCurveNPSH_pixel(curveElementName, pixelPoints, curveWidth, curveColor, curveIsDisp, curveDashType); |
| | | }; |
| | | //绘制曲线(流量功率) : 像素点 |
| | | var createCurveNPSH_pixel = function (curveElementName, pixelPoints, curveWidth, curveColor, curveIsDisp, curveDashType) { |
| | | if (pixelPoints == null || pixelPoints.length < 3) { |
| | | return null; |
| | | } |
| | | if (curveElementName == null) { |
| | | return null; |
| | | } |
| | | var pathValue = transBezierCurveToPath(pixelPoints); |
| | | if (pathValue == null || pathValue == undefined) |
| | | return; |
| | | //有时会报错,加上这个就没事 tangxu 20151122 |
| | | if (pathValue.toString().indexOf("M ,NaN, ,NaN") == 0) { |
| | | return; |
| | | }; |
| | | var style = { |
| | | "stroke-width": "2px", |
| | | "stroke": m_displayStyle.ColorNPSH, |
| | | "fill": "none", |
| | | "fill-opacity": "0.5", |
| | | //"stroke-dasharray":"5 3", |
| | | "shape-rendering": "geometricPrecision", |
| | | "zIndex:": 7 |
| | | }; |
| | | if (curveWidth != null) { |
| | | style["stroke-width"] = curveWidth; |
| | | } |
| | | if (curveColor != null) { |
| | | style["stroke"] = curveColor; |
| | | } |
| | | if (curveDashType != null) { |
| | | style["stroke-dasharray"] = curveDashType;//'10, 10';//'10, 10, 5, 5' |
| | | } |
| | | m_svg.createPath(curveElementName, pathValue.join(''), { |
| | | "id": curveElementName |
| | | }, style); |
| | | if (curveIsDisp != null && !curveIsDisp) { |
| | | $("#" + curveElementName).hide(); |
| | | } |
| | | }; |
| | | //清理 |
| | | var ClearCurveElement = function () { |
| | | |
| | | |
| | | |
| | | |
| | | }; |
| | | |
| | | |
| | | |
| | | |
| | | //绘制等效线 |
| | | var drawEquepEtaCurveList = function () { |
| | | } |
| | | if (x > curve[i].Point0.X && x < curve[i].Point3.X) { |
| | | var ptBizer = curve[i]; |
| | | // |
| | | if (m_chartObject.EqualParaCurvesE != null) { |
| | | for (var i = 0; i < m_chartObject.EqualParaCurvesE.length; i++) { |
| | | var points = m_chartObject.EqualParaCurvesE[i].PointInfo; |
| | | if (points.length >= 4) { //曲线 |
| | | createCurveQH("EqualParaCurvesE" + i, points, 1, m_displayStyle.ColorEqualParaCurvesE); |
| | | drawTextByQH("EqualParaCurvesEText" + i, m_chartObject.EqualParaCurvesE[i].CurvePara + "%", points[0], m_displayStyle.EqualCurveSize, m_displayStyle.ColorEqualParaCurvesE, 2, 6, "middle"); |
| | | } else if (points.length == 2 || points.length == 3) { //直线 |
| | | createLineQH("EqualParaCurvesE" + i, points[0], points[1], 1, m_displayStyle.ColorEqualParaCurvesE); |
| | | drawTextByQH("EqualParaCurvesEText" + i, m_chartObject.EqualParaCurvesE[i].CurvePara + "%", points[0], m_displayStyle.EqualCurveSize, m_displayStyle.ColorEqualParaCurvesE, 2, 6, "middle"); |
| | | } |
| | | else if (points.length == 1) { |
| | | createPointQH("EqualParaCurvesE" + i, points[0], 3, m_displayStyle.ColorEqualParaCurvesE); |
| | | drawTextByQH("EqualParaCurvesEText" + i, m_chartObject.EqualParaCurvesE[i].CurvePara + "%", points[0], m_displayStyle.EqualCurveSize, m_displayStyle.ColorEqualParaCurvesE, 2, 6, "middle"); |
| | | } |
| | | try { |
| | | var minDis = Math.abs(ptBizer.Point3.X - ptBizer.Point0.X); |
| | | var sectY = null; |
| | | var sectX = null; |
| | | 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; |
| | | } |
| | | } |
| | | }; |
| | | |
| | | |
| | | //绘制水印(文字) |
| | | var drawTextWaterMark = function (text) { |
| | | if (!text) { |
| | | return; |
| | | } |
| | | |
| | | var logoStyle = "-webkit-transform: rotate(5deg);-moz-transform: rotate(5deg);transform: rotate(15deg);fill:#000000;fill-opacity:0.6;font-weight:bold;stroke-width:1px;font-size:16px;z-index:0"; |
| | | |
| | | var w = 30; |
| | | var h = 80; |
| | | var isDrawSecond = true; |
| | | var left = (m_chartSize.DiagramRight - m_chartSize.DiagramLeft - text.length * w) / 2; |
| | | |
| | | for (var i = 0; i < text.length; i++) { |
| | | m_svg.createText({ |
| | | "opacity": 0.5, |
| | | "y": m_chartSize.SpaceTop + h + i * 10, |
| | | "x": m_chartSize.DiagramLeft + left + i * w |
| | | }, logoStyle, text[i], 0, "WaterMarkText1"); |
| | | |
| | | if (isDrawSecond) { |
| | | var endHeight = h + text.length * 10;//: h + text.length * 10 - 80; |
| | | m_svg.createText({ |
| | | "opacity": 0.5, |
| | | "y": m_chartSize.UpDiagram.Bottom - endHeight + i * 10, |
| | | "x": m_chartSize.DiagramLeft + left + i * w |
| | | }, logoStyle, text[i], 0, "WaterMarkText1") |
| | | } |
| | | } |
| | | }; |
| | | |
| | | //绘制水印(图片) |
| | | var drawLogoWaterMark = function () { |
| | | var watermark_img_url = "/static/img/watermark/default.png"; |
| | | |
| | | var img_watermark = new Image() |
| | | img_watermark.src = watermark_img_url; |
| | | img_watermark.onload = function () { |
| | | |
| | | var watermark_image_width_real = img_watermark.width |
| | | var watermark_image_height_real = img_watermark.height; |
| | | |
| | | var ratio_byHeight = m_chartSize.TotalHeight * 0.2 / watermark_image_height_real; |
| | | var ratio_byWidth = m_chartSize.TotalWidth * 0.2 / watermark_image_width_real; |
| | | |
| | | var ratio_waterMark = Math.min(ratio_byHeight, ratio_byWidth); |
| | | |
| | | var watermark_image_width = watermark_image_width_real * ratio_waterMark; |
| | | var watermark_image_height = watermark_image_height_real * ratio_waterMark; |
| | | |
| | | var logoStyle = "-webkit-transform: rotate(5deg);-moz-transform: rotate(5deg);transform: rotate(15deg);fill:#000000;fill-opacity:0.6;font-weight:bold;stroke-width:1px;font-size:16px;z-index:0"; |
| | | var logoPosi1 = { |
| | | "opacity": 0.8, |
| | | "y": m_chartSize.TotalHeight * 1 / 4 - watermark_image_height / 2, |
| | | "x": m_chartSize.TotalWidth * 1 / 4 - watermark_image_width / 2, |
| | | "width": watermark_image_width, |
| | | "height": watermark_image_height |
| | | } |
| | | m_svg.createImage(logoPosi1, logoStyle, "WaterMarkImage2", watermark_img_url); |
| | | |
| | | var logoPosi2 = { |
| | | "opacity": 0.8, |
| | | "y": m_chartSize.TotalHeight * 3 / 4 - watermark_image_height / 2, |
| | | "x": m_chartSize.TotalWidth * 1 / 4 - watermark_image_width / 2, |
| | | "width": watermark_image_width, |
| | | "height": watermark_image_height |
| | | } |
| | | m_svg.createImage(logoPosi2, logoStyle, "WaterMarkImage2", watermark_img_url); |
| | | |
| | | |
| | | var logoPosi3 = { |
| | | "opacity": 0.8, |
| | | "y": m_chartSize.TotalHeight * 1 / 4 - watermark_image_height / 2, |
| | | "x": m_chartSize.TotalWidth * 3 / 4 - watermark_image_width / 2, |
| | | "width": watermark_image_width, |
| | | "height": watermark_image_height |
| | | } |
| | | m_svg.createImage(logoPosi3, logoStyle, "WaterMarkImage3", watermark_img_url); |
| | | |
| | | var logoPosi4 = { |
| | | "opacity": 0.8, |
| | | "y": m_chartSize.TotalHeight * 3 / 4 - watermark_image_height / 2, |
| | | "x": m_chartSize.TotalWidth * 3 / 4 - watermark_image_width / 2, |
| | | "width": watermark_image_width, |
| | | "height": watermark_image_height |
| | | } |
| | | m_svg.createImage(logoPosi4, logoStyle, "WaterMarkImage4", watermark_img_url); |
| | | } |
| | | }; |
| | | //产生装置曲线 |
| | | var drawEquipmentCurve = function () { |
| | | $("#EquipmentCurve").remove(); |
| | | if (m_chartObject.EquipmentSectPt == null) |
| | | return; |
| | | var pointNumber = 20; |
| | | var EquipmentCurve = []; |
| | | var space = m_chartObject.EquipmentSectPt.X / (pointNumber - 1); |
| | | var k = (m_chartObject.EquipmentSectPt.Y - m_equipZeroH) / (m_chartObject.EquipmentSectPt.X * m_chartObject.EquipmentSectPt.X); |
| | | for (var i = 0; i < pointNumber; i++) { |
| | | var pt = {}; |
| | | pt.X = space * i; |
| | | pt.Y = m_equipZeroH + k * pt.X * pt.X; |
| | | EquipmentCurve.push(pt); |
| | | } |
| | | createCurveQH("EquipmentCurve", EquipmentCurve, 1, m_displayStyle.ColorEquipment, m_displayStyle.isDispEquipmentCurve); |
| | | }; |
| | | //查询查询竖直指导线 |
| | | var drawQueryIndicatVertLine = function () { |
| | | |
| | | if ($("#infoDv4VerticalLine").is("div")) { |
| | | $("#infoDv4VerticalLine").remove(); |
| | | } |
| | | |
| | | //先创建用于放置查询信息的Div |
| | | var htmlDiv = "<lable style='font-size:7px'>" + getTranslateString("流量") + "</label>"; |
| | | $("#" + m_divChartName).append($("<div id='infoDv4VerticalLine'></div>").css({ |
| | | "position": "relative",//relative absolute |
| | | "color": "gray", |
| | | "font-size": "9px", |
| | | //"font-family": "Times New Roman", |
| | | //"font-weight": "bold", |
| | | "text-align": "left", |
| | | "width": "120px", |
| | | "left": (m_chartSize.DiagramRight - 125).toString() + "px", |
| | | "top": (12 - m_chartSize.TotalHeight).toString() + "px",// + m_divChartName + "px" |
| | | }).html(htmlDiv).hide()); |
| | | |
| | | m_infoDv4VerticalLine = $("#infoDv4VerticalLine"); |
| | | |
| | | |
| | | var attr4verticalLine = { |
| | | "stroke": "rgb(136 136 221)", |
| | | "stroke-width": "5", |
| | | "fill": "none", |
| | | "zIndex": 100, |
| | | "stroke-dasharray": "10 3", |
| | | "cursor": 'pointer', |
| | | "stroke-opacity": '1', |
| | | "shape-rendering": "geometricPrecision", |
| | | }; |
| | | |
| | | var xStartValuePixel = (m_chartSize.DiagramLeft + m_chartSize.DiagramRight) / 2; // 开始位置 |
| | | |
| | | |
| | | //创建竖直线 |
| | | var pathValue1 = new Array(); |
| | | var vertialLinePathName1 = "verticalLine1"; |
| | | pathValue1.push("M ", xStartValuePixel, " ", m_chartSize.UpDiagram.Up, " L ", xStartValuePixel, " ", m_chartSize.DownDiagram.Bottom); |
| | | m_svg.createPath(vertialLinePathName1, pathValue1.join(''), { |
| | | id: vertialLinePathName1 |
| | | }, attr4verticalLine, null); |
| | | m_queryInfoIndicatorLineV = $(getSvgObjByName(vertialLinePathName1)); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | drawQueryDataInfo(xStartValuePixel); |
| | | |
| | | |
| | | var isMoveVerticalLine = false; |
| | | //m_svg.getPathByName("verticalLine") |
| | | |
| | | m_queryInfoIndicatorLineV.mousedown(function (e) { |
| | | isMoveVerticalLine = true; |
| | | //WebApp.stopDefault(e); |
| | | e.preventDefault(); |
| | | }); |
| | | |
| | | |
| | | $(document).mousemove(function (e) { |
| | | |
| | | if (isMoveVerticalLine) { |
| | | var svg_root = m_svg.getRootNode(); |
| | | var svg = $(svg_root); |
| | | |
| | | var e = window.event || e; |
| | | if (e.clientX - svg.offset().left > m_chartSize.DiagramLeft && |
| | | m_chartSize.DiagramRight + svg.offset().left - e.clientX > 0 && |
| | | e.clientY - svg.offset().top > m_chartSize.DiagramTop && |
| | | m_chartSize.DiagramBottom + svg.offset().top - e.clientY > 0) { |
| | | //当前鼠标位置 x的像素 |
| | | var xPixel = parseFloat(e.clientX - svg.offset().left); |
| | | // |
| | | drawQueryDataInfo(xPixel); |
| | | //修改位置 |
| | | if (m_queryInfoIndicatorLineV) { |
| | | var pathValue1 = new Array(); |
| | | pathValue1.push("M ", xPixel, " ", m_chartSize.UpDiagram.Up, " L ", xPixel, " ", m_chartSize.DownDiagram.Bottom); |
| | | m_queryInfoIndicatorLineV.attr("d", pathValue1.join('')); |
| | | } |
| | | } |
| | | } |
| | | }).mouseup(function (e) { |
| | | if (isMoveVerticalLine) { |
| | | isMoveVerticalLine = false; |
| | | } |
| | | }); |
| | | |
| | | |
| | | //设置显示 |
| | | setQueryIndicatVertLineVisible(m_dispVerticalLine); |
| | | }; |
| | | //获取x在curve的(X Y)点值 (像素点) |
| | | var getBezierPointY = function (curve, x) { |
| | | if (curve == null) |
| | | return null; |
| | | var iPtCount = curve.length; |
| | | |
| | | if (x < curve[0].Point0.X - 1) { |
| | | return null; |
| | | } |
| | | if (x > curve[iPtCount - 1].Point3.X + 1) { |
| | | return null; |
| | | } |
| | | |
| | | for (var i = 0; i < iPtCount; i++) { |
| | | if (x == curve[i].Point0.X) { |
| | | return { |
| | | X: curve[i].Point0.X, Y: curve[i].Point0.Y |
| | | }; |
| | | } |
| | | if (x == curve[i].Point3.X) { |
| | | return { |
| | | X: curve[i].Point3.X, Y: curve[i].Point3.Y |
| | | }; |
| | | } |
| | | if (x > curve[i].Point0.X && x < curve[i].Point3.X) { |
| | | var ptBizer = curve[i]; |
| | | // |
| | | try { |
| | | |
| | | var minDis = Math.abs(ptBizer.Point3.X - ptBizer.Point0.X); |
| | | var sectY = null; |
| | | var sectX = null; |
| | | 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; |
| | | } |
| | | } |
| | | // |
| | | if (sectY != null && sectX != null) { |
| | | return { |
| | | X: sectX, Y: sectY |
| | | }; |
| | | } |
| | | } |
| | | catch (ex) { |
| | | //alert(ex.message); |
| | | console.log("getBezierPointY error", curve, x) |
| | | return null; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (x > curve[iPtCount - 1].Point3.X - 1 && x < curve[iPtCount - 1].Point3.X + 5) { |
| | | } |
| | | // |
| | | if (sectY != null && sectX != null) { |
| | | return { |
| | | X: curve[iPtCount - 1].Point3.X, Y: curve[iPtCount - 1].Point3.Y |
| | | X: sectX, |
| | | Y: sectY, |
| | | }; |
| | | } |
| | | } catch (ex) { |
| | | //alert(ex.message); |
| | | console.log("getBezierPointY error", curve, x); |
| | | return null; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if ( |
| | | x > curve[iPtCount - 1].Point3.X - 1 && |
| | | x < curve[iPtCount - 1].Point3.X + 5 |
| | | ) { |
| | | return { |
| | | X: curve[iPtCount - 1].Point3.X, |
| | | Y: curve[iPtCount - 1].Point3.Y, |
| | | }; |
| | | } |
| | | |
| | | return null; |
| | | }; |
| | | //获取x在curve的(X Y)点值 (像素点) |
| | | var getBezierPointX = function (curve, y) { |
| | | if (curve == null) return null; |
| | | var iPtCount = curve.length; |
| | | |
| | | if (y < curve[0].Point0.Y && y < curve[iPtCount - 1].Point3.Y) { |
| | | return null; |
| | | } |
| | | if (y > curve[0].Point0.Y && y > curve[iPtCount - 1].Point3.Y) { |
| | | return null; |
| | | } |
| | | |
| | | for (var i = 0; i < iPtCount; i++) { |
| | | var ptBizer = curve[i]; |
| | | |
| | | if (y < ptBizer.Point0.Y && y < ptBizer.Point3.Y) { |
| | | continue; |
| | | } |
| | | if (y > ptBizer.Point0.Y && y > ptBizer.Point3.Y) { |
| | | continue; |
| | | } |
| | | |
| | | // |
| | | try { |
| | | var minDis = Math.abs(ptBizer.Point3.Y - ptBizer.Point0.Y); |
| | | |
| | | var sectY = null; |
| | | var sectX = null; |
| | | 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 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); |
| | | |
| | | var curveX = x0 + x1 + x2 + x3; |
| | | var curveY = y0 + y1 + y2 + y3; |
| | | |
| | | if (Math.abs(curveY - y) < minDis) { |
| | | minDis = Math.abs(curveY - y); |
| | | sectY = curveY; |
| | | sectX = curveX; |
| | | } |
| | | } |
| | | // |
| | | if (sectY != null && sectX != null) { |
| | | return { |
| | | X: sectX, |
| | | Y: sectY, |
| | | }; |
| | | } |
| | | } catch (ex) { |
| | | //alert(ex.message); |
| | | return null; |
| | | }; |
| | | //获取x在curve的(X Y)点值 (像素点) |
| | | var getBezierPointX = function (curve, y) { |
| | | if (curve == null) |
| | | return null; |
| | | var iPtCount = curve.length; |
| | | |
| | | if (y < curve[0].Point0.Y && y < curve[iPtCount - 1].Point3.Y) { |
| | | return null; |
| | | } |
| | | if (y > curve[0].Point0.Y && y > curve[iPtCount - 1].Point3.Y) { |
| | | return null; |
| | | } |
| | | |
| | | for (var i = 0; i < iPtCount; i++) { |
| | | var ptBizer = curve[i]; |
| | | |
| | | if (y < ptBizer.Point0.Y && y < ptBizer.Point3.Y) { |
| | | continue; |
| | | } |
| | | if (y > ptBizer.Point0.Y && y > ptBizer.Point3.Y) { |
| | | continue; |
| | | } |
| | | |
| | | // |
| | | try { |
| | | var minDis = Math.abs(ptBizer.Point3.Y - ptBizer.Point0.Y); |
| | | |
| | | var sectY = null; |
| | | var sectX = null; |
| | | 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 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); |
| | | |
| | | var curveX = x0 + x1 + x2 + x3; |
| | | var curveY = y0 + y1 + y2 + y3; |
| | | |
| | | if (Math.abs(curveY - y) < minDis) { |
| | | minDis = Math.abs(curveY - y); |
| | | sectY = curveY |
| | | sectX = curveX; |
| | | } |
| | | } |
| | | // |
| | | if (sectY != null && sectX != null) { |
| | | return { |
| | | X: sectX, Y: sectY |
| | | }; |
| | | } |
| | | } |
| | | catch (ex) { |
| | | //alert(ex.message); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | return null; |
| | | }; |
| | | //绘制/显示 参数查询信息 |
| | | var drawQueryDataInfo = function (xPixel) {//x的像素 |
| | | if (xPixel == null) |
| | | return; |
| | | if (m_maxSpeedCurve == null) |
| | | return; |
| | | if (m_maxSpeedCurve.PixelQH == null) |
| | | return; |
| | | //流量 |
| | | //console.log(m_coordinatePara,m_chartSize, xPixel); |
| | | let flow_stdUnit = getActualValueQ(xPixel); |
| | | if (flow_stdUnit == null) |
| | | return; |
| | | //console.log(flow_stdUnit); |
| | | if (flow_stdUnit < 0.1) |
| | | return; |
| | | |
| | | var flow_info = {}; |
| | | flow_info.text = getTranslateString("流量"); |
| | | flow_info.value = UnitHelper.getDispValueQ(UnitHelper.ConvertQ_fromM3H(m_unit.Q, flow_stdUnit)); |
| | | flow_info.unit = UnitHelper.GetUnitNameQ(m_unit.Q); |
| | | if (flow_info.value == null || flow_info.value == "") |
| | | return; |
| | | // console.log(flow_info); |
| | | |
| | | //扬程 |
| | | var head_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelQH, xPixel); |
| | | if (head_pixel_pt == null) |
| | | return; |
| | | var head_stdUnit = getActualValueH(head_pixel_pt.Y); |
| | | var head_info = {}; |
| | | head_info.text = getTranslateString("扬程"); |
| | | head_info.unit = UnitHelper.GetUnitNameH(m_unit.H); |
| | | head_info.value = UnitHelper.getDispValueH(UnitHelper.ConvertH_fromM(m_unit.H, head_stdUnit)); |
| | | |
| | | //效率 |
| | | var eff_info = {}; |
| | | eff_info.value = ""; |
| | | if (m_isDispCurveQE) { |
| | | var eta_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelQE, xPixel); |
| | | |
| | | if (eta_pixel_pt != null) { |
| | | var eta_stdUnit = getActualValueE(eta_pixel_pt.Y); |
| | | |
| | | eff_info.text = getTranslateString("效率"); |
| | | eff_info.value = parseFloat(eta_stdUnit.toFixed(1)); |
| | | eff_info.unit = "%"; |
| | | } |
| | | } |
| | | |
| | | //功率 |
| | | var power_info = {}; |
| | | power_info.value = ""; |
| | | var power_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelQP, xPixel); |
| | | if (power_pixel_pt != null) { |
| | | var power_stdUnit = getActualValueP(power_pixel_pt.Y); |
| | | power_info.text = getTranslateString("功率"); |
| | | power_info.value = UnitHelper.getDispValueP(UnitHelper.ConvertP_fromKW(m_unit.P, power_stdUnit)); |
| | | power_info.unit = UnitHelper.GetUnitNameP(m_unit.P); |
| | | } |
| | | |
| | | |
| | | var npsh_info = {};//汽蚀 |
| | | npsh_info.text = getTranslateString("汽蚀"); |
| | | npsh_info.value = ''; |
| | | npsh_info.unit = "m"; |
| | | |
| | | if (m_maxSpeedCurve.PixelNPSH != null && m_isHaveNpsh) { |
| | | var npsh_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelNPSH, xPixel); |
| | | //console.log(npsh_pixel_pt) |
| | | if (npsh_pixel_pt != null) { |
| | | var npsh_stdUnit = getActualValueNPSH(npsh_pixel_pt.Y); |
| | | npsh_info.value = UnitHelper.formatToFixed(parseFloat(npsh_stdUnit), 1); |
| | | } |
| | | } |
| | | |
| | | var tip_html = ""; |
| | | var flow_html = flow_info.text + ": " + flow_info.value + " " + flow_info.unit; |
| | | tip_html = flow_html; |
| | | //console.log("flow_info",flow_info); |
| | | |
| | | var head_html = head_info.text + ": " + head_info.value + " " + head_info.unit; |
| | | tip_html += "</br>" + head_html; |
| | | //console.log("head_info",head_info); |
| | | |
| | | if (eff_info.value != "") { |
| | | var eff_html = eff_info.text + ": " + eff_info.value + " " + eff_info.unit; |
| | | tip_html += "</br>" + eff_html; |
| | | } |
| | | |
| | | if (power_info.value != "") { |
| | | var power_html = power_info.text + ": " + power_info.value + " " + power_info.unit; |
| | | tip_html += "</br>" + power_html; |
| | | } |
| | | |
| | | if (npsh_info.value != "") { |
| | | var npsh_html = npsh_info.text + ": " + npsh_info.value + " " + npsh_info.unit; |
| | | tip_html += "</br>" + npsh_html; |
| | | } |
| | | |
| | | m_infoDv4VerticalLine.show().html(tip_html); |
| | | |
| | | |
| | | |
| | | //获取查询曲线查询得到的数据 给参数查询使用 |
| | | if (onChangeQueryDataCb != null) { |
| | | onChangeQueryDataCb({ |
| | | Q: flow_info, |
| | | H: head_info, |
| | | E: eff_info, |
| | | P: power_info, |
| | | NPSH: npsh_info |
| | | }) |
| | | } |
| | | |
| | | }; |
| | | //根据流量获取点 |
| | | var getGrpPointInWrkCurveByFlow = function (flow_stdUnit) { |
| | | if (flow_stdUnit == null) |
| | | return null; |
| | | if (flow_stdUnit < 0.1) |
| | | return null; |
| | | if (m_maxSpeedCurve == null || m_maxSpeedCurve.PixelQH) |
| | | return null; |
| | | |
| | | //var UnitHelper.ConvertQ_fromM3H(m_unit.Q, flow_stdUnit) |
| | | var xPixel = getPixelValueQ(flow_stdUnit); |
| | | |
| | | //扬程 |
| | | var head_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelQH, xPixel); |
| | | if (head_pixel_pt == null) |
| | | return; |
| | | var head_stdUnit = getActualValueH(head_pixel_pt.Y); |
| | | |
| | | //效率 |
| | | var eta_stdUnit = 0; |
| | | if (m_isDispCurveQE) { |
| | | var eta_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelQE, xPixel); |
| | | if (eta_pixel_pt != null) { |
| | | eta_stdUnit = getActualValueE(eta_pixel_pt.Y); |
| | | eta_stdUnit = parseFloat(eta_stdUnit.toFixed(1)); |
| | | } |
| | | } |
| | | |
| | | //功率 |
| | | var power_stdUnit = 0; |
| | | var power_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelQP, xPixel); |
| | | if (power_pixel_pt != null) { |
| | | power_stdUnit = getActualValueP(power_pixel_pt.Y); |
| | | } |
| | | |
| | | |
| | | var npsh_stdUnit = 0; |
| | | if (m_maxSpeedCurve.PixelNPSH != null) { |
| | | var npsh_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelNPSH, xPixel); |
| | | if (npsh_pixel_pt != null) { |
| | | npsh_stdUnit = getActualValueNPSH(npsh_pixel_pt.Y); |
| | | } |
| | | } |
| | | |
| | | var grp_pt = {}; |
| | | grp_pt.Q = flow_stdUnit; |
| | | grp_pt.H = head_stdUnit; |
| | | grp_pt.E = eta_stdUnit; |
| | | grp_pt.P = power_stdUnit; |
| | | grp_pt.NPSH = npsh_stdUnit; |
| | | |
| | | return grp_pt; |
| | | }; |
| | | //查询线 |
| | | var m_infoDv4VerticalLine; |
| | | var m_queryInfoIndicatorLineV; |
| | | var m_dispVerticalLine = false; |
| | | var onChangeQueryDataCb = null;//查询外部回调 |
| | | //设置是否显示 |
| | | var setQueryIndicatVertLineVisible = function (disp) { |
| | | m_dispVerticalLine = disp; |
| | | if (disp) { |
| | | m_infoDv4VerticalLine.show(); |
| | | m_queryInfoIndicatorLineV.show(); |
| | | } |
| | | else { |
| | | m_infoDv4VerticalLine.hide(); |
| | | m_queryInfoIndicatorLineV.hide(); |
| | | } |
| | | }; |
| | | //绘制图表(所有曲线) |
| | | var drawDiagramCurve = function () { |
| | | var curveWidth = 2; |
| | | |
| | | $("#MaxCurveQH").remove(); |
| | | //$("#MaxCurveQE").remove(); |
| | | $("#MaxCurveQP").remove(); |
| | | $("#MaxCurveQHText").remove(); |
| | | //$("#MaxCurveQEText").remove(); |
| | | $("#MaxCurveQPText").remove(); |
| | | |
| | | if (m_simuSpeedCurves != null && m_simuSpeedCurves.length > 0) { |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | var id = m_simuSpeedCurves[i].id; |
| | | $("#SimuCurveQH" + id).remove(); |
| | | //$("#SimuCurveQE"+id).remove(); |
| | | $("#SimuCurveQP" + id).remove(); |
| | | |
| | | $("#SimuCurveQHText" + id).remove(); |
| | | //$("#SimuCurveQEText"+id).remove(); |
| | | $("#SimuCurveQPText" + id).remove(); |
| | | } |
| | | } |
| | | |
| | | // |
| | | m_maxSpeedCurve.color = "#003a6c"; |
| | | var curveMaxPathQH = createCurveQH("MaxCurveQH", m_maxSpeedCurve.RealQH, curveWidth, m_maxSpeedCurve.color); |
| | | var pointsQH = m_maxSpeedCurve.RealQH; |
| | | drawSpeedTextByQH("MaxCurveQHText", m_maxSpeedCurve.speed, pointsQH[pointsQH.length - 1], m_maxSpeedCurve.color); |
| | | |
| | | |
| | | //var curveMaxPathQE = createCurveQE("MaxCurveQE", m_maxSpeedCurve.RealQE, curveWidth, m_maxSpeedCurve.color); |
| | | var curveMaxPathQP = createCurveQP("MaxCurveQP", m_maxSpeedCurve.RealQP, curveWidth, m_maxSpeedCurve.color); |
| | | var pointsQP = m_maxSpeedCurve.RealQP; |
| | | drawSpeedTextByQP("MaxCurveQPText", m_maxSpeedCurve.speed, pointsQP[pointsQP.length - 1], m_maxSpeedCurve.color); |
| | | |
| | | |
| | | // |
| | | if (m_simuSpeedCurves != null && m_simuSpeedCurves.length > 0) { |
| | | m_simuSpeedCurves.forEach(element => { |
| | | drawSimuSpeedCurve(element); |
| | | }); |
| | | } |
| | | //通知外部 曲线修改了 |
| | | noticeCurveChanged(); |
| | | |
| | | |
| | | |
| | | //设计点 |
| | | //drawDesignPoint(); |
| | | |
| | | |
| | | |
| | | |
| | | //绘制水印 |
| | | drawLogoWaterMark(); |
| | | |
| | | |
| | | //装置曲线 |
| | | //drawEquipmentCurve(); |
| | | |
| | | //查询指示线 |
| | | //drawQueryIndicatVertLine(); |
| | | |
| | | // |
| | | //createMouseTipInfo(); |
| | | } |
| | | } |
| | | //通知外部 |
| | | var noticeCurveChanged = function () { |
| | | |
| | | if (onChangeSpeedListCb != null) { |
| | | var list_speed_color = []; |
| | | m_simuSpeedCurves.forEach(element => { |
| | | list_speed_color.push({ |
| | | id: element.id, |
| | | speed: element.speed, |
| | | color: element.color |
| | | }) |
| | | }); |
| | | onChangeSpeedListCb(list_speed_color); |
| | | } |
| | | } |
| | | //检查并刷新图表 |
| | | var refreshDiagram = function () { |
| | | return null; |
| | | }; |
| | | //绘制查询竖直指导线 |
| | | var drawQueryIndicatVertLine = function (xStartValuePixel, index) { |
| | | |
| | | //console.log(m_coordinatePara) |
| | | var obj_divChart = document.getElementById(m_divChartName); |
| | | |
| | | drawDiagramCurve(); |
| | | |
| | | checkCoordRange(); |
| | | |
| | | //console.log(m_coordinatePara) |
| | | var attr4verticalLine1 = { |
| | | "stroke": "rgb(136 136 221)", |
| | | "stroke-width": "3", |
| | | "fill": "none", |
| | | "zIndex": 100, |
| | | "stroke-dasharray": "18 3", |
| | | "cursor": 'pointer', |
| | | "stroke-opacity": '1', |
| | | "shape-rendering": "geometricPrecision", |
| | | }; |
| | | //检查坐标范围是否超过曲线范围 |
| | | var checkCoordRange = function () { |
| | | var last_simu_curve = m_simuSpeedCurves[m_simuSpeedCurves.length - 1]; |
| | | var curve_min_h = last_simu_curve.RealQH[m_maxSpeedCurve.RealQH.length - 1].Y; |
| | | var curve_min_p = last_simu_curve.RealQP[0].Y; |
| | | var isNeedRefresh = false; |
| | | for (var i = 0; i < 10; i++) { |
| | | |
| | | var coord_min_h = m_coordinatePara.DispMinH - m_coordinatePara.SpaceH * i; |
| | | if (coord_min_h < 0) |
| | | break; |
| | | if (curve_min_h < coord_min_h) |
| | | continue; |
| | | // 位置 |
| | | if (xStartValuePixel == null || xStartValuePixel < 1) |
| | | xStartValuePixel = (m_chartSize.DiagramLeft + m_chartSize.DiagramRight) / 2; |
| | | |
| | | if (i > 0) { |
| | | m_coordinatePara.StartLineNoH = m_coordinatePara.StartLineNoH - i; |
| | | m_coordinatePara.DispMinH = m_coordinatePara.DispMinH - m_coordinatePara.SpaceH * i; |
| | | isNeedRefresh = true; |
| | | } |
| | | break; |
| | | } |
| | | var vertialLinePathName1 = "verticalLine1multispeed"; |
| | | removeElementById(vertialLinePathName1); |
| | | |
| | | for (var i = 0; i < 10; i++) { |
| | | |
| | | var coord_min_p = m_coordinatePara.DispMinP - m_coordinatePara.SpaceP * i; |
| | | if (coord_min_p < 0) |
| | | break; |
| | | if (curve_min_p < coord_min_p) |
| | | continue; |
| | | |
| | | if (i > 0) { |
| | | m_coordinatePara.StartLineNoP = m_coordinatePara.StartLineNoP - i; |
| | | m_coordinatePara.DispMinP = m_coordinatePara.DispMinP - m_coordinatePara.SpaceP * i; |
| | | isNeedRefresh = true; |
| | | } |
| | | break; |
| | | } |
| | | if (isNeedRefresh) { |
| | | $("#" + m_divChartName).empty(); |
| | | |
| | | //初始化面板尺寸 |
| | | initialPanelSize(); |
| | | |
| | | drawDiagramPanel(); |
| | | |
| | | drawDiagramCurve(); |
| | | } |
| | | } |
| | | //添加速度 |
| | | var drawSimuSpeedCurve = function (simuCurve) { |
| | | //console.log(simuCurve) |
| | | var speed = simuCurve.speed; |
| | | if (speed < 10) |
| | | return; |
| | | |
| | | //console.log(m_maxSpeedCurve.RealQH) |
| | | var simuCurveQH = []; |
| | | var rated_speed = m_maxSpeedCurve.speed; |
| | | m_maxSpeedCurve.RealQH.forEach(pt => { |
| | | var simu_pt = {}; |
| | | simu_pt.X = pt.X * speed / rated_speed; |
| | | simu_pt.Y = pt.Y * speed * speed / (rated_speed * rated_speed); |
| | | simuCurveQH.push(simu_pt); |
| | | }); |
| | | simuCurve.RealQH = simuCurveQH; |
| | | //创建竖直线 |
| | | var pathValue1 = []; |
| | | pathValue1.push("M ", xStartValuePixel, " ", m_chartSize.UpDiagram.Up, " L ", xStartValuePixel, " ", m_chartSize.DownDiagram.Bottom); |
| | | m_svg.createPath(vertialLinePathName1, pathValue1.join(''), { |
| | | id: vertialLinePathName1 |
| | | }, attr4verticalLine1, null); |
| | | |
| | | |
| | | var simuCurveQP = []; |
| | | m_maxSpeedCurve.RealQP.forEach(pt => { |
| | | var simu_pt = {}; |
| | | simu_pt.X = pt.X * speed / rated_speed; |
| | | simu_pt.Y = pt.Y * speed * speed * speed / (rated_speed * rated_speed * rated_speed); |
| | | simuCurveQP.push(simu_pt); |
| | | }); |
| | | simuCurve.RealQP = simuCurveQP; |
| | | drawQueryDataInfoByPixel(xStartValuePixel, 1); |
| | | //drawQueryDataInfoByPixel(xStartValuePixel, 2); |
| | | |
| | | var curveWidth = 2; |
| | | if (simuCurve.curveWidth) |
| | | curveWidth = simuCurve.curveWidth; |
| | | var isMoveVerticalLine1 = false; |
| | | |
| | | var curveColor = simuCurve.color; |
| | | var curve_id = simuCurve.id; |
| | | |
| | | $("#SimuCurveQH" + curve_id).remove(); |
| | | //$("#SimuCurveQE"+i).remove(); |
| | | $("#SimuCurveQP" + curve_id).remove(); |
| | | |
| | | $("#SimuCurveQHText" + curve_id).remove(); |
| | | //$("#SimuCurveQEText"+i).remove(); |
| | | $("#SimuCurveQPText" + curve_id).remove(); |
| | | |
| | | var int_speed = Math.round(speed) ; |
| | | |
| | | var curvePathQH = createCurveQH("SimuCurveQH" + curve_id, simuCurveQH, curveWidth, curveColor); |
| | | drawSpeedTextByQH("SimuCurveQHText" + curve_id, int_speed, simuCurveQH[simuCurveQH.length - 1], curveColor); |
| | | |
| | | var curvePathQP = createCurveQP("SimuCurveQP" + curve_id, simuCurveQP, curveWidth, curveColor); |
| | | drawSpeedTextByQP("SimuCurveQPText" + curve_id, int_speed, simuCurveQP[simuCurveQP.length - 1], curveColor); |
| | | }; |
| | | // |
| | | var createGridLineDiagram_Whole = function () { |
| | | if (m_coordinatePara == null) { |
| | | return; |
| | | var objIndicatorLine1 = document.getElementById(vertialLinePathName1); |
| | | objIndicatorLine1.onmousedown = function (e) { |
| | | isMoveVerticalLine1 = true; |
| | | e.preventDefault(); |
| | | } |
| | | |
| | | obj_divChart.onmousemove = function (e) { |
| | | if (isMoveVerticalLine1 == true) { |
| | | e.preventDefault(); |
| | | if (objIndicatorLine1 == null) |
| | | return; |
| | | var svg_root = m_svg.getRootNode(); |
| | | const box = svg_root.getBoundingClientRect(); |
| | | var top = box.top + window.scrollY - document.documentElement.clientTop; |
| | | var left = box.left + window.scrollX - document.documentElement.clientLeft |
| | | var e = window.event || e; |
| | | if (e.clientX - left > m_chartSize.DiagramLeft && |
| | | m_chartSize.DiagramRight + left - e.clientX > 0 && |
| | | e.clientY - top > m_chartSize.DiagramTop && |
| | | m_chartSize.DiagramBottom + top - e.clientY > 0) { |
| | | //当前鼠标位置 x的像素 |
| | | var xPixel = parseFloat(e.clientX - left); |
| | | // |
| | | drawQueryDataInfoByPixel(xPixel, 1); |
| | | //修改位置 |
| | | var pathValue1 = []; |
| | | pathValue1.push("M ", xPixel, " ", m_chartSize.UpDiagram.Up, " L ", xPixel, " ", m_chartSize.DownDiagram.Bottom); |
| | | objIndicatorLine1.setAttribute('d', pathValue1.join('')); |
| | | } |
| | | } |
| | | |
| | | var attr = { |
| | | "stroke": m_displayStyle.ColorGridLine, |
| | | "stroke-width": "1", |
| | | "fill": "none", |
| | | "zIndex": 10 |
| | | }; |
| | | |
| | | //产生网格线竖直方向 |
| | | for (var i = 0; i <= m_coordinatePara.GridNumberX; i++) { |
| | | var distance = m_chartSize.SpaceGridX * i; |
| | | var valueTemp = new Array(); |
| | | valueTemp.push("M ", m_chartSize.DiagramLeft + distance, " ", m_chartSize.SpaceTop, " L ", m_chartSize.DiagramLeft + distance, " ", m_chartSize.UpDiagram.Bottom); |
| | | m_svg.createPath(null, valueTemp.join(''), attr, null); |
| | | } |
| | | |
| | | //产生网格线水平方向 |
| | | for (var i = 0; i <= m_coordinatePara.GridNumberY; i++) { |
| | | var distance = m_chartSize.UpDiagram.SpaceGridY * i; |
| | | var valueTemp = new Array(); |
| | | valueTemp.push("M ", m_chartSize.DiagramLeft, " ", m_chartSize.SpaceTop + distance, " L ", m_chartSize.DiagramRight, " ", m_chartSize.SpaceTop + distance); |
| | | m_svg.createPath(null, valueTemp.join(''), attr, null); |
| | | } |
| | | |
| | | |
| | | }; |
| | | //绘制面板(分离) |
| | | var createGridLineDiagram_TwoPanel = function () { |
| | | if (m_coordinatePara == null) { |
| | | return; |
| | | } |
| | | |
| | | var attr = { |
| | | "stroke": m_displayStyle.ColorGridLine, |
| | | "stroke-width": "1", |
| | | "fill": "none", |
| | | "zIndex": 10 |
| | | }; |
| | | |
| | | //产生网格线竖直方向 |
| | | for (var i = 0; i <= m_coordinatePara.GridNumberX; i++) { |
| | | var distance = m_chartSize.SpaceGridX * i; |
| | | var valueTemp = new Array(); |
| | | valueTemp.push("M ", m_chartSize.DiagramLeft + distance, " ", m_chartSize.UpDiagram.Up, " L ", m_chartSize.DiagramLeft + distance, " ", m_chartSize.UpDiagram.Bottom); |
| | | m_svg.createPath(null, valueTemp.join(''), attr, null); |
| | | |
| | | //console.log(m_chartSize.DiagramLeft + distance , m_chartSize.UpDiagram.Up, m_chartSize.DiagramLeft + distance, m_chartSize.UpDiagram.Bottom) |
| | | } |
| | | |
| | | |
| | | |
| | | for (var i = 0; i <= m_coordinatePara.GridNumberX; i++) { |
| | | var distance = m_chartSize.SpaceGridX * i; |
| | | var valueTemp = new Array(); |
| | | valueTemp.push("M ", m_chartSize.DiagramLeft + distance, " ", m_chartSize.DownDiagram.Up, " L ", m_chartSize.DiagramLeft + distance, " ", m_chartSize.DownDiagram.Bottom); |
| | | m_svg.createPath(null, valueTemp.join(''), attr, null); |
| | | } |
| | | |
| | | //产生网格线水平方向 |
| | | for (var i = 0; i <= m_chartSize.UpDiagram.GridNumberY; i++) { |
| | | var distance = m_chartSize.UpDiagram.SpaceGridY * i; |
| | | var valueTemp = new Array(); |
| | | valueTemp.push("M ", m_chartSize.DiagramLeft, " ", m_chartSize.UpDiagram.Up + distance, " L ", m_chartSize.DiagramRight, " ", m_chartSize.UpDiagram.Up + distance); |
| | | m_svg.createPath(null, valueTemp.join(''), attr, null); |
| | | } |
| | | |
| | | for (var i = 0; i <= m_chartSize.DownDiagram.GridNumberY; i++) { |
| | | var distance = m_chartSize.DownDiagram.SpaceGridY * i; |
| | | var valueTemp = new Array(); |
| | | valueTemp.push("M ", m_chartSize.DiagramLeft, " ", m_chartSize.DownDiagram.Up + distance, " L ", m_chartSize.DiagramRight, " ", m_chartSize.DownDiagram.Up + distance); |
| | | m_svg.createPath(null, valueTemp.join(''), attr, null); |
| | | } |
| | | }; |
| | | //转成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; |
| | | // if (isMoveVerticalLine2 == true) { |
| | | // if (objIndicatorLine2 == null) |
| | | // return; |
| | | // var svg_root = m_svg.getRootNode(); |
| | | // const box = svg_root.getBoundingClientRect(); |
| | | // var top = box.top + window.scrollY - document.documentElement.clientTop; |
| | | // var left = box.left + window.scrollX - document.documentElement.clientLeft |
| | | // var e = window.event || e; |
| | | // if (e.clientX - left > m_chartSize.DiagramLeft && |
| | | // m_chartSize.DiagramRight + left - e.clientX > 0 && |
| | | // e.clientY - top > m_chartSize.DiagramTop && |
| | | // m_chartSize.DiagramBottom + top - e.clientY > 0) { |
| | | // //当前鼠标位置 x的像素 |
| | | // var xPixel = parseFloat(e.clientX - left); |
| | | // // |
| | | // // drawQueryDataInfoByPixel(xPixel, 2); |
| | | // // //修改位置 |
| | | // // var pathValue1 = new Array(); |
| | | // // pathValue1.push("M ", xPixel, " ", m_chartSize.UpDiagram.Up, " L ", xPixel, " ", m_chartSize.DownDiagram.Bottom); |
| | | // // objIndicatorLine2.setAttribute('d', pathValue1.join('')); |
| | | // } |
| | | // } |
| | | }; |
| | | |
| | | //转成曲线路径 |
| | | var transBezierCurveToPath = function (pixelPoints) { |
| | | var bezierCurveValue = transBezierCurveModel(pixelPoints); |
| | | if (bezierCurveValue == null) { |
| | | return; |
| | | } |
| | | var pathValue = new Array(); |
| | | for (var i = 0; i < bezierCurveValue.length; i++) { |
| | | var b_pt = bezierCurveValue[i]; |
| | | if (i == 0) { |
| | | pathValue.push("M ", b_pt.Point0.X, " ", b_pt.Point0.Y); |
| | | pathValue.push(" C ", b_pt.Point1.X, " ", b_pt.Point1.Y, " ", |
| | | b_pt.Point2.X, " ", b_pt.Point2.Y, " ", b_pt.Point3.X, " ", b_pt.Point3.Y); |
| | | } |
| | | else { |
| | | pathValue.push(" L ", b_pt.Point0.X, " ", b_pt.Point0.Y); |
| | | pathValue.push(" C ", b_pt.Point1.X, " ", b_pt.Point1.Y, " ", |
| | | b_pt.Point2.X, " ", b_pt.Point2.Y, " ", b_pt.Point3.X, " ", b_pt.Point3.Y); |
| | | } |
| | | if (i == bezierCurveValue.length - 1) { |
| | | pathValue.push(" L ", b_pt.Point3.X, " ", b_pt.Point3.Y); |
| | | } |
| | | } |
| | | return pathValue; |
| | | }; |
| | | |
| | | //返回标准单位下的值 |
| | | var getActualValueQ = function (pixelValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinQ; |
| | | var actualMaxValue = m_coordinatePara.DispMaxQ; |
| | | var pixelMinValue = m_chartSize.DiagramLeft; |
| | | var pixelMaxValue = m_chartSize.DiagramRight; |
| | | return (pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue) * (actualMaxValue - actualMinValue) + actualMinValue; |
| | | }; |
| | | var getActualValueH = function (pixelValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinH; |
| | | var actualMaxValue = m_coordinatePara.DispMaxH; |
| | | var pixelMinValue = m_chartSize.PanelH.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelH.Up; |
| | | |
| | | var actualValue = (pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue) * (actualMaxValue - actualMinValue) + actualMinValue; |
| | | //console.log("getActualValueH", actualValue, actualMinValue,actualMaxValue,pixelMinValue,pixelMaxValue); |
| | | |
| | | return actualValue; |
| | | }; |
| | | var getActualValueE = function (pixelValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinE; |
| | | var actualMaxValue = m_coordinatePara.DispMaxE; |
| | | var pixelMinValue = m_chartSize.PanelE.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelE.Up; |
| | | |
| | | var actualValue = (pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue) * (actualMaxValue - actualMinValue) + actualMinValue; |
| | | //console.log("getActualValueE",actualValue, actualMinValue,actualMaxValue,pixelMinValue,pixelMaxValue); |
| | | |
| | | return actualValue; |
| | | }; |
| | | var getActualValueP = function (pixelValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinP; |
| | | var actualMaxValue = m_coordinatePara.DispMaxP; |
| | | var pixelMinValue = m_chartSize.PanelP.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelP.Up; |
| | | return (pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue) * (actualMaxValue - actualMinValue) + actualMinValue; |
| | | }; |
| | | var getActualValueNPSH = function (pixelValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinNPSH; |
| | | var actualMaxValue = m_coordinatePara.DispMaxNPSH; |
| | | var pixelMinValue = m_chartSize.PanelNPSH.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelNPSH.Up; |
| | | var actualValue = (pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue) * (actualMaxValue - actualMinValue) + actualMinValue; |
| | | // console.log("getActualValueNPSH",actualValue, actualMinValue,actualMaxValue,pixelMinValue,pixelMaxValue); |
| | | return actualValue; |
| | | }; |
| | | |
| | | // actualValue 是标准单位下的值 |
| | | var getPixelValueQ = function (actualValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinQ; |
| | | var actualMaxValue = m_coordinatePara.DispMaxQ; |
| | | var pixelMinValue = m_chartSize.DiagramLeft; |
| | | var pixelMaxValue = m_chartSize.DiagramRight; |
| | | |
| | | return (actualValue - actualMinValue) / (actualMaxValue - actualMinValue) * (pixelMaxValue - pixelMinValue) + pixelMinValue; |
| | | }; |
| | | var getPixelValueH = function (actualValue) { |
| | | |
| | | var actualMinValue = m_coordinatePara.DispMinH; |
| | | var actualMaxValue = m_coordinatePara.DispMaxH; |
| | | var pixelMinValue = m_chartSize.PanelH.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelH.Up; |
| | | |
| | | if (actualMaxValue == actualMinValue) |
| | | return actualMinValue; |
| | | |
| | | var v = (actualValue - actualMinValue) / (actualMaxValue - actualMinValue) * (pixelMaxValue - pixelMinValue) + pixelMinValue; |
| | | //console.log("getPixelValueH",actualValue,v, actualMinValue,actualMaxValue,pixelMinValue,pixelMaxValue); |
| | | return v |
| | | }; |
| | | var getPixelValueE = function (actualValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinE; |
| | | var actualMaxValue = m_coordinatePara.DispMaxE; |
| | | var pixelMinValue = m_chartSize.PanelE.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelE.Up; |
| | | if (actualMaxValue == actualMinValue) |
| | | return actualMinValue; |
| | | |
| | | return (actualValue - actualMinValue) / (actualMaxValue - actualMinValue) * (pixelMaxValue - pixelMinValue) + pixelMinValue; |
| | | }; |
| | | var getPixelValueP = function (actualValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinP; |
| | | var actualMaxValue = m_coordinatePara.DispMaxP; |
| | | var pixelMinValue = m_chartSize.PanelP.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelP.Up; |
| | | if (actualMaxValue == actualMinValue) |
| | | return actualMinValue; |
| | | |
| | | return (actualValue - actualMinValue) / (actualMaxValue - actualMinValue) * (pixelMaxValue - pixelMinValue) + pixelMinValue; |
| | | }; |
| | | var getPixelValueNPSH = function (actualValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinNPSH; |
| | | var actualMaxValue = m_coordinatePara.DispMaxNPSH; |
| | | var pixelMinValue = m_chartSize.PanelNPSH.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelNPSH.Up; |
| | | if (actualMaxValue == actualMinValue) |
| | | return actualMinValue; |
| | | |
| | | return (actualValue - actualMinValue) / (actualMaxValue - actualMinValue) * (pixelMaxValue - pixelMinValue) + pixelMinValue; |
| | | obj_divChart.onmouseup = function (e) { |
| | | if (isMoveVerticalLine1) { |
| | | isMoveVerticalLine1 = false; |
| | | e.preventDefault(); |
| | | } |
| | | // if (isMoveVerticalLine2) { |
| | | // isMoveVerticalLine2 = false; |
| | | // } |
| | | }; |
| | | |
| | | |
| | | //设置显示 |
| | | setQueryIndicatVertLineVisible(m_dispVerticalLine1, 1); |
| | | }; |
| | | //绘制/显示 参数查询信息 |
| | | var drawQueryDataInfoByPixel = function (xPixel, index) {//x的像素 |
| | | if (xPixel == null) |
| | | return; |
| | | if (m_maxSpeedCurve == null) |
| | | return; |
| | | if (m_maxSpeedCurve.PixelQH == null) |
| | | return; |
| | | m_queryLinePixel = xPixel; |
| | | //流量 |
| | | let flow_m3h = getActualValueQ(xPixel); |
| | | if (flow_m3h == null) |
| | | return; |
| | | if (flow_m3h > m_maxSpeedCurve.RealQH[m_maxSpeedCurve.RealQH.length - 1].X) |
| | | return; |
| | | |
| | | var query_pt_list = []; |
| | | |
| | | var query_pt = calcQueryPtInfoByPixel(m_maxSpeedCurve, xPixel); |
| | | query_pt.Q = UnitHelper.getDispValueH(flow_m3h); |
| | | if (query_pt.H) |
| | | query_pt.H = UnitHelper.getDispValueH(query_pt.H); |
| | | if (query_pt.P) |
| | | query_pt.P = UnitHelper.getDispValueP(query_pt.P); |
| | | query_pt.speed = m_maxSpeedCurve.speed; |
| | | query_pt.hz = m_maxSpeedCurve.hz; |
| | | query_pt_list.push(query_pt); |
| | | |
| | | /** ----------------对外函数-------------------- **/ |
| | | if (m_simuSpeedCurves != null && m_simuSpeedCurves.length > 0) { |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | //console.log(m_simuSpeedCurves[i],xPixel) |
| | | var simu_curve = m_simuSpeedCurves[i]; |
| | | if (flow_m3h > simu_curve.RealQH[simu_curve.RealQH.length - 1].X) |
| | | continue; |
| | | |
| | | //设置设计点公差 |
| | | this.SetUnit = function (unitQ, unitH, unitP,unitNPSH) { |
| | | m_unit.Q = unitQ; |
| | | m_unit.H = unitH; |
| | | m_unit.P = unitP; |
| | | if(unitNPSH > 0){ |
| | | m_unit.NPSH = unitNPSH; |
| | | } |
| | | else{ |
| | | m_unit.NPSH = 0; |
| | | } |
| | | }; |
| | | //设置是否是单色显示 |
| | | this.setMonorColor = function (isMonorColor) { |
| | | $("#" + m_divChartName).empty(); |
| | | setObjectColor(isMonorColor); |
| | | if (!initialSvg()) |
| | | return; |
| | | var query_pt2 = calcQueryPtInfoByPixel(simu_curve, xPixel); |
| | | query_pt2.Q = UnitHelper.getDispValueH(flow_m3h); |
| | | if (query_pt2.H) |
| | | query_pt2.H = UnitHelper.getDispValueH(query_pt2.H); |
| | | if (query_pt2.P) |
| | | query_pt2.P = UnitHelper.getDispValueP(query_pt2.P); |
| | | |
| | | drawDiagramPanel(); |
| | | query_pt2.speed = simu_curve.speed; |
| | | query_pt2.hz = simu_curve.hz; |
| | | query_pt_list.push(query_pt2); |
| | | |
| | | refreshDiagram(); |
| | | }; |
| | | //设置是否是单色显示 |
| | | this.setWrkCurveInfo = function (curve) { |
| | | if (curve == null) |
| | | return; |
| | | //console.log(curve, 2992); |
| | | // drawDiagramPanel(); |
| | | } |
| | | } |
| | | |
| | | if (m_maxSpeedCurve == null) |
| | | return; |
| | | m_maxSpeedCurve.RealQH = curve.RealQH; |
| | | m_maxSpeedCurve.RealQE = curve.RealQE; |
| | | m_maxSpeedCurve.RealQP = curve.RealQP; |
| | | m_maxSpeedCurve.RealNPSH = curve.RealNPSH; |
| | | |
| | | |
| | | if (curve.RealNPSH == null) { |
| | | m_isHaveNpsh = false; |
| | | } |
| | | else { |
| | | m_isHaveNpsh = true; |
| | | } |
| | | // |
| | | refreshDiagram(); |
| | | }; |
| | | //添加转速 |
| | | this.AddSpeedCurve = function (speed) { |
| | | speed = parseInt(speed); |
| | | if (speed < 10) |
| | | return null; |
| | | if (m_simuSpeedCurves == null) |
| | | m_simuSpeedCurves = []; |
| | | var isFind = false; |
| | | m_simuSpeedCurves.forEach(element => { |
| | | //console.log(element,speed) |
| | | if (speed == element.speed) |
| | | isFind = true; |
| | | }); |
| | | if (isFind) |
| | | return null; |
| | | |
| | | //获取没有用过的颜色 |
| | | var curveColor = "#000000"; |
| | | for (var c = 0; c < m_colorArray.length; c++) { |
| | | var isHaveColor = false; |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | if (m_colorArray[c] == m_simuSpeedCurves[i].color) { |
| | | isHaveColor = true; |
| | | break; |
| | | } |
| | | } |
| | | if (!isHaveColor) { |
| | | curveColor = m_colorArray[c]; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | m_curveMaxId++; |
| | | var speedItem = { |
| | | id: m_curveMaxId, |
| | | speed: speed, |
| | | color: curveColor, |
| | | curveWidth: 2 |
| | | }; |
| | | m_simuSpeedCurves.push(speedItem); |
| | | |
| | | drawSimuSpeedCurve(speedItem); |
| | | |
| | | //通知外部 曲线修改了 |
| | | noticeCurveChanged(); |
| | | |
| | | return speedItem.color; |
| | | }; |
| | | //修改转速 |
| | | this.editSpeedById = function (id, speed) { |
| | | var speedItem = null; |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | if (id == m_simuSpeedCurves[i].id) { |
| | | speedItem = m_simuSpeedCurves[i]; |
| | | break; |
| | | } |
| | | } |
| | | if (speedItem == null) |
| | | return; |
| | | |
| | | var origin_speed = speedItem.speed; |
| | | if (Math.abs(origin_speed - speed) < 2) |
| | | return; |
| | | |
| | | speedItem.speed = speed; |
| | | |
| | | |
| | | |
| | | drawSimuSpeedCurve(speedItem) |
| | | |
| | | //通知外部 曲线修改了 |
| | | noticeCurveChanged(); |
| | | }; |
| | | //修改颜色 |
| | | this.editColorById = function (id, color) { |
| | | |
| | | var speedItem = null; |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | if (id == m_simuSpeedCurves[i].id) { |
| | | speedItem = m_simuSpeedCurves[i]; |
| | | break; |
| | | } |
| | | } |
| | | if (speedItem == null) |
| | | return; |
| | | |
| | | speedItem.color = color; |
| | | $("#SimuCurveQH" + speedItem.id).css("stroke", color); |
| | | //$("#SimuCurveQE"+i).remove(); |
| | | $("#SimuCurveQP" + speedItem.id).css("stroke", color); |
| | | |
| | | $("#SimuCurveQHText" + speedItem.id).css("fill", color); |
| | | //$("#SimuCurveQEText"+i).remove(); |
| | | $("#SimuCurveQPText" + speedItem.id).css("fill", color); |
| | | |
| | | //通知外部 曲线修改了 |
| | | noticeCurveChanged(); |
| | | }; |
| | | //删除转速 |
| | | this.deleteCurveById = function (id) { |
| | | var index = -1; |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | if (id == m_simuSpeedCurves[i].id) { |
| | | index = i; |
| | | break; |
| | | } |
| | | } |
| | | if (index < 0) |
| | | return; |
| | | |
| | | m_simuSpeedCurves.splice(index, 1) |
| | | $("#SimuCurveQH" + id).remove(); |
| | | //$("#SimuCurveQE"+i).remove(); |
| | | $("#SimuCurveQP" + id).remove(); |
| | | |
| | | $("#SimuCurveQHText" + id).remove(); |
| | | //$("#SimuCurveQEText"+i).remove(); |
| | | $("#SimuCurveQPText" + id).remove(); |
| | | }; |
| | | //设置容器 |
| | | 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(divChartName).clientHeight; |
| | | } |
| | | //console.log(m_divChartName, m_chartSize.TotalWidth,m_chartSize.TotalHeight) |
| | | }; |
| | | //设置语言 |
| | | this.setLocalizationType = function (localizationType) { |
| | | m_localizationType = localizationType; |
| | | //console.log("localizationType:"+localizationType) |
| | | }; |
| | | //设置工具提示栏 |
| | | this.setToolTipName = function (toolTipName) { |
| | | m_toolTipContent = $("#" + toolTipName); |
| | | }; |
| | | //获取查询曲线查询得到的数据 给参数查询使用 |
| | | this.setChangeQueryDataCb = function (cb) { |
| | | onChangeQueryDataCb = cb; |
| | | }; |
| | | //设置修改了列表,通知外部的回调 |
| | | this.setChangeSpeedListCb = function (cb) { |
| | | onChangeSpeedListCb = cb; |
| | | }; |
| | | if (onChangeQueryDataCb != null) { |
| | | onChangeQueryDataCb(query_pt_list) |
| | | } |
| | | }; |
| | | //计算 参数查询信息 ( flow_m3h 实际值 ) |
| | | var calcQueryPtInfoByPixel = function (curve, xPixel) { |
| | | if (xPixel < 0.1) |
| | | return null; |
| | | |
| | | var query_pt = {}; |
| | | |
| | | //扬程 |
| | | var head_pixel_pt = getBezierPointY(curve.PixelQH, xPixel); |
| | | if (head_pixel_pt == null) |
| | | return; |
| | | var head_m = getActualValueH(head_pixel_pt.Y); |
| | | query_pt.H = head_m; |
| | | |
| | | //效率 |
| | | // var eff_info = {}; |
| | | // eff_info.value = ""; |
| | | // if (m_isDispCurveQE) { |
| | | // var eta_pixel_pt = getBezierPointY(m_wrkCurveGrp.PixelQE, xPixel); |
| | | // if (eta_pixel_pt != null) { |
| | | // var eta_std = getActualValueE(eta_pixel_pt.Y); |
| | | // query_pt.E = eta_std.toFixed(1); |
| | | // } |
| | | // } |
| | | |
| | | //功率 |
| | | var power_pixel_pt = getBezierPointY(curve.PixelQP, xPixel); |
| | | if (power_pixel_pt != null) { |
| | | var power_kw = getActualValueP(power_pixel_pt.Y); |
| | | query_pt.P = power_kw; |
| | | } |
| | | |
| | | return query_pt; |
| | | }; |
| | | //设置查询线 是否显示 |
| | | var setQueryIndicatVertLineVisible = function (disp, index) { |
| | | m_dispVerticalLine1 = disp; |
| | | |
| | | var objLine = document.getElementById("verticalLine1multispeed"); |
| | | if (objLine != null) { |
| | | if (disp) { |
| | | objLine.style.display = ''; |
| | | } |
| | | else { |
| | | objLine.style.display = 'none'; |
| | | } |
| | | } |
| | | }; |
| | | //设置查询线 的值 |
| | | var setQueryIndicatValue = function (flow_m3h, index) { |
| | | m_dispVerticalLine1 = true; |
| | | setQueryIndicatVertLineVisible(m_dispVerticalLine1, 1); |
| | | var xStartValuePixel = getPixelValueQ(flow_m3h); |
| | | drawQueryIndicatVertLine(xStartValuePixel, 1); |
| | | }; |
| | | //绘制图表(所有曲线) |
| | | var drawDiagramCurve = function () { |
| | | if (m_maxSpeedCurve == null) return; |
| | | |
| | | |
| | | removeElementById("MaxSpeedCurveQH"); |
| | | removeElementById("MaxSpeedCurveQE"); |
| | | removeElementById("MaxSpeedCurveQP"); |
| | | |
| | | removeElementById("MaxSpeedCurveQHText"); |
| | | removeElementById("MaxSpeedCurveQPText"); |
| | | |
| | | if (m_simuSpeedCurves != null && m_simuSpeedCurves.length > 0) { |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | var id = m_simuSpeedCurves[i].id; |
| | | removeElementById("SpeedSimuCurveQH" + id); |
| | | removeElementById("SpeedSimuCurveQE" + id); |
| | | removeElementById("SpeedSimuCurveQP" + id); |
| | | |
| | | removeElementById("SpeedSimuCurveQHText" + id); |
| | | removeElementById("SpeedSimuCurveQPText" + id); |
| | | } |
| | | } |
| | | |
| | | // |
| | | this.setQueryIndicatVertLineVisible = function (isVisible) { |
| | | setQueryIndicatVertLineVisible(isVisible); |
| | | }; |
| | | this.getQueryIndicatVertLineVisible = function () { |
| | | return m_dispVerticalLine; |
| | | }; |
| | | |
| | | //初始化图表(入口) |
| | | this.initialChart = function (ChartFullInfo, displayStyle) { |
| | | if (!m_divChartName) |
| | | return; |
| | | //console.log("initialChart ChartFullInfo", ChartFullInfo) |
| | | //清空 |
| | | $("#" + m_divChartName).empty(); |
| | | |
| | | if (ChartFullInfo.ChartObjectDict == null) |
| | | return; |
| | | if (ChartFullInfo.ChartObjectDict.Coordinate == null) |
| | | return; |
| | | |
| | | m_designPointTolerance = PointToleranceConfig.GetDefaultTolerancePara(); |
| | | m_maxSpeedCurve.type = 1; //0 一般 1 最大曲线 2工作曲线(变频) |
| | | m_maxSpeedCurve.color = "black"; |
| | | var maxSpeed_curveWidth = 3; |
| | | var pixelPointsQH = createCurveQH( |
| | | "MaxSpeedCurveQH", |
| | | m_maxSpeedCurve.RealQH, |
| | | maxSpeed_curveWidth, |
| | | m_maxSpeedCurve.color |
| | | ); |
| | | var pointsRealQH = m_maxSpeedCurve.RealQH; |
| | | if (pointsRealQH == null) |
| | | return; |
| | | drawSpeedTextByQH( |
| | | "MaxSpeedCurveQHText", |
| | | m_maxSpeedCurve, |
| | | pointsRealQH[pointsRealQH.length - 1] |
| | | ); |
| | | m_maxSpeedCurve.PixelQH = transBezierCurveModel(pixelPointsQH); |
| | | |
| | | |
| | | // |
| | | m_pumpInfo = ChartFullInfo.BaseInfo; |
| | | |
| | | m_maxSpeedCurve = {}; |
| | | m_maxSpeedCurve.speed = m_pumpInfo.Ratedn; |
| | | //console.log("m_pumpInfo", m_pumpInfo) |
| | | |
| | | m_chartPointPara = ChartFullInfo.ChartPointPara; |
| | | m_chartSetting = ChartFullInfo.SettingInfo; |
| | | m_chartObject = ChartFullInfo.ChartObjectDict; |
| | | |
| | | //克隆一下,坐标和性能曲线的不一定一致,会修改 |
| | | var objString_Coordinate = JSON.stringify(ChartFullInfo.ChartObjectDict.Coordinate); |
| | | m_coordinatePara = JSON.parse(objString_Coordinate); |
| | | var pixelPointsQP = createCurveQP( |
| | | "MaxSpeedCurveQP", |
| | | m_maxSpeedCurve.RealQP, |
| | | maxSpeed_curveWidth, |
| | | m_maxSpeedCurve.color |
| | | ); |
| | | var pointsRealQP = m_maxSpeedCurve.RealQP; |
| | | drawSpeedTextByQP( |
| | | "MaxSpeedCurveQPText", |
| | | m_maxSpeedCurve, |
| | | pointsRealQP[pointsRealQP.length - 1] |
| | | ); |
| | | m_maxSpeedCurve.PixelQP = transBezierCurveModel(pixelPointsQP); |
| | | |
| | | |
| | | this.SetUnit(//设置单位 |
| | | m_chartSetting.UnitQ, |
| | | m_chartSetting.UnitH, |
| | | m_chartSetting.UnitP, |
| | | m_chartSetting.UnitNPSH ); |
| | | |
| | | //初始化速度列表 |
| | | var simuSpeedList = []; |
| | | if (ChartFullInfo.MultiSpeedValues != null) { |
| | | var sss = ChartFullInfo.MultiSpeedValues.split(","); |
| | | sss.forEach(element => { |
| | | simuSpeedList.push(Math.round(parseFloat(element))); |
| | | }); |
| | | } |
| | | else { |
| | | simuSpeedList.push(m_maxSpeedCurve.speed * 0.9); |
| | | simuSpeedList.push(m_maxSpeedCurve.speed * 0.8); |
| | | simuSpeedList.push(m_maxSpeedCurve.speed * 0.7); |
| | | simuSpeedList.push(m_maxSpeedCurve.speed * 0.6); |
| | | simuSpeedList.push(m_maxSpeedCurve.speed * 0.5); |
| | | } |
| | | if (m_isDispCurveQE) { |
| | | var pixelPointsQE = createCurveQE( |
| | | "MaxSpeedCurveQE", |
| | | m_maxSpeedCurve.RealQE, |
| | | maxSpeed_curveWidth, |
| | | m_maxSpeedCurve.color |
| | | ); |
| | | //var pointsRealQE = m_maxSpeedCurve.RealQE; |
| | | // drawSpeedTextByQE( |
| | | // "MaxSpeedCurveQEText", |
| | | // m_maxSpeedCurve, |
| | | // pointsRealQP[pointsRealQP.length - 1] |
| | | // ); |
| | | m_maxSpeedCurve.PixelQE = transBezierCurveModel(pixelPointsQE); |
| | | } |
| | | |
| | | m_simuSpeedCurves = []; |
| | | simuSpeedList.forEach((speed, indx) => { |
| | | //console.log(indx, speed) |
| | | m_curveMaxId++; |
| | | m_simuSpeedCurves.push({ |
| | | speed: speed, |
| | | id: m_curveMaxId, |
| | | color: m_colorArray[indx], |
| | | curveWidth: 2 |
| | | }); |
| | | |
| | | |
| | | // |
| | | if (m_simuSpeedCurves != null && m_simuSpeedCurves.length > 0) { |
| | | m_simuSpeedCurves.forEach((element) => { |
| | | element.hz = Math.round( |
| | | (m_maxSpeedCurve.hz * element.speed) / m_maxSpeedCurve.speed, |
| | | 1 |
| | | ); |
| | | drawSimuSpeedCurve(element); |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
| | | //通知外部 曲线修改了 |
| | | noticeCurveChanged(); |
| | | |
| | | |
| | | |
| | | //型谱 |
| | | drawSpectrumShape(); |
| | | |
| | | |
| | | |
| | | |
| | | //装置曲线 |
| | | //drawEquipmentCurve(); |
| | | |
| | | //查询指示线 |
| | | drawQueryIndicatVertLine(); |
| | | |
| | | }; |
| | | //通知外部 |
| | | var noticeCurveChanged = function () { |
| | | if (onChangeSpeedListCb != null) { |
| | | var list_speed_color = []; |
| | | m_simuSpeedCurves.forEach((element) => { |
| | | list_speed_color.push({ |
| | | id: element.id, |
| | | speed: element.speed, |
| | | color: element.color, |
| | | type: element.type, |
| | | }); |
| | | }); |
| | | onChangeSpeedListCb(list_speed_color); |
| | | } |
| | | }; |
| | | |
| | | //计算所有变频曲线 |
| | | var calcAllSimuSpeedCurve = function () { |
| | | if (m_maxSpeedCurve == null || m_maxSpeedCurve.RealQH == null) |
| | | return; |
| | | if (m_simuSpeedCurves == null || m_simuSpeedCurves.length == 0) |
| | | return; |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | var simuCurve = m_simuSpeedCurves[i]; |
| | | |
| | | var speed = simuCurve.speed; |
| | | if (speed < 10) continue; |
| | | |
| | | var simuCurveQH = []; |
| | | var rated_speed = m_maxSpeedCurve.speed; |
| | | m_maxSpeedCurve.RealQH.forEach((pt) => { |
| | | var simu_pt = {}; |
| | | simu_pt.X = (pt.X * speed) / rated_speed; |
| | | simu_pt.Y = (pt.Y * speed * speed) / (rated_speed * rated_speed); |
| | | simuCurveQH.push(simu_pt); |
| | | }); |
| | | simuCurve.RealQH = simuCurveQH; |
| | | |
| | | |
| | | var simuCurveQE = []; |
| | | m_maxSpeedCurve.RealQE.forEach((pt) => { |
| | | var simu_pt = {}; |
| | | simu_pt.X = (pt.X * speed) / rated_speed; |
| | | simu_pt.Y = pt.Y; |
| | | simuCurveQE.push(simu_pt); |
| | | }); |
| | | simuCurve.RealQE = simuCurveQE; |
| | | |
| | | |
| | | |
| | | //初始化显示设置 |
| | | initialDispStyle(displayStyle, m_chartSetting); |
| | | var simuCurveQP = []; |
| | | m_maxSpeedCurve.RealQP.forEach((pt) => { |
| | | var simu_pt = {}; |
| | | simu_pt.X = (pt.X * speed) / rated_speed; |
| | | simu_pt.Y = |
| | | (pt.Y * speed * speed * speed) / |
| | | (rated_speed * rated_speed * rated_speed); |
| | | simuCurveQP.push(simu_pt); |
| | | }); |
| | | simuCurve.RealQP = simuCurveQP; |
| | | } |
| | | }; |
| | | // 排序(从大到小) |
| | | var sortSimuSpeedCurves = function () { |
| | | if (m_simuSpeedCurves == null || m_simuSpeedCurves.length == 0) |
| | | return null; |
| | | |
| | | m_chartDiagramPanelStyle = ConstParas.ChartDiagramPanelStyle.Two; |
| | | |
| | | //初始化面板尺寸 |
| | | initialPanelSize(); |
| | | |
| | | drawDiagramPanel(); |
| | | |
| | | |
| | | |
| | | return this; |
| | | }; |
| | | |
| | | //根据流量计算功率 |
| | | this.calcPowerByFlow = function (flow, unit) { |
| | | if (flow == null || m_maxSpeedCurve == null || m_maxSpeedCurve.PixelQP == null) |
| | | return null; |
| | | var flow_stdUnit = UnitHelper.ConvertQ_toM3H(unit, flow); |
| | | if (flow_stdUnit < 0.1) |
| | | return null; |
| | | //console.log("flow_stdUnit", flow_stdUnit, unit, flow) |
| | | var xPixel = getPixelValueQ(flow_stdUnit); |
| | | var power_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelQP, xPixel); |
| | | if (power_pixel_pt != null) { |
| | | var power = getActualValueP(power_pixel_pt.Y); |
| | | // console.log("flow_power", flow_stdUnit, power.toFixed(2) ) |
| | | return power.toFixed(2); |
| | | return m_simuSpeedCurves.sort((a, b) => { |
| | | if (a.speed < b.speed) { |
| | | return 1; |
| | | } |
| | | if (a.speed > b.speed) { |
| | | return -1; |
| | | } |
| | | return 0; |
| | | }); |
| | | }; |
| | | var newCurveColor = function (){ |
| | | if (m_simuSpeedCurves == null || m_simuSpeedCurves.length == 0) |
| | | return m_colorArray[0]; |
| | | for (var c = 0; c < m_colorArray.length; c++) { |
| | | var isHaveColor = false; |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | if (m_colorArray[c] == m_simuSpeedCurves[i].color) { |
| | | isHaveColor = true; |
| | | break; |
| | | } |
| | | else { |
| | | return null; |
| | | } |
| | | } |
| | | if (!isHaveColor) { |
| | | return m_colorArray[c]; |
| | | } |
| | | } |
| | | |
| | | return "#800080"; |
| | | }; |
| | | //绘制曲线 |
| | | var drawSimuSpeedCurve = function (simuCurve) { |
| | | if (m_maxSpeedCurve.RealQH == null) |
| | | return; |
| | | |
| | | var speed = simuCurve.speed; |
| | | if (speed < 10) return; |
| | | |
| | | var simuCurveQH = []; |
| | | var rated_speed = m_maxSpeedCurve.speed; |
| | | m_maxSpeedCurve.RealQH.forEach((pt) => { |
| | | var simu_pt = {}; |
| | | simu_pt.X = (pt.X * speed) / rated_speed; |
| | | simu_pt.Y = (pt.Y * speed * speed) / (rated_speed * rated_speed); |
| | | simuCurveQH.push(simu_pt); |
| | | }); |
| | | simuCurve.RealQH = simuCurveQH; |
| | | |
| | | |
| | | |
| | | |
| | | var simuCurveQP = []; |
| | | m_maxSpeedCurve.RealQP.forEach((pt) => { |
| | | var simu_pt = {}; |
| | | simu_pt.X = (pt.X * speed) / rated_speed; |
| | | simu_pt.Y = |
| | | (pt.Y * speed * speed * speed) / |
| | | (rated_speed * rated_speed * rated_speed); |
| | | simuCurveQP.push(simu_pt); |
| | | }); |
| | | simuCurve.RealQP = simuCurveQP; |
| | | |
| | | |
| | | |
| | | |
| | | var simuCurveQE = []; |
| | | m_maxSpeedCurve.RealQE.forEach((pt) => { |
| | | var simu_pt = {}; |
| | | simu_pt.X = (pt.X * speed) / rated_speed; |
| | | simu_pt.Y = pt.Y; |
| | | simuCurveQE.push(simu_pt); |
| | | }); |
| | | simuCurve.RealQE = simuCurveQE; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | var curveWidth = 2; |
| | | if (simuCurve.curveWidth) curveWidth = simuCurve.curveWidth; |
| | | |
| | | var curveColor = simuCurve.color; |
| | | var curve_id = simuCurve.id; |
| | | |
| | | removeElementById("SpeedSimuCurveQH" + curve_id); |
| | | removeElementById("SpeedSimuCurveQE" + curve_id); |
| | | removeElementById("SpeedSimuCurveQP" + curve_id); |
| | | |
| | | removeElementById("SpeedSimuCurveQHText" + curve_id); |
| | | removeElementById("SpeedSimuCurveQEText" + curve_id); |
| | | removeElementById("SpeedSimuCurveQPText" + curve_id); |
| | | |
| | | removeElementById("SpeedSimuDpQH" + curve_id); |
| | | |
| | | |
| | | var pixelPointsQH = createCurveQH( |
| | | "SpeedSimuCurveQH" + curve_id, |
| | | simuCurveQH, |
| | | curveWidth, |
| | | curveColor |
| | | ); |
| | | drawSpeedTextByQH( |
| | | "SpeedSimuCurveQHText" + curve_id, |
| | | simuCurve, |
| | | simuCurveQH[simuCurveQH.length - 1] |
| | | ); |
| | | simuCurve.PixelQH = transBezierCurveModel(pixelPointsQH); |
| | | |
| | | |
| | | |
| | | |
| | | var pixelPointsQP = createCurveQP( |
| | | "SpeedSimuCurveQP" + curve_id, |
| | | simuCurveQP, |
| | | curveWidth, |
| | | curveColor); |
| | | drawSpeedTextByQP( |
| | | "SpeedSimuCurveQPText" + curve_id, |
| | | simuCurve, |
| | | simuCurveQP[simuCurveQP.length - 1] |
| | | ); |
| | | simuCurve.PixelQP = transBezierCurveModel(pixelPointsQP); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | if (m_isDispCurveQE) { |
| | | var pixelPointsQE = createCurveQE( |
| | | "SpeedSimuCurveQE" + curve_id, |
| | | simuCurveQE, |
| | | curveWidth, |
| | | curveColor); |
| | | // drawSpeedTextByQE( |
| | | // "SpeedSimuCurveQEText" + curve_id, |
| | | // simuCurve, |
| | | // simuCurveQP[simuCurveQE.length - 1] |
| | | // ); |
| | | simuCurve.PixelQE = transBezierCurveModel(pixelPointsQE); |
| | | } |
| | | |
| | | |
| | | //设计点 |
| | | if (simuCurve.designPoint != null) |
| | | drawDesignPoint("SpeedSimuDpQH" + curve_id, curveColor, simuCurve.designPoint.Q, simuCurve.designPoint.H); |
| | | |
| | | |
| | | }; |
| | | |
| | | // |
| | | var createGridLineDiagram_Whole = function () { |
| | | if (m_coordinatePara == null) { |
| | | return; |
| | | } |
| | | |
| | | var attr = { |
| | | stroke: m_displayStyle.ColorGridLine, |
| | | "stroke-width": "1", |
| | | fill: "none", |
| | | zIndex: 10, |
| | | }; |
| | | //根据流量计算效率 |
| | | this.calcEtaByFlow = function (flow, unit) { |
| | | if (flow == null || m_maxSpeedCurve == null || m_maxSpeedCurve.PixelQE == null) |
| | | return null; |
| | | var flow_stdUnit = UnitHelper.ConvertQ_toM3H(unit, flow); |
| | | if (flow_stdUnit < 0.1) |
| | | return null; |
| | | //console.log("flow_stdUnit", flow_stdUnit, unit, flow) |
| | | var xPixel = getPixelValueQ(flow_stdUnit); |
| | | var power_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelQE, xPixel); |
| | | if (power_pixel_pt != null) { |
| | | var power = getActualValueE(power_pixel_pt.Y); |
| | | //console.log("flow_power", power.toFixed(2) ) |
| | | return power.toFixed(2); |
| | | } |
| | | else { |
| | | return null; |
| | | } |
| | | |
| | | //产生网格线竖直方向 |
| | | for (var i = 0; i <= m_coordinatePara.GridNumberX; i++) { |
| | | var distance = m_chartSize.SpaceGridX * i; |
| | | var valueTemp = []; |
| | | valueTemp.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft + distance, |
| | | " ", |
| | | m_chartSize.SpaceTop, |
| | | " L ", |
| | | m_chartSize.DiagramLeft + distance, |
| | | " ", |
| | | m_chartSize.UpDiagram.Bottom |
| | | ); |
| | | m_svg.createPath(null, valueTemp.join(""), attr, null); |
| | | } |
| | | |
| | | //产生网格线水平方向 |
| | | for (var i = 0; i <= m_coordinatePara.GridNumberY; i++) { |
| | | var distance = m_chartSize.UpDiagram.SpaceGridY * i; |
| | | var valueTemp = []; |
| | | valueTemp.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft, |
| | | " ", |
| | | m_chartSize.SpaceTop + distance, |
| | | " L ", |
| | | m_chartSize.DiagramRight, |
| | | " ", |
| | | m_chartSize.SpaceTop + distance |
| | | ); |
| | | m_svg.createPath(null, valueTemp.join(""), attr, null); |
| | | } |
| | | }; |
| | | //绘制面板(分离) |
| | | var createGridLineDiagram_TwoPanel = function () { |
| | | if (m_coordinatePara == null) { |
| | | return; |
| | | } |
| | | |
| | | var attr = { |
| | | stroke: m_displayStyle.ColorGridLine, |
| | | "stroke-width": "1", |
| | | fill: "none", |
| | | zIndex: 10, |
| | | }; |
| | | //设置水印图片路径 |
| | | this.setWatermarkImageUrl = function(img_path){ |
| | | |
| | | //产生网格线竖直方向 |
| | | for (var i = 0; i <= m_coordinatePara.GridNumberX; i++) { |
| | | var distance = m_chartSize.SpaceGridX * i; |
| | | var valueTemp = []; |
| | | valueTemp.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft + distance, |
| | | " ", |
| | | m_chartSize.UpDiagram.Up, |
| | | " L ", |
| | | m_chartSize.DiagramLeft + distance, |
| | | " ", |
| | | m_chartSize.UpDiagram.Bottom |
| | | ); |
| | | m_svg.createPath(null, valueTemp.join(""), attr, null); |
| | | |
| | | //console.log(m_chartSize.DiagramLeft + distance , m_chartSize.UpDiagram.Up, m_chartSize.DiagramLeft + distance, m_chartSize.UpDiagram.Bottom) |
| | | } |
| | | |
| | | for (var i = 0; i <= m_coordinatePara.GridNumberX; i++) { |
| | | var distance = m_chartSize.SpaceGridX * i; |
| | | var valueTemp = []; |
| | | valueTemp.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft + distance, |
| | | " ", |
| | | m_chartSize.DownDiagram.Up, |
| | | " L ", |
| | | m_chartSize.DiagramLeft + distance, |
| | | " ", |
| | | m_chartSize.DownDiagram.Bottom |
| | | ); |
| | | m_svg.createPath(null, valueTemp.join(""), attr, null); |
| | | } |
| | | |
| | | //产生网格线水平方向 |
| | | for (var i = 0; i <= m_chartSize.UpDiagram.GridNumberY; i++) { |
| | | var distance = m_chartSize.UpDiagram.SpaceGridY * i; |
| | | var valueTemp = []; |
| | | valueTemp.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft, |
| | | " ", |
| | | m_chartSize.UpDiagram.Up + distance, |
| | | " L ", |
| | | m_chartSize.DiagramRight, |
| | | " ", |
| | | m_chartSize.UpDiagram.Up + distance |
| | | ); |
| | | m_svg.createPath(null, valueTemp.join(""), attr, null); |
| | | } |
| | | |
| | | for (var i = 0; i <= m_chartSize.DownDiagram.GridNumberY; i++) { |
| | | var distance = m_chartSize.DownDiagram.SpaceGridY * i; |
| | | var valueTemp = []; |
| | | valueTemp.push( |
| | | "M ", |
| | | m_chartSize.DiagramLeft, |
| | | " ", |
| | | m_chartSize.DownDiagram.Up + distance, |
| | | " L ", |
| | | m_chartSize.DiagramRight, |
| | | " ", |
| | | m_chartSize.DownDiagram.Up + distance |
| | | ); |
| | | m_svg.createPath(null, valueTemp.join(""), attr, null); |
| | | } |
| | | }; |
| | | //转成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 = []; |
| | | |
| | | 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 = []; |
| | | for (var i = 0; i < bezierCurveValue.length; i++) { |
| | | var b_pt = bezierCurveValue[i]; |
| | | if (i == 0) { |
| | | pathValue.push("M ", b_pt.Point0.X, " ", b_pt.Point0.Y); |
| | | pathValue.push( |
| | | " C ", |
| | | b_pt.Point1.X, |
| | | " ", |
| | | b_pt.Point1.Y, |
| | | " ", |
| | | b_pt.Point2.X, |
| | | " ", |
| | | b_pt.Point2.Y, |
| | | " ", |
| | | b_pt.Point3.X, |
| | | " ", |
| | | b_pt.Point3.Y |
| | | ); |
| | | } else { |
| | | pathValue.push(" L ", b_pt.Point0.X, " ", b_pt.Point0.Y); |
| | | pathValue.push( |
| | | " C ", |
| | | b_pt.Point1.X, |
| | | " ", |
| | | b_pt.Point1.Y, |
| | | " ", |
| | | b_pt.Point2.X, |
| | | " ", |
| | | b_pt.Point2.Y, |
| | | " ", |
| | | b_pt.Point3.X, |
| | | " ", |
| | | b_pt.Point3.Y |
| | | ); |
| | | } |
| | | if (i == bezierCurveValue.length - 1) { |
| | | pathValue.push(" L ", b_pt.Point3.X, " ", b_pt.Point3.Y); |
| | | } |
| | | } |
| | | return pathValue; |
| | | }; |
| | | |
| | | //返回标准单位下的值 |
| | | var getActualValueQ = function (pixelValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinQ; |
| | | var actualMaxValue = m_coordinatePara.DispMaxQ; |
| | | var pixelMinValue = m_chartSize.DiagramLeft; |
| | | var pixelMaxValue = m_chartSize.DiagramRight; |
| | | return ( |
| | | ((pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue)) * |
| | | (actualMaxValue - actualMinValue) + |
| | | actualMinValue |
| | | ); |
| | | }; |
| | | var getActualValueH = function (pixelValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinH; |
| | | var actualMaxValue = m_coordinatePara.DispMaxH; |
| | | var pixelMinValue = m_chartSize.PanelH.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelH.Up; |
| | | |
| | | var actualValue = |
| | | ((pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue)) * |
| | | (actualMaxValue - actualMinValue) + |
| | | actualMinValue; |
| | | //console.log("getActualValueH", actualValue, actualMinValue,actualMaxValue,pixelMinValue,pixelMaxValue); |
| | | |
| | | return actualValue; |
| | | }; |
| | | var getActualValueE = function (pixelValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinE; |
| | | var actualMaxValue = m_coordinatePara.DispMaxE; |
| | | var pixelMinValue = m_chartSize.PanelE.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelE.Up; |
| | | |
| | | var actualValue = |
| | | ((pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue)) * |
| | | (actualMaxValue - actualMinValue) + |
| | | actualMinValue; |
| | | //console.log("getActualValueE",actualValue, actualMinValue,actualMaxValue,pixelMinValue,pixelMaxValue); |
| | | |
| | | return actualValue; |
| | | }; |
| | | var getActualValueP = function (pixelValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinP; |
| | | var actualMaxValue = m_coordinatePara.DispMaxP; |
| | | var pixelMinValue = m_chartSize.PanelP.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelP.Up; |
| | | return ( |
| | | ((pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue)) * |
| | | (actualMaxValue - actualMinValue) + |
| | | actualMinValue |
| | | ); |
| | | }; |
| | | var getActualValueNPSH = function (pixelValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinNPSH; |
| | | var actualMaxValue = m_coordinatePara.DispMaxNPSH; |
| | | var pixelMinValue = m_chartSize.PanelNPSH.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelNPSH.Up; |
| | | var actualValue = |
| | | ((pixelValue - pixelMinValue) / (pixelMaxValue - pixelMinValue)) * |
| | | (actualMaxValue - actualMinValue) + |
| | | actualMinValue; |
| | | return actualValue; |
| | | }; |
| | | |
| | | // actualValue 是标准单位下的值 |
| | | var getPixelValueQ = function (actualValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinQ; |
| | | var actualMaxValue = m_coordinatePara.DispMaxQ; |
| | | var pixelMinValue = m_chartSize.DiagramLeft; |
| | | var pixelMaxValue = m_chartSize.DiagramRight; |
| | | |
| | | return ( |
| | | ((actualValue - actualMinValue) / (actualMaxValue - actualMinValue)) * |
| | | (pixelMaxValue - pixelMinValue) + |
| | | pixelMinValue |
| | | ); |
| | | }; |
| | | var getPixelValueH = function (actualValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinH; |
| | | var actualMaxValue = m_coordinatePara.DispMaxH; |
| | | var pixelMinValue = m_chartSize.PanelH.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelH.Up; |
| | | |
| | | if (actualMaxValue == actualMinValue) return actualMinValue; |
| | | |
| | | var v = |
| | | ((actualValue - actualMinValue) / (actualMaxValue - actualMinValue)) * |
| | | (pixelMaxValue - pixelMinValue) + |
| | | pixelMinValue; |
| | | return v; |
| | | }; |
| | | var getPixelValueE = function (actualValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinE; |
| | | var actualMaxValue = m_coordinatePara.DispMaxE; |
| | | var pixelMinValue = m_chartSize.PanelE.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelE.Up; |
| | | if (actualMaxValue == actualMinValue) return actualMinValue; |
| | | |
| | | return ( |
| | | ((actualValue - actualMinValue) / (actualMaxValue - actualMinValue)) * |
| | | (pixelMaxValue - pixelMinValue) + |
| | | pixelMinValue |
| | | ); |
| | | }; |
| | | var getPixelValueP = function (actualValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinP; |
| | | var actualMaxValue = m_coordinatePara.DispMaxP; |
| | | var pixelMinValue = m_chartSize.PanelP.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelP.Up; |
| | | if (actualMaxValue == actualMinValue) return actualMinValue; |
| | | |
| | | return ( |
| | | ((actualValue - actualMinValue) / (actualMaxValue - actualMinValue)) * |
| | | (pixelMaxValue - pixelMinValue) + |
| | | pixelMinValue |
| | | ); |
| | | }; |
| | | var getPixelValueNPSH = function (actualValue) { |
| | | var actualMinValue = m_coordinatePara.DispMinNPSH; |
| | | var actualMaxValue = m_coordinatePara.DispMaxNPSH; |
| | | var pixelMinValue = m_chartSize.PanelNPSH.Bottom; |
| | | var pixelMaxValue = m_chartSize.PanelNPSH.Up; |
| | | if (actualMaxValue == actualMinValue) return actualMinValue; |
| | | |
| | | return ( |
| | | ((actualValue - actualMinValue) / (actualMaxValue - actualMinValue)) * |
| | | (pixelMaxValue - pixelMinValue) + |
| | | pixelMinValue |
| | | ); |
| | | }; |
| | | |
| | | /** ----------------对外函数-------------------- **/ |
| | | |
| | | //设置设计点公差 |
| | | this.SetUnit = function (unitQ, unitH, unitP, unitNPSH) { |
| | | m_unit.Q = unitQ; |
| | | m_unit.H = unitH; |
| | | m_unit.P = unitP; |
| | | if (unitNPSH > 0) { |
| | | m_unit.NPSH = unitNPSH; |
| | | } else { |
| | | m_unit.NPSH = 0; |
| | | } |
| | | }; |
| | | |
| | | //设置是否是单色显示 |
| | | this.setMonorColor = function (isMonorColor) { |
| | | document.getElementById(m_divChartName).innerHTML = ""; |
| | | setObjectColor(isMonorColor); |
| | | if (!initialSvg()) return; |
| | | |
| | | drawDiagramPanel(); |
| | | |
| | | drawDiagramCurve(); |
| | | }; |
| | | //设置工作曲线 |
| | | this.setWrkCurveInfo = function (curve) { |
| | | if (curve == null) return; |
| | | |
| | | if (m_maxSpeedCurve == null || curve.RealQH == null) return; |
| | | m_maxSpeedCurve.RealQH = curve.RealQH; |
| | | m_maxSpeedCurve.RealQE = curve.RealQE; |
| | | m_maxSpeedCurve.RealQP = curve.RealQP; |
| | | m_maxSpeedCurve.RealNPSH = curve.RealNPSH; |
| | | |
| | | if (curve.RealNPSH == null) { |
| | | m_isHaveNpsh = false; |
| | | } else { |
| | | m_isHaveNpsh = true; |
| | | } |
| | | |
| | | //计算所有变频曲线 |
| | | calcAllSimuSpeedCurve(); |
| | | |
| | | // |
| | | var isNeedRefresh = checkCoordinate(); |
| | | if (isNeedRefresh) { |
| | | document.getElementById(m_divChartName).innerHTML = ""; |
| | | //初始化面板尺寸 |
| | | initialPanelSize(); |
| | | |
| | | //绘制水印 |
| | | drawLogoWaterMark(); |
| | | |
| | | drawDiagramPanel(); |
| | | } |
| | | |
| | | // |
| | | drawDiagramCurve(); |
| | | }; |
| | | //获取列表 |
| | | this.getSpeedCurveList = function () { |
| | | return m_simuSpeedCurves; |
| | | }; |
| | | //添加转速 |
| | | this.AddSpeedCurve = function (r_speed, dp) { |
| | | if (r_speed < 10) return null; |
| | | |
| | | var i_speed = parseInt(r_speed); |
| | | |
| | | if (m_simuSpeedCurves == null) m_simuSpeedCurves = []; |
| | | var isFind = false; |
| | | m_simuSpeedCurves.forEach((element) => { |
| | | if (i_speed == element.speed) isFind = true; |
| | | }); |
| | | if (isFind) return null; |
| | | |
| | | //获取没有用过的颜色 |
| | | var curveColor = newCurveColor(); |
| | | m_curveMaxId++; |
| | | var speedItem = { |
| | | id: m_curveMaxId, |
| | | speed: i_speed, |
| | | hz: Math.round((m_maxSpeedCurve.hz * r_speed) / m_maxSpeedCurve.speed, 1), |
| | | color: curveColor, |
| | | curveWidth: 2, |
| | | designPoint: dp |
| | | }; |
| | | //重绘图表大小 |
| | | this.Resize = function (widht, height) { |
| | | if (widht && widht > 0) |
| | | m_chartSize.TotalWidth = widht; |
| | | if (height && height > 0) |
| | | m_chartSize.TotalHeight = height; |
| | | m_simuSpeedCurves.push(speedItem); |
| | | |
| | | $("#" + m_divChartName).empty(); |
| | | sortSimuSpeedCurves(); |
| | | |
| | | //初始化面板 |
| | | initialPanelSize(); |
| | | drawSimuSpeedCurve(speedItem); |
| | | |
| | | //通知外部 曲线修改了 |
| | | noticeCurveChanged(); |
| | | |
| | | if (m_dispVerticalLine1 && m_queryLinePixel > 0) { |
| | | drawQueryDataInfoByPixel(m_queryLinePixel); |
| | | } |
| | | return speedItem; |
| | | }; |
| | | //添加转速(通过设计点) |
| | | this.AddSpeedCurveDp = function (r_q, r_h) { |
| | | if (r_q < 0.1) return null; |
| | | if (r_h < 0.1) return null; |
| | | |
| | | var flow_stdUnit = r_q;//UnitHelper.ConvertQ_toM3H(unit, flow); |
| | | if (flow_stdUnit < 0.1) return null; |
| | | |
| | | var xPixel = getPixelValueQ(flow_stdUnit); |
| | | var yPixel = getPixelValueH(r_h); |
| | | |
| | | //var pathValue = transBezierCurveModel(m_maxSpeedCurve.PixelQP); |
| | | |
| | | var fit_pixel_pt_max_speed = getBezierPointY(m_maxSpeedCurve.PixelQH, xPixel); |
| | | if (fit_pixel_pt_max_speed == null) |
| | | return null; |
| | | if (fit_pixel_pt_max_speed.Y > yPixel) |
| | | return null; |
| | | |
| | | var rated_speed = m_maxSpeedCurve.speed; |
| | | |
| | | for (var speed = m_maxSpeedCurve.speed - 1; speed >= m_maxSpeedCurve.speed * 0.6; speed = speed - 1) { |
| | | |
| | | var pixelPoints = []; |
| | | m_maxSpeedCurve.RealQH.forEach((pt) => { |
| | | var simu_pt_X = (pt.X * speed) / rated_speed; |
| | | var simu_pt_Y = (pt.Y * speed * speed) / (rated_speed * rated_speed); |
| | | |
| | | var simu_pt_Pixelx = getPixelValueQ(simu_pt_X); |
| | | var simu_pt_Pixely = getPixelValueH(simu_pt_Y); |
| | | pixelPoints.push({ X: simu_pt_Pixelx, Y: simu_pt_Pixely }); |
| | | }); |
| | | |
| | | var pathValue = transBezierCurveModel(pixelPoints); |
| | | var sect_pixel_pt = getBezierPointY(pathValue, xPixel); |
| | | |
| | | if (sect_pixel_pt != null && sect_pixel_pt.Y > yPixel) {//上面的Pixel Y 越小 , 下面的 Pixel 小 |
| | | return this.AddSpeedCurve(speed + 1, { Q: flow_stdUnit, H: r_h }); |
| | | } |
| | | } |
| | | |
| | | |
| | | drawDiagramPanel(); |
| | | return null; |
| | | }; |
| | | //添加Hz |
| | | this.AddHzCurve = function (hz) { |
| | | hz = parseFloat(hz); |
| | | if (hz < 10) return null; |
| | | var r_speed = (hz * m_maxSpeedCurve.speed) / m_maxSpeedCurve.hz; |
| | | return this.AddSpeedCurve(r_speed, null); |
| | | }; |
| | | |
| | | refreshDiagram(); |
| | | }; |
| | | //修改转速 |
| | | this.editSpeedById = function (id, speed) { |
| | | var speedItem = null; |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | if (id == m_simuSpeedCurves[i].id) { |
| | | speedItem = m_simuSpeedCurves[i]; |
| | | break; |
| | | } |
| | | } |
| | | if (speedItem == null) return; |
| | | |
| | | var origin_speed = speedItem.speed; |
| | | if (Math.abs(origin_speed - speed) < 2) return; |
| | | |
| | | speedItem.hz = Math.round( |
| | | (m_maxSpeedCurve.hz * speed) / m_maxSpeedCurve.speed, |
| | | 1 |
| | | ); |
| | | speedItem.speed = speed; |
| | | |
| | | drawSimuSpeedCurve(speedItem); |
| | | |
| | | //通知外部 曲线修改了 |
| | | noticeCurveChanged(); |
| | | }; |
| | | //修改颜色 |
| | | this.editColorById = function (id, color) { |
| | | var speedItem = null; |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | if (id == m_simuSpeedCurves[i].id) { |
| | | speedItem = m_simuSpeedCurves[i]; |
| | | break; |
| | | } |
| | | } |
| | | if (speedItem == null) return; |
| | | speedItem.color = color; |
| | | |
| | | var objCurveQH = document.getElementById("SpeedSimuCurveQH" + speedItem.id); |
| | | if (objCurveQH) objCurveQH.style.stroke = color; |
| | | |
| | | var objCurveQP = document.getElementById("SpeedSimuCurveQP" + speedItem.id); |
| | | if (objCurveQP) objCurveQP.style.stroke = color; |
| | | |
| | | var objTextQH = document.getElementById("SpeedSimuCurveQHText" + speedItem.id); |
| | | if (objTextQH) objTextQH.style.fill = color; |
| | | |
| | | var objTextQP = document.getElementById("SpeedSimuCurveQPText" + speedItem.id); |
| | | if (objTextQP) objTextQP.style.fill = color; |
| | | |
| | | //通知外部 曲线修改了 |
| | | noticeCurveChanged(); |
| | | }; |
| | | //删除转速 |
| | | this.deleteCurveById = function (id) { |
| | | var index = -1; |
| | | for (var i = 0; i < m_simuSpeedCurves.length; i++) { |
| | | if (id == m_simuSpeedCurves[i].id) { |
| | | index = i; |
| | | break; |
| | | } |
| | | } |
| | | if (index < 0) return; |
| | | |
| | | m_simuSpeedCurves.splice(index, 1); |
| | | |
| | | removeElementById("SpeedSimuCurveQH" + id); |
| | | removeElementById("SpeedSimuCurveQE" + id); |
| | | removeElementById("SpeedSimuCurveQP" + id); |
| | | |
| | | removeElementById("SpeedSimuDpQH" + id); |
| | | |
| | | removeElementById("SpeedSimuCurveQHText" + id); |
| | | //removeElementById("SpeedSimuCurveQEText"+id); |
| | | removeElementById("SpeedSimuCurveQPText" + id); |
| | | }; |
| | | //设置容器 |
| | | 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(divChartName).clientHeight; |
| | | } |
| | | //console.log(m_divChartName, m_chartSize.TotalWidth,m_chartSize.TotalHeight) |
| | | }; |
| | | //设置语言 |
| | | this.setLocalizationType = function (localizationType) { |
| | | m_localizationType = localizationType; |
| | | }; |
| | | this.setCurveLabelDispSpeed = function (isDisp) { |
| | | m_isDispCurveSpeed = isDisp; |
| | | drawDiagramCurve(); |
| | | }; |
| | | this.setCurveLabelDispHz = function (isDisp) { |
| | | m_isDispCurveHz = isDisp; |
| | | drawDiagramCurve(); |
| | | }; |
| | | this.setAxisDispEta = function (isDisp) { |
| | | m_isDispCurveQE = isDisp; |
| | | document.getElementById(m_divChartName).innerHTML = ""; |
| | | //初始化面板 |
| | | initialPanelSize(); |
| | | |
| | | //绘制水印 |
| | | drawLogoWaterMark(); |
| | | |
| | | drawDiagramPanel(); |
| | | drawDiagramCurve(); |
| | | }; |
| | | |
| | | //设置工具提示栏 |
| | | this.setToolTipName = function (toolTipName) { }; |
| | | //获取查询曲线查询得到的数据 给参数查询使用 |
| | | this.setChangeQueryDataCb = function (cb) { |
| | | onChangeQueryDataCb = cb; |
| | | }; |
| | | //设置修改了列表,通知外部的回调 |
| | | this.setChangeSpeedListCb = function (cb) { |
| | | onChangeSpeedListCb = cb; |
| | | }; |
| | | // |
| | | this.setQueryIndicatVertLineVisible = function (isVisible, index) { |
| | | setQueryIndicatVertLineVisible(isVisible, index); |
| | | }; |
| | | this.getQueryIndicatVertLineVisible = function () { |
| | | return m_dispVerticalLine; |
| | | }; |
| | | |
| | | //初始化图表(入口) |
| | | this.initialChart = function (ChartFullInfo, displayStyle) { |
| | | if (!m_divChartName) return; |
| | | //清空 |
| | | document.getElementById(m_divChartName).innerHTML = ""; |
| | | |
| | | if (ChartFullInfo.ChartObjectDict == null) return; |
| | | if (ChartFullInfo.ChartObjectDict.Coordinate == null) return; |
| | | |
| | | m_designPointTolerance = PointToleranceConfig.GetDefaultTolerancePara(); |
| | | |
| | | // |
| | | m_pumpInfo = ChartFullInfo.BaseInfo; |
| | | |
| | | m_maxSpeedCurve = {}; |
| | | m_maxSpeedCurve.speed = m_pumpInfo.Ratedn; |
| | | m_maxSpeedCurve.hz = m_pumpInfo.MotorFrequece; |
| | | if (m_maxSpeedCurve.hz == null || m_maxSpeedCurve.hz < 10) |
| | | m_maxSpeedCurve.hz = 50; |
| | | |
| | | m_chartPointPara = ChartFullInfo.ChartPointPara; |
| | | m_chartSetting = ChartFullInfo.SettingInfo; |
| | | m_chartObject = ChartFullInfo.ChartObjectDict; |
| | | |
| | | //克隆一下,坐标和性能曲线的不一定一致,会修改 |
| | | var objString_Coordinate = JSON.stringify( |
| | | ChartFullInfo.ChartObjectDict.Coordinate |
| | | ); |
| | | m_coordinatePara = JSON.parse(objString_Coordinate); |
| | | |
| | | |
| | | |
| | | this.SetUnit( |
| | | //设置单位 |
| | | m_chartSetting.SeriesUnitQ, |
| | | m_chartSetting.SeriesUnitH, |
| | | m_chartSetting.SeriesUnitP, |
| | | m_chartSetting.SeriesUnitNPSH |
| | | ); |
| | | |
| | | //初始化速度列表 |
| | | var speedList = []; |
| | | if ( |
| | | ChartFullInfo.MultiSpeedInfo != null && |
| | | ChartFullInfo.MultiSpeedInfo.SpeedItems != null |
| | | ) { |
| | | speedList = ChartFullInfo.MultiSpeedInfo.SpeedItems; |
| | | |
| | | //型谱 |
| | | if (ChartFullInfo.MultiSpeedInfo.SpectrumShape != null) { |
| | | m_spectrumShape = ChartFullInfo.MultiSpeedInfo.SpectrumShape; |
| | | } |
| | | } else { |
| | | speedList.push({ Value: m_maxSpeedCurve.speed * 0.9, Type: 0 }); |
| | | speedList.push({ Value: m_maxSpeedCurve.speed * 0.8, Type: 0 }); |
| | | speedList.push({ Value: m_maxSpeedCurve.speed * 0.7, Type: 0 }); |
| | | speedList.push({ Value: m_maxSpeedCurve.speed * 0.6, Type: 0 }); |
| | | } |
| | | |
| | | m_simuSpeedCurves = []; |
| | | |
| | | speedList.forEach((speedItem, indx) => { |
| | | m_curveMaxId++; |
| | | m_simuSpeedCurves.push({ |
| | | speed: speedItem.Value, |
| | | id: m_curveMaxId, |
| | | color: speedItem.Type == 2 ? "black" : newCurveColor(), |
| | | type: speedItem.Type, |
| | | curveWidth: speedItem.Type == 2 ? 3 : 1,//0 一般 1 最大曲线 2工作曲线(变频) |
| | | }); |
| | | }); |
| | | |
| | | sortSimuSpeedCurves(); |
| | | |
| | | //初始化显示设置 |
| | | initialDispStyle(displayStyle, m_chartSetting); |
| | | |
| | | m_chartDiagramPanelStyle = ConstParas.ChartDiagramPanelStyle.Two; |
| | | |
| | | |
| | | //初始化面板尺寸 |
| | | initialPanelSize(); |
| | | |
| | | //绘制水印 |
| | | drawLogoWaterMark(); |
| | | |
| | | // |
| | | drawDiagramPanel(); |
| | | |
| | | return this; |
| | | }; |
| | | |
| | | //根据流量计算功率 |
| | | this.calcPowerByFlow = function (flow, unit) { |
| | | if ( |
| | | flow == null || |
| | | m_maxSpeedCurve == null || |
| | | m_maxSpeedCurve.PixelQP == null |
| | | ) |
| | | return null; |
| | | var flow_stdUnit = UnitHelper.ConvertQ_toM3H(unit, flow); |
| | | if (flow_stdUnit < 0.1) return null; |
| | | |
| | | var xPixel = getPixelValueQ(flow_stdUnit); |
| | | var power_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelQP, xPixel); |
| | | if (power_pixel_pt != null) { |
| | | var power = getActualValueP(power_pixel_pt.Y); |
| | | // console.log("flow_power", flow_stdUnit, power.toFixed(2) ) |
| | | return power.toFixed(2); |
| | | } else { |
| | | return null; |
| | | } |
| | | }; |
| | | //根据流量计算效率 |
| | | this.calcEtaByFlow = function (flow, unit) { |
| | | if ( |
| | | flow == null || |
| | | m_maxSpeedCurve == null || |
| | | m_maxSpeedCurve.PixelQE == null |
| | | ) |
| | | return null; |
| | | var flow_stdUnit = UnitHelper.ConvertQ_toM3H(unit, flow); |
| | | if (flow_stdUnit < 0.1) return null; |
| | | |
| | | var xPixel = getPixelValueQ(flow_stdUnit); |
| | | var power_pixel_pt = getBezierPointY(m_maxSpeedCurve.PixelQE, xPixel); |
| | | if (power_pixel_pt != null) { |
| | | var power = getActualValueE(power_pixel_pt.Y); |
| | | |
| | | return power.toFixed(2); |
| | | } else { |
| | | return null; |
| | | } |
| | | }; |
| | | //转化成m3h流量 |
| | | this.transFlowToM3H = function (flow) { |
| | | return UnitHelper.ConvertQ_fromM3H(m_unit.Q, flow); |
| | | }; |
| | | //设置查询值 |
| | | this.setQueryIndicatValue = function (value, index) { |
| | | setQueryIndicatValue(value, index); |
| | | }; |
| | | //重绘图表大小 |
| | | this.Resize = function (widht, height) { |
| | | if (widht && widht > 0) m_chartSize.TotalWidth = widht; |
| | | if (height && height > 0) m_chartSize.TotalHeight = height; |
| | | document.getElementById(m_divChartName).innerHTML = ""; |
| | | |
| | | //初始化面板 |
| | | initialPanelSize(); |
| | | |
| | | //绘制水印 |
| | | drawLogoWaterMark(); |
| | | |
| | | drawDiagramPanel(); |
| | | |
| | | drawDiagramCurve(); |
| | | }; |
| | | }; |
| | | |
| | | export default MultiSpeedChartDiagram |
| | | export default MultiSpeedChartDiagram; |