Building Coder(Revit 二次开发) - 分解DWG文件
2012-01-29 22:00
232 查看
原文链接: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 的子控件时是无效的。
昨天我们讨论了一个实践性很强的问题:为管道创建一个盖子(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 的子控件时是无效的。
相关文章推荐
- Building Coder(Revit 二次开发) - 列出链接文件和 TransmissionData
- Building Coder(Revit 二次开发) - 改变元素类型
- Building Coder(Revit 二次开发)- 在两条线之间创建尺寸
- Building Coder(Revit 二次开发) - 组合使用 Revit 和 Vault
- Building Coder(Revit 二次开发)- 在新建族中进行镜像操作,并切换当前视图
- Building Coder(Revit 二次开发) - 设置标签类型
- Building Coder(Revit 二次开发) - NewFamilyInstance() 重载版本的选择
- Building Coder(Revit 二次开发) - 共享类型参数
- Building Coder(Revit 二次开发) - 布尔操作和 InstanceVoidCutUtils
- Building Coder(Revit 二次开发) - 可扩展存储
- Building Coder(Revit 二次开发) - 真实世界中的角坐标
- Building Coder(Revit 二次开发) - 拓扑表面(Toposurface)内部和边界点
- Building Coder(Revit 二次开发) - 在一个倾斜的面上创建墙
- Building Coder(Revit 二次开发) - 内置参数名称和LabelUtils类
- Building Coder(Revit 二次开发) - 临时事务的使用技巧
- Building Coder(Revit 二次开发) - RevitLoopup 更新
- Building Coder(Revit 二次开发)- 关于楼板边界的重新思考
- Building Coder(Revit 二次开发) - 针对视图和阶段进行过滤
- Building Coder(Revit 二次开发) - 参数访问和计划信息
- Building Coder(Revit 二次开发) - 放置族实例