欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

taxplot3d_pane.cpp

ncbi源码
CPP
第 1 页 / 共 2 页
字号:
            glVertex3f( step_n * i, 0, 0.0f);			            glVertex3f( step_n * i, 0, 1.0f);			            glEnd();            glBegin(GL_LINES);		            glVertex3f(0, step_n * i, 0.0f);			            glVertex3f(1, step_n * i, 0.0f);			            glEnd();            glBegin(GL_LINES);		            glVertex3f(0, 0.0f,  step_n * i);			            glVertex3f(1, 0.0f, step_n * i);			            glEnd();            glBegin(GL_LINES);		            glVertex3f(0, 0.0f,  step_n * i);			            glVertex3f(0, 1.0f, step_n * i);			            glEnd();            glBegin(GL_LINES);		            glVertex3f(0, step_n * i, 0.0f);			            glVertex3f(0, step_n * i, 1.0f);			            glEnd();                                         }            }    glPopMatrix();    // labels    if (m_Data && m_bLabels){        glColor3f(1.0f,1.0f,1.0f);        if (m_ViewMode!=eViewY) m_Font_Bitmap8x13.TextOut(0.0f, 1.07f, m_Data->yLabel().c_str());		        if (m_ViewMode!=eViewX) m_Font_Bitmap8x13.TextOut(1.07f, 0.0f, m_Data->xLabel().c_str());		        if (m_ViewMode!=eViewZ){	        glPushMatrix();	    	    glRotatef(90,1.0f,0.0f,0.0f);			        glColor3f(1.0f,1.0f,1.0f);	        m_Font_Bitmap8x13.TextOut(0.0f, 1.07f, m_Data->zLabel().c_str());	        glPopMatrix();        }    }	// arrows    if (m_bArrows){        if (m_ViewMode!=eViewZ){            glPushMatrix();	            glColor3f(1.0f,1.0f,1.0f);            glTranslatef(0.0f,0.0f, 1.0f);            gluQuadricDrawStyle(pObj, GLU_FILL);            gluCylinder(pObj, 0.01, 0, 0.05, 20, 20);						            glPopMatrix();        }        if (m_ViewMode!=eViewY){            glPushMatrix();	            glColor3f(1.0f,1.0f,1.0f);            glRotatef(90,-1.0f,0.0f,0.0f);            glTranslatef(0.0f,0.0f, 1.0f);            gluQuadricDrawStyle(pObj, GLU_FILL);		            gluCylinder(pObj, 0.01, 0, 0.05, 20, 20);				            glPopMatrix();        }        if (m_ViewMode!=eViewX){            glPushMatrix();	            glColor3f(1.0f,1.0f,1.0f);            glRotatef(90,0.0f,1.0f,0.0f);            glTranslatef(0.0f,0.0f, 1.0f);            gluQuadricDrawStyle(pObj, GLU_FILL);		              gluCylinder(pObj, 0.01, 0, 0.05, 20, 20);				            glPopMatrix();        }    }}CVect3<float> CTaxplot3dPanel::GetOGLPos(int x, int y){    GLint     viewport[4];    GLdouble  modelview[16];    GLdouble  projection[16];    GLfloat   winX, winY, winZ;    GLdouble  posX, posY, posZ;    glGetDoublev( GL_MODELVIEW_MATRIX, modelview );    glGetDoublev( GL_PROJECTION_MATRIX, projection );    glGetIntegerv( GL_VIEWPORT, viewport );    winX = (float)x;    winY = (float)viewport[3] - (float)y;      glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );    gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);    return CVect3<float>(posX, posY, posZ);}// object lookup in 3D sceneint  CTaxplot3dPanel::findObject(int x, int y){    int             foundIndex = -1;    float           delta   = 0.006f;    CVect3<float>   pos     = GetOGLPos(x, y);	if (m_Data){        for (unsigned int i=0; i<m_Data->getData().size(); i++){						            CVect3<float> point(m_Data->getVertexAt(i).getXYZ());			            if ((pos.X()>(point.X()-delta)) &&  (pos.X()<(point.X()+delta)) &&                (pos.Y()>(point.Y()-delta)) &&  (pos.Y()<(point.Y()+delta)) &&                (pos.Z()>(point.Z()-delta)) &&  (pos.Z()<(point.Z()+delta))) {                foundIndex = i;                break;            }        }            	}    return foundIndex;}void CTaxplot3dPanel::checkSelection(int x, int y){    if (m_Data){        m_Data->dropSelection();        int curObject = findObject(x, y);        if (curObject>=0){            CVect3<float> point(m_Data->getVertexAt(curObject).getXYZ());            m_Pivot = point;            m_Data->getVertexAt(curObject).doSelect(true);                if (m_Handler) m_Handler->fireEvent(this, ITaxplot3dCP::eSelection);                            slowRedraw();        }    }}// all view transformations for ortho and perspective projectionsvoid CTaxplot3dPanel::transformView(void){     switch (m_ViewMode){    case eCamera:                        m_Camera.SetLayout(CGlCamera::ePerspective);              m_Camera.MakeCurrent();                                                        switch (m_PivotPoint){        case eFloating:                                    m_Transform.ApplyGL(CGlMTransform::eZoom);                                    m_Transform.ApplyGL(CGlMTransform::ePan);                        m_Transform.ApplyGL(CGlMTransform::eRotate);                        break;        case eFixed:            m_Transform.ApplyGL(CGlMTransform::eZoom);            m_Transform.ApplyGL(CGlMTransform::eRotate);            m_Transform.ApplyGL(CGlMTransform::ePan);        }                glRotatef(45, 1,0,0); glRotatef(45, 0,-1,0);        if (m_bPvAttach) glTranslatef(-m_Pivot.X(), -m_Pivot.Y(), -m_Pivot.Z());                        break;          case eViewX:        switch2ortho();                m_Transform.ApplyGL(CGlMTransform::eTranslate);        gluLookAt(0,0,0,-1,0,0,0,0,1);                break;    case eViewY:        switch2ortho();        m_Transform.ApplyGL(CGlMTransform::eTranslate);        gluLookAt(0,0,0,0,-1,0,1,0,0);        break;    case eViewZ:        switch2ortho();        m_Transform.ApplyGL(CGlMTransform::eTranslate);        gluLookAt(0,0,0,0,0,-1,0,1,0);        break;    }}void CTaxplot3dPanel::switch2ortho(void){       GLfloat ratio = (m_Transform.GetTranslation().Z())/2 - 0.8;    m_Camera.SetLayout(CGlCamera::eOrtho);            m_Camera.SetLeftPlane(ratio); m_Camera.SetRightPlane(-ratio);    m_Camera.SetTopPlane(-ratio); m_Camera.SetBottomPlane(ratio);    m_Camera.MakeCurrent();                                    glTranslatef(-0.6f, -0.6f, 0);   }void CTaxplot3dPanel::slowRedraw(void){       m_Dlist.Invalidate();	      redraw();}void CTaxplot3dPanel::drawScale(void){      float scaleSize = 0.07f;    m_Camera.SetLayout(CGlCamera::eOrtho);            m_Camera.SetLeftPlane(-1); m_Camera.SetRightPlane(1);    m_Camera.SetTopPlane(1);  m_Camera.SetBottomPlane(-1);    m_Camera.MakeCurrent();       glColor4f(0.0f,1.0f,0.5f,0.3f);    // graph label    string strViewMode = "Undefined";    switch (m_ViewMode){        case eViewX:    strViewMode = "Ortho YZ";       break;        case eViewY:    strViewMode = "Ortho XZ";       break;        case eViewZ:    strViewMode = "Ortho XY";       break;        case eCamera:   strViewMode = "Perspective";    break;                 }    m_Font_Bitmap8x13.TextOut(-0.9f, 0.9f, strViewMode.c_str());    string strScale = NStr::DoubleToString(GetBestStep()*2) + " x " + NStr::DoubleToString(GetBestStep()*2);    m_Font_Bitmap8x13.TextOut(-0.9f + scaleSize*2, 0.8f, strScale.c_str());        glColor4f(1.0f,1.0f,1.0f, 0.3f);    glBegin(GL_LINE_LOOP);		        glVertex3f(-0.9f, 0.8f, 0);			        glVertex3f(-0.9f + scaleSize, 0.8f, 0);			        glVertex3f(-0.9f + scaleSize, 0.8f + scaleSize, 0);			        glVertex3f(-0.9f, 0.8f + scaleSize, 0);			    glEnd();    glColor4f(1.0f,1.0f,1.0f, 0.05f);    glBegin(GL_LINES);		        glVertex3f(-0.9f + scaleSize/2, 0.8f,             0);			        glVertex3f(-0.9f + scaleSize/2, 0.8f+scaleSize,   0);			        glVertex3f(-0.9f, 0.8f + scaleSize/2, 0);			        glVertex3f(-0.9f + scaleSize, 0.8f + scaleSize/2, 0);			    glEnd();        m_Camera.ReleaseCurrent();    }double CTaxplot3dPanel::GetBestStep(bool bNorm){    int maxTicks = 20;    int minTicks = 10;    // step selection    double scale    = m_Data?m_Data->getScale():1;     double log      = ceil(log10(scale));    double step     = pow((double)10, log)/maxTicks;    double step_n   = step / scale;    // minimum 10 ticks    while (step_n > (1.0 / minTicks)) {step/=2; step_n/=2;}    return bNorm?step_n:step;}// tooltips implementationbool    CTaxplot3dPanel::TC_NeedTooltip(int x, int y){    return findObject(x, y) >= 0;}string  CTaxplot3dPanel::TC_GetTooltip(int& x, int& y, int& w, int& h){    string  toolTip   = "";    int     currIndex = findObject(x, y);        double  scale     = m_Data?m_Data->getScale():1;     if (currIndex >= 0) {        toolTip     = "gi: " + NStr::IntToString(m_Data->getVertexAt(currIndex).getGi());        toolTip    += "\nScores:";        toolTip    += ("\n" + m_Data->xLabel() + ": " + NStr::IntToString(m_Data->getVertexAt(currIndex).getXYZ().X()*scale));        toolTip    += ("\n" + m_Data->yLabel() + ": " + NStr::IntToString(m_Data->getVertexAt(currIndex).getXYZ().Y()*scale));        toolTip    += ("\n" + m_Data->zLabel() + ": " + NStr::IntToString(m_Data->getVertexAt(currIndex).getXYZ().Z()*scale));    }    return toolTip;}END_NCBI_SCOPE/* * =========================================================================== * $Log: taxplot3d_pane.cpp,v $ * Revision 1000.1  2004/06/01 21:13:45  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4 * * Revision 1.4  2004/05/21 22:27:55  gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.3  2004/01/28 15:56:29  tereshko * UI additions - scale, tooltips * * Revision 1.2  2004/01/14 16:39:22  tereshko * Minor changes due to integration with Taxplot viewer * * Revision 1.1  2004/01/05 16:20:49  tereshko * Initial revision * * =========================================================================== */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -