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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: bbox.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:48:34  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_UTILS__BBOX_HPP
  10. #define GUI_UTILS__BBOX_HPP
  11. /*  $Id: bbox.hpp,v 1000.1 2004/06/01 19:48:34 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:  Peter Meric
  37.  *
  38.  * File Description:
  39.  *   CBBox - represents (and calculates) a bounding box
  40.  *
  41.  */
  42. #include <corelib/ncbistd.hpp>
  43. /** @addtogroup GUI_MATH
  44.  *
  45.  * @{
  46.  */
  47. BEGIN_NCBI_SCOPE
  48. //
  49. // BBox represents a simple, rectangular bounding box
  50. //
  51. template <int N>
  52. class CBBox
  53. {
  54. public:
  55.     enum { X, Y, Z };
  56.     CBBox()
  57.         : m_IsSet(false)
  58.     {
  59.         for (unsigned int i = 0; i < N; ++i) {
  60.             lower[i] = upper[i] = 0.0f;
  61.         }
  62.     }
  63.     virtual ~CBBox()
  64.     {
  65.     }
  66.     void Add(const CBBox<N>& bbox)
  67.     {
  68.         Add(bbox.lower);
  69.         Add(bbox.upper);
  70.     }
  71.     //
  72.     // NumSets is the number of sets of points
  73.     // Stride is the distance between the start of one set and the next
  74.     //
  75.     void Add(const float vals[N], int num_sets = 1, int stride = 0)
  76.     {
  77.         unsigned int offset = 0;
  78.         while (num_sets-- > 0) {
  79.             if (!m_IsSet) {
  80.                 for (unsigned int i = 0; i < N; ++i) {
  81.                     unsigned int idx = i + offset;
  82.                     lower[i] = upper[i] = vals[idx];
  83.                 }
  84.                 m_IsSet = true;
  85.             }
  86.             else {
  87.                 for (unsigned int i = 0; i < N; ++i) {
  88.                     unsigned int idx = i + offset;
  89.                     if (vals[idx] < lower[i]) {
  90.                         lower[i] = vals[idx];
  91.                     }
  92.                     else if (vals[idx] > upper[i]) {
  93.                         upper[i] = vals[idx];
  94.                     }
  95.                 }
  96.             }
  97.             offset += stride;
  98.         }
  99.     }
  100.     pair<float, float> GetNthRange(unsigned int n) const
  101.     {
  102.         return make_pair(lower[n], upper[n]);
  103.     }
  104.     virtual void PrintTo(CNcbiOstream& strm) const
  105.     {
  106.         strm << '[';
  107.         for (unsigned int i = 0; i < N; ++i) {
  108.             if (i > 0) {
  109.                 strm << ", ";
  110.             }
  111.             strm << '(' << lower[i] << ", " << upper[i] << ')';
  112.         }
  113.         strm << ']';
  114.     }
  115. private:
  116.     bool m_IsSet;
  117.     float lower[N], upper[N];
  118. };
  119. inline CNcbiOstream& operator<<(CNcbiOstream& strm, const CBBox<3>& bb)
  120. {
  121.     bb.PrintTo(strm);
  122.     return strm;
  123. }
  124. END_NCBI_SCOPE
  125. /* @} */
  126. /*
  127.  * ===========================================================================
  128.  * $Log: bbox.hpp,v $
  129.  * Revision 1000.1  2004/06/01 19:48:34  gouriano
  130.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  131.  *
  132.  * Revision 1.6  2004/05/11 18:53:50  dicuccio
  133.  * Added doxygen modules info
  134.  *
  135.  * Revision 1.5  2003/06/18 17:33:44  meric
  136.  * Remove unnecessary includes
  137.  *
  138.  * Revision 1.4  2003/06/18 16:41:00  meric
  139.  * First phase of print reorg: remove dependence on gui/opengl and OpenGL
  140.  * except for class COpenGLPrintBuffer
  141.  *
  142.  * Revision 1.3  2003/06/16 15:55:58  dicuccio
  143.  * Work-in-progress: everything compiles, still much reorganization to be done.
  144.  * Moved generic functionality out of opengl/print/ and into gui/utils (print
  145.  * options, print dialogs, etc.).  Removed interactive state from CGlCanvas.
  146.  * Added hook in CView for opening standard print dialog, and for generic print
  147.  * handling.
  148.  *
  149.  * Revision 1.2  2003/06/16 12:46:21  dicuccio
  150.  * Clean-up after initial commit
  151.  *
  152.  * Revision 1.1  2003/06/13 19:00:29  meric
  153.  * Initial version
  154.  *
  155.  *
  156.  * ===========================================================================
  157.  */
  158. #endif  // GUI_UTILS__BBOX_HPP