|
@@ -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; }
|
|
|
+ }
|
|
|
}
|