using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using Yw.WinFrmUI.Q3d; namespace Yw.WinFrmUI.Q3d { [Serializable] public class MapOption { public float Link_multiply { get; set; } = 0.6667f; public float junction_multiply { get; set; } = 1f; public bool _ShowValve { get; set; } = true; public bool _ShowJunction { get; set; } = true; public bool _ShowStatus { get; set; } = false; public bool _ShowFlowDirection { get; set; } = false; } [Serializable] public class Colour { public string Name { get; set; } public ColourType Type { get; set; } public List Items { get; set; } public bool isNode { get { if (Type == ColourType.节点自由压力 || Type == ColourType.节点需水量) { return true; } else { return false; } } } public bool isChoosed { get; set; } = false; public float minNum = 0; public float maxNum = 50; public int ColourCount = 5; public Color color0 = Color.Red; public Color color1 = Color.Blue; public Colour(ColourType type = ColourType.节点自由压力, List value = null, string name = null) { Name = name; Type = type; Items = value; if (Items == null) Items = new List(); if (Name == null) Name = type.ToString(); } public override string ToString() { return Name; } public static List GetColourItems(float minValue, float maxValue, int ColourNum, Color color0, Color color1) { var colourItems = new List(); for (int i = 0; i < ColourNum; i++) { DRange currentRange = new DRange(minValue + i * (maxValue - minValue) / ColourNum, minValue + (i + 1) * (maxValue - minValue) / ColourNum); Color c; //获取color0和color1,Colour个等分颜色,第一个为color0,最后一个为color1,中间的为等分颜色 if (i == 0) { c = color0; } else if (i == ColourNum - 1) { c = color1; } else { c = Color.FromArgb(color0.R + (color1.R - color0.R) / (ColourNum - 1) * i, color0.G + (color1.G - color0.G) / (ColourNum - 1) * i, color0.B + (color1.B - color0.B) / (ColourNum - 1) * i); } ColourItem newFloor = new ColourItem(currentRange, c); colourItems.Add(newFloor); } return colourItems; } public static int NodeTypeCount = 3; } public class DRange { public double Min { get; set; } public double Max { get; set; } public DRange(double min, double max) { Min = min; Max = max; } public DRange() { } //实现方法Union public static DRange Union(DRange range1, DRange range2) { //实现方法Union return new DRange(Math.Min(range1.Min, range2.Min), Math.Max(range1.Max, range2.Max)); } //实现方法IsInside public bool IsInside(double value) { return value >= Min && value < Max; } } [Serializable] public class ColourItem { public DRange DRange { get; set; } = new DRange(); public Color value; public ColourItem(DRange dRange, Color value) { DRange = dRange; this.value = value; } public ColourItem() { } public ColourItem(ColourItem item) { this.DRange = item.DRange; this.value = item.value; } public override string ToString() { return DRange.ToString(); } } public enum ColourType { 无 = 0, 节点自由压力 = 1, 节点绝对压力 = 2, 节点需水量 = 3, 管线流量 = 4, 管线流速 = 5 } }