Revit中有些族是不基于面创建,有些族是基于面创建(如窗户基于墙创建等),这时候需要查看该Family的属性【基于工作平面】这个参数进行判断,可以使用lookup查询到FamilyInstance的主体Family,然后在Parameters里查看。
下图中可以看到AsInteger值是1,就表示基于墙
下图中可以看到AsInteger值是0,就表示不基于任何面
这个属性的AsInteger值和AsValueString 的值是一一对应的,有兴趣的小伙伴可以把各个附着类型自己找来查看一番。
判断方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.DB.Events;
using Autodesk.Revit.DB;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.UI.Selection;
namespace PersonalTools
{
[TransactionAttribute(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
Reference pickedRef = null;
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Document doc = commandData.Application.ActiveUIDocument.Document;
UIApplication uiApp = commandData.Application;
Selection sel = uiApp.ActiveUIDocument.Selection;
pickedRef = sel.PickObject(ObjectType.Element, "选择一个族实例");
Element elem1 = doc.GetElement(pickedRef);
FamilyInstance fi = elem1 as FamilyInstance;
try
{
FamilySymbol fs = fi.Symbol;
Family f1 = fs.Family;
int a = f1.get_Parameter(BuiltInParameter.FAMILY_HOSTING_BEHAVIOR).AsInteger();
string s = HostName(a);
TaskDialog.Show("结果:", "主体编号:" + a.ToString() + "\r" + s);
}
catch
{
TaskDialog.Show("1", "该实例为系统内建族,系统内建族都不基于面");
}
return Result.Succeeded;
}
//此处也可以直接返回AsValueString
public string HostName(int a)
{
string s = "找不到属性";
switch (a)
{
case 0:
return s = "族不基于面";
case 1:
return s = "基于墙的";
case 2:
return s = "基于Floor(楼板的)";
case 3:
return s = "基于吊顶";
case 5:
return s = "基于Face的";
default:
return s = "找不到属性";
}
}
}
}