Wpf方式解析CAD
当前 WPF CAD 逻辑
现在 BoardImageWpfPlugin 的 CAD 整板图不是走 DisplayEx,也不是直接显示数据库里的位图。流程是:
- 选择料号/层/批号后,在 BoardImageWpfViewModel.cs 读取板号、
LayerBitmap/LayerBitmapMatrix、JobCADName、LayerCADName、MasterStepName、机台 CAD 路径、Step 轮廓、旋转和镜像。 - 先尝试 CAD:检查
missing-cad负缓存、检查本地cadcache是否已有当前jobCadName + masterStepName + layerCadName,没有就从机台共享目录复制 CAD。 - CAD 可用时,走 WpfCadPanelService.cs:用
CADLib/ODBBuilder打开 ODB,解析 step/layer,按AOILayerRotation和 mirror 创建CADPlacement,算出 CAD bounds。 - 显示时,WPF 维护一个当前视野 ROI,在 BoardImageWpfView.xaml.cs 异步渲染当前视野。
- 渲染本质是从 CAD 矢量数据按当前 ROI 重新栅格化成当前窗口大小的
BitmapSource/WriteableBitmap,不是放大一张固定底图;所以严格说“源数据是矢量 CAD,屏幕最终是按视野实时生成的高清位图”。 - Step 轮廓、缺陷箭头、选中高亮、tooltip、双击定位缩略图这些不是 CAD 控件画的,而是 WPF Canvas overlay 叠加在 CAD 渲染图上,逻辑在 BoardImageWpfView.xaml.cs。
和旧 BoardImageViewPlugin 的区别
旧 BoardImageViewPlugin 的主 CAD 显示是嵌入 VVS 的 WinForms DisplayEx,入口在 BoardImageViewView.xaml.cs。它创建 DisplayEx,把 ImageUtil.Layer 加进去,设置 Rotate/FlipX/ROI,然后 UpdatePicture(),缩放、框选、ROI 和部分交互主要由 DisplayEx 控件自己处理。
当前 WPF 插件和旧插件相同的是:CAD 来源、CAD cache/回退位图策略、AOILayerRotation、mirror、钻孔层叠加、缺陷/轮廓数据来源基本一致。不同的是:旧插件依赖 DisplayEx/ImageUtil/WinFormsHost 这一套重控件;WPF 插件自己用 CADLib 渲染当前视野,自己管理缩放、平移、框选、方向键和 overlay,所以依赖更轻、行为更可控,但不是把 VVS 的矢量控件原封不动搬过来。
评论 0
发表评论
暂无评论,快来发表第一条评论吧!