2021年10月4日 天气晴,于福州。
最近很长时间没更新文章了,正好最近研究了一下套管随管道移动的动态更新功能,正好发上来大家参考。
要想实现这个功能,我认为有2种方法:
1.用DocumentChanged事件来实现。
2.利用revit提供的机制DMU功能(Dynamic Model Update)。
小编尝试使用DMU功能来实现这个过程,效果如下: http://mpvideo.qpic.cn/0bf23aaayaaa2uaitwc2krqvbwgdbtmaadaa.f10002.mp4?dis_k=46b033ba50bdc2bdc05615bcf4f4616d&dis_t=1650516618&vid=wxv_2075844648454897665&format_id=10002&support_redirect=0&mmversion=false
- 注册一个更新的RegisterUpdater UpdaterRegistry.RegisterUpdater(dmuUpdater);
- 添加一个监听接口AddTrigger UpdaterRegistry.AddTrigger(dmuUpdater.GetUpdaterId(), pipeCategoryfilter, geometryChange);
可以通过Element的以下方法来监听改变的事件:
1 | GetChangeTypeAny | 元素的任意改变 |
---|---|---|
2 | GetChangeTypeElementAddition | 元素的添加 |
3 | GetChangeTypeElementDeletion | 元素的删除 |
4 | GetChangeTypeGeometry | 元素的图形的改变 |
5 | GetChangeTypeParameter(ElementId) | 指定元素的参数改变 |
6 | GetChangeTypeParameter(Parameter) | 参数的值改变 |
3.通过IUpdater接口注册更新元素
public class DMUUpdater : IUpdater
4. 更新的内容,都在Data里
public void Execute(UpdaterData data)
5.通过GetModifiedElementIds()来获得修改了的元素
ElementId elementId in data.GetModifiedElementIds()
6. 通过修改套管的Point 来实现跟随变化的动作
(el.Location as LocationPoint).Point = xyzNew;
基本上就是通过以上的方法来实现套管随管道变化而实时变化的。