首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Revit元素转换为Revit.DB.Opening

如何将Revit元素转换为Revit.DB.Opening
EN

Stack Overflow用户
提问于 2013-05-29 04:40:52
回答 2查看 1.4K关注 0票数 0

我对Revit的编程比较陌生。我当前正在获取图形中类型为door或window的元素列表。我想做的是将它们转换为一个开始,但是当我尝试将它们转换为一个Autodesk.Revit.DB.Opening时,我得到了一个错误。

代码如下:

代码语言:javascript
复制
            // 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是否与我正在工作的墙匹配。至少这是我想要做的。我所寻找的就是如何铸造一个元素作为一个开口。

谢谢你,瑞奇

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-27 06:48:00

考虑到门是FamilyInstance而洞口不是,我不确定如何将门FamilyInstance转换为洞口类型。

但是,由于FamilyInstance有一个主机参数,只需对照墙壁ID进行检查,它应该可以工作,不需要强制转换。

票数 1
EN

Stack Overflow用户

发布于 2013-05-29 13:19:09

这取决于你的过滤器选择的是什么,取决于你的强制转换是否可以工作。由于您没有提供所得到的确切错误的详细信息,因此很难更精确。

此外,您在一个地方(开始)用作您的演员,但您使用完整的类型名称"Autodesk.Revit.DB.Opening“,当您创建您的列表。如果你真的需要这样做,也许开场并不是你想象中的“开场”。

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

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

代码语言:javascript
复制
collector.WherePasses(designOptionFilter).Cast<Opening>()

以达到同样的目的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16801113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档