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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: pdf_obj.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:03:43  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: pdf_obj.cpp,v 1000.1 2004/06/01 21:03: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:  Peter Meric
  35.  *
  36.  * File Description:
  37.  *   CPdfObj - Stream for output of Adobe PDF objects
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include "pdf_obj.hpp"
  41. #include "pdf_object.hpp"
  42. #include "pdf_object_writer.hpp"
  43. #include <math.h>
  44. BEGIN_NCBI_SCOPE
  45. CPdfObj::CPdfObj(const string& str) : m_Str(str)
  46. {
  47. }
  48. CPdfObj::CPdfObj()
  49. {
  50. }
  51. CPdfObj::~CPdfObj()
  52. {
  53. }
  54. void CPdfObj::PrintTo(CNcbiOstream& stream) const
  55. {
  56.     stream << m_Str;
  57. }
  58. CPdfNumber::CPdfNumber(unsigned int i)
  59.     : m_Num(i),
  60.       m_Prec(0)
  61. {
  62. }
  63. CPdfNumber::CPdfNumber(int i)
  64.     : m_Num(i),
  65.       m_Prec(0)
  66. {
  67. }
  68. CPdfNumber::CPdfNumber(double d)
  69.     : m_Num(d),
  70.       m_Prec(6)
  71. {
  72. }
  73. CPdfNumber::~CPdfNumber()
  74. {
  75. }
  76. void CPdfNumber::PrintTo(CNcbiOstream& stream) const
  77. {
  78.     stream << setiosflags(ios::fixed) << setprecision(m_Prec) << m_Num;
  79. }
  80. CPdfRotate::CPdfRotate(double angle) : m_Rot(angle)
  81. {
  82. }
  83. CPdfRotate::~CPdfRotate()
  84. {
  85. }
  86. void CPdfRotate::PrintTo(CNcbiOstream& stream) const
  87. {
  88.     const double rad = m_Rot * 3.1415926535 / 180;
  89.     const double c = cos(rad);
  90.     const double s = sin(rad);
  91.     stream << setiosflags(ios::fixed) << c << ' ' << s << ' ' << -s << ' ' << c << " 0 0 cm";
  92. }
  93. CPdfTranslate::CPdfTranslate(double xoff, double yoff)
  94.     : m_XOff(xoff),
  95.       m_YOff(yoff),
  96.       m_Prec(6)
  97. {
  98. }
  99. CPdfTranslate::CPdfTranslate(unsigned int xoff, unsigned int yoff)
  100.     : m_XOff(xoff),
  101.       m_YOff(yoff),
  102.       m_Prec(0)
  103. {
  104. }
  105. CPdfTranslate::CPdfTranslate(int xoff, int yoff)
  106.     : m_XOff(xoff),
  107.       m_YOff(yoff),
  108.       m_Prec(0)
  109. {
  110. }
  111. CPdfTranslate::~CPdfTranslate()
  112. {
  113. }
  114. void CPdfTranslate::PrintTo(CNcbiOstream& stream) const
  115. {
  116.     stream << "1 0 0 1 " << setiosflags(ios::fixed) << setprecision(m_Prec)
  117.            << m_XOff << ' ' << m_YOff << " cm";
  118. }
  119. CPdfString::CPdfString(const string& str) : CPdfObj(str)
  120. {
  121. }
  122. CPdfString::~CPdfString()
  123. {
  124. }
  125. void CPdfString::PrintTo(CNcbiOstream& stream) const
  126. {
  127.     stream << '(' << m_Str << ')';
  128. }
  129. CPdfName::CPdfName(const string& str) : CPdfObj(str)
  130. {
  131. }
  132. CPdfName::~CPdfName()
  133. {
  134. }
  135. void CPdfName::PrintTo(CNcbiOstream& stream) const
  136. {
  137.     stream << '/' << m_Str;
  138. }
  139. CPdfIndirectObj::CPdfIndirectObj(const CRef<CPdfObject>& obj) : m_Obj(obj)
  140. {
  141. }
  142. CPdfIndirectObj::~CPdfIndirectObj()
  143. {
  144. }
  145. void CPdfIndirectObj::PrintTo(CNcbiOstream& stream) const
  146. {
  147.     stream << m_Obj->GetObjNum() << ' ' << m_Obj->GetGeneration() << " R";
  148. }
  149. CPdfArray::TArray& CPdfArray::GetArray(void)
  150. {
  151.     return m_Array;
  152. }
  153. void CPdfArray::PrintTo(CNcbiOstream& stream) const
  154. {
  155.     if (m_Array.size() == 0) {
  156.         return;
  157.     }
  158.     stream << '[';
  159.     bool first = true;
  160.     ITERATE(vector<TPdfObjRef>, it, m_Array) {
  161.         if (first) {
  162.             first = false;
  163.         } else {
  164.             stream << ' ';
  165.         }
  166.         stream << **it;
  167.     }
  168.     stream << ']';
  169. }
  170. void CPdfArray::Add(const CRef<CPdfArray>& array)
  171. {
  172.     m_Array.insert(m_Array.end(),
  173.                    array->m_Array.begin(), array->m_Array.end());
  174. /*
  175.     ITERATE(vector<TPdfObjRef>, it, array->m_Array) {
  176.         m_Array.push_back(*it);
  177.     }
  178. */
  179. }
  180. CPdfDictionary::TPdfObjRef& CPdfDictionary::operator[](const string& key)
  181. {
  182.     return m_Dict[key];
  183. }
  184. void CPdfDictionary::PrintTo(CNcbiOstream& stream) const
  185. {
  186.     if (m_Dict.size() == 0) {
  187.         return;
  188.     }
  189.     stream << "<<";
  190.     ITERATE(TDict, it, m_Dict) {
  191.         const CPdfObj* val = it->second.GetPointer();
  192.         bool insert_space = false;
  193.         if (dynamic_cast < const CPdfIndirectObj*>(val)  ||  
  194.             dynamic_cast < const CPdfNumber*>(val)) {
  195.             insert_space = true;
  196.         }
  197.         stream << '/' << it->first;
  198.         if (insert_space) {
  199.             stream << ' ';
  200.         }
  201.         stream << *val;
  202.     }
  203.     stream << ">>";
  204. }
  205. void CPdfDictionary::Add(const CRef<CPdfDictionary>& dict)
  206. {
  207.     // 
  208.     // std::map::insert(beg, end) doesn't seem to work on MSVC++ 6.0.
  209.     // Iterate "manually" and copy each element instead.
  210.     //
  211.     //m_Dict.insert(dict->m_Dict.begin(), dict->m_Dict.end());
  212.     ITERATE(TDict, it, dict->m_Dict) {
  213.         m_Dict.insert(*it);
  214.     }
  215. }
  216. END_NCBI_SCOPE
  217. /*
  218.  * ===========================================================================
  219.  * $Log: pdf_obj.cpp,v $
  220.  * Revision 1000.1  2004/06/01 21:03:43  gouriano
  221.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  222.  *
  223.  * Revision 1.9  2004/05/21 22:27:50  gorelenk
  224.  * Added PCH ncbi_pch.hpp
  225.  *
  226.  * Revision 1.8  2003/08/11 19:27:35  dicuccio
  227.  * Favor member insert to std::copy()
  228.  *
  229.  * Revision 1.7  2003/06/25 18:02:51  meric
  230.  * Source rearrangement: move "private" headers into the src/ tree
  231.  *
  232.  * Revision 1.6  2003/06/24 15:43:26  meric
  233.  * Added CPdfRotate and CPdfTranslate
  234.  * Added CPdfArray::Add(...)
  235.  * Added CPdfNumber ctors for [unsigned] int, set precision on output
  236.  *
  237.  * Revision 1.5  2003/06/18 17:25:39  meric
  238.  * Final phase of print reorg: remove dependence on gui/opengl and OpenGL
  239.  *
  240.  * Revision 1.4  2003/06/18 16:40:33  meric
  241.  * First phase of print reorg: remove dependence on gui/opengl and OpenGL
  242.  * except for class COpenGLPrintBuffer
  243.  *
  244.  * Revision 1.3  2003/06/17 19:33:38  meric
  245.  * Print Dictionary more concisely, on one line
  246.  *
  247.  * Revision 1.2  2003/06/16 12:44:52  dicuccio
  248.  * Clean-up after initial commit
  249.  *
  250.  * Revision 1.1  2003 / 06 / 13 18:13:56  meric
  251.  * Initial version
  252.  *
  253.  *
  254.  * ===========================================================================
  255.  */