1. 中望CAD二次开发中的Overrule机制解析
在CAD二次开发领域,Overrule(重写规则)是一种强大的扩展机制,它允许开发者在不修改原生实体类的情况下,改变CAD实体的默认行为。与完全自定义实体相比,Overrule提供了更轻量级的干预方式,特别适合需要对标准实体进行局部行为修改的场景。
中望CAD的ZRX SDK基于C++提供了完整的Overrule接口体系,其核心基类ZcRxOverrule派生出了多种具体规则类型,包括我们重点讨论的ZcGiDrawableOverrule。这种设计模式在CAD二次开发中具有显著优势:
- 非侵入式修改:无需继承原生实体类即可改变其行为
- 动态生效:规则可运行时加载/卸载,不影响已有图形数据
- 精准控制:可通过条件判断实现针对性修改
- 多规则叠加:不同规则可组合作用于同一实体
重要提示:Overrule只影响实体的显示和行为,不会修改实体本身的数据库存储。这种"视图层"的修改特性使其特别适合实现临时性的显示效果或辅助功能。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ZcGiDrawableOverrule基础实现
2.1 基本实现步骤
实现一个基础的绘制规则需要以下步骤:
- 创建派生类:从ZcGiDrawableOverrule派生自定义规则类
- 重写关键方法:至少实现worldDraw和isApplicable两个虚函数
- 注册规则:通过ZcRxOverrule::addOverrule注册到目标实体类型
- 管理生命周期:在插件加载/卸载时正确初始化和清理
典型类声明如下:
cpp复制class MyLineOverrule : public ZcGiDrawableOverrule {
public:
virtual ZSoft::Boolean worldDraw(ZcGiDrawable* pSubject,
ZcGiWorldDraw* wd) override;
virtual bool isApplicable(const ZcRxObject* pOverruledSubject) const override;
};
2.2 worldDraw方法详解
worldDraw是控制实体绘制的核心方法,其参数解析:
pSubject:当前被规则作用的实体对象wd:提供绘制接口的世界坐标系绘制上下文
一个典型的实现示例:
cpp复制ZSoft::Boolean MyLineOverrule::worldDraw(ZcGiDrawable* pSubject,
