我对Revit的编程比较陌生。我当前正在获取图形中类型为door或window的元素列表。我想做的是将它们转换为一个开始,但是当我尝试将它们转换为一个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是否与我正在工作的墙匹配。至少这是我想要做的。我所寻找的就是如何铸造一个元素作为一个开口。
谢谢你,瑞奇
发布于 2013-08-27 06:48:00
考虑到门是FamilyInstance而洞口不是,我不确定如何将门FamilyInstance转换为洞口类型。
但是,由于FamilyInstance有一个主机参数,只需对照墙壁ID进行检查,它应该可以工作,不需要强制转换。
发布于 2013-05-29 13:19:09
这取决于你的过滤器选择的是什么,取决于你的强制转换是否可以工作。由于您没有提供所得到的确切错误的详细信息,因此很难更精确。
此外,您在一个地方(开始)用作您的演员,但您使用完整的类型名称"Autodesk.Revit.DB.Opening“,当您创建您的列表。如果你真的需要这样做,也许开场并不是你想象中的“开场”。
您也可以使用element.Cast()来执行转换。
同样,如果您知道过滤器返回的所有元素都只是打开类型,那么您可以使用
collector.WherePasses(designOptionFilter).Cast<Opening>()以达到同样的目的。
https://stackoverflow.com/questions/16801113
复制相似问题