123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows;
- using CEFSharpWPF;
- using SAGA.GplotRelationComputerManage;
- using SAGA.Models;
- namespace SAGA.GplotDrawData
- {
- /// <summary>
- /// WinDrawSpace_Web.xaml 的交互逻辑
- /// </summary>
- public partial class WinDrawSpace_Web : Window
- {
- public GplotShowType ShowType{ get; private set; }
- public WinDrawSpace_Web()
- {
- InitializeComponent();
- }
- public WinDrawSpace_Web(GplotShowType showType) : this()
- {
- this.ShowType = showType;
- this.Loaded += WinDrawWaterNode_Loaded;
- }
- private void WinDrawWaterNode_Loaded(object sender, RoutedEventArgs e)
- {
- try
- {
- if (ShowType == GplotShowType.VerticalPlan)
- {
- InitVerticalSpaces();
- }
- else
- {
- InitHSpaceTree();
- }
- }
- catch (Exception ex)
- {
- DotNetUtils.Others.MessageShowBase.Show(ex);
- }
- }
- #region 立面空间处理
- /// <summary>
- /// 立面空间相关数据源
- /// </summary>
- public void InitVerticalSpaces()
- {
- var spaceData = SpaceComputerDataUtil.GetSpaceDataByType(SpaceRelatedEnum.Crossing);
- if (spaceData == null)
- return;
- InitVSpaceTree(spaceData.FloorDatas);
- }
- /// <summary>
- /// 绘制立面空间
- /// </summary>
- private void DrawVSpaces(DataNode node)
- {
- if (node == null)
- return;
- VirticalSpaceGraphView view = new VirticalSpaceGraphView();
- view.SpaceType = node.Sno;
- var db = view.CreateDb(node.GetData<BuildingItemData>());
- ConstData.ResponseData = db.CreateJObjectGroup();
- ucShowElement.Show(WebGplotSettings.VSpaceUrl);
- }
- public void InitVSpaceTree(List<FloorSpaceData> floorItems)
- {
- List<DataNode> treeData = new List<DataNode>();
- var buildGroup = floorItems.GroupBy(f => f.BuildingId);
- foreach (var build in buildGroup)
- {
- var tempFloors = build.ToList();
- var firstFloor = tempFloors.FirstOrDefault();
- if (firstFloor == null)
- {
- continue;
- }
- BuildingItemData buildItem = new BuildingItemData();
- buildItem.Id = firstFloor.BuildingId;
- buildItem.Name = firstFloor.BuildingName;
- buildItem.FloorDataItems.AddRange(tempFloors);
- var items = tempFloors.Select(f => f.LevelName).ToList();
- //items.Reverse();
- buildItem.Levels.AddRange(items);
- var buildNode = new DataNode() {EName = firstFloor.BuildingName, Sno = firstFloor.BuildingId};
- buildNode.Childrens.Add(new DataNode() { EName = "楼梯间", Sno = "140" });
- buildNode.Childrens.Add(new DataNode() { EName = "中庭", Sno = "150" });
- buildNode.Childrens.Add(new DataNode() { EName = "竖井", Sno = "1B0" });
- buildNode.Childrens.Add(new DataNode() { EName = "其他公共区域", Sno = "1A0" });
- buildNode.Childrens.ForEach(dn => dn.SetData(buildItem));
- treeData.Add(buildNode);
- }
- this.rootNode.ItemsSource = treeData;
- }
- #endregion
- private void RootNode_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
- {
- if (rootNode.SelectedItem is DataNode ln)
- {
- if (ln.Childrens.Count != 0)
- {
- return;
- }
- if (ShowType == GplotShowType.ViewPlan)
- {
- Draw(ln);
- }
- else
- {
- DrawVSpaces(ln);
- }
-
- }
- }
- #region 平面处理
- private void Draw(DataNode dataNode)
- {
- var fd = dataNode.GetData<FloorSpaceData>();
- if (fd == null)
- {
- MessageBox.Show("楼层数据不存在");
- return;
- }
- SpaceGraphView view = new SpaceGraphView();
- var db = view.CreateDb(fd);
- ConstData.ResponseData = db.CreateJObjectGroup();
- ucShowElement.Show(WebGplotSettings.GplotUrl);
- }
- private void InitHSpaceTree()
- {
- /*
- * 层级结构:(建筑名称--空间关系)--四种关系--楼层
- */
- var buildNodes = new List<DataNode>();
- Dictionary<SpaceRelatedEnum, string> seeds = new Dictionary<SpaceRelatedEnum, string>();
- seeds[SpaceRelatedEnum.Adjacent] = "空间临接关系";
- seeds[SpaceRelatedEnum.Crossing] = "建筑交通关系";
- seeds[SpaceRelatedEnum.Ventilation] = "空气流通关系";
- seeds[SpaceRelatedEnum.Radiation] = "光照辐射关系";
- foreach (var seed in seeds)
- {
- var spaceDatas = SpaceComputerDataUtil.GetSpaceDataByType(seed.Key);
- if (spaceDatas == null)
- continue;
- var floorItems = spaceDatas.FloorDatas;
- var buildGroup = floorItems.GroupBy(f => f.BuildingId);
- foreach (var build in buildGroup)
- {
- var buildFloors = build.ToList();
- var firstFloor = buildFloors.FirstOrDefault();
- if (firstFloor == null)
- {
- continue;
- }
- #region 检测建筑节点
- var buildNode = buildNodes.FirstOrDefault(dn => dn.Sno == build.Key);
- if (buildNode == null)
- {
- buildNode = new DataNode() { EName = $"[{firstFloor.BuildingName}]--空间关系", Sno = firstFloor.BuildingId };
- buildNodes.Add(buildNode);
- }
- #endregion
- DataNode relationNode = new DataNode(seed.Value)
- {
- Childrens = buildFloors.Reverse<FloorSpaceData>().Select(f =>
- {
- var floorNode = new DataNode(f.Name);
- floorNode.SetData(f);
- return floorNode;
- }).ToList()
- };
- buildNode?.Childrens.Add(relationNode);
- }
- }
- this.rootNode.ItemsSource = buildNodes;
- }
- #endregion
- }
- }
|