scatter_graph.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
- /*
- * ===========================================================================
- * PRODUCTION $Log: scatter_graph.cpp,v $
- * PRODUCTION Revision 1000.1 2004/06/01 20:49:37 gouriano
- * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
- * PRODUCTION
- * ===========================================================================
- */
- /* $Id: scatter_graph.cpp,v 1000.1 2004/06/01 20:49:37 gouriano Exp $
- * ===========================================================================
- *
- * PUBLIC DOMAIN NOTICE
- * National Center for Biotechnology Information
- *
- * This software/database is a "United States Government Work" under the
- * terms of the United States Copyright Act. It was written as part of
- * the author's official duties as a United States Government employee and
- * thus cannot be copyrighted. This software/database is freely available
- * to the public for use. The National Library of Medicine and the U.S.
- * Government have not placed any restriction on its use or reproduction.
- *
- * Although all reasonable efforts have been taken to ensure the accuracy
- * and reliability of the software and data, the NLM and the U.S.
- * Government do not and cannot warrant the performance or results that
- * may be obtained by using this software or data. The NLM and the U.S.
- * Government disclaim all warranties, express or implied, including
- * warranties of performance, merchantability or fitness for any particular
- * purpose.
- *
- * Please cite the author in any work or product based on this material.
- *
- * ===========================================================================
- *
- * Authors: Andrey Yazhuk
- *
- * File Description:
- *
- */
- #include <ncbi_pch.hpp>
- #include <gui/graph/scatter_graph.hpp>
- BEGIN_NCBI_SCOPE
- ///////////////////////////////////////////////////////////////////////////////
- /// class CScatterGraph
- CScatterGraph::CScatterGraph()
- : m_MarkerType(CGraphDotMarker::eRect),
- m_bDrawLines(true)
- {
- }
- CGraphDotMarker::EMarkerType CScatterGraph::GetMarkerType() const
- {
- return m_MarkerType;
- }
- void CScatterGraph::SetMarkerType(CGraphDotMarker::EMarkerType Type)
- {
- m_MarkerType = Type;
- }
- bool CScatterGraph::IsDrawLines() const
- {
- return m_bDrawLines;
- }
- void CScatterGraph::SetDrawLines(bool bDraw)
- {
- m_bDrawLines = bDraw;
- }
- bool CScatterGraph::SetDataSource(IGraphDataSource* pDS)
- {
- IScatterDataSource* pScatterDS = dynamic_cast<IScatterDataSource*>(pDS);
- bool bOk = pScatterDS!= NULL;
- CGraphBase::SetDataSource(bOk ? pDS : NULL);
-
- CalculateLimits();
- return bOk;
- }
- const TModelRect& CScatterGraph::GetLimits() const
- {
- return m_Limits;
- }
- void CScatterGraph::Render(CGlPane* pPane)
- {
- _ASSERT(pPane);
- IScatterDataSource* pSource = GetScatterDataSource();
- if(pPane && pSource) {
- pPane->OpenOrtho();
- try {
- glColorC(m_Color);
-
- double MarkerW = pPane->UnProjectWidth(7);
- double MarkerH = pPane->UnProjectHeight(7);
- IScatterDataSource* pSource = GetScatterDataSource();
- INumericArray* pArX = pSource->GetXArray();
- INumericArray* pArY = pSource->GetYArray();
- int ElemN = pArX->GetSize();
-
- // draw lines
- if (m_bDrawLines) {
- glBegin(GL_LINE_STRIP);
- for( int i=0; i<ElemN; i++ ) {
- glVertex2d(pArX->GetElem(i), pArY->GetElem(i));
- }
- glEnd();
- }
- //draw Markers
- if (m_MarkerType != CGraphDotMarker::eNone) {
- TModelRect rcHit(pPane->GetVisibleRect());
- rcHit.Inflate(MarkerW, MarkerH);
- for( int i=0; i<ElemN; i++ ) {
- TModelUnit mX = pArX->GetElem(i);
- TModelUnit mY = pArY->GetElem(i);
- if (rcHit.PtInRect(mX, mY))
- CGraphDotMarker::RenderMarker(mX, mY, MarkerW, MarkerH, m_MarkerType);
- }
- }
- }
- catch(...) {
- //need to trace it
- }
- pPane->Close();
- }
- }
- void CScatterGraph ::CalculateLimits()
- {
- IScatterDataSource* pSource = GetScatterDataSource();
- bool bEmpty = true;
- if(pSource)
- {
- INumericArray* pArX = pSource->GetXArray();
- INumericArray* pArY = pSource->GetYArray();
- int ElemN = pArX->GetSize();
- if(ElemN>0)
- {
- bEmpty = false;
- TModelUnit MinX, MaxX, MinY, MaxY;
- MinX = MaxX = pArX->GetElem(0);
- MinY = MaxY = pArY->GetElem(0);
- for( int i=1; i<ElemN; i++ ) {
- TModelUnit X = pArX->GetElem(i);
- TModelUnit Y = pArY->GetElem(i);
- MinX = min(MinX, X);
- MaxX = max(MaxX, X);
- MinY = min(MinY, Y);
- MaxY = max(MaxY, Y);
- }
- m_Limits.Init(MinX, MinY, MaxX, MaxY);
- }
- }
- if(bEmpty)
- m_Limits.Init(0, 0, 1, 1);
- }
- END_NCBI_SCOPE
- /*
- * ===========================================================================
- * $Log: scatter_graph.cpp,v $
- * Revision 1000.1 2004/06/01 20:49:37 gouriano
- * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
- *
- * Revision 1.5 2004/05/21 22:27:42 gorelenk
- * Added PCH ncbi_pch.hpp
- *
- * Revision 1.4 2003/08/11 16:10:57 yazhuk
- * Compilation fixes for GCC
- *
- * Revision 1.3 2003/08/10 14:11:47 dicuccio
- * Added makefiles for Unix projects; compilation fixes for gcc
- *
- * Revision 1.2 2003/08/08 15:59:36 yazhuk
- * Comments added
- *
- * ===========================================================================
- */