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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: postscript.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:03:51  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: postscript.cpp,v 1000.1 2004/06/01 21:03:51 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.  *   CPostscript - Postscript output
  38.  *
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include <gui/print/postscript.hpp>
  42. #include <gui/utils/rgba_color.hpp>
  43. #include <gui/print/vector_object.hpp>
  44. #include "page_buffers.hpp"
  45. #include "postscript_defs.hpp"
  46. BEGIN_NCBI_SCOPE
  47. CPostscript::CPostscript()
  48.     : m_PageCount(0),
  49.       m_PageBuffers(new CPageBuffers())
  50. {
  51. }
  52. CPostscript::~CPostscript()
  53. {
  54. }
  55. void CPostscript::SetOptions(const CPrintOptions& options)
  56. {
  57.     m_Options = options;
  58. }
  59. void CPostscript::PrintBuffer(const CPBuffer* buf)
  60. {
  61.     m_PageBuffers->Add(buf);
  62. }
  63. void CPostscript::BeginDocument()
  64. {
  65.     PrintStrings(*m_Strm, s_PS_topA);
  66.     *m_Strm << "%%Title: " << m_Options.GetTitle() << endl;
  67.     PrintStrings(*m_Strm, s_PS_topB);
  68.     // print the prolog
  69.     PrintStrings(*m_Strm, s_PS_prologA);
  70.     *m_Strm << "% color command - r g b C" << endl;
  71.     if (m_Options.GetGrayscale()) {
  72.         *m_Strm << "/C { C_GREY } bind def" << endl;
  73.     } else {
  74.         *m_Strm << "/C { C_RGB } bind def" << endl;
  75.     }
  76.     PrintStrings(*m_Strm, s_PS_colors);
  77.     PrintStrings(*m_Strm, s_PS_prologB);
  78. }
  79. void CPostscript::EndDocument()
  80. {
  81.     *m_Strm << "%%Pages: " << m_PageCount << endl;
  82.     PrintStrings(*m_Strm, s_PS_bottom);
  83. }
  84. void CPostscript::ShowPage()
  85. {
  86.     /*
  87.        if (m_PageBuffers->Empty()) {
  88.        return;
  89.        }
  90.     */
  91.     BeginPage();
  92.     ITERATE(CPageBuffers,  it, *m_PageBuffers) {
  93.         CVectorPrinter::PrintBuffer(*it);
  94.     }
  95.     EndPage();
  96.     m_PageBuffers->Clear();
  97. }
  98. void CPostscript::BeginPage()
  99. {
  100.     *m_Strm << "%Page: " << ++m_PageCount << endl;
  101.     *m_Strm << "bop" << endl;
  102.     // landscape mode
  103.     CBBox <3> bbox = m_PageBuffers->GetBoundingBox();
  104.     *m_Strm << "% bounding box: " << bbox << endl;
  105.     const pair<float, float> xs = bbox.GetNthRange(0);
  106.     *m_Strm << "/dwidth { " << xs.second - xs.first << " } def" << endl;
  107.     const pair<float, float> ys = bbox.GetNthRange(1);
  108.     *m_Strm << "/dheight { " << ys.second - ys.first << " } def" << endl;
  109.     *m_Strm << "lscape" << endl;
  110.     // print header
  111.     string header(m_Options.GetHeader());
  112.     if (header.length() > 0) {
  113.         *m_Strm << "(" << header << ") pghead" << endl;
  114.     }
  115. }
  116. void CPostscript::EndPage()
  117. {
  118.     if (m_PageCount == 0) {
  119.         return;
  120.     }
  121.     // print footer
  122.     string footer(m_Options.GetFooter());
  123.     if (footer.length() > 0) {
  124.         *m_Strm << "(" << footer << ") pgfoot" << endl;
  125.     }
  126.     *m_Strm << "eop" << endl;
  127. }
  128. void CPostscript::PrintObject(const CObject* obj, CPrintState& state)
  129. {
  130.     CRgbaColor& curr_nonstipple = state.m_NonStipple;
  131.     const CPVecText* txt = dynamic_cast < const CPVecText*>(obj);
  132.     if (txt) {
  133.         // set the text color
  134.         const CRgbaColor& color = txt->GetColor();
  135.         if ( !(color == curr_nonstipple) ) {
  136.             color.PrintTo(*m_Strm, false);
  137.             *m_Strm << " C" << endl;
  138.             curr_nonstipple = color;
  139.         }
  140.         // output the text, font and font size
  141.         *m_Strm << '(' << txt->GetText() << ") /" << txt->GetFont() << " 8 ";
  142.         // output the text position and the showtext command
  143.         const float* p = txt->GetPosition();
  144.         *m_Strm << p[0] << ' ' << p[1] << " showtext" << endl;
  145.         return;
  146.     }
  147.     const CPVecPoint* point = dynamic_cast < const CPVecPoint*>(obj);
  148.     if (point) {
  149.         const CRgbaColor& color = point->GetColor();
  150.         if ( !(color == curr_nonstipple) ) {
  151.             color.PrintTo(*m_Strm, false);
  152.             *m_Strm << " C" << endl;
  153.             curr_nonstipple = color;
  154.         }
  155.         *m_Strm << point << " P" << endl;
  156.         return;
  157.     }
  158.     const CPVecPolygon* poly = dynamic_cast < const CPVecPolygon*>(obj);
  159.     if ( !poly ) {
  160.         return;
  161.     }
  162.     if (poly->IsFlatColored()) {
  163.         const CRgbaColor& color = (*poly->begin())->GetColor();
  164.         if ( !(color == curr_nonstipple) ) {
  165.             color.PrintTo(*m_Strm, false);
  166.             *m_Strm << " C" << endl;
  167.             curr_nonstipple = color;
  168.         }
  169.         ITERATE(CPVecPolygon, it, *poly) {
  170.             const CPVecPoint* p = *it;
  171.             p->PrintTo(*m_Strm, CPVecPoint::eCoordXY); // only print X, Y coordinates
  172.             *m_Strm << " ";
  173.         }
  174.         *m_Strm << " T" << endl;
  175.     }
  176. }
  177. END_NCBI_SCOPE
  178. /*
  179.  * ===========================================================================
  180.  * $Log: postscript.cpp,v $
  181.  * Revision 1000.1  2004/06/01 21:03:51  gouriano
  182.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  183.  *
  184.  * Revision 1.8  2004/05/21 22:27:50  gorelenk
  185.  * Added PCH ncbi_pch.hpp
  186.  *
  187.  * Revision 1.7  2003/08/15 17:02:16  meric
  188.  * Updates include paths for print-related files from gui/utils to gui/print
  189.  *
  190.  * Revision 1.6  2003/06/25 18:02:51  meric
  191.  * Source rearrangement: move "private" headers into the src/ tree
  192.  *
  193.  * Revision 1.5  2003/06/24 21:48:51  meric
  194.  * Modifications to allow for includes to be moved from postscript.hpp
  195.  *
  196.  * Revision 1.4  2003/06/18 17:25:39  meric
  197.  * Final phase of print reorg: remove dependence on gui/opengl and OpenGL
  198.  *
  199.  * Revision 1.3  2003/06/18 16:40:33  meric
  200.  * First phase of print reorg: remove dependence on gui/opengl and OpenGL
  201.  * except for class COpenGLPrintBuffer
  202.  *
  203.  * Revision 1.2  2003/06/16 12:44:52  dicuccio
  204.  * Clean-up after initial commit
  205.  *
  206.  * Revision 1.1  2003 / 06 / 13 18:13:56  meric
  207.  * Initial version
  208.  *
  209.  *
  210.  * ===========================================================================
  211.  */