/b>
Глава 6. Перемещение объектов в макете
Рисунок. 6-2. Взаимосвязь между значениями r, u, v и х, у, z
Библиотека 3dPlus включает поддержку трех различных устройств ввода: клавиатуры, мыши и джойстика. Каждое устройство реализовано в виде класса C++, производного от C3dlnputDevice.
Устройство ввода с клавиатуры
Устройство ввода с клавиатуры обрабатывает сообщения WM_KEYDOWN, посылаемые ему контроллером. Сообщения клавиатуры используются для увеличения или уменьшения текущих значений параметров x,y,z,r,unv.B табл. 6-1 показано, как различные комбинации клавиш влияют на значения выходных параметров.
Таблица 6-1. Управляющие функции клавиатуры | |||
Клавиша | Normal | Shift | Ctrl |
Left arrow | X- | V- | u- |
Right arrow | X++ | V++ | U++ |
Up arrow | Y++ | Z++ | R++ |
Down arrow | Y- | z- | R- |
Знак «+» на цифровой клавиатуре | Z- | ||
Знак «-» на цифровой клавиатуре | Z++ | ||
Page Up | V++ | ||
Page Down | V- | ||
Home | U++ | ||
End | u- | ||
Insert | R++ | ||
Delete | R- |
He забывайте, что перед тем, как изменять состояние объекта, все выходные значения должны быть обработаны контроллером, поэтому оси с обозначениями х, у, z, r, u и v вовсе не обязаны соответствовать одноименным осям объекта или макета.
Функция, управляющая работой устройства ввода с клавиатуры, представляет собой оператор switch, в котором обрабатываются сообщения от различных клавиш. Ниже приведена первая часть функции из файла SdlnpDev.cpp каталога Source библиотеки 3dPlus, обрабатывающая нажатия клавиш <— и —>:
void C3dKeyInDev::OnKeyDown(HINT nChar, UINT nRepCnt,
UINT nFlags)
(
double dine = 0.02;
switch (nChar) { case VKJ3HIFT:
in_bShift = TROE;
break;
case VK_CONTROL:
m_bControl = TRUE;
break;
case VK_RIGHT:
if (m_b3hift) { Inc(m_st.dV) ;
} else if (m_bControl) { Inc(m_st.dU) ;
) else (
Inc(m_st.dX) ;
} break;
case VK_LEFT:
if (m_bShift) { Dec(m_st.dV) ;
} else if (m_bControl) { Dec(m_st.dU) ;
) else (
Dec(m_st.dX) ;
} break;
Устройство ввода от мыши