using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Electrical;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.DB.Plumbing;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FWindSoft.Revit.Utils
{
///
/// 管件类型枚举
///
public enum FittingType
{
///
/// 未定
///
Undefined = -1,
///
/// 弯头
///
Elbows = 1,
///
/// 三通
///
Junctions = 2,
///
/// 四通
///
Crosses = 3,
///
/// 变径
///
Transitions = 4,
///
/// 活接头
///
Unions = 5,
///
/// 方形到原型变径
///
TransitionsRectangularToRound = 7,
///
/// 方形到椭圆变径
///
TransitionsRectangularToOval = 8,
///
/// 椭圆到原型变径
///
TransitionsOvalToRound = 9,
///
/// 堵头
///
Caps = 10
}
///
/// 管件工具
///
public static class FittingUtils
{
#region 私有方法
///
/// 判断传入类型的的分类
///
///
/// -1 无效;0 线管桥架;1水管风管
private static int JudgeType(MEPCurveType mepCurveType)
{
int flag = -1;
if (mepCurveType is ConduitType || mepCurveType is CableTrayType)
{
return 0;
}
if (mepCurveType is PipeType || mepCurveType is DuctType)
{
return 1;
}
return flag;
}
///
/// FittingType转换成布线规则
///
///
///
private static RoutingPreferenceRuleGroupType ConvertToRuleType(FittingType fittingType)
{
return (RoutingPreferenceRuleGroupType)fittingType;
}
///
/// FittingType转换成对应参数
///
///
///
private static BuiltInParameter ConvertToBitParameter(FittingType fittingType)
{
BuiltInParameter use = BuiltInParameter.INVALID;
switch (fittingType)
{
case FittingType.Elbows:
use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_BEND_PARAM;
break;
case FittingType.Junctions:
use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_TEE_PARAM;
break;
case FittingType.Crosses:
use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_CROSS_PARAM;
break;
case FittingType.Transitions:
use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_TRANSITION_PARAM;
break;
case FittingType.Unions:
use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_UNION_PARAM;
break;
case FittingType.Caps:
use = BuiltInParameter.RBS_CURVETYPE_DEFAULT_CAP_PARAM;
break;
default:
break;
}
return use;
}
#endregion
///
/// MepCurveType增加指定类型的管件
///
///
/// 管件类型
///
public static void AddFitting(MEPCurveType mepCurveType, FittingType fittingType, ElementId elementId)
{
var flag = JudgeType(mepCurveType);
elementId = elementId??ElementId.InvalidElementId;
if (flag==0)
{
mepCurveType.AddFitting(ConvertToBitParameter(fittingType), elementId);
}
else if(flag==1)
{
mepCurveType.AddRoutingRule(ConvertToRuleType(fittingType), elementId);
}
}
///
/// MepCurveType移除指定管件
///
///
///
public static void RemoveFitting(MEPCurveType mepCurveType, FittingType fittingType)
{
var flag = JudgeType(mepCurveType);
if (flag == 0)
{
mepCurveType.RemoveFitting(ConvertToBitParameter(fittingType));
}
else if (flag == 1)
{
mepCurveType.RemoveRoutingRule(ConvertToRuleType(fittingType));
}
}
///
/// MepCurveType获取指定管件
///
///
///
///
public static ElementId GetFitting(MEPCurveType mepCurveType, FittingType fittingType)
{
ElementId elmentId = null;
var flag = JudgeType(mepCurveType);
if (flag == 0)
{
elmentId=mepCurveType.GetFitting(ConvertToBitParameter(fittingType));
}
else if (flag == 1)
{
var rule = mepCurveType.GetRoutingRule(ConvertToRuleType(fittingType));
if(rule!=null)
{
elmentId = rule.MEPPartId;
}
}
return elmentId;
}
}
}