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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: taxplot3d_ds.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/12 18:27:10  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_WIDGETS_GRAPH_3D___GRAPH_3D_DS__HPP
  10. #define GUI_WIDGETS_GRAPH_3D___GRAPH_3D_DS__HPP
  11. /*  $Id: taxplot3d_ds.hpp,v 1000.0 2004/04/12 18:27:10 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Vladimir Tereshkov
  37.  *
  38.  * File Description:  
  39.  *  Datasource for visualization in CTaxplot3dPanel    
  40.  */
  41. #include <corelib/ncbistd.hpp>
  42. #include <corelib/ncbiobj.hpp>
  43. #include <gui/math/vect3.hpp>
  44. #include <gui/math/matrix3.hpp>
  45. #include <gui/math/matrix4.hpp>
  46. #include <algorithm>
  47. BEGIN_NCBI_SCOPE
  48. // applied vertex definition
  49. template <class T, class W>
  50. class CGraph3DVertex : public CObject
  51. {
  52. public:
  53.     enum EShape {
  54.         eCube,
  55.         eSphere,
  56.         eCross
  57.     };
  58.     CGraph3DVertex() : m_Selected(false), m_Visible(true), m_Shape(eSphere)
  59.     {        
  60.     }    
  61.     
  62.     CGraph3DVertex(T x, T y, T z, Int4 gi = 0)
  63.     {      
  64.         CGraph3DVertex();
  65.         setXYZ(x, y, z);
  66.         m_Gi = gi;
  67.     }
  68.    ~CGraph3DVertex(){};
  69.    
  70.     // setting xyz
  71.     void setXYZ(T x, T y, T z)
  72.     {
  73.         m_Point.X() = x;
  74.         m_Point.Y() = y;
  75.         m_Point.Z() = z;      
  76.     }
  77.     // setting color
  78.     void setRGB(W r, W g, W b)
  79.     {
  80.         m_Color.X() = r;
  81.         m_Color.Y() = g;
  82.         m_Color.Z() = b;
  83.     }
  84.     // function
  85.     void operator ()(CGraph3DVertex<T, W> & vert)
  86.     {
  87.         m_Point     = vert.getXYZ();
  88.         m_Color     = vert.getRGB();
  89.         m_Shape     = vert.getShape();
  90.         m_Visible   = vert.isVisible();
  91.         m_Selected  = vert.isSelected();
  92.         m_Gi        = vert.getGi();
  93.     }
  94.     // setting shape
  95.     void setShape(EShape shape)    {m_Shape = shape;}
  96.     // getting everything
  97.     EShape           getShape(void) const {return m_Shape;   }
  98.     CVect3<T>&       getXYZ(void)         {return m_Point;   }
  99.     const CVect3<T>& getXYZ(void)   const {return m_Point;   }
  100.     CVect3<W>&       getRGB(void)         {return m_Color;   }
  101.     const CVect3<W>& getRGB(void)   const {return m_Color;   }
  102.     Int4             getGi(void)    const {return m_Gi;      }         
  103.     // checks
  104.     bool        isSelected(void)   const {return m_Selected;}
  105.     bool        isVisible(void)    const {return m_Visible;}
  106.     // actions
  107.     void        doSelect(bool flag=true) {m_Selected = flag;}
  108.     void        doVisible(bool flag=true){m_Visible  = flag;}    
  109. private:    
  110.     CVect3<T>     m_Point;    // coordinates
  111.     CVect3<W>     m_Color;    // rgb color    
  112.     bool          m_Selected; // selection
  113.     bool          m_Visible;  // visibility
  114.     EShape        m_Shape;    // shape 
  115.     Int4          m_Gi;       // gi of object    
  116. };
  117. // data source for 3d graph
  118. class NCBI_GUIWIDGETS_TAXPLOT_EXPORT CTaxplot3dDataSource : public CObject                      
  119. {
  120. public:
  121.     typedef CGraph3DVertex<float, float> TVertex;
  122.     typedef unary_function<float, void>  TFilter;     
  123.     CTaxplot3dDataSource();
  124.     ~CTaxplot3dDataSource();
  125.     // adding   
  126.     void                addVertex(TVertex & vert);
  127.     void                addVertex(TVertex * vert);
  128.     void                addDatasource(CTaxplot3dDataSource & ds);
  129.     void                addDatasource(CTaxplot3dDataSource * ds);
  130.     // setting/getting labels
  131.     string            & xLabel(void) {return m_Xlabel;}
  132.     string            & yLabel(void) {return m_Ylabel;}
  133.     string            & zLabel(void) {return m_Zlabel;}
  134.     // selection/visibility
  135.     void                doVisibleAt(int i, bool flag = true);   
  136.     void                doSelectAt(int i, bool flag = true);
  137.     // getting everything
  138.     vector<TVertex>   & getData(void);
  139.     TVertex           & getVertexAt(int i);
  140.     // actions with data
  141.     CTaxplot3dDataSource* normalizeAll(void);
  142.     void                  reshapeAll(TVertex::EShape shp);
  143.     void                  applyFiltering(void);
  144.         
  145.     // filtering functor add-ons
  146.     void               addFilter(TFilter ff){};  
  147.     // clearing
  148.     void               clear(void);
  149.     // retrieving scale
  150.     float              getScale(void) { return m_Scale; }
  151.     // clear selection
  152.     void               dropSelection(void); 
  153. private:     
  154.     vector <TVertex>  m_Data; 
  155.     vector <TFilter>  m_Filters;
  156.     string            m_Xlabel, m_Ylabel, m_Zlabel;
  157.     float             m_Scale;
  158. };
  159. END_NCBI_SCOPE
  160. /*
  161.  * ===========================================================================
  162.  * $Log: taxplot3d_ds.hpp,v $
  163.  * Revision 1000.0  2004/04/12 18:27:10  gouriano
  164.  * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.5
  165.  *
  166.  * Revision 1.5  2004/01/28 19:53:44  ucko
  167.  * CGraph3DVertex<>: supply const versions of all getters.
  168.  *
  169.  * Revision 1.4  2004/01/28 15:50:04  tereshko
  170.  * Added scale, current gi, to display tooltips in graph
  171.  *
  172.  * Revision 1.3  2004/01/21 14:16:29  dicuccio
  173.  * Adjusted API to be more coding standard compliant.
  174.  *
  175.  * Revision 1.2  2004/01/14 16:33:36  tereshko
  176.  * Taxplot viewer interation minor fixes
  177.  *
  178.  * Revision 1.1  2004/01/05 16:22:03  tereshko
  179.  * Initial revision
  180.  *
  181.  * ===========================================================================
  182.  */
  183. #endif  // GUI_WIDGETS_HIT_MATRIX___HIT_MATRIX_WIDGET__HPP