CATIA CAA 界面加载图片开发经验总结
- 作者: CATIA开发者指南
- 发布时间: 2026-07-13 22:14:04
- 原文链接: https://mp.weixin.qq.com/s?__biz=MzkxNTQ0MTY0NQ==&mid=2247486610&idx=1&sn=a9be3075c057e9aa79b74fd2edc796f4&chksm=c15e5e10f629d706e7647f3ef2b69662842909c92ad12a97973a1e07984dfec2695fbc142044#rd
1. 核心目标
总结 CATIA V5 CAA 界面中加载和展示图片的常见实现方式。
2. CAA 界面加载图片的主要方式
在 CAA 开发中,图片展示大致可以分为四类。它们服务的目标不同,不应把“工具栏图标”和“可缩放预览图”当成同一种需求。
| 方式 | 典型用途 | 动态文件 | 彩色大图 | 自适应/缩放 | 跨平台性 | 实现复杂度 |
|---|---|---|---|---|---|---|
| CAA 资源图标 | 工具栏、命令头、按钮图标 | 弱 | 不适合 | 弱 | 好 | 低 |
| Dialog 控件位图 | 按钮、复选框、下拉项的小位图 | 中 | 不适合 | 弱 | 好 | 低到中 |
| Visualization Viewer | PNG/JPEG/BMP/TIFF 预览、2D/3D 图形 | 强 | 适合 | 强 | 好 | 中 |
| MFC/Win32 子窗口 | Windows 专用复杂图片控件 | 强 | 适合 | 取决于控件 | 差 | 高 |
2.1 CAA 资源图标
资源图标是 CAA 中最标准的图片使用方式,常见于命令头、工具栏和带图标的 Dialog 控件。
典型资源声明:
CATDrawingToXMLAddinsHdr.FrameReplace.Icon.Normal="I_FrameReplace";
图片一般放在框架运行资源目录,例如:
CNext/resources/graphic/icons/normal
运行时由 CAA 资源系统和 CATGraphicPath 定位。命令资源通常在 .CATRsc 中声明,文本放在 .CATNls 中。
优点:
- 符合 CAA 原生资源管理方式。
- 工具栏、命令头和标准控件集成最自然。
- 资源名称与业务代码解耦。
- 一般具有较好的 CAA 版本和平台适配性。
- 实现简单,生命周期由框架管理。
缺点:
- 更适合尺寸固定的小图标,不适合图纸、照片等大图预览。
- 运行时随意切换外部图片不方便。
- 资源更新后通常需要重新生成或刷新 Runtime View。
- 不能直接提供平移、缩放、自动适配等 Viewer 能力。
适用建议:
- 工具栏命令图标优先使用此方式。
- 图片是产品固定资源,而不是用户动态选择的文件时优先使用此方式。
- 不要为了显示一张可变 PNG 预览图而把所有文件注册为命令资源。
2.2 Dialog 控件位图
部分 CAA Dialog 控件支持直接设置位图。例如 B26 的 CATDlgControl::SetIconBitmap() 可以给以下控件设置单色图标:
CATDlgPushButtonCATDlgCheckButtonCATDlgRadioButton
CATDlgCombo 也支持带位图的下拉项。
简化示例:
unsignedchar bitmap[] = { /* monochrome bitmap bytes */ };
button->SetIconBitmap(bitmap, width, height);
优点:
- 不必创建 Viewer。
- 适合运行时生成的小图标或状态图标。
- 与现有 Dialog 控件结合紧密。
- 比嵌入 MFC 控件轻量。
缺点:
-
SetIconBitmap()面向单色小图标,不是通用彩色图片控件。
-
适用控件范围有限,不能把任意 Label 当作图片预览控件。
-
不具备自动缩放、平移、重构视野等能力。
-
像素缓冲区格式和生命周期需要调用方正确管理。
适用建议:
- 按钮状态、简单标记、动态生成的单色小图标可使用此方式。
- 图框、照片、截图等大尺寸彩色图片不要使用此方式。
2.3 Visualization Viewer
这是本次图框模板预览采用的方式。核心对象如下:
CAT2DViewer
-> CAT2DImagePixelRep
-> CATPixelImage
其中:
-
CATPixelImage负责从文件读取像素图片。
-
CAT2DImagePixelRep把像素图片转换成可显示的 2D Graphic Representation。
-
CAT2DViewer负责承载、绘制和缩放 Rep。
B26 的 CATPixelImage::CreateFromFile() 支持从 RGB、TIFF、JPEG、BMP、PNG 等文件创建图片对象。
优点:
- CAA 原生 Visualization 技术栈,不需要引入 Windows UI 控件。
- 适合展示动态路径下的外部图片。
- 支持彩色大图、透明度和高质量缩放。
- 具备
AddRep、RemoveRep、Draw、Reframe等完整显示能力。 - 后续可扩展平移、缩放、Overlay、2D 图元叠加等功能。
- 与 CAA Dialog、通知和生命周期模型较容易统一。
缺点:
- 比资源图标和控件位图复杂。
- 需要正确管理
CATPixelImage、CAT2DImagePixelRep和 Viewer 的生命周期。 - 需要增加 Visualization 相关框架和链接模块。
- Viewer 的构造尺寸、初始可见性和 Grid 布局会影响最终自适应效果。
- 空图片、切图、关闭 Dialog 和窗口 Resize 都需要显式处理。
适用建议:
- 图纸、模板、截图、缩略图、照片等动态预览优先使用该方式。
- 如果还要显示 2D 图元或支持交互缩放,Viewer 基本是首选。
- 只有纯 3D 模型预览时才考虑
CAT3DViewer,不要为单张 PNG 使用 3D Viewer。
2.4 嵌入 MFC/Win32 图片控件
在 Windows CAA Dialog 中,可以取得宿主窗口句柄,再创建 MFC 或 Win32 子窗口。例如使用:
-
CStatic- Bitmap
-
CImage -
GDI+
-
WIC
-
自定义
CWnd -
第三方图片控件
基本结构:
CATDialog Host
-> GetWindowHandle()
-> CWnd::FromHandle()
-> 创建 WS_CHILD | WS_VISIBLE 子窗口
-> 在 Resize 时 MoveWindow()
优点:
- Windows 图片处理选择丰富。
- 容易接入 GDI+、WIC、OpenCV 或第三方控件。
- 可实现复杂的右键菜单、拖放、标注、滚动和自定义绘制。
- 对已有 MFC 代码复用价值较高。
缺点:
- 仅适用于 Windows,跨平台性差。
- 需要处理 CAA Dialog 与 MFC 消息循环的桥接。
- 宿主窗口句柄的创建时机非常关键。
- 需要处理 DPI、像素尺寸、Resize、焦点和键盘消息。
- MFC 依赖、编译环境和链接配置更复杂。
- CAA 对象与 MFC 对象的销毁顺序处理不当时容易崩溃。
适用建议:
- 已有成熟 MFC 图片控件且必须复用时采用。
- 需要 CAA Viewer 不具备的 Windows 专用能力时采用。
- 仅做普通 PNG 预览时,不建议优先选择 MFC。
2.5 特殊用途接口
CAA 还存在少量特定场景图片接口,例如应用启动 Splash Screen。这类接口只服务固定场景,不应当作为普通 Dialog 图片预览方案。
3. 方案选择建议
可以按以下规则快速选择:
固定工具栏/按钮小图标
-> CAA 资源图标
运行时生成的单色按钮状态图标
-> Dialog 控件位图
动态 PNG/JPEG/BMP/TIFF 大图预览
-> CAT2DViewer + CATPixelImage + CAT2DImagePixelRep
Windows 专用复杂图片编辑或已有 MFC 控件复用
-> MFC/Win32 子窗口
3D 模型预览
-> CAT3DViewer,而不是图片 Viewer
评论