将 Wall Instance Id 设置为参数 Wall Id
Set Wall Instance Id into Parameter Wall Id
我想将墙 ID 放入墙的属性中。
代码构建但没有将墙 id 放入所有墙的参数墙 id 中。
我试过没有交易和有交易。我的印象是它必须使用它们来执行,但我没有得到正确的结果(或任何结果)。
public void InsertWallID()
{
Document doc = this.ActiveUIDocument.Document;
FilteredElementCollector collector = new FilteredElementCollector(doc);
ICollection<Element> WallEls = collector.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Walls).ToElements();
using (Transaction trans = new Transaction(doc, "Change wall parameters values"))
{
trans.Start();
int WallIDValue;
foreach(Element WallEl in WallEls)
{
ElementId WallId = WallEl.Id;
WallIDValue = WallId.IntegerValue;
if(WallEl.LookupParameter("WallID")==null)
{
Parameter wallparam = WallEl.LookupParameter("WallID") as Parameter;
wallparam.Set(WallIDValue);
}
}
trans.Commit();
}
}
}
}
预期结果:
每个实例在其参数中都有自己的 id。这可以让我安排墙和它们的墙 ID
实际结果:
参数 WallID 没有变化,因为它仍然是空的。
您应该在调试器中单步执行代码并逐行观察发生的情况。然后你会看到出了什么问题:你的过滤元素收集器没有找到墙。
在进行任何编程之前,您应该使用 RevitLookup 和其他数据库探索工具来确保您正在寻找正确的东西。
如果你窥探一堵墙,你会发现它不是 FamilyInstance
元素。
有专门的 Wall
class 墙。
如果您只过滤 OfClass(typeof(Wall))
,您将得到它们。
此外,调用 ToElements
是浪费时间和内存 space。干脆删了。
我在 The Building Coder 上经常讨论这个问题。
如果您只想迭代过滤元素收集器的结果,则无需使用 ToElements
。
您可以直接遍历收集器本身。
使用ToElements
创建信息副本并无故使用时间和space,参见FindElement and collector optimisation。
我想将墙 ID 放入墙的属性中。
代码构建但没有将墙 id 放入所有墙的参数墙 id 中。
我试过没有交易和有交易。我的印象是它必须使用它们来执行,但我没有得到正确的结果(或任何结果)。
public void InsertWallID() {
Document doc = this.ActiveUIDocument.Document;
FilteredElementCollector collector = new FilteredElementCollector(doc);
ICollection<Element> WallEls = collector.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Walls).ToElements();
using (Transaction trans = new Transaction(doc, "Change wall parameters values"))
{
trans.Start();
int WallIDValue;
foreach(Element WallEl in WallEls)
{
ElementId WallId = WallEl.Id;
WallIDValue = WallId.IntegerValue;
if(WallEl.LookupParameter("WallID")==null)
{
Parameter wallparam = WallEl.LookupParameter("WallID") as Parameter;
wallparam.Set(WallIDValue);
}
}
trans.Commit();
}
}
}
}
预期结果: 每个实例在其参数中都有自己的 id。这可以让我安排墙和它们的墙 ID
实际结果: 参数 WallID 没有变化,因为它仍然是空的。
您应该在调试器中单步执行代码并逐行观察发生的情况。然后你会看到出了什么问题:你的过滤元素收集器没有找到墙。
在进行任何编程之前,您应该使用 RevitLookup 和其他数据库探索工具来确保您正在寻找正确的东西。
如果你窥探一堵墙,你会发现它不是 FamilyInstance
元素。
有专门的 Wall
class 墙。
如果您只过滤 OfClass(typeof(Wall))
,您将得到它们。
此外,调用 ToElements
是浪费时间和内存 space。干脆删了。
我在 The Building Coder 上经常讨论这个问题。
如果您只想迭代过滤元素收集器的结果,则无需使用 ToElements
。
您可以直接遍历收集器本身。
使用ToElements
创建信息副本并无故使用时间和space,参见FindElement and collector optimisation。