static void DrawFiles(int x, int y) { DrawHat(x, y, "Файл : %d/%d", numCurFile + ((numFiles == 0) ? 0 : 1), numFiles); char nameFile[255]; StructForReadDir sfrd; y += 12; if (FDrive_GetNameFile(currentDir, numFirstFile, nameFile, &sfrd)) { int drawingFiles = 0; DrawLongString(x, y, nameFile, gBF.cursorInDirs == 0 && (numFirstFile + drawingFiles == numCurFile)); while (drawingFiles < (RECS_ON_PAGE - 1) && FDrive_GetNextNameFile(nameFile, &sfrd)) { drawingFiles++; DrawLongString(x, y + drawingFiles * 9, nameFile, gBF.cursorInDirs == 0 && (numFirstFile + drawingFiles == numCurFile)); } } }
static void DrawDirs(int x, int y) { FDrive_GetNumDirsAndFiles(currentDir, &numDirs, &numFiles); DrawHat(x, y, "Каталог : %d/%d", numCurDir + ((numDirs == 0) ? 0 : 1), numDirs); char nameDir[255]; StructForReadDir sfrd; y += 12; if (FDrive_GetNameDir(currentDir, numFirstDir, nameDir, &sfrd)) { int drawingDirs = 0; DrawLongString(x, y, nameDir, gBF.cursorInDirs == 1 && ( numFirstDir + drawingDirs == numCurDir)); while (drawingDirs < (RECS_ON_PAGE - 1) && FDrive_GetNextNameDir(nameDir, &sfrd)) { drawingDirs++; DrawLongString(x, y + drawingDirs * 9, nameDir, gBF.cursorInDirs == 1 && ( numFirstDir + drawingDirs == numCurDir)); } } }
void RwrClass::DrawSymbol (VirtualDisplay *display, int symbolID, int boxed) { static int flash = FALSE; // Do we draw flashing things this frame? flash = vuxRealTime & 0x200; static int show = 0; static bool oldcount = FALSE; if (flash && oldcount == show) { show++; if (show >3) show = oldcount = 0; } if (!flash && show != oldcount) { show++; oldcount = show; } display->ZeroRotationAboutOrigin();//me123 make sure we are not rotated static const float basicAir[][2] = { { 0.00F, 0.06F}, { 0.09F, -0.03F}, { 0.00F, 0.01F}, {-0.09F, -0.03F}, { 0.00F, 0.06F}}; static const int NUM_BASIC_AIR_POINTS = sizeof(basicAir)/sizeof(basicAir[0]); static const float advAir[][2] = { { 0.00F, 0.09F}, { 0.09F, -0.01F}, { 0.03F, 0.01F}, { 0.00F, -0.06F}, {-0.03F, 0.01F}, {-0.09F, -0.01F}, { 0.00F, 0.09F}}; static const int NUM_ADV_AIR_POINTS = sizeof(advAir)/sizeof(advAir[0]); static const float theBoat[][2] = { {-0.06F, -0.04F}, {-0.08F, 0.00F}, {-0.03F, 0.00F}, {-0.03F, 0.04F}, { 0.03F, 0.04F}, { 0.03F, 0.00F}, { 0.06F, 0.00F}, { 0.06F, -0.04F}, {-0.06F, -0.04F}}; static const int NUM_BOAT_POINTS = sizeof(theBoat)/sizeof(theBoat[0]); int i; float verticalTextCenter = 0.5f*display->TextHeight(); switch (symbolID) { case RWRSYM_ADVANCED_INTERCEPTOR:// for (i=1; i<NUM_ADV_AIR_POINTS; i++) display->Line( advAir[i][0], advAir[i][1], advAir[i-1][0], advAir[i-1][1] ); break; case RWRSYM_BASIC_INTERCEPTOR: for (i=1; i<NUM_BASIC_AIR_POINTS; i++) display->Line( basicAir[i][0], basicAir[i][1], basicAir[i-1][0], basicAir[i-1][1] ); break; case RWRSYM_NAVAL: for (i=1; i<NUM_BOAT_POINTS; i++) display->Line( theBoat[i][0], theBoat[i][1], theBoat[i-1][0], theBoat[i-1][1] ); break; case RWRSYM_ACTIVE_MISSILE: display->TextCenter (0.0F, verticalTextCenter, "M", boxed); break; case RWRSYM_CHAPARAL: case RWRSYM_KSAM: display->TextCenter (0.0F, verticalTextCenter, "C", boxed); break; case RWRSYM_HAWK: display->TextCenter (0.0F, verticalTextCenter, "H", boxed); break; case RWRSYM_PATRIOT: display->TextCenter (0.0F, verticalTextCenter, "P", boxed); break; case RWRSYM_NIKE: display->TextCenter (0.0F, verticalTextCenter, "N", boxed); break; case RWRSYM_SA2: display->TextCenter (0.0F, verticalTextCenter, "2", boxed); break; case RWRSYM_SA3: display->TextCenter (0.0F, verticalTextCenter, "3", boxed); break; case RWRSYM_SA4: display->TextCenter (0.0F, verticalTextCenter, "4", boxed); break; case RWRSYM_SA5: display->TextCenter (0.0F, verticalTextCenter, "5", boxed); break; case RWRSYM_SA6: display->TextCenter (0.0F, verticalTextCenter, "6", boxed); break; case RWRSYM_SA8: display->TextCenter (0.0F, verticalTextCenter, "8", boxed); break; case RWRSYM_SA9: display->TextCenter (0.0F, verticalTextCenter, "9", boxed); break; case RWRSYM_SA10: display->TextCenter (0.0F, verticalTextCenter, "10", boxed); break; case RWRSYM_SA13: display->TextCenter (0.0F, verticalTextCenter, "13", boxed); break; case RWRSYM_SA15: if (show) display->TextCenter (0.0F, verticalTextCenter, "15", boxed); else display->TextCenter (0.0F, verticalTextCenter, "M", boxed); break; case RWRSYM_AAA: if (flash) display->TextCenter (0.0F, verticalTextCenter, "A", boxed); else display->TextCenter (0.0F, verticalTextCenter, "S", boxed); break; case RWRSYM_SEARCH: display->TextCenter (0.0F, verticalTextCenter, "S", boxed); break; case RWRSYM_UNK1: display->TextCenter (0.0F, verticalTextCenter, "U", boxed); display->TextCenter (0.0F, verticalTextCenter-0.04F, ".", boxed); break; case RWRSYM_UNK2: display->TextCenter (0.0F, verticalTextCenter, "U", boxed); display->TextCenter (0.02F, verticalTextCenter-0.04F, ".", boxed); display->TextCenter (-0.02F, verticalTextCenter-0.04F, ".", boxed); break; case RWRSYM_UNK3: display->TextCenter (0.0F, verticalTextCenter, "U", boxed); display->TextCenter (-0.03F, verticalTextCenter-0.04F, ".", boxed); display->TextCenter (0.0F, verticalTextCenter-0.04F, ".", boxed); display->TextCenter (0.03F, verticalTextCenter-0.04F, ".", boxed); break; case RWRSYM_PDOT : display->TextCenter (0.0F, verticalTextCenter, "P", boxed); display->TextCenter (0.0F, verticalTextCenter-0.04F, ".", boxed); break; case RWRSYM_PSLASH: display->TextCenter (0.0F, verticalTextCenter, "P", boxed); display->TextCenter (0.01F, verticalTextCenter, "|", boxed); break; case RWRSYM_A1: display->TextCenter (0.0F, verticalTextCenter, "A", boxed); display->TextCenter (0.0F, verticalTextCenter-0.04F, ".", boxed); break; case RWRSYM_A2: display->TextCenter (0.0F, verticalTextCenter, "A", boxed); display->TextCenter (0.02F, verticalTextCenter-0.04F, ".", boxed); display->TextCenter (-0.02F, verticalTextCenter-0.04F, ".", boxed); break; case RWRSYM_V4 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "4", boxed); break; case RWRSYM_V5 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "5", boxed); break; case RWRSYM_V14 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "14", boxed); break; case RWRSYM_V15: DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "15", boxed); break; case RWRSYM_V16 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "16", boxed); break; case RWRSYM_V18 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "18", boxed); break; case RWRSYM_V19 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "19", boxed); break; case RWRSYM_V20 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "20", boxed); break; case RWRSYM_V21 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "21", boxed); break; case RWRSYM_V22 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "22", boxed); break; case RWRSYM_V23 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "23", boxed); break; case RWRSYM_V25: DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "25", boxed); break; case RWRSYM_V27: DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "27", boxed); break; case RWRSYM_V29 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "29", boxed); break; case RWRSYM_V30 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "30", boxed); break; case RWRSYM_V31 : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "31", boxed); break; case RWRSYM_VA : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "A", boxed); break; case RWRSYM_VB : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "B", boxed); break; case RWRSYM_VP : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "P", boxed); break; case RWRSYM_VPD : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "PD", boxed); break; case RWRSYM_VS : DrawHat(display); display->TextCenter (0.0F, verticalTextCenter-0.04F, "S", boxed); break; case RWRSYM_Aa : display->TextCenter (0.0F, verticalTextCenter, "A", boxed); display->TextCenter (0.01F, verticalTextCenter, "|", boxed); break; case RWRSYM_Ab : display->TextCenter (0.01F, verticalTextCenter, "A", boxed); display->TextCenter (0.02F, verticalTextCenter, "|", boxed); display->TextCenter (0.0F, verticalTextCenter, "|", boxed); break; case RWRSYM_Ac : display->TextCenter (0.1F, verticalTextCenter, "A", boxed); display->TextCenter (-0.01F, verticalTextCenter, "|", boxed); display->TextCenter (0.1F, verticalTextCenter, "|", boxed); display->TextCenter (0.03F, verticalTextCenter, "|", boxed); break; case RWRSYM_MIB_F_S: if (!show) display->TextCenter (0.0F, verticalTextCenter, "F", boxed); else display->TextCenter (0.0F, verticalTextCenter, "S", boxed); break; case RWRSYM_MIB_F_A||66: if (show) display->TextCenter (0.0F, verticalTextCenter, "F", boxed); else display->TextCenter (0.0F, verticalTextCenter, "A", boxed); break; case RWRSYM_MIB_F_M: if (!show) display->TextCenter (0.0F, verticalTextCenter, "F", boxed); else display->TextCenter (0.0F, verticalTextCenter, "M", boxed); break; case RWRSYM_MIB_F_U: if (show) display->TextCenter (0.0F, verticalTextCenter, "F", boxed); else display->TextCenter (0.0F, verticalTextCenter, "U", boxed); break; case RWRSYM_MIB_F_BW: if (!show) display->TextCenter (0.0F, verticalTextCenter, "F", boxed); else // RWRSYM_BASIC_INTERCEPTOR: for (i=1; i<NUM_BASIC_AIR_POINTS; i++) display->Line( basicAir[i][0], basicAir[i][1], basicAir[i-1][0], basicAir[i-1][1] ); break; case RWRSYM_MIB_BW_S: if (show) display->TextCenter (0.0F, verticalTextCenter, "S", boxed); else // RWRSYM_BASIC_INTERCEPTOR: for (i=1; i<NUM_BASIC_AIR_POINTS; i++) display->Line( basicAir[i][0], basicAir[i][1], basicAir[i-1][0], basicAir[i-1][1] ); break; case RWRSYM_MIB_BW_A: if (!show) display->TextCenter (0.0F, verticalTextCenter, "A", boxed); else // RWRSYM_BASIC_INTERCEPTOR: for (i=1; i<NUM_BASIC_AIR_POINTS; i++) display->Line( basicAir[i][0], basicAir[i][1], basicAir[i-1][0], basicAir[i-1][1] ); break; case RWRSYM_MIB_BW_M: if (!show) display->TextCenter (0.0F, verticalTextCenter, "M", boxed); else // RWRSYM_BASIC_INTERCEPTOR: for (i=1; i<NUM_BASIC_AIR_POINTS; i++) display->Line( basicAir[i][0], basicAir[i][1], basicAir[i-1][0], basicAir[i-1][1] ); break; default: // JB 010727 if (symbolID >= 100) { char buffer[4]; itoa(symbolID - 100, buffer, 10); display->TextCenter (0.0F, verticalTextCenter, buffer, boxed); } else if (symbolID >= 65) { char buffer[2]; buffer[0] = symbolID; buffer[1] = 0; display->TextCenter (0.0F, verticalTextCenter, buffer, boxed); } else display->TextCenter (0.0F, verticalTextCenter, "U", boxed); break; } }
void SampleViewer::Display() { nite::UserTrackerFrameRef userTrackerFrame; openni::VideoFrameRef depthFrame; nite::Status rc = m_pUserTracker->readFrame(&userTrackerFrame); if (rc != nite::STATUS_OK) { printf("GetNextData failed\n"); return; } depthFrame = userTrackerFrame.getDepthFrame(); m_colorStream.readFrame(&m_colorFrame); if (m_pTexMap == NULL) { // Texture map init m_nTexMapX = MIN_CHUNKS_SIZE(depthFrame.getVideoMode().getResolutionX(), TEXTURE_SIZE); m_nTexMapY = MIN_CHUNKS_SIZE(depthFrame.getVideoMode().getResolutionY(), TEXTURE_SIZE); m_pTexMap = new openni::RGB888Pixel[m_nTexMapX * m_nTexMapY]; } const nite::UserMap& userLabels = userTrackerFrame.getUserMap(); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, GL_WIN_SIZE_X, GL_WIN_SIZE_Y, 0, -2000.0, 2000.0); if (depthFrame.isValid() && g_drawDepth) { calculateHistogram(m_pDepthHist, MAX_DEPTH, depthFrame); } memset(m_pTexMap, 0, m_nTexMapX*m_nTexMapY*sizeof(openni::RGB888Pixel)); // check if we need to draw image frame to texture if (m_eViewState == DISPLAY_MODE_IMAGE && m_colorFrame.isValid()) { const openni::RGB888Pixel* pImageRow = (const openni::RGB888Pixel*)m_colorFrame.getData(); openni::RGB888Pixel* pTexRow = m_pTexMap + m_colorFrame.getCropOriginY() * m_nTexMapX; int rowSize = m_colorFrame.getStrideInBytes() / sizeof(openni::RGB888Pixel); for (int y = 0; y < m_colorFrame.getHeight(); ++y) { const openni::RGB888Pixel* pImage = pImageRow; openni::RGB888Pixel* pTex = pTexRow + m_colorFrame.getCropOriginX(); for (int x = 0; x < m_colorFrame.getWidth(); ++x, ++pImage, ++pTex) { *pTex = *pImage; } pImageRow += rowSize; pTexRow += m_nTexMapX; } } float factor[3] = {1, 1, 1}; // check if we need to draw depth frame to texture if (depthFrame.isValid() && g_drawDepth) { const nite::UserId* pLabels = userLabels.getPixels(); const openni::DepthPixel* pDepthRow = (const openni::DepthPixel*)depthFrame.getData(); openni::RGB888Pixel* pTexRow = m_pTexMap + depthFrame.getCropOriginY() * m_nTexMapX; int rowSize = depthFrame.getStrideInBytes() / sizeof(openni::DepthPixel); for (int y = 0; y < depthFrame.getHeight(); ++y) { const openni::DepthPixel* pDepth = pDepthRow; openni::RGB888Pixel* pTex = pTexRow + depthFrame.getCropOriginX(); for (int x = 0; x < depthFrame.getWidth(); ++x, ++pDepth, ++pTex, ++pLabels) { if (*pDepth != 0) { if (*pLabels == 0) { if (!g_drawBackground) { factor[0] = factor[1] = factor[2] = 0; } else { factor[0] = Colors[colorCount][0]; factor[1] = Colors[colorCount][1]; factor[2] = Colors[colorCount][2]; } } else { factor[0] = Colors[*pLabels % colorCount][0]; factor[1] = Colors[*pLabels % colorCount][1]; factor[2] = Colors[*pLabels % colorCount][2]; } // // Add debug lines - every 10cm // else if ((*pDepth / 10) % 10 == 0) // { // factor[0] = factor[2] = 0; // } int nHistValue = m_pDepthHist[*pDepth]; pTex->r = nHistValue*factor[0]; pTex->g = nHistValue*factor[1]; pTex->b = nHistValue*factor[2]; factor[0] = factor[1] = factor[2] = 1; } } pDepthRow += rowSize; pTexRow += m_nTexMapX; } } glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_nTexMapX, m_nTexMapY, 0, GL_RGB, GL_UNSIGNED_BYTE, m_pTexMap); // Display the OpenGL texture map glColor4f(1,1,1,1); glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); g_nXRes = depthFrame.getVideoMode().getResolutionX(); g_nYRes = depthFrame.getVideoMode().getResolutionY(); // upper left glTexCoord2f(0, 0); glVertex2f(0, 0); // upper right glTexCoord2f((float)g_nXRes/(float)m_nTexMapX, 0); glVertex2f(GL_WIN_SIZE_X, 0); // bottom right glTexCoord2f((float)g_nXRes/(float)m_nTexMapX, (float)g_nYRes/(float)m_nTexMapY); glVertex2f(GL_WIN_SIZE_X, GL_WIN_SIZE_Y); // bottom left glTexCoord2f(0, (float)g_nYRes/(float)m_nTexMapY); glVertex2f(0, GL_WIN_SIZE_Y); glEnd(); glDisable(GL_TEXTURE_2D); const nite::Array<nite::UserData>& users = userTrackerFrame.getUsers(); for (int i = 0; i < users.getSize(); ++i) { const nite::UserData& user = users[i]; updateUserState(user, userTrackerFrame.getTimestamp()); if (user.isNew()) { m_pUserTracker->startSkeletonTracking(user.getId()); m_pUserTracker->startPoseDetection(user.getId(), nite::POSE_CROSSED_HANDS); } else if (!user.isLost()) { if (g_drawStatusLabel) { DrawStatusLabel(m_pUserTracker, user); } if (g_drawCenterOfMass) { DrawCenterOfMass(m_pUserTracker, user); } if (g_drawBoundingBox) { DrawBoundingBox(user); } if (users[i].getSkeleton().getState() == nite::SKELETON_TRACKED && g_drawSkeleton) { DrawSkeleton(m_pUserTracker, user); } if (users[i].getSkeleton().getState() == nite::SKELETON_TRACKED && g_drawHat) { DrawHat(m_pUserTracker, user); } if (users[i].getSkeleton().getState() == nite::SKELETON_TRACKED && g_drawCube) { DrawCube(m_pUserTracker, user); } if (users[i].getSkeleton().getState() == nite::SKELETON_TRACKED && g_drawCubeFront) { DrawCubeFront(m_pUserTracker, user); } } if (m_poseUser == 0 || m_poseUser == user.getId()) { const nite::PoseData& pose = user.getPose(nite::POSE_CROSSED_HANDS); if (pose.isEntered()) { // Start timer sprintf(g_generalMessage, "In exit pose. Keep it for %d second%s to exit\n", g_poseTimeoutToExit/1000, g_poseTimeoutToExit/1000 == 1 ? "" : "s"); printf("Counting down %d second to exit\n", g_poseTimeoutToExit/1000); m_poseUser = user.getId(); m_poseTime = userTrackerFrame.getTimestamp(); } else if (pose.isExited()) { memset(g_generalMessage, 0, sizeof(g_generalMessage)); printf("Count-down interrupted\n"); m_poseTime = 0; m_poseUser = 0; } else if (pose.isHeld()) { // tick if (userTrackerFrame.getTimestamp() - m_poseTime > g_poseTimeoutToExit * 1000) { printf("Count down complete. Exit...\n"); Finalize(); exit(2); } } } } if (g_drawFrameId) { DrawFrameId(userTrackerFrame.getFrameIndex()); } if (g_generalMessage[0] != '\0') { char *msg = g_generalMessage; glColor3f(1.0f, 0.0f, 0.0f); glRasterPos2i(100, 20); glPrintString(GLUT_BITMAP_HELVETICA_18, msg); } // Swap the OpenGL display buffers glutSwapBuffers(); }