我有一个过程控制系统。它有一个巨大的2D工作区,所有逻辑都在其中布置。
2D工作区是一个坐标系。
通常,您不会一次看到整个工作区,而是将其中的某些放大部分集中在受控过程的某些部分上。此类子系统视图被标记为预定义的命名图像(“发电机1”,“柴油发电机”,“主润滑泵”等)。
此工作空间与许多旧式MFC软件组件进行交互,这些组件分别将图形贡献到工作空间中(设备上下文传递给所有贡献者)。
现在,其中一个软件组件将AutoCAD图形绘制到表面上。但是,设备上下文的分辨率不足以完成此作业的详细信息。不幸的是,设备上下文的逻辑分辨率由我们自己的坐标系决定,该坐标系在高缩放级别时与设备单位(像素)完全不同。
例如,使用
DC.MoveTo(1,1);
DC.LineTo(1,2);
实际上,即使仅通过增加一个逻辑单元将其直接绘制到设备上下文上,也将覆盖屏幕上相当长的距离。但是线的宽度仍将仅为一个设备像素。圆看起来很高分辨率,但其数据(中心点和半径)只能以粗略增量进行。
我考虑了以下选项:
*加载并显示预定义的图像后,请以更合适的分辨率创建设备上下文。问题是其他图形提供者使用旧的逻辑单元与之交互,当与新的DC配合使用时,会导致图形元素太小和移位。
我想知道是否可以创建一些DC包装程序,以通过不同的API接受两种坐标,然后将其内部转换为高分辨率坐标。
是否可以有两个逻辑/设备单元比率不同的DC?并将它们都渲染到屏幕上?
我提到过,即使圆的位置和半径受到限制,圆也可以用一个像素宽度完美地呈现。即使只能在粗坐标中给出端点,垂直线也可以很好地呈现。这使我相信,从技术上讲,可以画出只能以小数点表示的DC逻辑坐标区域。
有人对做什么有任何想法吗?
最佳答案
您需要缩放模型,而不是设备上下文。