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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: structure_base.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 18:29:26  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.24
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: structure_base.hpp,v 1000.1 2004/06/01 18:29:26 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:  Paul Thiessen
  35. *
  36. * File Description:
  37. *      Base class for objects that will hold structure data
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CN3D_STRUCTUREBASE__HPP
  42. #define CN3D_STRUCTUREBASE__HPP
  43. #include <corelib/ncbistl.hpp>
  44. #include <corelib/ncbidiag.hpp>
  45. #include <list>
  46. BEGIN_SCOPE(Cn3D)
  47. class StructureSet;
  48. class AtomSet;
  49. class StructureBase
  50. {
  51. public:
  52.     // will store StructureBase-derived children in parent upon construction
  53.     StructureBase(StructureBase *parent);
  54.     // will automatically delete children upon destruction with this destructor.
  55.     // But note that derived classes can have their own constructors that will
  56.     // *also* be called upon deletion; derived class destructors should *not*
  57.     // delete any StructureBase-derived objects.
  58.     virtual ~StructureBase(void);
  59.     // overridable default Draws the object and all its children; 'data' will
  60.     // be passed along to self and children's Draw methods
  61.     virtual bool DrawAll(const AtomSet *atomSet = NULL) const;
  62.     // function to draw this object, called before children are Drawn. Return
  63.     // false to halt recursive drawing process. An AtomSet can be passed along
  64.     // for cases (e.g. NMR structures) where a graph can be applied to multiple
  65.     // sets of atom coordinates
  66.     virtual bool Draw(const AtomSet *atomSet = NULL) const { return true; }
  67.     // for convenience/efficiency accessing stuff attached to StructureSet
  68.     StructureSet *parentSet;
  69. private:
  70.     // no default construction
  71.     StructureBase(void);
  72.     // keep track of StructureBase-derived children, so that top-down operations
  73.     // like drawing or deconstructing can trickle down automatically
  74.     typedef std::list < StructureBase * > _ChildList;
  75.     _ChildList _children;
  76.     void _AddChild(StructureBase *child);
  77.     // also keep parent so we can move up the tree (see GetParentOfType())
  78.     StructureBase* _parent;
  79. protected:
  80.     void _RemoveChild(const StructureBase *child);
  81. public:
  82.     // go up the hierarchy to find a parent of the desired type
  83.     template < class T >
  84.     bool GetParentOfType(const T* *ptr, bool warnIfNotFound = true) const
  85.     {
  86.         *ptr = NULL;
  87.         for (const StructureBase *parent=this->_parent; parent; parent=parent->_parent) {
  88.             if ((*ptr = dynamic_cast<const T*>(parent)) != NULL) {
  89.                 return true;
  90.             }
  91.         }
  92.         if (warnIfNotFound)
  93.             ERR_POST(ncbi::Warning << "can't get parent of requested type");
  94.         return false;
  95.     }
  96. };
  97. // for convenience when passing around atom pointers
  98. class AtomPntr
  99. {
  100. public:
  101.     static const int NO_ID;
  102.     int mID, rID, aID;
  103.     AtomPntr(int m = NO_ID, int r = NO_ID, int a = NO_ID) : mID(m), rID(r), aID(a) { }
  104.     AtomPntr& operator = (const AtomPntr& a)
  105.         { mID = a.mID; rID = a.rID; aID = a.aID; return *this; }
  106. };
  107. END_SCOPE(Cn3D)
  108. #endif // CN3D_STRUCTUREBASE__HPP
  109. /*
  110. * ---------------------------------------------------------------------------
  111. * $Log: structure_base.hpp,v $
  112. * Revision 1000.1  2004/06/01 18:29:26  gouriano
  113. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.24
  114. *
  115. * Revision 1.24  2004/05/28 21:01:45  thiessen
  116. * namespace/typename fixes for GCC 3.4
  117. *
  118. * Revision 1.23  2003/02/03 19:20:07  thiessen
  119. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  120. *
  121. * Revision 1.22  2001/05/31 18:46:27  thiessen
  122. * add preliminary style dialog; remove LIST_TYPE; add thread single and delete all; misc tweaks
  123. *
  124. * Revision 1.21  2001/05/17 18:34:01  thiessen
  125. * spelling fixes; change dialogs to inherit from wxDialog
  126. *
  127. * Revision 1.20  2001/05/15 23:49:21  thiessen
  128. * minor adjustments to compile under Solaris/wxGTK
  129. *
  130. * Revision 1.19  2001/05/15 14:57:48  thiessen
  131. * add cn3d_tools; bring up log window when threading starts
  132. *
  133. * Revision 1.18  2001/05/11 13:45:10  thiessen
  134. * set up data directory
  135. *
  136. * Revision 1.17  2001/02/22 00:29:48  thiessen
  137. * make directories global ; allow only one Sequence per StructureObject
  138. *
  139. * Revision 1.16  2000/11/11 21:12:08  thiessen
  140. * create Seq-annot from BlockMultipleAlignment
  141. *
  142. * Revision 1.15  2000/10/04 17:40:47  thiessen
  143. * rearrange STL #includes
  144. *
  145. * Revision 1.14  2000/08/18 23:07:03  thiessen
  146. * minor efficiency tweaks
  147. *
  148. * Revision 1.13  2000/08/18 18:57:44  thiessen
  149. * added transparent spheres
  150. *
  151. * Revision 1.12  2000/08/17 14:22:01  thiessen
  152. * added working StyleManager
  153. *
  154. * Revision 1.11  2000/08/11 12:59:13  thiessen
  155. * added worm; get 3d-object coords from asn1
  156. *
  157. * Revision 1.10  2000/08/04 22:49:11  thiessen
  158. * add backbone atom classification and selection feedback mechanism
  159. *
  160. * Revision 1.9  2000/08/03 15:12:29  thiessen
  161. * add skeleton of style and show/hide managers
  162. *
  163. * Revision 1.8  2000/07/27 13:30:10  thiessen
  164. * remove 'using namespace ...' from all headers
  165. *
  166. * Revision 1.7  2000/07/16 23:18:34  thiessen
  167. * redo of drawing system
  168. *
  169. * Revision 1.6  2000/07/12 23:28:28  thiessen
  170. * now draws basic CPK model
  171. *
  172. * Revision 1.5  2000/07/11 13:49:29  thiessen
  173. * add modules to parse chemical graph; many improvements
  174. *
  175. * Revision 1.4  2000/07/01 15:44:23  thiessen
  176. * major improvements to StructureBase functionality
  177. *
  178. * Revision 1.3  2000/06/29 19:18:19  thiessen
  179. * improved atom map
  180. *
  181. * Revision 1.2  2000/06/29 16:46:16  thiessen
  182. * use NCBI streams correctly
  183. *
  184. * Revision 1.1  2000/06/27 20:08:13  thiessen
  185. * initial checkin
  186. *
  187. */