lixiaojun
6 天以前 1f9175051e468da4007fcdf6e882d24002166be7
修改编辑功能,增加编辑改变事件
已修改12个文件
395 ■■■■ 文件已修改
Yw.WinFrmUI.Hydro.L3d2.Core/EditerL3d2.Designer.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d2.Core/EditerL3d2.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d2.Core/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d2.Core/Yw.WinFrmUI.Hydro.L3d2.Core.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WpfUI.Hydro.L3d.Core/03-draw/00-core/01-initial/DrawInitialHelper.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WpfUI.Hydro.L3d.Core/03-draw/00-core/07-selection/DrawSelectionHelper.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WpfUI.Hydro.L3d.Core/03-draw/00-core/14-edit/DrawEditHelper.cs 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WpfUI.Hydro.L3d.Core/03-draw/00-core/14-edit/EditDraw3D.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WpfUI.Hydro.L3d.Core/03-draw/02-manager/DrawEditManager.cs 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WpfUI.Hydro.L3d.Core/03-draw/03-control/EditerL3d.xaml.cs 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WpfUI.Hydro.L3d.Core/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WpfUI.Hydro.L3d.Core/Yw.WpfUI.Hydro.L3d.Core.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d2.Core/EditerL3d2.Designer.cs
@@ -17,6 +17,7 @@
            {
                components.Dispose();
            }
            Close();
            base.Dispose(disposing);
        }
Yw.WinFrmUI.Hydro.L3d2.Core/EditerL3d2.cs
@@ -8,6 +8,7 @@
        public EditerL3d2()
        {
            InitializeComponent();
        }
        #region 事件集合
@@ -15,7 +16,12 @@
        /// <summary>
        /// 选择改变事件
        /// </summary>
        public event Action<List<Yw.WpfUI.Hydro.VisualL3d>> SelectionChangedEvent;
        public event Action<List<VisualL3d>> SelectionChangedEvent;
        /// <summary>
        /// 编辑改变事件
        /// </summary>
        public event Action<List<VisualL3d>> EditChangedEvent;
        #endregion
@@ -40,7 +46,8 @@
        private void InitialWpfControl()
        {
            _wpfViewer = new WpfUI.Hydro.EditerL3d();
            _wpfViewer.SelectionChangedEvent += (visuals) => this.SelectionChangedEvent?.Invoke(visuals);
            _wpfViewer.SelectionChangedEvent += OnSelectionChanged;
            _wpfViewer.EditChangedEvent += OnEditChanged;
            var elementHost = new ElementHost();
            elementHost.Dock = DockStyle.Fill;
            elementHost.Child = _wpfViewer;
@@ -274,6 +281,12 @@
        public void SelectVisual(List<string> Ids)
        {
            _wpfViewer?.SelectVisual(Ids);
        }
        //处理选择改变
        protected virtual void OnSelectionChanged(List<VisualL3d> visuals)
        {
            this.SelectionChangedEvent?.Invoke(visuals);
        }
        #endregion
@@ -617,8 +630,27 @@
            _wpfViewer?.EndEdit();
        }
        //处理编辑改变
        protected virtual void OnEditChanged(List<VisualL3d> visuals)
        {
            if (visuals == null || visuals.Count < 1)
            {
                return;
            }
            this.EditChangedEvent?.Invoke(visuals);
        }
        #endregion
        //关闭
        protected virtual void Close()
        {
            if (_wpfViewer != null)
            {
                _wpfViewer.EditChangedEvent -= OnEditChanged;
                _wpfViewer.SelectionChangedEvent -= OnSelectionChanged;
            }
        }
    }
}
Yw.WinFrmUI.Hydro.L3d2.Core/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -2,7 +2,7 @@
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project>
  <PropertyGroup>
    <History>True|2025-05-06T06:03:10.9343885Z||;True|2025-05-06T12:25:07.7448966+08:00||;True|2025-05-06T12:20:11.7083540+08:00||;True|2025-05-06T12:20:05.9513514+08:00||;True|2025-05-06T10:51:28.7337521+08:00||;True|2025-05-06T10:51:06.6456811+08:00||;True|2025-05-06T10:50:58.8911173+08:00||;True|2025-05-06T10:34:44.8136252+08:00||;True|2025-05-06T10:34:27.7212544+08:00||;True|2025-05-06T10:16:30.5074881+08:00||;True|2025-05-06T09:07:27.2170966+08:00||;True|2025-04-22T15:50:06.4794535+08:00||;True|2025-04-03T15:07:50.7868897+08:00||;True|2025-04-03T14:53:27.6125391+08:00||;True|2025-04-03T14:09:06.0738035+08:00||;</History>
    <History>True|2025-05-06T08:07:50.2792890Z||;True|2025-05-06T16:07:36.7788692+08:00||;True|2025-05-06T14:03:10.9343885+08:00||;True|2025-05-06T12:25:07.7448966+08:00||;True|2025-05-06T12:20:11.7083540+08:00||;True|2025-05-06T12:20:05.9513514+08:00||;True|2025-05-06T10:51:28.7337521+08:00||;True|2025-05-06T10:51:06.6456811+08:00||;True|2025-05-06T10:50:58.8911173+08:00||;True|2025-05-06T10:34:44.8136252+08:00||;True|2025-05-06T10:34:27.7212544+08:00||;True|2025-05-06T10:16:30.5074881+08:00||;True|2025-05-06T09:07:27.2170966+08:00||;True|2025-04-22T15:50:06.4794535+08:00||;True|2025-04-03T15:07:50.7868897+08:00||;True|2025-04-03T14:53:27.6125391+08:00||;True|2025-04-03T14:09:06.0738035+08:00||;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
Yw.WinFrmUI.Hydro.L3d2.Core/Yw.WinFrmUI.Hydro.L3d2.Core.csproj
@@ -8,11 +8,11 @@
    <OutputType>Library</OutputType>
    <UseWPF>True</UseWPF>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
    <Version>1.1.1</Version>
    <Version>1.1.2</Version>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Yw.WpfUI.Hydro.L3d.Core" Version="1.1.1" />
    <PackageReference Include="Yw.WpfUI.Hydro.L3d.Core" Version="1.1.2" />
  </ItemGroup>
  <ItemGroup>
Yw.WpfUI.Hydro.L3d.Core/03-draw/00-core/01-initial/DrawInitialHelper.cs
@@ -142,6 +142,18 @@
        }
        /// <summary>
        /// 获取Node3D
        /// </summary>
        public List<NodeDraw3D> GetNode3D()
        {
            if (!Initialized)
            {
                return default;
            }
            return _allVisual3dDict.Values.Where(x => x is NodeDraw3D).Select(x => x as NodeDraw3D).ToList();
        }
        /// <summary>
        /// 获取Link3D
        /// </summary>
        public List<LinkDraw3D> GetLink3D()
@@ -154,6 +166,65 @@
        }
        /// <summary>
        /// 获取连接的Link3D
        /// </summary>
        public List<LinkDraw3D> GetConnectLink3D(NodeDraw3D node3d)
        {
            if (!Initialized)
            {
                return default;
            }
            var node = node3d.Visual;
            var link3ds = GetLink3D();
            return link3ds.Where(x => x.Visual.StartNode == node || x.Visual.EndNode == node).ToList();
        }
        /// <summary>
        /// 获取连接的Node3D
        /// </summary>
        public List<NodeDraw3D> GetConnectNode3D(LinkDraw3D link3d)
        {
            if (!Initialized)
            {
                return default;
            }
            var node3ds = GetNode3D();
            return node3ds.Where(x => x.Visual == link3d.Visual.StartNode || x.Visual == link3d.Visual.EndNode).ToList();
        }
        /// <summary>
        /// 获取连接的Visual3D
        /// </summary>
        public List<VisualDraw3D> GetConnect3D(VisualDraw3D visual3d)
        {
            if (!Initialized)
            {
                return default;
            }
            var list = new List<VisualDraw3D>();
            if (visual3d is NodeDraw3D node3d)
            {
                var link3ds = GetConnectLink3D(node3d);
                link3ds?.ForEach(x => list.Add(x));
                return list;
            }
            if (visual3d is LinkDraw3D link3d)
            {
                var node3ds = GetConnectNode3D(link3d);
                if (node3ds != null && node3ds.Count > 0)
                {
                    foreach (var item in node3ds)
                    {
                        list.Add(item);
                        var link3ds = GetConnectLink3D(item);
                        link3ds?.ForEach(x => list.Add(x));
                    }
                }
            }
            return list;
        }
        /// <summary>
        /// 添加Visual3D
        /// </summary>
        public bool AddVisual3D(VisualDraw3D visual3d)
Yw.WpfUI.Hydro.L3d.Core/03-draw/00-core/07-selection/DrawSelectionHelper.cs
@@ -88,8 +88,11 @@
        //处理鼠标弹起
        private void OnMouseUp(object sender, MouseButtonEventArgs e)
        {
            var pt = e.GetPosition(_viewport);
            Handle(pt);
            if (e.ChangedButton == MouseButton.Left)
            {
                var pt = e.GetPosition(_viewport);
                Handle(pt);
            }
        }
Yw.WpfUI.Hydro.L3d.Core/03-draw/00-core/14-edit/DrawEditHelper.cs
@@ -18,7 +18,17 @@
            _viewport = viewport;
            _initialHelper = initialHelper;
            _selectionHelper = selectionHelper;
            Attach();
        }
        #region 事件集合
        /// <summary>
        /// 编辑改变事件
        /// </summary>
        public event Action<List<VisualDraw3D>> EditChangedEvent;
        #endregion
        private readonly HelixViewport3D _viewport = null;//三维组件
        private readonly DrawInitialHelper _initialHelper = null;//初始化辅助类
@@ -26,27 +36,81 @@
        private EditDraw3D _editer = null;//编辑器
        /// <summary>
        /// 是否初始化
        /// </summary>
        public bool Initialized
        {
            get { return _initialized; }
            private set { _initialized = value; }
        }
        private bool _initialized = false;
        //初始化
        private void Initialize()
        {
            if (!_initialHelper.Initialized)
            {
                return;
            }
            _initialized = true;
        }
        //处理初始化完成
        private void OnInitialCompleted()
        {
            Initialize();
        }
        /// <summary>
        /// 开始
        /// </summary>
        public void Start()
        {
            Cancel();
            _editer = new EditDraw3D(_viewport, _selectionHelper);
            if (!Initialized)
            {
                return;
            }
            End();
            _editer = new EditDraw3D(_viewport, _initialHelper, _selectionHelper);
            _editer.EditChangedEvent += OnEditChanged;
            _editer.Initial(_selectionHelper.Selection);
            _viewport.Children.Add(_editer);
        }
        /// <summary>
        /// 取消
        /// 结束
        /// </summary>
        public void Cancel()
        public void End()
        {
            if (!Initialized)
            {
                return;
            }
            if (_editer != null)
            {
                _editer.EditChangedEvent -= OnEditChanged;
                _editer.Dispose();
                _viewport.Children.Remove(_editer);
                _editer = null;
            }
        }
        //处理编辑改变
        private void OnEditChanged(List<VisualDraw3D> list)
        {
            this.EditChangedEvent?.Invoke(list);
        }
        //附加
        private void Attach()
        {
            _initialHelper.InitialCompletedEvent += OnInitialCompleted;
        }
        //分离
        private void Detach()
        {
            _initialHelper.InitialCompletedEvent -= OnInitialCompleted;
        }
        /// <summary>
@@ -54,8 +118,10 @@
        /// </summary>
        public void Dispose()
        {
            Detach();
        }
    }
}
Yw.WpfUI.Hydro.L3d.Core/03-draw/00-core/14-edit/EditDraw3D.cs
@@ -8,18 +8,41 @@
        /// <summary>
        /// 
        /// </summary>
        public EditDraw3D(HelixViewport3D viewport, DrawSelectionHelper selectionHelper)
        public EditDraw3D
            (
                HelixViewport3D viewport,
                DrawInitialHelper initialHelper,
                DrawSelectionHelper selectionHelper
            )
        {
            _viewport = viewport;
            _initialHelper = initialHelper;
            _selectionHelper = selectionHelper;
            Attach();
        }
        #region 固定资源
        private const double ArrowLength = 5;//箭头长度
        private const double ArrowDiameter = 0.2;//箭头直径
        private const double ArrowHeadLength = 3;//箭头头部长度
        private const double ArrowHeadLength = 3;//箭头头部长度
        #endregion
        #region 事件集合
        /// <summary>
        /// 编辑改变事件
        /// </summary>
        public event Action<List<VisualDraw3D>> EditChangedEvent;
        #endregion
        private readonly HelixViewport3D _viewport = null; //三维组件
        private readonly DrawInitialHelper _initialHelper = null; //初始化辅助类
        private readonly DrawSelectionHelper _selectionHelper = null;//选择辅助类
        private ArrowVisual3D _xarrow = null; //X轴箭头
        private ArrowVisual3D _yarrow = null;//y轴箭头
        private ArrowVisual3D _zarrow = null;//z轴箭头
@@ -153,6 +176,12 @@
            {
                x.Offset(offset);
                x.UpdateVisual3D();
                var visual3ds = _initialHelper.GetConnect3D(x);
                visual3ds?.ForEach(x =>
                {
                    x.UpdatePositions();
                    x.UpdateVisual3D();
                });
            });
            _xarrow.Point1 += offset;
@@ -172,9 +201,37 @@
                _currentArrow = null;
                _viewport.Cursor = Cursors.Arrow;
                _selectionHelper.Enabled = _lastSelectionEnabled;
                OnEditChanged();
            }
        }
        //处理编辑改变
        private void OnEditChanged()
        {
            var selection = _selectionHelper.Selection;
            if (selection == null || selection.Count < 1)
            {
                return;
            }
            var list = new List<VisualDraw3D>();
            selection.ForEach(x =>
            {
                if (!list.Contains(x))
                {
                    list.Add(x);
                    var visual3ds = _initialHelper.GetConnect3D(x);
                    visual3ds?.ForEach(y =>
                    {
                        if (!list.Contains(y))
                        {
                            list.Add(y);
                        }
                    });
                }
            });
            this.EditChangedEvent?.Invoke(list);
        }
        //附加
        private void Attach()
        {
Yw.WpfUI.Hydro.L3d.Core/03-draw/02-manager/DrawEditManager.cs
@@ -12,11 +12,21 @@
        {
            _addHelper = new DrawAddHelper(viewport, _initialHelper);
            _editHelper = new DrawEditHelper(viewport, _initialHelper, _selectionHelper);
            _editHelper.EditChangedEvent += OnEditChanged;
        }
        #region 事件集合
        /// <summary>
        /// 编辑改变事件
        /// </summary>
        public event Action<List<VisualL3d>> EditChangedEvent;
        #endregion
        protected readonly DrawAddHelper _addHelper = null;//添加辅助类
        protected readonly DrawEditHelper _editHelper = null;//编辑辅助类
        #region 添加方法
@@ -62,92 +72,31 @@
        /// </summary>
        public void EndEdit()
        {
            _editHelper.Cancel();
            _editHelper.End();
        }
        //处理编辑改变
        protected virtual void OnEditChanged(List<VisualDraw3D> visual3ds)
        {
            if (visual3ds == null || visual3ds.Count < 1)
            {
                return;
            }
            var visuals = visual3ds.Select(x => x.Visual).ToList();
            this.EditChangedEvent?.Invoke(visuals);
        }
        #endregion
        #region 构件方法
        //创建抽象可见元素
        private VisualDraw3D CreateLogicalVisual(VisualL3d visual)
        /// <summary>
        /// 关闭
        /// </summary>
        public override void Close()
        {
            return default;
            //var logicalVisual = DrawCreateHelper.Create(visual, _stateHelper, _materialHelper, _overrideColorHelper, _overrideOpacityHelper, _overrideVisibleHelper);
            //return logicalVisual;
            _editHelper.EditChangedEvent -= OnEditChanged;
            _editHelper.Dispose();
            base.Close();
        }
        //添加抽象可见元素
        private void AddLogicalVisual(VisualDraw3D logicalVisual)
        {
            if (!Initialized)
            {
                return;
            }
            //if (logicalVisual == null)
            //{
            //    return;
            //}
            //if (logicalVisual.Vmo == null)
            //{
            //    return;
            //}
            //var visual = logicalVisual.Vmo;
            //if (!_nw.IsExist(visual))
            //{
            //    _nw.Append(visual, out _);
            //}
            //if (!_allVisualL3dDict.ContainsKey(visual.Id))
            //{
            //    _allVisualL3dDict.Add(visual.Id, visual);
            //}
            //if (!_allVisualLogicalDict.ContainsKey(visual))
            //{
            //    _allVisualLogicalDict.Add(visual, logicalVisual);
            //}
            //if (!_viewport.Children.Contains(logicalVisual))
            //{
            //    _viewport.Children.Add(logicalVisual);
            //}
        }
        //移除抽象可见元素
        private void RemoveLogicalVisual(VisualDraw3D logicalVisual)
        {
            if (!Initialized)
            {
                return;
            }
            //if (logicalVisual == null)
            //{
            //    return;
            //}
            //if (logicalVisual.Vmo == null)
            //{
            //    return;
            //}
            //var visual = logicalVisual.Vmo;
            //if (_nw.IsExist(visual))
            //{
            //    _nw.Remove(visual);
            //}
            //if (_allVisualL3dDict.ContainsKey(visual.Id))
            //{
            //    _allVisualL3dDict.Remove(visual.Id);
            //}
            //if (_allVisualLogicalDict.ContainsKey(visual))
            //{
            //    _allVisualLogicalDict.Remove(visual);
            //}
            //if (_viewport.Children.Contains(logicalVisual))
            //{
            //    _viewport.Children.Remove(logicalVisual);
            //}
        }
        #endregion
Yw.WpfUI.Hydro.L3d.Core/03-draw/03-control/EditerL3d.xaml.cs
@@ -20,6 +20,11 @@
        /// </summary>
        public event Action<List<VisualL3d>> SelectionChangedEvent;
        /// <summary>
        /// 编辑改变事件
        /// </summary>
        public event Action<List<VisualL3d>> EditChangedEvent;
        #endregion
        #region 私有字段
@@ -38,7 +43,8 @@
        {
            _manager = new DrawEditManager(this.viewport);
            _manager.Initial(nw);
            _manager.SelectionChangedEvent += (List<VisualL3d> visuals) => this.SelectionChangedEvent?.Invoke(visuals);
            _manager.SelectionChangedEvent += (visuals) => this.SelectionChangedEvent?.Invoke(visuals);
            _manager.EditChangedEvent += OnEditChanged;
        }
@@ -631,6 +637,12 @@
            _manager?.EndEdit();
        }
        //处理编辑改变
        private void OnEditChanged(List<VisualL3d> visuals)
        {
            this.EditChangedEvent?.Invoke(visuals);
        }
        #endregion
        /// <summary>
@@ -638,8 +650,12 @@
        /// </summary>
        private void OnUnloaded(object sender, RoutedEventArgs e)
        {
            _manager?.Close();
            _manager = null;
            if (_manager != null)
            {
                _manager.EditChangedEvent -= OnEditChanged;
                _manager?.Close();
                _manager = null;
            }
        }
    }
Yw.WpfUI.Hydro.L3d.Core/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -2,7 +2,7 @@
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project>
  <PropertyGroup>
    <History>True|2025-05-06T05:56:55.7963451Z||;False|2025-05-06T13:56:30.4192182+08:00||;True|2025-05-06T12:24:06.1275328+08:00||;True|2025-05-06T12:17:30.5477075+08:00||;True|2025-05-06T12:09:02.1715202+08:00||;True|2025-05-06T10:48:14.2754277+08:00||;True|2025-05-06T10:31:56.4341238+08:00||;True|2025-05-06T10:11:06.0348707+08:00||;True|2025-05-06T10:11:00.3082825+08:00||;False|2025-05-06T10:10:39.1136970+08:00||;True|2025-05-06T09:05:16.4695917+08:00||;True|2025-04-22T15:43:19.8599243+08:00||;True|2025-04-03T14:51:22.5389895+08:00||;True|2025-04-03T13:39:16.2049845+08:00||;</History>
    <History>True|2025-05-06T07:58:43.9672087Z||;True|2025-05-06T13:56:55.7963451+08:00||;False|2025-05-06T13:56:30.4192182+08:00||;True|2025-05-06T12:24:06.1275328+08:00||;True|2025-05-06T12:17:30.5477075+08:00||;True|2025-05-06T12:09:02.1715202+08:00||;True|2025-05-06T10:48:14.2754277+08:00||;True|2025-05-06T10:31:56.4341238+08:00||;True|2025-05-06T10:11:06.0348707+08:00||;True|2025-05-06T10:11:00.3082825+08:00||;False|2025-05-06T10:10:39.1136970+08:00||;True|2025-05-06T09:05:16.4695917+08:00||;True|2025-04-22T15:43:19.8599243+08:00||;True|2025-04-03T14:51:22.5389895+08:00||;True|2025-04-03T13:39:16.2049845+08:00||;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
Yw.WpfUI.Hydro.L3d.Core/Yw.WpfUI.Hydro.L3d.Core.csproj
@@ -7,7 +7,7 @@
        <UseWPF>true</UseWPF>
        <ImplicitUsings>enable</ImplicitUsings>
        <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
        <Version>1.1.1</Version>
        <Version>1.1.2</Version>
    </PropertyGroup>
    <ItemGroup>