/*------------------------------------------------------------------------- * 功能描述: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 { /// /// 获取FamilyInstance顶面轮廓 /// /// /// public static List GetTopPolygon(FamilyInstance fi) { List path = new List(); 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; } /// /// 获取FamilyInstance box底面轮廓 /// /// /// public static List GetBottomPolygon(FamilyInstance fi) { List path=new List(); 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; } /// /// 获取设备设施的参数 /// /// /// public static List GetFacilityParameters(FamilyInstance fi) { List parameterNames=new List(){ MBIBuiltInParameterName.EquipLocalName,MBIBuiltInParameterName.EquipLocalID }; List parameters=new List(); 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; } /// /// 获取部件所关联的设备 /// /// /// 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; } } }