taxplot3d_ds.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: taxplot3d_ds.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:13:43  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: taxplot3d_ds.cpp,v 1000.1 2004/06/01 21:13:43 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Vladimir Tereshkov
  35.  *
  36.  * File Description:  
  37.  *   Datasource for taxplot3d viewer.     
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <corelib/ncbiobj.hpp>
  41. #include <corelib/ncbistd.hpp>
  42. #include <gui/widgets/taxplot3d/taxplot3d_ds.hpp>
  43. BEGIN_NCBI_SCOPE
  44. template<class T> struct SNormalizeTo : public unary_function<T, void>
  45. {
  46.     SNormalizeTo(float & value) : normValue(value) {}
  47.     void operator() (T & x) 
  48.     { 
  49.         x.getXYZ() /= normValue;
  50.     }
  51.     float normValue;  
  52. };
  53. template<class T> struct SReshapeTo : public unary_function<T, void>
  54. {
  55.     SReshapeTo(typename T::EShape  value) : m_Shape(value) {}
  56.     void operator() (T & x) 
  57.     { 
  58.         x.setShape(m_Shape);
  59.     }
  60.     typename T::EShape m_Shape;
  61. };
  62. template<class T> struct SSetSelection : public unary_function<T, void>
  63. {
  64.     SSetSelection(bool sel) : m_Select(sel) {}
  65.     void operator() (T & x) 
  66.     { 
  67.         x.doSelect(m_Select);
  68.     }
  69.     bool m_Select;
  70. };
  71. template <class T> struct SBiggerVertex  : public binary_function<T, T, bool>
  72. {  
  73.     bool operator() (const T & vert1, const T & vert2)
  74.     {
  75.         return vert1.getXYZ().Length2() < vert2.getXYZ().Length2();
  76.     } 
  77. };
  78. CTaxplot3dDataSource :: CTaxplot3dDataSource() : m_Xlabel("X"), m_Ylabel("Y"), m_Zlabel("Z")
  79. {  
  80.     clear();
  81. }
  82. CTaxplot3dDataSource :: ~CTaxplot3dDataSource()
  83. {
  84.     clear();
  85. }
  86. void CTaxplot3dDataSource :: clear(void)
  87. {
  88.     m_Data.clear();
  89.     m_Filters.clear();
  90. }
  91. void CTaxplot3dDataSource :: addVertex(TVertex & vert)
  92. {
  93.     m_Data.push_back(vert);
  94. }
  95. void CTaxplot3dDataSource :: addVertex(TVertex * vert)
  96. {
  97.     m_Data.push_back(*vert);
  98. }
  99.       
  100. void CTaxplot3dDataSource :: doVisibleAt(int i, bool flag)
  101. {
  102.     m_Data[i].doVisible(flag);
  103. }
  104. void CTaxplot3dDataSource :: doSelectAt(int i, bool flag)
  105. {
  106.     m_Data[i].doSelect(flag);
  107. }
  108. vector<CTaxplot3dDataSource::TVertex>   &  CTaxplot3dDataSource :: getData(void)
  109. {
  110.     return m_Data;
  111. }
  112. CTaxplot3dDataSource::TVertex &  CTaxplot3dDataSource :: getVertexAt(int i)
  113. {
  114.     return m_Data[i];
  115. }
  116. CTaxplot3dDataSource * CTaxplot3dDataSource :: normalizeAll(void)
  117. {
  118.     if (m_Data.size()>0){    
  119.         applyFiltering();
  120.         m_Scale = sqrt(max_element(m_Data.begin(), m_Data.end(), SBiggerVertex<CTaxplot3dDataSource::TVertex>())->getXYZ().Length2());     
  121.         for_each(m_Data.begin(), m_Data.end(), SNormalizeTo<TVertex>(m_Scale));            
  122.     }
  123.     return this;
  124. }
  125. void CTaxplot3dDataSource::addDatasource(CTaxplot3dDataSource & ds)
  126. {
  127.     vector<TVertex>::size_type size = m_Data.size();
  128.     m_Data.resize(size + ds.getData().size());
  129.     copy(ds.getData().begin(), ds.getData().end(), m_Data.begin()+size);
  130. }
  131. void CTaxplot3dDataSource::addDatasource(CTaxplot3dDataSource * ds)
  132. {
  133.     vector<TVertex>::size_type size = m_Data.size();
  134.     m_Data.resize(size + ds->getData().size());
  135.     copy(ds->getData().begin(), ds->getData().end(), m_Data.begin()+size);
  136. }
  137. void  CTaxplot3dDataSource::reshapeAll(TVertex::EShape shp)
  138. {
  139.     for_each(m_Data.begin(), m_Data.end(), SReshapeTo<TVertex>(shp));        
  140. }
  141. void  CTaxplot3dDataSource::applyFiltering(void)
  142. {
  143.     int cutoff = 20;
  144.     
  145.     sort(m_Data.begin(), m_Data.end(), SBiggerVertex<CTaxplot3dDataSource::TVertex>());
  146.     m_Data.resize(m_Data.size()-cutoff);
  147.     m_Data.erase(m_Data.begin(), m_Data.begin()+cutoff);    
  148. }
  149. void  CTaxplot3dDataSource::dropSelection(void)
  150. {
  151.     for_each(m_Data.begin(), m_Data.end(), SSetSelection<TVertex>(false));   
  152. }
  153. END_NCBI_SCOPE
  154. /*
  155.  * ===========================================================================
  156.  * $Log: taxplot3d_ds.cpp,v $
  157.  * Revision 1000.1  2004/06/01 21:13:43  gouriano
  158.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  159.  *
  160.  * Revision 1.7  2004/05/21 22:27:55  gorelenk
  161.  * Added PCH ncbi_pch.hpp
  162.  *
  163.  * Revision 1.6  2004/01/28 19:54:03  ucko
  164.  * SBiggerVertex: allow const arguments.
  165.  *
  166.  * Revision 1.5  2004/01/28 15:50:27  tereshko
  167.  * Added scale, current gi, to display tooltips in graph
  168.  *
  169.  * Revision 1.4  2004/01/21 14:16:30  dicuccio
  170.  * Adjusted API to be more coding standard compliant.
  171.  *
  172.  * Revision 1.3  2004/01/14 20:33:24  ucko
  173.  * Add "typename" in a couple of places to fix GCC (at least) build.
  174.  *
  175.  * Revision 1.2  2004/01/14 16:39:22  tereshko
  176.  * Minor changes due to integration with Taxplot viewer
  177.  *
  178.  * Revision 1.1  2004/01/05 16:20:49  tereshko
  179.  * Initial revision
  180.  *
  181.  * ===========================================================================
  182.  */