Shuxia Ning
2024-11-25 d4898c5d7e1bbbbba384a0e29f29c066d6f502a7
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/06-mark/SimulationMarkHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,154 @@
using Yw.Model;
using Yw.WinFrmUI.Bimface;
namespace HStation.WinFrmUI
{
    /// <summary>
    ///
    /// </summary>
    public class SimulationMarkHelper
    {
        /// <summary>
        ///
        /// </summary>
        public SimulationMarkHelper(SimulationVisualListHelper visualListHelper, ISimulationMarkView view)
        {
            _visualListHelper = visualListHelper;
            _views = new List<ISimulationMarkView>() { view };
        }
        private SimulationVisualListHelper _visualListHelper = null;//可见列表辅助类
        private List<ISimulationMarkView> _views = null;//视图列表
        /// <summary>
        /// å¯è§æ€§
        /// </summary>
        public bool Visible
        {
            get { return _visible; }
            set { _visible = value; }
        }
        private bool _visible = false;
        /// <summary>
        /// è®¾ç½®åˆ—表
        /// </summary>
        public List<HydroMarkSetViewModel> Sets
        {
            get
            {
                if (_sets == null)
                {
                    var hydroInfo = _visualListHelper.HydroInfo;
                    _sets = HydroMarkHelper.GetSetList(hydroInfo);
                    if (_sets == null)
                    {
                        _sets = new List<HydroMarkSetViewModel>();
                    }
                }
                return _sets;
            }
            set
            {
                _results = null;
                _sets = value;
                if (_sets == null)
                {
                    _sets = new List<HydroMarkSetViewModel>();
                }
            }
        }
        private List<HydroMarkSetViewModel> _sets = null;
        /// <summary>
        /// ç»“果列表
        /// </summary>
        public List<HydroMarkResultViewModel> Results
        {
            get
            {
                if (_results == null)
                {
                    _results = HydroMarkHelper.GetResultList(_visualListHelper.HydroInfo, this.Sets);
                    if (_results == null)
                    {
                        _results = new List<HydroMarkResultViewModel>();
                    }
                }
                return _results;
            }
            set
            {
                _results = value;
                if (_results == null)
                {
                    _results = new List<HydroMarkResultViewModel>();
                }
            }
        }
        private List<HydroMarkResultViewModel> _results = null;
        /// <summary>
        /// åˆå§‹åŒ–数据
        /// </summary>
        public void InitialData()
        {
            _sets = null;
            _results = null;
        }
        /// <summary>
        /// è®¾ç½®
        /// </summary>
        public void Set()
        {
            if (this.Visible)
            {
                var leadLabels = this.Results?.Select(x => new LogicMarkLeadLabel(x.Code, x.Text, null)).ToList();
                _views?.ForEach(x => x.SetLogicMarkLeadLabels(leadLabels));
            }
            else
            {
                _views?.ForEach(x => x.ClearLogicMarkLeadLabels());
            }
        }
        /// <summary>
        /// è®¾ç½®
        /// </summary>
        public void Set(HydroVisualInfo visual)
        {
            if (visual == null)
            {
                return;
            }
            var result = HydroMarkHelper.GetResult(visual, this.Sets);
            if (result == null)
            {
                return;
            }
            this.Results.RemoveAll(x => x.Code == visual.Code);
            this.Results.Add(result);
            if (this.Visible)
            {
                var leadLabel = new LogicMarkLeadLabel() { Id = result.Code, Text = result.Text, Distance = null };
                _views?.ForEach(x => x.UpdateLogicMarkLeadLabel(leadLabel));
            }
        }
        /// <summary>
        /// è®¾ç½®
        /// </summary>
        public void Set(List<HydroVisualInfo> visuals)
        {
            if (visuals == null || visuals.Count < 1)
            {
                return;
            }
            visuals.ForEach(x => Set(x));
        }
    }
}