Cтраница 3
Графический дисплей содержит следующие функциональные блоки: БСК, БУ, узел формирования элементов изображения, генератор векторов, клавиатуру, световое перо, средства вывода информации ( ЭЛТ с блоком управления лучом), печатающее устройство. Диалог пользователя с ЭВМ ведется с помощью алфавитно-цифровой, функциональной клавиатуры и светового пера. Основными режимами графического дисплея являются: абсолютный - для высвечивания точек и векторов по абсолютным координатам экрана; знаковый - для формирования и вывода на экран знаков; графиков - для воспроизведения кривых с фиксированным шагом по оси X и произвольным шагом по оси У: дуг - для воспроизведения дуг окружностей. [31]
Можно отметить сходство между этими двумя уравнениями и приведенными выше уравнениями (7.3) и (7.4) для преобразования лист - экран. Очевидно, что для обеих операций можно пользоваться одной и той же процедурой преобразования. Однако сразу же после преобразования символа в координаты листа может потребоваться второе преобразование - : из координат листа в координаты экрана. [32]
Коэффициент 200 / ( 6 J) получается из следующих соображений. Время, равное 6 J в секундах, должно укладываться в отрезке, равном 200 мм. Чтобы получить значения координаты X строящегося графика в системе координат экрана, к полученным значениям Х ( 1) в миллиметрах необходимо прибавлять 20 мм - значение координаты X начала координат осей графиков в системе координат экрана. [33]
В этом коде вводится переменная TempRect, в которой формируется прямоугольник, определяющий размер и местоположение генерируемого плавающего окна. Первые два выполняемые операторы кода формируют этот прямоугольник, восстанавливая размер панели Рапе12, бывший у нее в последний раз, когда она отображалась плавающим окном. Левый верхний угол генерируемого плавающего окна совпадает с текущим положением панели. Для правильного встраивания окна координаты с помощью метода ClientToScreen переводятся в координаты экрана. Последний оператор методом MannalFloat генерирует плавающее окно. [34]
В виртуальной области определяется прямоугольное окно, задаваемое координатами левого нижнего и правого верхнего углов, находящимися в массиве WCC. Массив ICC описывает аналогичную рабочую область, на которую отображается окно. RDAT содержит конечные точки исходных линий, заданные в координатах виртуальной области. IDAT содержит конечные точки после применения операции кадрирования ( обрезанных и промасштабированных), заданные в координатах экрана. [35]
Первый из них состоит в том, что программа трассировки отыскивает путь по структуре псевдодисплейного файла, передавая встречающуюся по пути информацию в соответствующий подпроцесс. Информация о преобразованиях поступает к программе совмещения, которая комбинирует новые параметры преобразований с действующими на данный момент. Графическая информация, содержащаяся в псевдодисплейном файле, передается программе преобразования и отсечения, которая преобразует ее в координаты экрана. Четвертый подпроцесс выполняется генератором дисплейного кода, который компилирует каждую преобразованную графическую единицу в соответствующие команды дисплейного файла. Указанные четыре процесса представлены на рис. 8.7. Обратите внимание, что программа совмещения всегда должна иметь доступ к текущим параметрам для генерирования новых параметров. [36]
Существуют также некоторые возможности выбора формы представления чисел для координат листа: можно пользоваться целыми или дробными числами или числами с плавающей точкой. Наиболее удобна форма представления чисел с плавающей точкой, поскольку при ее использовании можно выбирать единицы измерения для листа, не боясь переполнения или потери точности. Однако форму представления следует принимать такой, чтобы она была пригодна для выполнения преобразования кадрирования в целом. Поэтому если решено использовать числа с плавающей точкой, то и кадрирование должно производиться с применением чисел с плавающей точкой, так же как и преобразование координат листа в координаты экрана. Только после этого координаты могут быть переведены в целый или дробный вид для включения в дисплейные команды. [37]
Коэффициент 200 / ( 6 J) получается из следующих соображений. Время, равное 6 J в секундах, должно укладываться в отрезке, равном 200 мм. Чтобы получить значения координаты X строящегося графика в системе координат экрана, к полученным значениям Х ( 1) в миллиметрах необходимо прибавлять 20 мм - значение координаты X начала координат осей графиков в системе координат экрана. [38]
Алгоритм обработки указывания одинаков как для диспетчера, так и для прикладной программы. Сильно влияет тип используемого компилятора дисплейного файла. Обнаружение указывания выполняется легче всего, когда для генерации дисплейного файла применяется программа преобразования, включающая операцию кадрирования. В этом случае ту же программу кадрирования можно использовать для выполнения операции указывания: 1) вокруг положения пера описывается небольшой квадрат - область интереса; 2) координаты этого квадрата подвергаются обратному преобразованию из координат экрана в координаты листа; 3) с использованием указанного квадрата в качестве окна производится формирование дисплейного файла, но без выполнения конечной фазы - генерации дисплейного кода; 4) если оказывается, что какой-либо отрезок или элемент попадают в окно, то это означает, что указанный элемент обнаружен, процесс формирования файла прекращается и программе передается соответствующая информация об обнаруженном элементе. [39]
Примечания: Параметры XI, Y1 представляют собой координаты верхнего левого угла окна, параметры Х2, Y2 представляют собой координаты правого нижнего угла. Если координаты являются каким-то образом недопустимыми, то обращение к процедуре Window игнорируется. В 80-символьных режимах по умолчанию определяется окно ( 1 1 80 25), а в 40-символьных режимах - ( 1 1 40 25), что соответствует всему эгфану. Все координаты экрана ( кроме самих координат окна) являются относительными координатами данного окна. Например, Go - toXY ( l l) всегда позиционирует курсор на верхний левый угол текущего окна. [40]
Функция OnLButtonDown не только предотвращает начало рисования линии вне области рисунка, но и препятствует распространению линии за границы этой области. Следовательно, данная функция ограничивает перемещение указателя в окне представления областью рисунка. Иными словами, она ограничивает перемещение указателя областью пересечения рисунка и окна представления. В предыдущей версии программы MiniDraw указатель перемещался внутри окна представления как угодно. Затем определяется объект ViewRect класса CRect, которому присваиваются координаты окна представления, возвращаемые функцией GetclientRect. Далее определяется объект intRect и вызывается функция CRect: : intersectRect для задания ему координат пересечения области рисунка и окна представления. Функция CWnd: : ClientToScreen преобразовывает значение IntRect в координаты экрана и передает их в функцию: : ClipCursor, что позволяет ограничить перемещение указателя. [41]