postscript.cpp

来自「ncbi源码」· C++ 代码 · 共 264 行

CPP
264
字号
/* * =========================================================================== * PRODUCTION $Log: postscript.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 21:03:51  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8 * PRODUCTION * =========================================================================== *//*  $Id: postscript.cpp,v 1000.1 2004/06/01 21:03:51 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software / database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software / database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors:  Peter Meric * * File Description: *   CPostscript - Postscript output * */#include <ncbi_pch.hpp>#include <gui/print/postscript.hpp>#include <gui/utils/rgba_color.hpp>#include <gui/print/vector_object.hpp>#include "page_buffers.hpp"#include "postscript_defs.hpp"BEGIN_NCBI_SCOPECPostscript::CPostscript()    : m_PageCount(0),      m_PageBuffers(new CPageBuffers()){}CPostscript::~CPostscript(){}void CPostscript::SetOptions(const CPrintOptions& options){    m_Options = options;}void CPostscript::PrintBuffer(const CPBuffer* buf){    m_PageBuffers->Add(buf);}void CPostscript::BeginDocument(){    PrintStrings(*m_Strm, s_PS_topA);    *m_Strm << "%%Title: " << m_Options.GetTitle() << endl;    PrintStrings(*m_Strm, s_PS_topB);    // print the prolog    PrintStrings(*m_Strm, s_PS_prologA);    *m_Strm << "% color command - r g b C" << endl;    if (m_Options.GetGrayscale()) {        *m_Strm << "/C { C_GREY } bind def" << endl;    } else {        *m_Strm << "/C { C_RGB } bind def" << endl;    }    PrintStrings(*m_Strm, s_PS_colors);    PrintStrings(*m_Strm, s_PS_prologB);}void CPostscript::EndDocument(){    *m_Strm << "%%Pages: " << m_PageCount << endl;    PrintStrings(*m_Strm, s_PS_bottom);}void CPostscript::ShowPage(){    /*       if (m_PageBuffers->Empty()) {       return;       }    */    BeginPage();    ITERATE(CPageBuffers,  it, *m_PageBuffers) {        CVectorPrinter::PrintBuffer(*it);    }    EndPage();    m_PageBuffers->Clear();}void CPostscript::BeginPage(){    *m_Strm << "%Page: " << ++m_PageCount << endl;    *m_Strm << "bop" << endl;    // landscape mode    CBBox <3> bbox = m_PageBuffers->GetBoundingBox();    *m_Strm << "% bounding box: " << bbox << endl;    const pair<float, float> xs = bbox.GetNthRange(0);    *m_Strm << "/dwidth { " << xs.second - xs.first << " } def" << endl;    const pair<float, float> ys = bbox.GetNthRange(1);    *m_Strm << "/dheight { " << ys.second - ys.first << " } def" << endl;    *m_Strm << "lscape" << endl;    // print header    string header(m_Options.GetHeader());    if (header.length() > 0) {        *m_Strm << "(" << header << ") pghead" << endl;    }}void CPostscript::EndPage(){    if (m_PageCount == 0) {        return;    }    // print footer    string footer(m_Options.GetFooter());    if (footer.length() > 0) {        *m_Strm << "(" << footer << ") pgfoot" << endl;    }    *m_Strm << "eop" << endl;}void CPostscript::PrintObject(const CObject* obj, CPrintState& state){    CRgbaColor& curr_nonstipple = state.m_NonStipple;    const CPVecText* txt = dynamic_cast < const CPVecText*>(obj);    if (txt) {        // set the text color        const CRgbaColor& color = txt->GetColor();        if ( !(color == curr_nonstipple) ) {            color.PrintTo(*m_Strm, false);            *m_Strm << " C" << endl;            curr_nonstipple = color;        }        // output the text, font and font size        *m_Strm << '(' << txt->GetText() << ") /" << txt->GetFont() << " 8 ";        // output the text position and the showtext command        const float* p = txt->GetPosition();        *m_Strm << p[0] << ' ' << p[1] << " showtext" << endl;        return;    }    const CPVecPoint* point = dynamic_cast < const CPVecPoint*>(obj);    if (point) {        const CRgbaColor& color = point->GetColor();        if ( !(color == curr_nonstipple) ) {            color.PrintTo(*m_Strm, false);            *m_Strm << " C" << endl;            curr_nonstipple = color;        }        *m_Strm << point << " P" << endl;        return;    }    const CPVecPolygon* poly = dynamic_cast < const CPVecPolygon*>(obj);    if ( !poly ) {        return;    }    if (poly->IsFlatColored()) {        const CRgbaColor& color = (*poly->begin())->GetColor();        if ( !(color == curr_nonstipple) ) {            color.PrintTo(*m_Strm, false);            *m_Strm << " C" << endl;            curr_nonstipple = color;        }        ITERATE(CPVecPolygon, it, *poly) {            const CPVecPoint* p = *it;            p->PrintTo(*m_Strm, CPVecPoint::eCoordXY); // only print X, Y coordinates            *m_Strm << " ";        }        *m_Strm << " T" << endl;    }}END_NCBI_SCOPE/* * =========================================================================== * $Log: postscript.cpp,v $ * Revision 1000.1  2004/06/01 21:03:51  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8 * * Revision 1.8  2004/05/21 22:27:50  gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.7  2003/08/15 17:02:16  meric * Updates include paths for print-related files from gui/utils to gui/print * * Revision 1.6  2003/06/25 18:02:51  meric * Source rearrangement: move "private" headers into the src/ tree * * Revision 1.5  2003/06/24 21:48:51  meric * Modifications to allow for includes to be moved from postscript.hpp * * Revision 1.4  2003/06/18 17:25:39  meric * Final phase of print reorg: remove dependence on gui/opengl and OpenGL * * Revision 1.3  2003/06/18 16:40:33  meric * First phase of print reorg: remove dependence on gui/opengl and OpenGL * except for class COpenGLPrintBuffer * * Revision 1.2  2003/06/16 12:44:52  dicuccio * Clean-up after initial commit * * Revision 1.1  2003 / 06 / 13 18:13:56  meric * Initial version * * * =========================================================================== */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?