问题:
用函数ElementTransformUtils.MirrorElement(doc, wall.Id, plane)创建一个墙的镜像,我想对镜像出来的墙做一些处理,可惜这个函数没有返回值,得不到镜像墙的句柄。
我现在的做法是做镜像之前取一遍墙的List,镜像之后在取一遍,看多出哪个,有没有更有效率的办法?
答:
不知道你是否想在同一个命令中来获知镜像后新生成的墙?
如果想在同一个Revit二次开发命令中获知新生成的墙,只能采用你说的方法。 但是有一个窍门:Revit 通过过滤FilteredElementCollector 获知的ElementId.IntegerValue 是按照升序排列的。(我是我发现的规律,尚未发现违背这个规律的)。 对比MirrorElement命令前后的最大Wall的ElementId.IntegerValue 值,你只需从后到前的方式获取几个墙的ElementId,看看是否是新生成的。这应该可以减少
如果你想在另一个命令中获知新产生了哪些墙,你可以用DocumentChanged 事件。 这个事件处理函数的参数会带有哪些对象时新生成的,哪些对象被删除了。
下面是DocumentChanged 事件处理函数的参数类提供的方法来获取Document里面对象发生的具体变化。
GetAddedElementIds()()()() |
Returns set of elements newly added to the document.
|
|
GetAddedElementIds(ElementFilter) |
Returns set of newly added elements that pass the filter.
|
|
GetDeletedElementIds |
Returns set of elements that were deleted from the document.
|
转载请复制以下信息:
原文链接: http://blog.csdn.net/joexiongjin/article/details/17349247
作者: 叶雄进