Revit API 判断族 基于面 or 基于主体,判断基于主体的类型

 

得到这个问题
叶老师,想请教一个问题:在项目上布置一个灯具之前,如何判断这个灯具族是基于墙还是基于面的,我查到一个方法,获取族的“主体”参数,代码如下:family.get_Parameter(BuiltInParameter.FAMILY_HOSTING_BEHAVIOR).AsInteger(),它返回的是数值。请问返回的数值准确对应基于的主体吗?这些数值分别代码了什么?或者其他方法。谢谢!


答:
你基本找到问题的解决办法了:
通过获取Family的BuiltInParameter.FAMILY_HOSTING_BEHAVIOR 参数值来判别。
若参数值为1,则表明族是基于墙的。
若参数值为0,则表明族可能是基于面的。
此时若Family对象的FAMILY_WORK_PLANE_BASED 参数值为0,表明不是基于工作平面的。若参数值为1,表明是基于工作平面的。
若参数值为3,则表明是易于吊顶的。
若参数值为5, 则表明是基于Face的
若参数值为2, 则表明是基于Floor(楼板的)


你可以在Revit里面打开该族的定义文件,在族的参数界面中找到该族的Host或主体参数值,一眼可以看出主体的对象类别。然后读取该Family的FAMILY_HOSTING_BEHAVIOR 参数值来获取更多的这里未列出的参数值。从而建立参数值与主题类别的关系。


转载请复制以下信息:
原文链接: http://blog.youkuaiyun.com/joexiongjin/article/details/11542943
作者: 叶雄进 , Autodesk ADN

### 使用 Revit API 进行的布置 在使用 Revit API 实现的布置过程中,`PromptForFamilyInstancePlacementOptions` 方法提供了交互式的实例放置选项[^3]。此方法允许开发者创建自定义命令来引导用户选择位置并放置实例。 为了更好地理解和应用这一过程,下是一个简单的例子,展示如何编写一段 C# 代码以实现的布置: ```csharp public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Document doc = uidoc.Document; // 获取类别下的所有可用类型 FilteredElementCollector collector = new FilteredElementCollector(doc); IList<Element> familySymbols = collector.OfCategory(BuiltInCategory.OST_Windows).OfClass(typeof(FamilySymbol)).ToElements(); using (Transaction trans = new Transaction(doc)) { trans.Start("Place Window"); foreach (var symbol in familySymbols) { FamilySymbol fsymbol = symbol as FamilySymbol; if (!fsymbol.IsActive) continue; PromptForFamilyInstancePlacementOptions options = new PromptForFamilyInstancePlacementOptions(fsymbol); Reference reference = uidoc.Selection.PickObject(ObjectType.Element, "Select a location to place the window."); XYZ pointOnRef = uidoc.Document.GetElement(reference).Location.Point; fsymbol.Activate(); doc.Create.NewFamilyInstance(pointOnRef, fsymbol, StructuralType.NonStructural); } trans.Commit(); } return Result.Succeeded; } ``` 这段代码展示了如何遍历特定分类中的所有符号(这里是以窗户为例),并通过 `PromptForFamilyInstancePlacementOptions` 来让用户指定放置的位置。注意这里的事务处理机制确保了所有的修改都在一个安全可控的状态下完成。 对于系统而言,虽然其行为和属性可能有所不同,但基本的操作模式仍然适用。例如墙壁(Wall) 或柱(Column),这些是由Revit内部预定义的对象,可以通过相似的方式进行管理和操作[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值