40施工建模
施工建模
Revit API允许将图元划分为子零件或收集到程序集中,以支持构造建模工作流,这与使用Revit用户界面的方法大致相同。零件和程序集都可以独立地进行明细表、标记、过滤和导出。您也可以将零件分割成更小的零件。创建程序集类型后,可以在项目中放置其他实例并生成独立的程序集视图。
与构造建模相关的主要类有:
- AssemblyInstance -这个类结合了多个元素,用于标记、过滤、调度和创建隔离的装配视图。
- AssemblyType - 表示构造程序集元素的类型。在项目中创建的每个新的唯一程序集都会自动创建一个相应的AssemblyType。可以从现有AssemblyType将新AssemblyInstance放置到文档中。
- PartUtils - 这个实用程序类包含通用的程序集实用程序方法,包括创建程序集、划分程序集和获取程序集信息的能力。
- AssemblyViewUtils - 用于创建各种类型的装配视图的实用程序类。
本节中的页面
- 程序集和视图
- 部分
程序集和视图
可以组合任意数量的模型图元以创建程序集,然后可以编辑、标记、创建明细表和过滤程序集。
创建程序集
AssemblyInstance类的静态Create()方法用于在项目中创建新的程序集实例。Create()方法必须在事务内部创建,并且必须在对新创建的程序集实例执行任何操作之前提交事务。在事务处理完成后分配装配件类型。每个唯一程序集都有自己的AssemblyType。
下面的示例创建一个新的程序集实例,更改其AssemblyType的名称,然后为该程序集实例创建一些视图。
代码区域:创建程序集和视图
1 | AssemblyInstance CreateAssemblyAndViews(Autodesk.Revit.DB.Document doc, ICollection elementIds) |
创建AssemblyInstance的另一种方法是使用现有AssemblyType。若要使用AssemblyType创建AssemblyInstance,请使用静态方法AssemblyInstance.PlaceInstance(),并指定要使用的AssemblyType的ElementId和放置程序集的位置。
程序集视图
可以使用AssemblyViewUtils类的静态方法为程序集实例创建各种程序集视图,包括正交三维程序集视图、详图截面程序集视图、材质提取多类别明细表程序集视图、明细表多类别明细表程序集视图、单类别明细表和图纸程序集视图。除图纸视图外,所有这些视图都具有重载的创建方法,这些方法从样板创建明细表或视图。除了模板ID之外,这些重载还有一个参数来指示是否将分配或应用模板。
请注意,程序集视图必须全部指定给程序集类型的同一程序集实例。如果程序集实例可以接受新的程序集视图(因为它已经有视图,或者因为没有程序集实例有视图),则AssemblyInstance.AllowsAssemblyViewCreation()返回true。
下面的示例从给定模板为装配创建新的单一类别明细表。
代码区域:从模板创建程序集视图
1 | private ViewSchedule CreateScheduleForAssembly(Document doc, AssemblyInstance assemblyInstance, ElementId viewTemplateId) |
在使用任何这些新创建的程序集视图之前,必须重新生成文档。在上面的示例中,您会注意到事务是在创建新的组装视图之后提交的。Commit()方法自动重新生成文档。
部分
可以从具有分层结构的元素生成零件,例如:
- 墙(不包括叠层墙和幕墙)
- 楼层(不包括形状编辑的楼层)
- 屋顶(不包括有屋脊的屋顶)
- Ceilings 天花板
- 结构板基础
在Revit API中,可以使用PartUtils类将图元划分为多个部分。静态方法PartUtils.ObjectParts()用于从一个或多个元素创建程序集。请注意,与API中的大多数元素创建方法不同的是,RectorParts()实际上并不创建或返回程序集,而是实例化一个名为PartMaker的元素。在再生过程中,PartMaker使用其嵌入的规则来驱动所需零件的创建。
API还提供了一个细分程序集的接口。PartUtils. DivideParts()接受一个程序集ID集合、一个”相交元素” ID集合(可以是层和网格)和一个曲线集合作为输入。该例程使用相交的元素和曲线作为边界,从中分割并生成新零件。
The GetAssociatedParts() method can be called to find some or all of the parts associated with an element, or use HasAssociatedParts() to determine if an element has parts.
可以调用GetAssociatedParts()方法来查找与元素关联的部分或全部部分,或者使用HasAssociatedParts()来确定元素是否有部分。
您可以通过API删除零件,方法是删除单个零件元素,或删除与零件关联的PartMaker(这将在下次再生后删除此PartMaker生成的所有零件)。
可以在Revit API中操作零件,操作方式与在Revit用户界面中操作零件的方式大致相同。例如,可以使用PartUtils. SetFaceOffset()偏移零件的外部边界。
下面的示例将偏移零件的所有可以偏移的面。
代码区域:零件的偏移面
1 | Part part = doc.GetElement(uidoc.Selection.PickObject(ObjectType.Element)) as Part; |
偏移选定零件的面之前和之后