|
@@ -3,8 +3,6 @@ using System.Collections.Generic;
|
|
|
using System.Collections.ObjectModel;
|
|
|
using System.IO;
|
|
|
using System.Linq;
|
|
|
-using System.Reflection;
|
|
|
-using System.Text.RegularExpressions;
|
|
|
using System.Windows;
|
|
|
using System.Windows.Controls;
|
|
|
using System.Windows.Input;
|
|
@@ -19,20 +17,12 @@ using Point = System.Windows.Point;
|
|
|
using System.Windows.Media.Animation;
|
|
|
using System.Windows.Threading;
|
|
|
using Autodesk.Revit.UI;
|
|
|
-using Newtonsoft.Json.Linq;
|
|
|
-using SAGA.DotNetUtils.Logger;
|
|
|
-using SAGA.MBI.Common;
|
|
|
using SAGA.MBI.DataArrange;
|
|
|
-using SAGA.MBI.JsonConvert;
|
|
|
using SAGA.MBI.Model;
|
|
|
-using SAGA.MBI.RequestData;
|
|
|
-using SAGA.MBI.Tools;
|
|
|
using SAGA.MBI.WinView.ModeInfoMaintenance;
|
|
|
using SAGA.RevitUtils;
|
|
|
using SAGA.RevitUtils.Windows;
|
|
|
using Visibility = System.Windows.Visibility;
|
|
|
-using Path = System.IO.Path;
|
|
|
-using System.Threading.Tasks;
|
|
|
|
|
|
//TODO:1.目前存在的问题,如果只选两个已有的端点画线不能实现
|
|
|
//TODO:2.画图过程中,ESC可取消当前画图
|
|
@@ -574,7 +564,14 @@ namespace SAGA.MBI.WinView.Space
|
|
|
private void btnSave_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
SaveFloor();
|
|
|
-
|
|
|
+ ExecuteCmd.ExecuteCommandOnce(() =>
|
|
|
+ {
|
|
|
+ if (tv.SelectedItem is TreeNodeItem item && item.Item is MFloor floor)
|
|
|
+ {
|
|
|
+ InitFloor(floor);
|
|
|
+ }
|
|
|
+ return Result.Succeeded;
|
|
|
+ }, () => { return Result.Succeeded; });
|
|
|
}
|
|
|
|
|
|
|
|
@@ -690,32 +687,44 @@ namespace SAGA.MBI.WinView.Space
|
|
|
/// <param name="e"></param>
|
|
|
private void Tv_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
|
|
|
{
|
|
|
- //检测是否有未保存的数据,数据分两部分:新建的空间分隔符,删除的空间分隔符
|
|
|
- #region 切换前节点处理
|
|
|
- if (DeletedPolylines.Count > 0 || this.canvas.Children.OfType<UIElement>().Any(el => (el is WPolyline line && line.Stroke == Brushes.Red)))
|
|
|
+ try
|
|
|
{
|
|
|
- WinConfirm confirm = new WinConfirm()
|
|
|
+ //检测是否有未保存的数据,数据分两部分:新建的空间分隔符,删除的空间分隔符
|
|
|
+ #region 切换前节点处理
|
|
|
+ if (DeletedPolylines.Count > 0 || this.canvas.Children.OfType<UIElement>().Any(el => (el is WPolyline line && line.Stroke == Brushes.Red)))
|
|
|
{
|
|
|
- ShowMessage = "尚未保存空间变化,确认放弃修改?",
|
|
|
- TTitle = "空间修改确认",
|
|
|
- BtnSure = "保存并更改模型",
|
|
|
- BtnCancel = "放弃修改",
|
|
|
- Owner=this
|
|
|
-
|
|
|
- };
|
|
|
- var result = confirm.ShowDialog();
|
|
|
- if (result == true)
|
|
|
- {
|
|
|
- SaveFloor();
|
|
|
- return;
|
|
|
+ WinConfirm confirm = new WinConfirm()
|
|
|
+ {
|
|
|
+ ShowMessage = "尚未保存空间变化,确认放弃修改?",
|
|
|
+ TTitle = "空间修改确认",
|
|
|
+ BtnSure = "保存并更改模型",
|
|
|
+ BtnCancel = "放弃修改",
|
|
|
+ Owner = this
|
|
|
+ };
|
|
|
+ var result = confirm.ShowDialog();
|
|
|
+ if (result == true)
|
|
|
+ {
|
|
|
+ SaveFloor();
|
|
|
+ //return;
|
|
|
+ }
|
|
|
}
|
|
|
- DeletedPolylines.Clear();
|
|
|
- }
|
|
|
- #endregion
|
|
|
+ #endregion
|
|
|
+ //异步造成执行顺序混乱的情况,所以使用idling排队
|
|
|
+ ExecuteCmd.ExecuteCommandOnce(() =>
|
|
|
+ {
|
|
|
+ if (tv.SelectedItem is TreeNodeItem item && item.Item is MFloor floor)
|
|
|
+ {
|
|
|
+ InitFloor(floor);
|
|
|
+ }
|
|
|
|
|
|
- if (tv.SelectedItem is TreeNodeItem item && item.Item is MFloor floor)
|
|
|
+ return Result.Succeeded;
|
|
|
+ }, () => { return Result.Succeeded; });
|
|
|
+
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
{
|
|
|
- InitFloor(floor);
|
|
|
+
|
|
|
+ MessageShow.Show(ex);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -723,6 +732,7 @@ namespace SAGA.MBI.WinView.Space
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
+ DeletedPolylines.Clear();
|
|
|
//关闭空间属性窗
|
|
|
WinModeInfoMaintenance.GetWindow().Hide();
|
|
|
this.canvas.Children.Clear();
|
|
@@ -813,15 +823,15 @@ namespace SAGA.MBI.WinView.Space
|
|
|
m_isDraw = null;
|
|
|
//需要保存的分隔符数据
|
|
|
List<PointPair> saveDatas = GetPoints();
|
|
|
- bool flagExecuteSuccess = true;//本应在回调函数里传值,目前代码不支持
|
|
|
+ bool flagExecuteSuccess = true; //本应在回调函数里传值,目前代码不支持
|
|
|
ExecuteCmd.ExecuteCommandOnce(() =>
|
|
|
{
|
|
|
#region 创建空间
|
|
|
CurrentContext.UpdateSpaceSeqaration(saveDatas
|
|
|
- .Select(points => new SpaceSeparation(points.RPoint[0], points.RPoint[1])).ToList(),
|
|
|
- DeletedPolylines);
|
|
|
+ .Select(points => new SpaceSeparation(points.RPoint[0], points.RPoint[1])).ToList(),
|
|
|
+ DeletedPolylines);
|
|
|
DeletedPolylines.Clear();
|
|
|
- var createSuccess=CurrentContext.CreateSpaces();
|
|
|
+ var createSuccess = CurrentContext.CreateSpaces();
|
|
|
if (!createSuccess)
|
|
|
{
|
|
|
flagExecuteSuccess = false;
|
|
@@ -832,10 +842,9 @@ namespace SAGA.MBI.WinView.Space
|
|
|
#endregion
|
|
|
|
|
|
#region 初始化界面
|
|
|
- this.canvas.IsEnabled = true;
|
|
|
- btnOrigin_Click(null, null);
|
|
|
- InitData();
|
|
|
-
|
|
|
+ //this.canvas.IsEnabled = true;
|
|
|
+ //btnOrigin_Click(null, null);
|
|
|
+ //InitData();
|
|
|
#endregion
|
|
|
|
|
|
#region 上传模型选择
|
|
@@ -851,45 +860,33 @@ namespace SAGA.MBI.WinView.Space
|
|
|
CanvasDefaultTips();
|
|
|
lbSpaces.ItemsSource = new ObservableCollection<MSpace>();
|
|
|
WinModeInfoMaintenance.GetWindow().Hide();
|
|
|
-
|
|
|
- #region 错误尝试
|
|
|
- //上传中的一些操作,不能发生在idling中
|
|
|
-
|
|
|
- // Action<FloorSpaceContext> action = new Action<FloorSpaceContext>((context) =>
|
|
|
- // {
|
|
|
- // try
|
|
|
- // {
|
|
|
- // CurrentContext.Document.Save();
|
|
|
- // SpaceManager.UploadModel(context.Document);
|
|
|
- // }
|
|
|
- // catch (Exception ex)
|
|
|
- // {
|
|
|
- // MessageShow.Show(ex);
|
|
|
- // }
|
|
|
- // });
|
|
|
- // action.BeginInvoke(CurrentContext, null, null);
|
|
|
- #endregion
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ flagExecuteSuccess = false;
|
|
|
+ }
|
|
|
+
|
|
|
#endregion
|
|
|
+
|
|
|
return Result.Succeeded;
|
|
|
}, () =>
|
|
|
{
|
|
|
- if (!flagExecuteSuccess)
|
|
|
- {
|
|
|
- return Result.Succeeded;
|
|
|
- }
|
|
|
try
|
|
|
{
|
|
|
var document = CurrentContext.Document;
|
|
|
document.Save();
|
|
|
-
|
|
|
+ if (!flagExecuteSuccess)
|
|
|
+ {
|
|
|
+ return Result.Succeeded;
|
|
|
+ }
|
|
|
SpaceManager.UploadModel(document);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
MessageShow.Show(ex);
|
|
|
}
|
|
|
- return Result.Succeeded;
|
|
|
+
|
|
|
+ return Result.Succeeded;
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -984,29 +981,34 @@ namespace SAGA.MBI.WinView.Space
|
|
|
|
|
|
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];
|
|
|
-
|
|
|
- foreach (var polyline in this.canvas.Children.OfType<WPolyline>())
|
|
|
+ try
|
|
|
{
|
|
|
- if (polyline.Tag is Autodesk.Revit.DB.Mechanical.Space s)
|
|
|
+ #region 核心代码
|
|
|
+ if (lbSpaces.SelectedItems.Count == 0) return;
|
|
|
+ var space = lbSpaces.SelectedItems[0] as MSpace;
|
|
|
+ var bimId = space.BimID.Split(':')[1];
|
|
|
+ foreach (var polyline in this.canvas.Children.OfType<WPolyline>())
|
|
|
{
|
|
|
- if (s.Id.ToString() == (bimId))
|
|
|
+ if (polyline.Tag is Autodesk.Revit.DB.Mechanical.Space s)
|
|
|
{
|
|
|
- polyline.Fill = Brushes.Aquamarine;
|
|
|
+ if (s.Id.ToString() == (bimId))
|
|
|
+ {
|
|
|
+ polyline.Fill = Brushes.Aquamarine;
|
|
|
|
|
|
- //显示属性窗口
|
|
|
- ShowSpaceProperty(s);
|
|
|
- }
|
|
|
- else if (polyline.Fill == Brushes.Aquamarine)
|
|
|
- {
|
|
|
- polyline.Fill = Brushes.Transparent;
|
|
|
+ //显示属性窗口
|
|
|
+ ShowSpaceProperty(s);
|
|
|
+ }
|
|
|
+ else if (polyline.Fill == Brushes.Aquamarine)
|
|
|
+ {
|
|
|
+ polyline.Fill = Brushes.Transparent;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ MessageShow.Show(ex);
|
|
|
}
|
|
|
}
|
|
|
|