123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /*-------------------------------------------------------------------------
- * 功能描述:FloorSpaceContext
- * 作者:xulisong
- * 创建时间: 2018/12/17 10:18:02
- * 版本号:v1.0
- * -------------------------------------------------------------------------*/
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Autodesk.Revit.DB;
- using SAGA.MBI.JsonConvert;
- using SAGA.MBI.Model;
- using SAGA.RevitUtils;
- using SAGA.RevitUtils.Extends;
- namespace SAGA.MBI.WinView
- {
- /// <summary>
- /// 楼层空间上下文
- /// </summary>
- public class FloorSpaceContext
- {
- public FloorSpaceContext(MFloor floor)
- {
- this.Floor = floor;
- }
- /// <summary>
- /// 关联楼层信息
- /// </summary>
- public MFloor Floor { get;private set; }
- #region 关联楼层项目获取
- private Document m_Document;
- public Document Document
- {
- get
- {
- if (m_Document == null)
- {
- var filePath = this.Floor?.FullPath;
- if (!File.Exists(filePath))
- {
- throw new Exception("无法找到相关模型文件!");
- }
- //var uiDoc = ExternalDataWrapper.Current.UiApp.OpenAndActivateDocument(filePath);
- //var uiDoc = ExternalDataWrapper.Current.UiApp.OpenAndActivateDocument(filePath);
- m_Document = ExternalDataWrapper.Current.App.OpenDocumentFile(filePath);//uiDoc.Document;
- }
- return m_Document;
- }
- }
- #endregion
- #region 物理世界空间缓存
- /// <summary>
- /// 物理世界存在元空间
- /// </summary>
- public List<MSpace> ServerSpaces { get;private set; }
- public List<MSpace> GetPhysicalSpaces(List<string> elementIds)
- {
- if (ServerSpaces == null)
- {
- ServerSpaces = SpaceConvert.GetFloorSpaceInfos(this.Floor?.Id).OfType<MSpace>().ToList();
- }
- var spaces= ServerSpaces.Where(s => elementIds.Exists(id => id.ToString() == s.BimID.Split(':')[1])).ToList();
- return spaces;
- }
- #endregion
- #region 初始化空间
- /// <summary>
- /// 创建空间
- /// </summary>
- public bool CreateSpaces()
- {
- bool flag = true;
- #region 描述
- /*
- * 创建空间分两步:
- * 1、创建空间
- * 2、处理冲突
- */
- #endregion
- var spacePreprocessor = new SpaceFailuresPreprocessor();
- var document = Document;
- using (Transaction tran = new Transaction(document, "创建空间"))
- {
- try
- {
- FailureHandlingOptions fho = tran.GetFailureHandlingOptions();
- fho.SetFailuresPreprocessor(spacePreprocessor);
- tran.SetFailureHandlingOptions(fho);
- #region 创建空间
- spacePreprocessor.SetOperate(true);
- tran.Start();
- SpaceManager.CreateSpace(document);
- tran.Commit(); //提交获取冲突代码
- #endregion
- #region 冲突处理代码
- FailureHandlingOptions fhoDe = tran.GetFailureHandlingOptions();
- fhoDe.SetFailuresPreprocessor(new SpaceFailuresPreprocessor(false) );
- tran.SetFailureHandlingOptions(fhoDe);
- //spacePreprocessor.SetOperate(false);
- tran.Start();
- //返回值临时使用
- flag=SpaceManager.DealSpaceFailuresPreprocessor(document,spacePreprocessor.Items,this);
- tran.Commit();
- #endregion
- }
- catch (Exception ex)
- {
- tran.RollBack();
- flag = false;
- MessageShow.Show(ex);
- }
- }
- return flag;
- }
- #endregion
- public void UpdateSpaceSeqaration(List<SpaceSeparation> separations,List<int> deletedIds)
- {
- SpaceManager.UpdateSpaceSequaration(Document, separations, deletedIds);
- }
- }
- }
|