📜  创建模式发电机 revit - Python (1)

📅  最后修改于: 2023-12-03 15:22:41.246000             🧑  作者: Mango

创建模式发电机 Revit - Python

在Revit中使用Python脚本创建模式发电机可以大大提高生产效率。在本文中,我们将介绍如何创建一个用于生成不同的模式发电机的Python脚本,并提供代码片段来给程序员参考。

步骤1:导入Revit API

使用Revit Python Shell或Revit插件的命令行窗口启动Python解释器后,首先要导入Revit API。请确保你已经正确安装了Revit,然后使用以下代码导入API:

import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.DB import *
步骤2:定义模式发电机类

要创建模式发电机,我们需要定义一个类。该类应该继承Revit API中的PatternGenerator类,并实现createPattern()抽象方法,该方法决定如何创建模式图案。

class MyPatternGenerator(PatternGenerator):
    def createPattern(self, document, data):
        # 创建模式图案
步骤3:实现createPattern()方法

我们需要在createPattern()方法中实现模式图案的创建。它应该接受两个参数:document和data。其中,document是Revit文档的对象,而data是一组用于创建模式的参数。

下面是一个在每个网格上创建十字型符号的基本示例:

def createPattern(self, document, data):
    # 获取构建对象
    floor_type = document.GetElement(data.TypeId)
    level = document.GetElement(data.LevelId)
    bounding_box = floor_type.get_BoundingBox(None)
    x_extent = bounding_box.Max.X - bounding_box.Min.X
    y_extent = bounding_box.Max.Y - bounding_box.Min.Y
    grid_spacing = 3

    # 创建符号
    symbol = DocumentManager.Instance.NewFamilySymbol( \
        ElementId(data.FamilySymbolTypeId))

    # 在每个网格上创建符号
    for i in range(0, int(x_extent / grid_spacing)):
        for j in range(0, int(y_extent / grid_spacing)):
            point = XYZ((i * grid_spacing) + bounding_box.Min.X, (j * grid_spacing) + bounding_box.Min.Y, 0)
            symbol_instance = document.Create.NewFamilyInstance(point, symbol, level, StructuralType.NonStructural)
            document.Regenerate()
步骤4:注册模式发电机

我们需要使用RevitAPI中的ExternalDefinitionCreationOptions类创建将用于生成模式发电机的新模式发电机定义。然后,我们需要将模式发电机定义与模式发电机类MyPatternGenerator关联,并使用PatternManager.RegisterPatternGenerator()方法将其注册到Revit文档中。

def register(pattern_name):
    # 创建外部定义
    edco = ExternalDefinitionCreationOptions(pattern_name, ParameterType.Text)
    pattern_def = DocumentManager.Instance.Application.OpenSharedParameterFile().Groups.get_Item('MyGroup').Definitions.AddItem(edco)

    # 关联模式发电机类
    pattern_generator = MyPatternGenerator()

    # 将模式发电机定义与模式发电机类关联并注册到Revit文档中
    pm = DocumentManager.Instance.CurrentDBDocument.Patterns
    pm.RegisterPatternGenerator(pattern_def, pattern_generator)
使用模式发电机

现在我们可以使用模式发电机来创建模式。我们需要使用PatternElementCreationData类来指定模式图案的位置和应用程序。然后,我们可以使用PatternUtils.CreateFillPattern()方法创建模式。

data = PatternElementCreationData(ElementId(floor_type.Id), ElementId(level.Id), \
                                   ElementId(symbol.Id), PatternElementType.FillPatternElementType)
uiapp = DocumentManager.Instance.CurrentUIApplication
application = uiapp.Application
fill_pattern = PatternUtils.CreateFillPattern(application, data)
结论

通过本文,我们学习了如何使用Python在Revit中创建模式发电机。我们熟悉了如何导入Revit API以及如何实现模式发电机类和createPattern()方法。我们还了解了如何使用ExternalDefinitionCreationOptions、PatternManager.RegisterPatternGenerator()和PatternElementCreationData等Revit API,来注册模式发电机并创建模式。

这些代码片段将有助于程序员在创建自己的模式发电机时参考实现。