0

我在 Revit 编程方面相对较新。我目前正在我的绘图中获取门或窗类型的元素列表。我想要做的是将这些转换为开口,但是当我尝试将它们转换为 Autodesk.Revit.DB.Opening 时出现错误。
下面的代码:

            // filter for current design option
        var designOptionFilter = S2E.Revit.Tools.Library.Cache.DesignOptionFilter;

        List<Element> elements = collector.WherePasses(designOptionFilter).ToElements().ToList();           

        var list = new List<Autodesk.Revit.DB.Opening>();

        foreach (var element in elements) {

            var opening = (Opening)element;
            if (opening.Host.Id == wallId) {
                list.Add(opening);
            }
        }

        return list;

如您所见,我正在测试主机的 ID 是否与我正在工作的墙匹配。至少那是我想做的。我正在寻找的只是如何将元素转换为开头。

谢谢,丰富

4

2 回答 2

1

考虑到 Door 是 FamilyInstance 而 Opening 不是,我不确定您如何将门 FamilyInstance 转换为开放类型。

但是,由于 FamilyInstance 有一个 Host 参数,只需检查墙 ID 即可,它应该可以工作,不需要强制转换。

于 2013-08-26T22:47:59.580 回答
0

这取决于您的过滤器选择的演员是否有效。由于您没有提供有关您得到的确切错误的详细信息,因此很难更准确。

此外,您在一个地方(开口)用作您的演员,但在创建列表时使用完整的类型名称“Autodesk.Revit.DB.Opening”。如果您真的需要这样做,那么Opening 可能不是您认为的“Opening”。

您还可以使用 element.Cast() 来执行转换。

同样,如果您知道过滤器返回的所有元素都只会是开放类型,那么您可以使用

collector.WherePasses(designOptionFilter).Cast<Opening>()

达到同样的目的。

于 2013-05-29T05:19:08.930 回答