cross_aln_render.cpp

来自「ncbi源码」· C++ 代码 · 共 668 行 · 第 1/2 页

CPP
668
字号
    TModelRect& rcV2 = m_FP2.GetVisibleRect();    rcV2.SetTop(0);    rcV2.SetBottom( m_FP2.GetViewport().Height() );    m_FP2.SetVisibleRect(rcV2);        m_MaxZoomX = log(m_FP1.GetModelLimitsRect().Width() / rc.Width());}// this function takes an absolute mouse coordinate and determines if any// features lie underneath the mouse position// x & y are GL coordinatesconst CLayoutObject* CCrossAlnRenderer::HitTest(int x, int y){    // Main Feature Panel    if (PanelHitTest(x, y) == eFeatures1) {        return m_FeatPanel1.HitTest(m_FP1, x, y);    }    if (PanelHitTest(x, y) == eFeatures2) {        return m_FeatPanel2.HitTest(m_FP2, x, y);    }    return NULL;}CCrossAlnRenderer::TRendererPanelCCrossAlnRenderer::PanelHitTest(int x, int y) const{    if (m_FP1.GetViewport().PtInRect(x, y))        return eFeatures1;    if (m_FP2.GetViewport().PtInRect(x, y))        return eFeatures2;    if (m_CP.GetViewport().PtInRect(x, y))        return eCross;    return eNone;}CGlPane*CCrossAlnRenderer::PaneHitTest(int x, int y){    if (m_FP1.GetViewport().PtInRect(x, y))        return &m_FP1;    if (m_FP2.GetViewport().PtInRect(x, y))        return &m_FP2;    if (m_CP.GetViewport().PtInRect(x, y))        return &m_CP;    return NULL;}void CCrossAlnRenderer::GetTooltip(int x, int y, string* title){    *title = "";        const CLayoutObject* obj = HitTest(x, y);    if (!obj) return;        TRendererPanel pan = PanelHitTest(x, y);    if (pan == eFeatures1)        m_FeatPanel1.GetTooltip(obj, title);    if (pan == eFeatures2)        m_FeatPanel2.GetTooltip(obj, title);}void CCrossAlnRenderer::SelectObject(const CObject* obj){    m_SelectedObjects.push_back(        CRef<CObject>(const_cast<CObject*>(obj)));}float CCrossAlnRenderer::GetZoomX(void) const{    TModelUnit scale_x = log(m_FP1.GetScaleX());    return 1.0f - (scale_x - m_MinZoomX) / (m_MaxZoomX - m_MinZoomX);}void CCrossAlnRenderer::SetZoomX(float value){    // slider is set up from 0 to 1. Convert to our units:    TModelUnit scale = m_MinZoomX + (m_MaxZoomX - m_MinZoomX) * (1.0f - value);    NON_CONST_ITERATE(TGlPanes, iter, m_ScrollXPanes1) {        CGlPane& pane = **iter;        pane.SetScale(exp(scale), pane.GetScaleY(),                       pane.GetVisibleRect().CenterPoint() );    }}void CCrossAlnRenderer::ZoomInCenter(){    ITERATE(TGlPanes, iter, m_ScrollXPanes1) {        (*iter)->ZoomInCenter();    }}void CCrossAlnRenderer::ZoomOutCenter(){    ITERATE(TGlPanes, iter, m_ScrollXPanes1) {        (*iter)->ZoomOutCenter();    }} void CCrossAlnRenderer::x_AdjustCrossPane(){    TModelUnit p_scale = m_CP.GetScaleX() / m_FP2.GetScaleX();    m_CrossPanel.SetProportions(p_scale, m_Offset2);    m_CrossPanel.SetShifts(m_FP1.GetVisibleRect().Left(),                            m_FP2.GetVisibleRect().Left());}void CCrossAlnRenderer::SetScaleRef1(TModelUnit scale_x, TModelUnit scale_y,                                      const TModelPoint& point){    if(scale_x > m_FP1.GetMinScaleX())      {        ITERATE(TGlPanes, iter, m_ScrollXPanes1) {            TModelPoint ref_p(point.X(),  (*iter)->GetVisibleRect().Top());            (*iter)->SetScaleRefPoint(scale_x, *iter == &m_CP ? -1 : 1, ref_p);        }        }    x_AdjustCrossPane();}void CCrossAlnRenderer::SetScaleRef2(TModelUnit scale_x, TModelUnit scale_y,                                      const TModelPoint& point){    if(scale_x > m_FP2.GetMinScaleX())      {        ITERATE(TGlPanes, iter, m_ScrollXPanes2) {            TModelPoint ref_p(point.X(),  (*iter)->GetVisibleRect().Top());            (*iter)->SetScaleRefPoint(scale_x, *iter == &m_RP2 ? 1 : -1, ref_p);        }        }    x_AdjustCrossPane();}void CCrossAlnRenderer::SetScaleRefC(TModelUnit scale_x, TModelUnit scale_y,                                      const TModelPoint& point){    if(scale_x > m_CP.GetMinScaleX())      {        ITERATE(TGlPanes, iter, m_AllPanes) {            TModelPoint ref_p(point.X(),  (*iter)->GetVisibleRect().Top());            (*iter)->SetScaleRefPoint(scale_x,                         (*iter == &m_CP || *iter == &m_FP2) ? -1 : 1, ref_p);        }    }        x_AdjustCrossPane();}void CCrossAlnRenderer::ZoomOnObject(const CLayoutObject* obj){    if (!obj)         return;            TSeqRange range = obj->GetLocation().GetTotalRange();    ZoomOnRange(range);}void CCrossAlnRenderer::ZoomOnRange(const TSeqRange& range){    ITERATE(TGlPanes, iter, m_AllPanes) {        TModelRect rc = (*iter)->GetVisibleRect();        rc.SetLeft (range.GetFrom());        rc.SetRight (range.GetTo());        (*iter)->ZoomRect(rc);    }    x_AdjustCrossPane();}void CCrossAlnRenderer::ZoomOnAlignment(){    const TSeqRange& range = m_DS->GetTotalRange();    ZoomOnRange(range);}void CCrossAlnRenderer::FitToWindow(void){    // FixMe}void CCrossAlnRenderer::ZoomToSequence(void){    // FixMe}CGlPane& CCrossAlnRenderer::GetFeatGlPane1(){    return m_FP1;}CGlPane& CCrossAlnRenderer::GetFeatGlPane2(){    return m_FP2;}CGlPane& CCrossAlnRenderer::GetCrossGlPane(){    return m_CP;}    void CCrossAlnRenderer::Scroll(TModelUnit x1, TModelUnit y1,                                TModelUnit x2, TModelUnit y2){       const TModelRect& rc1 = m_FP1.GetVisibleRect();    const TModelRect& rc2 = m_FP2.GetVisibleRect();        double dX1 = x1 - rc1.Left();    double dY1 = y1 - rc1.Bottom();    double dX2 = x2 - rc2.Left();    double dY2 = y2 - rc2.Top();        // Handle horizintal scrollbar    ITERATE(TGlPanes, iter, m_ScrollXPanes1)        (*iter)->Scroll(dX1, 0.0f);        ITERATE(TGlPanes, iter, m_ScrollXPanes2)        (*iter)->Scroll(dX2, 0.0f);            m_FP1.Scroll(0.0f, dY1); // Handle vertical scrollbar 1    m_FP2.Scroll(0.0f, dY2); // Handle vertical scrollbar 2    x_AdjustCrossPane();}TModelUnit CCrossAlnRenderer::GetScrollLineSize1(){    m_FP1.OpenOrtho();    TModelUnit value = m_FP1.UnProjectWidth(kMaxPixelsBase);    m_FP1.Close();        return value;}TModelUnit CCrossAlnRenderer::GetScrollLineSize2(){    m_FP2.OpenOrtho();    TModelUnit value = m_FP2.UnProjectWidth(kMaxPixelsBase);    m_FP2.Close();        return value;}    END_NCBI_SCOPE/* * =========================================================================== * $Log: cross_aln_render.cpp,v $ * Revision 1000.2  2004/06/01 21:06:30  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13 * * Revision 1.13  2004/05/21 22:27:52  gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.12  2004/05/14 15:57:18  lebedev * Optional argument to specify the type of title/tooltip added * * Revision 1.11  2004/04/16 12:44:37  lebedev * Use default layout policy for both feature panels. * * Revision 1.10  2004/03/11 17:50:41  dicuccio * Updated typedefs: dropped TDimension, TPosition, TIndex, TColor; use TSeqRange * instead of TRange * * Revision 1.9  2004/02/13 19:00:07  lebedev * Do not use EnableViewOption in graphical widget any more * * Revision 1.8  2004/01/30 17:18:47  dicuccio * Use CBioseq_Handle::GetBioseqLength() instead of creating a CSeqVector * * Revision 1.7  2004/01/27 16:20:41  lebedev * Changed stored selection from CLayoutObject to CObject * * Revision 1.6  2004/01/20 18:19:53  dicuccio * Minot code rearrangement * * Revision 1.5  2004/01/16 19:17:06  tereshko * Removed const modifyer for GetTooltip method * * Revision 1.4  2004/01/16 13:40:39  lebedev * Tooltips added * * Revision 1.3  2003/12/22 19:37:43  dicuccio * Fixed compiler warnings about double -> float conversion * * Revision 1.2  2003/12/22 16:51:32  lebedev * Use CHitElemDataAdapter to get start/length from datasource * * Revision 1.1  2003/12/22 13:12:33  lebedev * Initial revision * * =========================================================================== */

⌨️ 快捷键说明

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