← 返回首页

CATIA CAA 界面加载图片开发经验总结

CATIA CAA 界面加载图片开发经验总结


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() 可以给以下控件设置单色图标:

  • CATDlgPushButton
  • CATDlgCheckButton
  • CATDlgRadioButton

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 控件。
  • 适合展示动态路径下的外部图片。
  • 支持彩色大图、透明度和高质量缩放。
  • 具备 AddRepRemoveRepDrawReframe 等完整显示能力。
  • 后续可扩展平移、缩放、Overlay、2D 图元叠加等功能。
  • 与 CAA Dialog、通知和生命周期模型较容易统一。

缺点:

  • 比资源图标和控件位图复杂。
  • 需要正确管理 CATPixelImageCAT2DImagePixelRep 和 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

评论