123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- /* ==============================================================================
- * 功能描述:检查物理世界的Category与模型的Category是否一致
- * 创 建 者:Garrett
- * 创建日期:2018/7/12 14:25:17
- * ==============================================================================*/
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using SAGA.DotNetUtils.Others;
- using SAGA.MBI.Calc;
- using SAGA.MBI.Model;
- using SAGA.MBI.RequestData;
- using SAGA.MBI.WinView.Upload;
- using Autodesk.Revit.DB;
- using Autodesk.Revit.DB.Mechanical;
- using SAGA.DotNetUtils;
- using SAGA.DotNetUtils.Logger;
- using SAGA.MBI.DataArrange;
- using SAGA.MBI.Tools;
- using SAGA.RevitUtils.Extends;
- namespace SAGA.MBI.ToolsData
- {
- /// <summary>
- /// CheckEquipCategory
- /// </summary>
- public class CheckEquipCategory
- {
- /// <summary>
- /// 检查并处理所有楼层
- /// </summary>
- public static void OperateAll()
- {
- var floors = DalUploadFloor.GetHasFileFloors();
- List<CalcContext> contexts = new List<CalcContext>();
- foreach (UploadFloor floor in floors)
- {
- Operate(floor.MFloor);
- }
- }
- /// <summary>
- /// 只处理当前楼层
- /// </summary>
- public static void OperateCurFloor()
- {
- MFloor floor = ExternalDataWrapper.Current.Doc.GetCurMFloor();
- if (floor != null)
- Operate(floor);
- }
- /// <summary>
- /// 检查并处理
- /// </summary>
- /// <param name="floor"></param>
- /// <returns></returns>
- private static void Operate(MFloor floor)
- {
- var context = DalCommon.DownLoadFloorDataByBIMFloorInfo(floor);
- context.OpenDocument();
- try
- {
- //CalcEquipPartRlt(context);
- CalcContext delcontext = new CalcContext(floor);
- CalcContext addContext = new CalcContext(floor);
- Check(context, delcontext, addContext);
- RebuildCloudData(delcontext, addContext);
- }
- catch (Exception e)
- {
- MessageShowBase.Show(e);
- }
- finally
- {
- context.RevitDoc.CloseDoc();
- }
- }
- /// <summary>
- /// 检查设备,部件,空间,有那些模型族类型和云平台存储的类型不一致
- /// </summary>
- /// <param name="baseContext"></param>
- /// <param name="delcontext"></param>
- /// <param name="addContext"></param>
- public static void Check(CalcContext baseContext, CalcContext delcontext, CalcContext addContext)
- {
- var doc = baseContext.RevitDoc;
- //检查空间,逻辑不通,暂时注释掉
- //foreach (var mode in baseContext.MSpaces)
- //{
- // string cBimId = mode.BimID;
- // if (cBimId.IsNullOrEmpty()) continue;
- // int bimid = cBimId.GetBIMID();
- // Element elem = doc.GetElement(bimid);
- // if (elem == null) continue;
- // Space fi = elem as Space;
- // if (fi == null)
- // {
- // mode.Operator = DocumentChangedOperator.Add;
- // delcontext.MSpaces.Add(mode);
- // //addContext.MSpaces.Add(mode);
- // }
- //}
- var spaces = baseContext.RevitDoc.GetSpaces().Where(t => t.IsValidObject).ToList();
- //检查设备
- foreach (var mode in baseContext.MEquipments)
- {
- string cBimId = mode.BimID;
- if (cBimId.IsNullOrEmpty()) continue;
- int bimid = cBimId.GetBIMID();
- Element elem = doc.GetElement(bimid);
- if (elem == null) continue;
- //FamilyInstance fi = elem as FamilyInstance;
- //if (fi == null) continue;
- var code = elem.GetFamilyCode();
- var cCode = mode.EquipClassCode;
- if (code != cCode)
- {
- delcontext.MEquipments.Add(mode);
- MEquipment equip = DalEquip.GetEquipment(elem);
- if (equip == null) continue;
- //暂时保留本地名称和本地编码
- DalUploadFloor.SetSavePropertyValue(equip,mode);
- equip.Operator = DocumentChangedOperator.Add;
- addContext.MEquipments.Add(equip);
- //识别设备所在空间
- var space = elem.GetReferenceSpace(spaces);
- if (space == null) continue;
- string spaceId = space.GetCloudBIMId();
- MISpace mSpace = addContext.MSpaces.FirstOrDefault(t => t.BimID == spaceId);
- if (mSpace == null)
- {
- mSpace = DalSpace.GetSpace(space);
- addContext.MSpaces.Add(mSpace);
- //设备所在空间添加添加一组关系
- addContext.RltEquipInSpaces.Add(new RltEquipInSpace(mSpace, equip){Operator = DocumentChangedOperator.Add});
- }
- }
- }
- //检查部件
- foreach (var mode in baseContext.MEquipmentParts)
- {
- string cBimId = mode.BimID;
- if (cBimId.IsNullOrEmpty()) continue;
- int bimid = cBimId.GetBIMID();
- Element elem = doc.GetElement(bimid);
- if (elem == null) continue;
- var code = elem.GetFamilyCode();
- var cCode = mode.EquipClassCode;
- if (code != cCode)
- {
- delcontext.MEquipmentParts.Add(mode);
- MEquipmentPart equipment = DalEquipPart.GetEquipPart(elem);
- if (equipment == null) continue;
- equipment.Operator = DocumentChangedOperator.Add;
- //暂时保留本地名称和本地编码
- DalUploadFloor.SetSavePropertyValue(equipment, mode);
- addContext.MEquipmentParts.Add(equipment);
- //识别设备所在空间
- var space = elem.GetReferenceSpace(spaces);
- if (space == null) continue;
- string spaceId = space.GetCloudBIMId();
- MISpace mSpace = addContext.MSpaces.FirstOrDefault(t => t.BimID == spaceId);
- if (mSpace == null)
- {
- mSpace = DalSpace.GetSpace(space);
- addContext.MSpaces.Add(mSpace);
- //设备所在空间添加添加一组关系
- addContext.RltEquipInSpaces.Add(new RltEquipInSpace(mSpace, equipment) { Operator = DocumentChangedOperator.Add });
- }
- }
- }
- //信标不用检查
- }
- /// <summary>
- /// 重建物理世界有问题的数据
- /// </summary>
- /// <param name="delcontext"></param>
- /// <param name="addContext"></param>
- private static void RebuildCloudData(CalcContext delcontext, CalcContext addContext)
- {
- delcontext.SetState(DocumentChangedOperator.Delete);
- //删除
- delcontext.Upload();
- //添加
- addContext.Upload();
- //var tip =
- // $"{addContext.MEquipments} 个设备受到影响;{string.Join(addContext.MEquipments.Select(t => t.BimID).ToArray())}";
- //Log4Net.Debug(tip);
- }
- }
- }
|