Устаревший контекст устройства слишком груб - PullRequest
0 голосов
/ 07 января 2010

У меня есть система управления процессом. У этого есть огромное 2D рабочее пространство, где вся логика выложена. 2D рабочее пространство является системой координат. Обычно вы видите не всю рабочую область сразу, а скорее ее увеличенную часть, сосредоточенную на какой-то части контролируемого процесса. Такие представления подсистемы закладываются в предварительно определенные именованные изображения (Power Generator1, Diesel Generator, Главный смазочный насос и т. Д.).

Это рабочее пространство взаимодействует со многими устаревшими программными компонентами MFC, которые по отдельности вносят графику в рабочее пространство (контекст устройства передается всем участникам).

Теперь один из компонентов программного обеспечения отображает чертежи AutoCAD на поверхности. Однако разрешение контекста устройства недостаточно для подробностей этой работы. Логическое разрешение контекста устройства, к сожалению, определяется нашей собственной системой координат, которая при высоких уровнях масштабирования сильно отличается от единиц измерения устройства (пикселей). Например, линия, нарисованная с использованием

DC.MoveTo(1,1); 
DC.LineTo(1,2);

.... на самом деле, даже если он рисуется непосредственно в контексте устройства с шагом всего в одну логическую единицу, он покрывает довольно большое расстояние на экране. Но ширина линии все равно будет составлять всего один пиксель устройства. Круг выглядит в высоком разрешении, но его данные (центральная точка и радиус) могут быть получены только с грубыми приращениями.

Я рассмотрел следующие варианты: * Когда предопределенное изображение загружается и отображается, создайте контекст устройства с более подходящим разрешением. Тогда проблема заключается в том, что другие графические провайдеры взаимодействуют с ним, используя старые логические единицы, что при использовании против нового DC приведет к слишком маленьким и смещенным графическим элементам.

  • Интересно, смогу ли я создать какую-нибудь оболочку DC, которая принимает оба вида координат через разные API, которые затем внутренне преобразуются в координаты высокого разрешения.

  • Возможно ли иметь два DC с различным соотношением логических устройств / устройств? И вынести их обоих на экран?

Я упоминал, что круг красиво отображается с шириной в один пиксель, хотя его расположение и радиус ограничены. Вертикальные линии также отображаются красиво, хотя конечные точки могут быть заданы только в грубых координатах. Это приводит меня к мысли, что технически возможно нарисовать область, которая в логических координатах DC может быть описана только в десятичных числах.

Кто-нибудь знает, что делать?

Ответы [ 2 ]

1 голос
/ 08 января 2010

Вы можете нарисовать изображение высокой четкости на другом DC в новом окне и поместить это окно поверх вашего чертежа с низким разрешением. Конечно, вы должны справиться со стрижкой самостоятельно.

1 голос
/ 07 января 2010

Вам нужно масштабировать модель, а не контекст устройства.

...