Browse Source

xls:电气备用节点标志位

xulisong 6 years ago
parent
commit
47b163939a

+ 49 - 54
MBI/SAGA.GplotDrawData/DBView/EquipmentGraphView.cs

@@ -18,76 +18,71 @@ namespace SAGA.GplotDrawData
     {
         public override GraphDB AppendDb(DataNode dn, GraphDB db)
         {
-            #region 数据解析
-            //var inData = dn.Childrens;
-            //var muData = dn.Childrens.Where(t => t.Type == "母联柜").ToList();
-            //var n = inData.Count;
-            ////数字没什么意义
-            //var perHeight = 1500 / (n + 2d);
-            //var left = 100;
-            //for (int i = 1; i < n + 1; i++)
-            //{
-            //    var node = inData[i - 1];
-            //    //判断是否连接母联柜
-            //    var regex = new Regex($"{node.Sno},|,{node.Sno}");
-            //    var mu = muData.FirstOrDefault(d => regex.IsMatch(d.InLineNo));
-            //    node.Postition = new Point(left, perHeight * i);
-            //    //画当前点            
-            //    db.Elements.Add(CreateVertex(dn));
-            //    if (i == n) break;
-            //    if (mu != null)
-            //    {
-            //        mu.Postition = new Point(left, perHeight * i + perHeight / 2.0d);
-            //        //画母联柜
-            //        db.Elements.Add(CreateVertex(mu));
-            //        //画母联柜上下连线
-            //        var line1 = new GLine(node.Postition.ConvertToPoint3D(), mu.Postition.ConvertToPoint3D()) { ElementColor = Colors.Red };
-            //        var line2 = new GLine(mu.Postition.ConvertToPoint3D(), (new Point(left, perHeight * (i + 1))).ConvertToPoint3D()) { ElementColor = Colors.Red };
-            //        db.Elements.Add(line1);
-            //        db.Elements.Add(line2);
-            //        //移除母联柜
-            //        muData.Remove(mu);
-            //    }
-            //    else
-            //    {
-            //        var line1 = new GLine(node.Postition.ConvertToPoint3D(), (new Point(left, perHeight * (i + 1))).ConvertToPoint3D()) { ElementColor = Colors.Red };
-            //        db.Elements.Add(line1);
-            //    }
-            //} 
-            #endregion
 
             //var gNode = CreateTreeNode(dn);
             //db.Elements.Add(gNode);
             var settings = new JsonSerializerSettings();
+            var useData = CreateShowNode(dn);
             settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
             var serializer = JsonSerializer.Create(settings);
-            var jObject = JObject.FromObject(dn, serializer);
+            var jObject = JObject.FromObject(useData, serializer);
             db.RefJObjects.Add(jObject);
             return db;
         }
-
-        private GVertex CreateVertex(DataNode dn)
+        public DataShowNode CreateShowNode(DataNode dn)
         {
-            GVertex vertex = new GVertex();
-            vertex.Location = dn.Postition.ConvertToPoint3D();
-            vertex.ElementColor = Colors.Red;
-            vertex.IsSolid = true;
-            vertex.Radius = 5;
-            vertex.Name = dn.EName + "-" + dn.Type;
-            return vertex;
+            DataShowNode node = CreateSingleShowNode(dn);
+            foreach (var data in dn.Childrens)
+            {
+                if (!string.IsNullOrWhiteSpace(data.InLineNo1) && data.InLineNo1 == dn.Sno)
+                {
+                    var standyNode= CreateSingleShowNode(data);
+                    standyNode.IsStandby = true;
+                    node.Childrens.Add(standyNode);
+                }
+                else
+                {
+                    node.Childrens.Add(CreateShowNode(data));
+                }             
+            }
+            return node;
+        }
 
+        private DataShowNode CreateSingleShowNode(DataNode dn)
+        {
+            DataShowNode node = new DataShowNode();
+            node.EId = dn.EId;
+            node.EName = dn.EName;
+            node.Type = dn.Type;
+            return node;
         }
 
-        public GTreeNode CreateTreeNode(DataNode dn)
+        /// <summary>
+        /// 拓扑图绘图数据格式
+        /// </summary>
+        public class DataShowNode
         {
-            GTreeNode node = new GTreeNode();
-            node.NodeId = dn.EId;
-            node.Name = dn.EName;
-            foreach (var data in dn.Childrens)
+            public DataShowNode()
             {
-                node.Children.Add(CreateTreeNode(data));
+                this.Childrens = new List<DataShowNode>();
             }
-            return node;
+
+            public string EId { get; set; }
+            public string EName { get; set; }
+
+            /// <summary>
+            /// 子元素
+            /// </summary>
+            /// 历史原因,命名有错误
+            public List<DataShowNode> Childrens { get; set; }
+            /// <summary>
+            /// 设备类型
+            /// </summary>
+            public string Type { get; set; }
+            /// <summary>
+            /// 与父级连接关系是否备用
+            /// </summary>
+            public bool IsStandby { get; set; }
         }
     }
 }

+ 2 - 0
MBI/SAGA.GplotDrawData/WinControlRelation-Web.xaml.cs

@@ -170,6 +170,8 @@ namespace SAGA.GplotDrawData
                             var data = InDataNodes.FirstOrDefault(d => d.EId == currNode.EId);
                             if (data != null)
                             {
+                                //该节点需要重新处理如果是通过备用标志关联,则不构建其下级关联信息;
+                                //链表信息不合适会造成操作上的不方便
                                 Draw(data);
                                 RevitModelFileUpload.ShowSpaceProperty(data.EId);
                             }

+ 5 - 2
MBI/SAGA.GplotRelationComputerManage/PowerDistribution/Common/DataNodeUtil.cs

@@ -37,13 +37,16 @@ namespace SAGA.GplotRelationComputerManage
             List<DataNode> standbyNodes = new List<DataNode>();
             foreach (var sourceNode in sourceNodes)
             {
+                if (sourceNode.Sno == baseNo)
+                {
+                    continue;
+                }
                 if (sourceNode.InLineNo == baseNo)
                 {
                     sourceNode.Parent = node;
                     mainNodes.Add(sourceNode);
                 }
-
-                if (sourceNode.InLineNo1 == baseNo)
+                else if(sourceNode.InLineNo1 == baseNo)
                 {
                     sourceNode.Parent = node;
                     standbyNodes.Add(sourceNode);

+ 5 - 0
MBI/SAGA.MBI/Common/WaitingView.cs

@@ -43,6 +43,11 @@ namespace SAGA.MBI.Common
                     WindowInteropHelper helper = new WindowInteropHelper(m_Win);
                     helper.Owner = WindowHelper.HWndRevit.Handle;
                     WindowHelper.SetWindowForeground(helper.EnsureHandle());
+                    m_Win.Closed += (d, k) =>
+                    {
+                        // 当窗口关闭后马上结束消息循环
+                      Dispatcher.ExitAllFrames();
+                    };
                 }
 
                 SetMessage("正在执行,请稍等...");

+ 76 - 9
MBI/SAGA.MBI/WinView/Space/WinCreateSpaceWeb.xaml

@@ -6,19 +6,86 @@
              xmlns:local="clr-namespace:SAGA.MBI.WinView.Space"
              xmlns:windows="clr-namespace:SAGA.RevitUtils.Windows;assembly=SAGA.RevitUtils"
              xmlns:cefSharpWpf="clr-namespace:CEFSharpWPF;assembly=CEFSharpWPF"
-                 Title="空间管理"
-             mc:Ignorable="d" 
-             d:DesignHeight="450" d:DesignWidth="800">
+             xmlns:converter="clr-namespace:SAGA.DotNetUtils.WPF.Converter;assembly=SAGA.DotNetUtils"
+             Title="空间管理" mc:Ignorable="d" Height="950" Width="1525">
+    <Window.Resources>
+        <Style TargetType="Button">
+            <Setter Property="Height" Value="30"/>
+            <Setter Property="Width" Value="100"/>
+            <Setter Property="Margin" Value="10"></Setter>
+        </Style>
+        <converter:StringToImageConverter  x:Key="StringToImageConverter"/>
+    </Window.Resources>
     <Grid>
         <Grid.RowDefinitions>
-            <RowDefinition></RowDefinition>
-            <RowDefinition Height="Auto"></RowDefinition>
-              <RowDefinition Height="Auto"></RowDefinition>
-               <RowDefinition Height="Auto"></RowDefinition>
+            <RowDefinition Height="50"/>
+            <RowDefinition Height="*"/>
+            <RowDefinition Height="50"/>
         </Grid.RowDefinitions>
-        <cefSharpWpf:UcGplotShow Grid.Row="0" Grid.Column="0" x:Name="ucShowElement"></cefSharpWpf:UcGplotShow>
-            <TextBox Name="Js" Grid.Row="1"></TextBox>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="200"/>
+            <ColumnDefinition Width="*"/>
+            <ColumnDefinition Width="200"/>
+        </Grid.ColumnDefinitions>
+
+        <TreeView Grid.Row="0" Grid.Column="0" Grid.RowSpan="3"  Name="tv"  Margin="10,10"  SelectedItemChanged="Tv_OnSelectedItemChanged">
+            <TreeView.ItemTemplate >
+                <HierarchicalDataTemplate ItemsSource="{Binding Path=Children,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" >
+                    <RadioButton IsChecked="{Binding Path=IsSelected}">
+                        <RadioButton.Style>
+                            <Style TargetType="RadioButton">
+                                <Setter Property="Template">
+                                    <Setter.Value>
+                                        <ControlTemplate TargetType="RadioButton">
+                                            <Border x:Name="myBorder" >
+                                                <StackPanel Orientation="Horizontal" >
+                                                    <Image Source="{Binding Path=ImageStr,Converter={StaticResource StringToImageConverter}}"></Image>
+                                                    <TextBlock x:Name="myText" VerticalAlignment="Bottom" Text="{Binding Path=Item.TvItemName,UpdateSourceTrigger=PropertyChanged}" ></TextBlock>
+                                                </StackPanel>
+                                            </Border>
+                                            <ControlTemplate.Triggers>
+                                                <Trigger Property="IsChecked" Value="True">
+                                                    <Setter TargetName="myBorder" Property="Background" Value="Blue"></Setter>
+                                                    <Setter TargetName="myText" Property="Foreground" Value="White"></Setter>
+                                                </Trigger>
+                                                <Trigger Property="IsChecked" Value="False">
+                                                    <Setter TargetName="myBorder" Property="Background" Value="White"></Setter>
+                                                    <Setter TargetName="myText" Property="Foreground" Value="Black"></Setter>
+                                                </Trigger>
+                                            </ControlTemplate.Triggers>
+                                        </ControlTemplate>
+                                    </Setter.Value>
+                                </Setter>
+                            </Style>
+                        </RadioButton.Style>
+                    </RadioButton>
+
+
+                </HierarchicalDataTemplate>
+            </TreeView.ItemTemplate>
+            <TreeView.ItemContainerStyle>
+                <Style TargetType="{x:Type TreeViewItem}">
+                    <Setter Property="IsExpanded" Value="True" />
+                    <Setter Property="IsSelected" Value="{Binding Path=IsSelected}"></Setter>
+                    <!--<EventSetter Event="TreeViewItem.LostFocus" Handler="TreeViewItem_LostFocus"></EventSetter>-->
+                </Style>
+            </TreeView.ItemContainerStyle>
+        </TreeView>
+
+        <cefSharpWpf:UcGplotShow Grid.Row="0" Grid.Column="1" Grid.RowSpan="3" x:Name="ucShowElement"></cefSharpWpf:UcGplotShow>
+
+
+
+        <ListBox Name="lbSpaces" Grid.Row="0"  Grid.Column="2" Grid.RowSpan="3" SelectionChanged="lbSpaces_SelectionChanged" SelectionMode="Single">
+            <ListBox.ItemTemplate>
+                <DataTemplate>
+                    <TextBlock Text="{Binding }"></TextBlock>
+                </DataTemplate>
+            </ListBox.ItemTemplate>
+        </ListBox>
+        <TextBox Name="Js" Grid.Row="1"></TextBox>
         <Button Content="调用" Grid.Row="2" Click="Button_Click"></Button>
          <Button Content="刷新" Grid.Row="3" Click="Button_Click_1" ></Button>
     </Grid>
+
 </windows:WinBase>

+ 234 - 6
MBI/SAGA.MBI/WinView/Space/WinCreateSpaceWeb.xaml.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -12,6 +13,11 @@ using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;
+using Autodesk.Revit.UI;
+using SAGA.MBI.DataArrange;
+using SAGA.MBI.Model;
+using SAGA.MBI.WinView.ModeInfoMaintenance;
+using SAGA.RevitUtils;
 using SAGA.RevitUtils.Windows;
 
 namespace SAGA.MBI.WinView.Space
@@ -25,14 +31,224 @@ namespace SAGA.MBI.WinView.Space
         {
             InitializeComponent();
              ucShowElement.RegisterJsObject("wpfEvent", this);
-            this.Loaded += WinCreateSpaceWeb_Loaded;
-         
-           
+            this.Loaded += WinCreateSpaceWeb_Loaded;                  
         }
-
         private void WinCreateSpaceWeb_Loaded(object sender, RoutedEventArgs e)
         {
-               ucShowElement.Show(" http://192.168.20.86:8091/#/demo");
+            InitData();
+            ucShowElement.Show(" http://192.168.20.86:8091/#/demo");
+        }
+
+        private void InitData()
+        {
+            tv.ItemsSource = new ObservableCollection<TreeNodeItem>(DalModeFileManange.GetMissFileFloors(false));
+        }
+
+        #region 条目切换事件
+      
+        private void Tv_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
+        {
+            //检测是否有未保存的数据,数据分两部分:新建的空间分隔符,删除的空间分隔符
+            //删除空间分割的id和新建空间分割的线
+             var editData = GetEditData();
+            List<int> deletedIds = editData.DeletedIds;
+           var  newDatas = editData.NewDatas;
+            #region 切换前节点处理
+            if (deletedIds.Count > 0 || newDatas.Any())
+            {
+                WinConfirm confirm = CreateSaveConfirm();
+                var result = confirm.ShowDialog();
+                if (result == true)
+                {
+                    SaveFloor(editData);
+                    return;
+                }
+            }
+            #endregion
+            if (tv.SelectedItem is TreeNodeItem item && item.Item is MFloor floor)
+            {
+                InitFloor(floor);
+            }
+        }
+
+        /// <summary>
+        /// 切换空间,亮显空间
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+
+        private void lbSpaces_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            if (lbSpaces.SelectedItems.Count == 0) return;
+            var space = lbSpaces.SelectedItems[0] as MSpace;
+            var bimId = space.BimID.Split(':')[1];
+            //发送js填充命令
+            var strJs = $"getData('{bimId.ToString()}')";
+            ucShowElement.ExecuteJsFun(strJs);
+            //显示空间属性窗格
+            //todo
+        }
+        #endregion
+
+
+        #region 确认窗口初始化
+        /// <summary>
+        /// 创建保存确认提示框
+        /// </summary>
+        /// <returns></returns>
+        private WinConfirm CreateSaveConfirm()
+        {
+            WinConfirm confirm = new WinConfirm()
+            {
+                ShowMessage = "尚未保存空间变化,确认放弃修改?",
+                TTitle = "空间修改确认",
+                BtnSure = "保存并更改模型",
+                BtnCancel = "放弃修改",
+                Owner = this
+
+            };
+            return confirm;
+        }
+        /// <summary>
+        /// 获取上传确认窗口
+        /// </summary>
+        /// <returns></returns>
+        private Window CreateUploadConfirm()
+        {
+            WinConfirm confirm = new WinConfirm()
+            {
+                ShowMessage = "空间已发生变化,是否现在就上传模型并计算空间?",
+                TTitle = "空间计算确认",
+                BtnSure = "上传模型并计算空间",
+                BtnCancel = "暂不计算",
+                Owner = this,
+            };
+            return confirm;
+        }
+        #endregion
+
+
+        #region 空间管理相关逻辑
+        public FloorSpaceContext CurrentContext;
+        public void InitFloor(MFloor floor)
+        {
+            try
+            {
+                //关闭空间属性窗
+                WinModeInfoMaintenance.GetWindow().Hide();
+                this.lbSpaces.ItemsSource = null;
+                #region 数据整理
+                FloorSpaceContext context = new FloorSpaceContext(floor);
+                CurrentContext = context;
+                var doc = context.Document;
+                var view = doc.GetUseView();
+                if (view == null)
+                {
+                    MessageBox.Show("无法找到名称以-saga结尾的视图!");
+                    return;
+                }
+                ExecuteCmd.ExecuteCommand(() =>
+                {
+                    context.CreateSpaces();
+                    #region 初始化界面
+                    SetCanvasShow();
+                    #endregion
+                    return Result.Succeeded;
+                });
+                #endregion           
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(ex.Message);
+            }
+        }
+
+        private void SaveFloor(EditData editData)
+        {
+            //禁用界面,防止重复提交
+            this.IsEnabled = false;
+            var deletedIds = editData.DeletedIds;
+            List<PointPair> saveDatas = editData.NewDatas;
+            bool flagExecuteSuccess = true;//本应在回调函数里传值,目前代码不支持
+            ExecuteCmd.ExecuteCommandOnce(() =>
+            {
+                #region 创建空间
+                var seqs = saveDatas.Select(points => new SpaceSeparation(points.RPoint[0], points.RPoint[1])).ToList();
+                CurrentContext.UpdateSpaceSeqaration(seqs,deletedIds);
+                var createSuccess = CurrentContext.CreateSpaces();
+                if (!createSuccess)
+                {
+                    flagExecuteSuccess = false;
+                    MessageShow.Infomation("保存楼层空间失败");
+                    return Result.Succeeded;
+                }
+                #endregion
+                #region 初始化界面
+                SetCanvasShow();
+                #endregion
+                #region 上传模型选择
+                Window confirm = CreateUploadConfirm();
+                var result = confirm.ShowDialog();
+                //选择以后界面可用
+                this.IsEnabled = true;
+                if (result == true)
+                {
+                    //添加默认提示
+                    SetEmptyTip();
+                    lbSpaces.ItemsSource = new ObservableCollection<MSpace>();
+                    WinModeInfoMaintenance.GetWindow().Hide();
+                }
+                #endregion
+                return Result.Succeeded;
+            }, () =>
+            {
+                if (!flagExecuteSuccess)
+                {
+                    return Result.Succeeded;
+                }
+                try
+                {
+                    var document = CurrentContext.Document;
+                    document.Save();
+                    SpaceManager.UploadModel(document);
+                }
+                catch (Exception ex)
+                {
+                    MessageShow.Show(ex);
+                }
+                return Result.Succeeded;
+            });
+        }
+        #endregion
+
+
+        #region 界面交互
+
+        public EditData GetEditData()
+        {
+            EditData data = new EditData();
+            return data;
+        }
+
+        public void SetEmptyTip()
+        {
+            //清空空间,提示相关信息
+            string tips = "请选择一个需要进行空间管理的楼层";
+        }
+
+        public void SetCanvasShow()
+        {
+
+        }
+        #endregion
+        /// <summary>
+        /// 获取模型绘图数据
+        /// </summary>
+        /// <returns></returns>
+        private object GetModelDrawing()
+        {
+            //柱子,墙,虚拟墙,空间
+            return null;
         }
 
         private void Button_Click(object sender, RoutedEventArgs e)
@@ -73,5 +289,17 @@ namespace SAGA.MBI.WinView.Space
                ucShowElement.Show(" http://192.168.20.86:8091/#/demo");
         }
     }
- 
+
+
+    public class EditData
+    {
+        public EditData()
+        {
+            DeletedIds = new List<int>();
+            NewDatas = new List<PointPair>();
+        }
+
+        public List<int> DeletedIds { get; set; }
+        public List<PointPair> NewDatas { get; set; }
+    }
 }