123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- /* ==============================================================================
- * 功能描述:ObjectCalc
- * 创 建 者:Garrett
- * 创建日期:2018/4/1 10:48:50
- * ==============================================================================*/
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using Autodesk.Revit.DB;
- using Autodesk.Revit.DB.Mechanical;
- using SAGA.DotNetUtils.Logger;
- using SAGA.DotNetUtils.Others;
- using SAGA.MBI.Common;
- using SAGA.MBI.DataArrange;
- using SAGA.MBI.Model;
- using SAGA.RevitUtils.Extends;
- using SAGA.MBI.Tools;
- namespace SAGA.MBI.Calc
- {
- /// <summary>
- /// ObjectCalc
- /// </summary>
- public class ObjectCalc
- {
- #region 简单计算,只获取岗位
- /// <summary>
- /// 常规计算
- /// </summary>
- /// <param name="floor"></param>
- /// <returns></returns>
- public static CalcContext Calc_Simple(MFloor floor)
- {
- CalcContext context = new CalcContext(floor);
- context.OpenDocument();
- try
- {
- CalcSpace_Simple(context);
- CalcEquipPartRlt_Simple(context);
- }
- catch (Exception e)
- {
- MessageShowBase.Show(e);
- }
- finally
- {
- context.RevitDoc.CloseDoc();
- }
- return context;
- }
- /// <summary>
- /// 计算模型中的空间
- /// </summary>
- /// <param name="context"></param>
- private static void CalcSpace_Simple(CalcContext context)
- {
- var spaces = context.RevitDoc.GetSpaces();
- foreach (Space space in spaces)
- {
- if (!space.IsSpace()) continue;
- MISpace mspace = DalSpace.GetSpace(space);
- if (mspace == null) continue;
- mspace.Operator = DocumentChangedOperator.Add;
- context.MSpaces.Add(mspace);
- }
- }
- /// <summary>
- /// 读取空间中的设备、部件、设备所在空间的关系
- /// </summary>
- /// <param name="context"></param>
- private static void CalcEquipPartRlt_Simple(CalcContext context)
- {
- var familyInstances = context.RevitDoc.GetFamilyInstances();
- List<FamilyInstance> parts = new List<FamilyInstance>();
- foreach (FamilyInstance fi in familyInstances)
- {
- if (!fi.IsValidObject) continue;
- if (fi.IsEquipment())
- {
- MEquipment equipment = DalEquip.GetEquipment(fi);
- if (equipment == null) continue;
- equipment.Operator = DocumentChangedOperator.Add;
- context.MEquipments.Add(equipment);
-
- }
- //在这里处理信标
- else if (fi.IsBeacon())
- {
- MBeacon mode = DalBeacon.GetBeacon(fi);
- if (mode == null) continue;
- mode.Operator = DocumentChangedOperator.Add;
- context.MBeacons.Add(mode);
-
- }
- else if (fi.IsEquipmentPart())
- {
- parts.Add(fi);
- }
- }
- //单独处理部件,因为部件要依赖设备
- foreach (FamilyInstance fi in parts)
- {
- // 在这里处理部件
- MEquipmentPart equipment = DalEquipPart.GetEquipPart(fi);
- if (equipment?.MEquipment == null) continue;
- equipment.Operator = DocumentChangedOperator.Add;
- context.MEquipmentParts.Add(equipment);
-
- }
- }
- #endregion
- /// <summary>
- /// 常规计算
- /// </summary>
- /// <param name="floor"></param>
- /// <returns></returns>
- public static CalcContext Calc(MFloor floor)
- {
- CalcContext context = new CalcContext(floor);
- context.OpenDocument();
- try
- {
- CalcSpace(context);
- CalcEquipPartRlt(context);
- }
- catch (Exception e)
- {
- MessageShowBase.Show(e);
- }
- finally
- {
- context.RevitDoc.CloseDoc();
- }
- return context;
- }
- /// <summary>
- /// 计算模型中的空间
- /// </summary>
- /// <param name="context"></param>
- private static void CalcSpace(CalcContext context)
- {
- var spaces = context.RevitDoc.GetSpaces();
- foreach (Space space in spaces)
- {
- if (!space.IsSpace()) continue;
- MISpace mspace = DalSpace.GetSpace(space);
- if (mspace == null) continue;
- mspace.Operator = DocumentChangedOperator.Add;
- context.MSpaces.Add(mspace);
- }
- }
- /// <summary>
- /// 读取空间中的设备、部件、设备所在空间的关系
- /// </summary>
- /// <param name="context"></param>
- private static void CalcEquipPartRlt(CalcContext context)
- {
- var familyInstances = context.RevitDoc.GetFamilyInstances();
- var rspaces = context.RevitDoc.GetSpaces().Where(t => t.IsValidObject).ToList();
- List<FamilyInstance> parts = new List<FamilyInstance>();
- foreach (FamilyInstance fi in familyInstances)
- {
- if (!fi.IsValidObject) continue;
- if (fi.IsEquipment())
- {
- MEquipment equipment = DalEquip.GetEquipment(fi);
- if (equipment == null) continue;
- equipment.Operator = DocumentChangedOperator.Add;
- context.MEquipments.Add(equipment);
- //识别设备所在空间
- var space = fi.GetReferenceSpace(rspaces);
- if (space == null) continue;
- string spaceId = space.GetCloudBIMId();
- MISpace mSpace = context.MSpaces.FirstOrDefault(t => t.BimID == spaceId);
- if (mSpace != null)
- {
- //设备所在空间添加添加一组关系
- context.RltEquipInSpaces.Add(new RltEquipInSpace(mSpace, equipment) { Operator = DocumentChangedOperator.Add });
- }
- }
- //在这里处理信标
- else if (fi.IsBeacon())
- {
- MBeacon mode = DalBeacon.GetBeacon(fi);
- if (mode == null) continue;
- mode.Operator = DocumentChangedOperator.Add;
- context.MBeacons.Add(mode);
- //识别信标所在元空间
- var space = fi.GetReferenceSpace(rspaces);
- if (space == null) continue;
- string spaceId = space.GetCloudBIMId();
- MISpace mSpace = context.MSpaces.FirstOrDefault(t => t.BimID == spaceId);
- if (mSpace != null)
- {
- context.RltBeaconinElementSps.Add(new RltBeaconinElementSp(mSpace, mode) { Operator = DocumentChangedOperator.Add });
- }
- }
- else if (fi.IsEquipmentPart())
- {
- parts.Add(fi);
- }
- }
- //单独处理部件,因为部件要依赖设备
- foreach (FamilyInstance fi in parts)
- {
- // 在这里处理部件
- MEquipmentPart equipment = DalEquipPart.GetEquipPart(fi);
- if (equipment?.MEquipment == null) continue;
- equipment.Operator = DocumentChangedOperator.Add;
- context.MEquipmentParts.Add(equipment);
- //识别设备所在空间
- var space = fi.GetReferenceSpace(rspaces);
- if (space == null) continue;
- string spaceId = space.GetCloudBIMId();
- MISpace mSpace = context.MSpaces.FirstOrDefault(t => t.BimID == spaceId);
- if (mSpace != null)
- {
- //设备所在空间添加添加一组关系
- context.RltEquipInSpaces.Add(new RltEquipInSpace(mSpace, equipment) { Operator = DocumentChangedOperator.Add });
- }
- }
- }
- }
- }
|