使用 Revit API 在 Revit 中获取元素厚度的错误宽度

问题描述 投票:0回答:1

我使用 Revit API 使用 PyRevit 创建了一个插件,以获取模型中使用的层中的材料及其厚度,但是来自 API 的结果与我给材料作为厚度的结果不同。

例如我试过这段代码:

# Create the dict for JSON
components = {
    "wall": [],
}

# Select all walls
walls = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).ToElements()

# Get the outer wall
outer_wall = None
for item in walls:
    if isinstance(item, Wall):
        el = doc.GetElement(item.Id)
        if el.Name == "Aussenwand":
            outer_wall = doc.GetElement(el.Id)


# Get the material and width of each layer of outer wall and add to components
if outer_wall is not None:
    wall_type = doc.GetElement(outer_wall.GetTypeId())
    compound_structure = wall_type.GetCompoundStructure()
    for layer_index in range(compound_structure.LayerCount):
        layer_width = compound_structure.GetLayerWidth(layer_index)
        material_id = compound_structure.GetMaterialId(layer_index)
        if material_id.IntegerValue != -1:
            material = doc.GetElement(material_id)
            components["wall"].append({material.MaterialCategory: layer_width})

所以这里是例如这段代码的结果:

{
'wall':
 [{'Gipsputz': 0.049212598425196846},
 {'Mauerwerk': 0.5741469816272966},
 {'Isolierung': 0.45931758530183725},
 {'Gipsputz': 0.049212598425196846}]
}

但是我在 Revit 中给这种材料的厚度是另外一回事,例如第一个元素应该有 15 毫米的厚度 This is the layers of wall

我觉得材料可能有一些默认厚度,Revit 正在获取它们。 有没有人知道如何解决它?

python revit-api revitpythonshell pyrevit
1个回答
1
投票

更新:

在与此代码冲突数小时后,我意识到我这边有一个错误。 Revit API 为我提供了英制单位,我需要将它们更改为公制。

有 2 个解决方案,我选择使用 Revit API 和 UnitTypeIdUnitUtils

# Get the material and width of each layer of outer wall and add to components

if outer_wall is not None:
    wall_type = doc.GetElement(outer_wall.GetTypeId())
    compound_structure = wall_type.GetCompoundStructure()
    for layer_index in range(compound_structure.LayerCount):
        layer_width_feet = compound_structure.GetLayerWidth(layer_index)
        layer_width_mm = UnitUtils.ConvertFromInternalUnits(layer_width_feet, UnitTypeId.Millimeters)
        material_id = compound_structure.GetMaterialId(layer_index)
        material = doc.GetElement(material_id)
        components["wall"].append({material.MaterialCategory: round(layer_width_mm)})

另一种解决方案是仅通过代码更改它,而不是使用 Revit API。例如,每 1 英尺是 304.8 毫米。

© www.soinside.com 2019 - 2024. All rights reserved.