/*-------------------------------------------------------------------------
* 功能描述: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;
}
}
}