123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /*-------------------------------------------------------------------------
- * 功能描述:RevitUtil
- * 作者:xulisong
- * 创建时间: 2019/6/24 9:55:09
- * 版本号:v1.0
- * -------------------------------------------------------------------------*/
- using Autodesk.Revit.DB;
- using SAGA.RevitUtils.Extends;
- using SAGA.RevitUtils.Extends.Graphic;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using RevitToJBim.Extension;
- using RevitToJBim.MBI;
- using SAGA.DotNetUtils;
- using Parameter=JBIM.Component.Parameter;
- namespace RevitToJBim.Common
- {
- public class RevitUtil
- {
- /// <summary>
- /// 获取FamilyInstance顶面轮廓
- /// </summary>
- /// <param name="fi"></param>
- /// <returns></returns>
- public static List<XYZ> GetTopPolygon(FamilyInstance fi)
- {
- List<XYZ> path = new List<XYZ>();
- var faces = fi.GetOriginalFaces(XYZ.BasisZ);
- var topface = faces.FirstOrDefault();
- //传递的path中没有重复点
- if (topface != null)
- {
- var curves = topface.GetCurves();
- for (int i = 0; i < curves.Count; i++)
- {
- var current = curves[i];
- var points = current.GetPoints();
- points.RemoveAt(points.Count - 1);
- path.AddRange(points);
- }
- }
- return path;
- }
- /// <summary>
- /// 获取FamilyInstance box底面轮廓
- /// </summary>
- /// <param name="fi"></param>
- /// <returns></returns>
- public static List<XYZ> GetBottomPolygon(FamilyInstance fi)
- {
- List<XYZ> path=new List<XYZ>();
- var box = fi.get_BoundingBox(null);
- if (box == null) return path;
- var boxMin = box.Min;
- var boxMax = box.Max;
- path.Add(boxMin);
- path.Add(boxMin.NewX(boxMax.X));
- path.Add(boxMin.NewX(boxMax.X).NewY(boxMax.Y));
- path.Add(boxMin.NewY(boxMax.Y));
- path.Add(boxMin);
- return path;
- }
- /// <summary>
- /// 获取设备设施的参数
- /// </summary>
- /// <param name="fi"></param>
- /// <returns></returns>
- public static List<Parameter> GetFacilityParameters(FamilyInstance fi)
- {
- List<string> parameterNames=new List<string>(){ MBIBuiltInParameterName.EquipLocalName,MBIBuiltInParameterName.EquipLocalID };
- List<Parameter> parameters=new List<Parameter>();
- foreach (var parameterName in parameterNames)
- {
- var revitParameter = fi.GetParameter(parameterName);
- if (revitParameter != null)
- {
- var parameter = new Parameter(ParameterUtil.FindParameterDefine(parameterName));
- parameter.Value = revitParameter.AsString();
- parameters.Add(parameter);
- }
- }
- return parameters;
- }
- /// <summary>
- /// 获取部件所关联的设备
- /// </summary>
- /// <param name="element"></param>
- /// <returns></returns>
- public static Element GetEquipPartParent(Element element)
- {
- if (!element.IsEquipmentPart()) return null;
- string code = element.GetFamilyName()?.Substring(0, 4); ;
- if (code.IsNullOrEmpty()) return null;
- //构件所关联的设备
- var parentInst = element.Document.GetElements(new ElementIntersectsElementFilter(element))
- .FirstOrDefault(t => !t.Id.IsEqual(element.Id) && t.GetFamilyCode() == code);
- return parentInst;
- }
- }
- }
|