Building Coder(Revit 二次开发) - 分解DWG文件

原文链接: Explode a DWG

昨天我们讨论了一个实践性很强的问题:为管道创建一个盖子( creating a pipe cap)。今天让我们来看一个代码相对较少的问题。它是由 acadGraph CADstudio GmbH 的 Rudolf Honke 提出的,起因是评论 Sami 关于“注册UI自动化事件”( subscribing to UI Automation events)的叙述。

提问:
是否可以用API分解一个导入的DWG文件?

回答:
在演示了“执行两遍命令”( invoking commands twice)之后,我认为这是完全可能的。

就像其它的 ribbon 元素一样,'Explode'按钮也可以通过UI自动化来访问。顺便说一下,我发现有时候 ImportInstance 没有包含所有可见的几何信息,即使导入的DWG文件仅仅包含几条线段(或曲线)。如果我们在导入之后分解DWG 的内容,我们可以通过注册 DocumentChanged 事件并读取事件参数 GetAddedElementId 数据来获取所有的线段。因为分解的结果是作为独立的 Revit 元素添加入 Revit 数据库的。通过这种方式,我们可以解决DWG文件在导入Revit 之后丢失几何信息的问题。

在获取到全部几何信息之后,我们可以回滚事务来取消DWG分解。然而如果使用UI自动化,我们已经离开了 Revit 上下文。所以不能直接通过程序方式来操作事务了。即使在这种情况下,我们依然可以利用UI自动化来模拟单击 Undo 按钮的动作,从而达到取消DWG分解的目的。

UI事件注册例程
为了使我之前的UI自动化浅析( former UIAutomation hints)更加实用,我整理了一个完整的VS工程( RevitUIAutoSamples)。这里例程展示了两个关键技术:
1. 注册 ribbon 按钮事件和 Revit 主窗口事件;
2. 两次调用命令并且随后单击 DWG Explode 按钮

注意这个例程仅仅是为了展示可行性,所以没有完备的错误处理。比方说:ribbon 按钮单击事件的注册在 ribbon 按钮是 SplitButton 或者 ListItem 的子控件时是无效的。


你可能感兴趣的:(数据库,UI,api,events)