| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- /*-------------------------------------------------------------------------
- * 功能描述:SpaceComputerContext
- * 作者:xulisong
- * 创建时间: 2018/12/12 14:54:23
- * 版本号:v1.0
- * -------------------------------------------------------------------------*/
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Autodesk.Revit.DB.Mechanical;
- using Newtonsoft.Json.Linq;
- using SAGA.DotNetUtils.Extend;
- using SAGA.MBI.RequestData;
- using SAGA.Models;
- using SAGA.RevitUtils;
- using SAGA.RevitUtils.Extends;
- namespace SAGA.GplotRelationComputerManage
- {
- public class SpaceComputerContext
- {
- public SpaceComputerContext()
- {
- FloorItems =new Dictionary<string, FloorSpaceItems>();
- }
- #region 空间信息
- /// <summary>
- /// 缓存空间对象
- /// </summary>
- private Dictionary<string, RoomItem> m_Rooms = null;
- /// <summary>
- /// 获取根据指定bimId,获取空间信息
- /// </summary>
- /// <param name="bimId"></param>
- /// <returns></returns>
- public RoomItem GetRoomItem(string bimId)
- {
- if (m_Rooms == null)
- {
- m_Rooms = new Dictionary<string, RoomItem>();
- var str = new string[] { MBIBuiltInCategory.Si };//元空间为Si
- List<JObject> datas = CommonConvert.QueryObjectInfoByTypes(str);
- foreach (var data in datas)
- {
- var roomItem = MBIItemFactory.Create<RoomItem>(data);
- m_Rooms[roomItem.BimId] = roomItem;
- }
- }
- m_Rooms.TryGetValue(bimId, out RoomItem resultItem);
- return resultItem;
- }
-
- /// <summary>
- /// 创建空间持久数据
- /// </summary>
- /// <param name="space"></param>
- /// <returns></returns>
- public SgSpace NewSpace(Space space)
- {
- string key = space.GetBimId();
- var roomItem = GetRoomItem(key);
- var useSpace = new SgSpace()
- {
- Id = space.Id.ToString(),
- Name = space.Name,
- Point = space.Location.GetPoint().ToW2DPoint(),
- };
- if (roomItem != null)
- {
- var display = roomItem.LocalName;
- useSpace.Name = string.IsNullOrEmpty(display) ? space.Name : display;
- useSpace.RoomFuncType = roomItem.RoomFuncType;
- useSpace.PlatformId = roomItem.Id;
- }
- return useSpace;
- }
- #endregion
- #region 空间计算缓存信息
- /// <summary>
- /// 楼层空间数据缓存
- /// </summary>
- public Dictionary<string, FloorSpaceItems> FloorItems { get; private set; }
- /// <summary>
- /// 获取指定路径项目的楼层信息
- /// </summary>
- /// <param name="path"></param>
- /// <returns></returns>
- public FloorSpaceItems GetFloorItems(string path)
- {
- var floorId = Path.GetFileNameWithoutExtension(path);
- if (FloorItems.TryGetValue(floorId, out FloorSpaceItems floor))
- {
- return floor;
- }
- if (File.Exists(path))
- {
- var uiApp = ExternalDataWrapper.Current.UiApp.Application;
- var doc = uiApp.OpenDocumentFile(path);
- floor = new FloorSpaceItems(doc);
- #region 初始化计算空间数据
- floor.ComputerSpaceItems.ForEach(c =>
- {
- var room = GetRoomItem(c.BimId);
- if (room != null)
- {
- c.FuncType = room.RoomFuncType;
- }
- });
- #endregion
- FloorItems[floorId] = floor;
- }
- return floor;
- }
- #endregion
- #region 计算数据
- public SpaceComputerData SpaceComputeData { get; set; } = new SpaceComputerData();
- #endregion
- /// <summary>
- /// 保存计算数据
- /// </summary>
- public void SaveComputerData()
- {
- if (SpaceComputeData == null)
- return;
- SpaceData spaceData = new SpaceData();
- spaceData.FloorDatas = SpaceComputeData.FloorDatas ?? new List<FloorSpaceData>();
- //var levels = SpaceComputeData.Levels.OrderBy(c => c.Elevation).ToList();
- //var levelNames = levels.Select(l => l.Name).ToList();
- //spaceData.LevelNames = levelNames;
- SpaceComputerDataUtil.SaveData(spaceData);
- }
- }
- }
|