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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: cn3d_colors.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:28:13  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.19
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: cn3d_colors.cpp,v 1000.2 2004/06/01 18:28:13 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. *      Holds various color values and cycles
  38. *
  39. * ===========================================================================
  40. */
  41. #ifdef _MSC_VER
  42. #pragma warning(disable:4018)   // disable signed/unsigned mismatch warning in MSVC
  43. #endif
  44. #include <ncbi_pch.hpp>
  45. #include <corelib/ncbistd.hpp>
  46. #include <math.h>
  47. #include "cn3d_colors.hpp"
  48. #include "cn3d_tools.hpp"
  49. USING_NCBI_SCOPE;
  50. BEGIN_SCOPE(Cn3D)
  51. // the global Colors object
  52. static const Colors colors;
  53. const Colors * GlobalColors(void)
  54. {
  55.     return &colors;
  56. }
  57. // # colors for color cycles
  58. const int
  59.     Colors::nCycle1 = 10;
  60. // # colors for color maps (must be >1)
  61. const int
  62.     Colors::nTemperatureMap = 5,
  63.     Colors::nHydrophobicityMap = 3,
  64.     Colors::nConservationMap = 2,
  65.     Colors::nRainbowMap = 7;
  66. Colors::Colors(void)
  67. {
  68.     // default colors
  69.     colors[eHighlight].Set(1, 1, 0);
  70.     colors[eMergeFail].Set(1, .8, .8);
  71.     colors[eGeometryViolation].Set(.6, 1, .6);
  72.     colors[eMarkBlock].Set(.8, .8, .8);
  73.     colors[eHelix].Set(.1, .9, .1);
  74.     colors[eStrand].Set(.9, .7, .2);
  75.     colors[eCoil].Set(.3, .9, .9);
  76.     colors[ePositive].Set(.2, .3, 1.0);
  77.     colors[eNegative].Set(.9, .2, .2);
  78.     colors[eNeutral].Set(.6, .6, .6);
  79.     colors[eNoDomain].Set(.4, .4, .4);
  80.     colors[eNoTemperature].Set(.4, .4, .4);
  81.     colors[eNoHydrophobicity].Set(.4, .4, .4);
  82.     colors[eUnaligned].Set(.4, .4, .4);
  83.     colors[eNoCoordinates].Set(.4, .4, .4);
  84.     // cycles and maps
  85.     cycleColors.resize(eNumColorCycles);
  86.     mapColors.resize(eNumColorMaps);
  87.     // colors for cycle1
  88.     cycleColors[eCycle1].resize(nCycle1);
  89.     cycleColors[eCycle1][0].Set(1, 0, 1);
  90.     cycleColors[eCycle1][1].Set(0, 0, 1);
  91.     cycleColors[eCycle1][2].Set(139.0/255, 87.0/255, 66.0/255);
  92.     cycleColors[eCycle1][3].Set(0, 1, .5);
  93.     cycleColors[eCycle1][4].Set(.7, .7, .7);
  94.     cycleColors[eCycle1][5].Set(1, 165.0/255, 0);
  95.     cycleColors[eCycle1][6].Set(1, 114.0/255, 86.0/255);
  96.     cycleColors[eCycle1][7].Set(0, 1, 0);
  97.     cycleColors[eCycle1][8].Set(0, 1, 1);
  98.     cycleColors[eCycle1][9].Set(1, 236.0/255, 139.0/255);
  99.     // colors for temperature map
  100.     mapColors[eTemperatureMap].resize(nTemperatureMap);
  101.     mapColors[eTemperatureMap][0].Set(0.2, 0.2, 0.7);
  102.     mapColors[eTemperatureMap][1].Set(0.1, 0.6, 0.2);
  103.     mapColors[eTemperatureMap][2].Set(0.9, 0.8, 0.2);
  104.     mapColors[eTemperatureMap][3].Set(0.9, 0.2, 0.2);
  105.     mapColors[eTemperatureMap][4].Set(0.9, 0.9, 0.9);
  106.     // colors for hydrophobicity map
  107.     mapColors[eHydrophobicityMap].resize(nHydrophobicityMap);
  108.     mapColors[eHydrophobicityMap][0].Set(0.2, 0.2, 0.7);
  109.     mapColors[eHydrophobicityMap][1].Set(0.2, 0.5, 0.6);
  110.     mapColors[eHydrophobicityMap][2].Set(0.7, 0.4, 0.3);
  111.     // colors for conservation map
  112.     mapColors[eConservationMap].resize(nConservationMap);
  113.     mapColors[eConservationMap][0].Set(0.0, 75.0/255, 1.0);
  114.     mapColors[eConservationMap][1].Set(1.0, 0.0, 0.0);
  115.     // colors for rainbow map
  116.     mapColors[eRainbowMap].resize(nRainbowMap);
  117.     mapColors[eRainbowMap][0].Set(0.9, 0.1, 0.1);
  118.     mapColors[eRainbowMap][1].Set(1.0, 0.5, 0.1);
  119.     mapColors[eRainbowMap][2].Set(0.8, 0.9, 0.1);
  120.     mapColors[eRainbowMap][3].Set(0.1, 0.9, 0.1);
  121.     mapColors[eRainbowMap][4].Set(0.1, 0.1, 1.0);
  122.     mapColors[eRainbowMap][5].Set(0.5, 0.2, 1.0);
  123.     mapColors[eRainbowMap][6].Set(0.9, 0.2, 0.5);
  124. }
  125. const Vector& Colors::Get(eColor which) const
  126. {
  127.     if (which >= 0 && which < eNumColors) return colors[which];
  128.     ERRORMSG("Colors::Get() - bad eColor " << (int) which);
  129.     return colors[0];
  130. }
  131. const Vector& Colors::Get(eColorCycle which, int n) const
  132. {
  133.     if (which >= 0 && which < eNumColorCycles && n >= 0)
  134.         return cycleColors[which][n % cycleColors[which].size()];
  135.     ERRORMSG("Colors::Get() - bad eColorCycle " << (int) which);
  136.     return cycleColors[0][0];
  137. }
  138. Vector Colors::Get(eColorMap which, double f) const
  139. {
  140.     if (which >= 0 && which < eNumColorMaps && f >= 0.0 && f <= 1.0) {
  141.         const vector < Vector >& colorMap = mapColors[which];
  142.         if (f == 1.0) return colorMap[colorMap.size() - 1];
  143.         double bin = 1.0 / (colorMap.size() - 1);
  144.         int low = (int) (f / bin);
  145.         double fraction = fmod(f, bin) / bin;
  146.         const Vector &color1 = colorMap[low], &color2 = colorMap[low + 1];
  147.         return (color1 + fraction * (color2 - color1));
  148.     }
  149.     ERRORMSG("Colors::Get() - bad eColorMap " << (int) which << " at " << f);
  150.     return mapColors[0][0];
  151. }
  152. const Vector* Colors::Get(eColorMap which, int index) const
  153. {
  154.     if (which >= 0 && which < eNumColorMaps && index >= 0 && index < mapColors[which].size())
  155.         return &(mapColors[which][index]);
  156.     else
  157.         return NULL;
  158. }
  159. END_SCOPE(Cn3D)
  160. /*
  161. * ---------------------------------------------------------------------------
  162. * $Log: cn3d_colors.cpp,v $
  163. * Revision 1000.2  2004/06/01 18:28:13  gouriano
  164. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.19
  165. *
  166. * Revision 1.19  2004/05/21 21:41:39  gorelenk
  167. * Added PCH ncbi_pch.hpp
  168. *
  169. * Revision 1.18  2004/02/19 17:04:50  thiessen
  170. * remove cn3d/ from include paths; add pragma to disable annoying msvc warning
  171. *
  172. * Revision 1.17  2003/02/03 19:20:02  thiessen
  173. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  174. *
  175. * Revision 1.16  2003/01/28 21:07:56  thiessen
  176. * add block fit coloring algorithm; tweak row dragging; fix style bug
  177. *
  178. * Revision 1.15  2002/11/18 20:49:11  thiessen
  179. * move unaligned/no-coord colors into Colors class
  180. *
  181. * Revision 1.14  2001/09/04 15:38:03  thiessen
  182. * switch red/blue charge colors
  183. *
  184. * Revision 1.13  2001/09/04 14:40:19  thiessen
  185. * add rainbow and charge coloring
  186. *
  187. * Revision 1.12  2001/08/24 00:41:35  thiessen
  188. * tweak conservation colors and opengl font handling
  189. *
  190. * Revision 1.11  2001/08/10 19:45:18  thiessen
  191. * minor fix for Mac
  192. *
  193. * Revision 1.10  2001/08/09 23:14:13  thiessen
  194. * fixes for MIPSPro and Mac compilers
  195. *
  196. * Revision 1.9  2001/08/09 19:07:13  thiessen
  197. * add temperature and hydrophobicity coloring
  198. *
  199. * Revision 1.8  2001/07/12 17:35:15  thiessen
  200. * change domain mapping ; add preliminary cdd annotation GUI
  201. *
  202. * Revision 1.7  2001/05/11 02:10:41  thiessen
  203. * add better merge fail indicators; tweaks to windowing/taskbar
  204. *
  205. * Revision 1.6  2001/05/09 17:15:06  thiessen
  206. * add automatic block removal upon demotion
  207. *
  208. * Revision 1.5  2001/04/05 22:55:35  thiessen
  209. * change bg color handling ; show geometry violations
  210. *
  211. * Revision 1.4  2001/03/22 00:33:16  thiessen
  212. * initial threading working (PSSM only); free color storage in undo stack
  213. *
  214. * Revision 1.3  2000/12/22 19:26:40  thiessen
  215. * write cdd output files
  216. *
  217. * Revision 1.2  2000/12/01 19:35:57  thiessen
  218. * better domain assignment; basic show/hide mechanism
  219. *
  220. * Revision 1.1  2000/11/30 15:49:37  thiessen
  221. * add show/hide rows; unpack sec. struc. and domain features
  222. *
  223. */