void CContourSliderManager::OnAfterDraw(CDC* pDC) { CWin *cWin; CBody * cBody; cBody = FindFirstBody(); if ( cBody == NULL ) return; cWin = cBody->GetWndInfo(); tag_BODYSIZE TrBody; CBodyMesh *pBody = (CBodyMesh*)FindBody(cBody->GetID()); TrBody = pBody->GetTrBodySize(); glLoadIdentity(); double asp = 1;/*cWin->GetAspectRadio();*/ m_tileSizeX = (TrBody.dXMax-TrBody.dXMin)/asp/m_sizeX; m_tileSizeY = (TrBody.dYMax - TrBody.dYMin)/m_sizeY; glMatrixMode(GL_MODELVIEW); glPushMatrix(); glTranslated(cWin->GetXo(), cWin->GetYo(), 1.0); glScaled(cWin->GetSx(), cWin->GetSy(), cWin->GetSx()); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(0,0,255,0.5); glBegin(GL_QUADS); glVertex2f(m_xPos*m_tileSizeX+TrBody.dXMin/asp, (m_yPos+m_height)*m_tileSizeY +TrBody.dYMin); glVertex2f((m_xPos+m_width)*m_tileSizeX+TrBody.dXMin/asp, (m_yPos+m_height)*m_tileSizeY +TrBody.dYMin); glVertex2f((m_xPos+m_width)*m_tileSizeX+TrBody.dXMin/asp, m_yPos*m_tileSizeY +TrBody.dYMin); glVertex2f(m_xPos*m_tileSizeX+TrBody.dXMin/asp, m_yPos*m_tileSizeY +TrBody.dYMin); glEnd(); glColor4f(0,0,0,1.0); glBegin(GL_LINES); glVertex2f(m_xPos*m_tileSizeX+TrBody.dXMin/asp, (m_yPos+m_height)*m_tileSizeY +TrBody.dYMin); glVertex2f((m_xPos+m_width)*m_tileSizeX+TrBody.dXMin/asp, (m_yPos+m_height)*m_tileSizeY +TrBody.dYMin); glVertex2f((m_xPos+m_width)*m_tileSizeX+TrBody.dXMin/asp, (m_yPos+m_height)*m_tileSizeY +TrBody.dYMin); glVertex2f((m_xPos+m_width)*m_tileSizeX+TrBody.dXMin/asp, m_yPos*m_tileSizeY +TrBody.dYMin); glVertex2f((m_xPos+m_width)*m_tileSizeX+TrBody.dXMin/asp, m_yPos*m_tileSizeY +TrBody.dYMin); glVertex2f(m_xPos*m_tileSizeX+TrBody.dXMin/asp, m_yPos*m_tileSizeY +TrBody.dYMin); glVertex2f(m_xPos*m_tileSizeX+TrBody.dXMin/asp, m_yPos*m_tileSizeY +TrBody.dYMin); glVertex2f(m_xPos*m_tileSizeX+TrBody.dXMin/asp, (m_yPos+m_height)*m_tileSizeY +TrBody.dYMin); glVertex2f((m_xPos+m_width/2)*m_tileSizeX + TrBody.dXMin/asp, (m_yPos + m_height + m_sizeY/10)*m_tileSizeY + TrBody.dYMin); glVertex2f((m_xPos+m_width/2)*m_tileSizeX + TrBody.dXMin/asp, (m_yPos - m_sizeY/10)*m_tileSizeY + TrBody.dYMin); glVertex2f((m_xPos-m_sizeX/10)*m_tileSizeX + TrBody.dXMin/asp, (m_yPos + m_height/2)*m_tileSizeY + TrBody.dYMin); glVertex2f((m_xPos+m_width+m_sizeX/10)*m_tileSizeX + TrBody.dXMin/asp, (m_yPos + m_height/2)*m_tileSizeY + TrBody.dYMin); glEnd(); // head mark glColor4f(1.0, 0.0, 0.0, 1.0); glBegin(GL_TRIANGLES); glVertex2f(TrBody.dXMin, TrBody.dYMax); glVertex2f(TrBody.dXMin + 0.12, TrBody.dYMax + 0.12); glVertex2f(TrBody.dXMin - 0.12, TrBody.dYMax + 0.12); glEnd(); LOGFONT lfTextFont; memset(&lfTextFont,0,sizeof(LOGFONT)); lfTextFont.lfHeight = -MulDiv(8, GetDeviceCaps(pDC->GetSafeHdc(), LOGPIXELSY), 72); lfTextFont.lfWeight = FW_BOLD; #if defined(AFX_TARG_CSY) || defined(AFX_TARG_PLK) lfTextFont.lfCharSet = EASTEUROPE_CHARSET; #endif #if defined(AFX_TARG_ENU) lfTextFont.lfCharSet = DEFAULT_CHARSET; #endif _tcscpy_s(lfTextFont.lfFaceName,_T("Arial")); CGLFont* pFont = CreateNewFont(lfTextFont); CString strHead = _T("Head"); CSize size = pFont->GetTextExtent(strHead); double dY = 0.0; dY += TrBody.dYMax; dY += 0.12; // triangle mark dY += 0.08; // margin CPoint pt = GLToPt(*cWin, CDblPoint(TrBody.dXMin, dY)); pt.x += - 2 * size.cx ; // half of text width pt.y += -size.cy; // text height ContourSpace::OpenGL::DrawString(*cWin, *pFont, strHead, pt, RGB(0, 0, 0)); /*CDblPoint point = PtToGL(*cWin, CPoint(pt.x, pt.y), FALSE); pFont->Draw(dX, point.y, strHead);*/ glPopMatrix(); glFinish(); }