void Box::_printHeader(std::ostream& os, const BoxRegion& region, const PrintGC& gc) { if (gc.isPostScript()) { epsHeader(os, region, (const PostScriptPrintGC &)gc); os << prolog; } else if (gc.isFig()) { os << FIGHEAD; } }
void Box::_printTrailer(std::ostream& os, const BoxRegion&, const PrintGC& gc) { if (gc.isPostScript()) { os << trailer; } }
// Print void RiseBox::_print(std::ostream& os, const BoxRegion& region, const PrintGC& gc) const { BoxPoint origin = region.origin(); BoxPoint space = region.space(); if (gc.isFig()) { os << LINEHEAD1 ; os << linethickness() << LINEHEAD2 ; os << origin[X] << " " << origin[Y] + space[Y] << " " ; os << origin[X] + space[X] << " " << origin[Y] << " " ; os << "9999 9999\n" ; } else if (gc.isPostScript()) { os << origin[X] << " " << origin[Y] + space[Y] << " " ; os << origin[X] + space[X] << " " << origin[Y] << " " ; os << linethickness() << " line*\n"; } }
void StringBox::_print(std::ostream& os, const BoxRegion& region, const PrintGC& gc) const { // Don't draw empty strings if (str().empty()) return; BoxPoint origin = region.origin() ; const FONTMAP *fmap = matchFont (fontName_c()); if (gc.isFig()) { os << TEXTHEAD1 << fmap->figfont << " " << size(Y) - 3 << " " << TEXTHEAD2 << size(X) << " " << size(Y) << " " << origin[X] << " " << origin [Y] + size(Y) - 2 << " " << str() << "\001\n"; } else if (gc.isPostScript()) { os << fmap->psfont << " " << size(X) << " " << size(Y) << " " << origin[X] << " " << origin[Y] + size(Y) << " " << "(" << pscook(str()) << ") text*\n"; } }
void RuleBox::_print(std::ostream& os, const BoxRegion& region, const PrintGC& gc) const { BoxSize space = region.space(); BoxPoint origin = region.origin(); BoxPoint width ; width = BoxPoint ( extend(X) ? space[X] : size(X) , extend(Y) ? space[Y] : size(Y) ); if (width == BoxPoint (0,1) || width == BoxPoint (1,0)) { return ; } if (width[X] && width[X] < 3 && gc.isFig()) { // // vertical Line // os << LINEHEAD1 ; os << width[X] << LINEHEAD2 ; os << origin[X] + width[X]/2 << " " << origin[Y] ; os << " " ; os << origin[X] + width[X]/2 << " " ; os << origin[Y] + width[Y] << " " ; os << "9999 9999\n" ; } else if (width[Y] && width[Y] < 3 && gc.isFig()) { // // horizontal line // os << LINEHEAD1 ; os << width[Y] << LINEHEAD2 ; os << origin[X] << " " << origin[Y]+width[Y]/2 ; os << " " ; os << origin[X] + width[X] << " " ; os << origin[Y] + width[Y]/2 << " " ; os << "9999 9999\n" ; } else { // // filled rectangle // if (gc.isFig()) { os << RULEHEAD ; os << origin[X] << " " << origin[Y] << " " ; os << origin[X] + width[X] << " " << origin[Y] ; os << " " ; os << origin[X] + width[X] << " " ; os << origin[Y] + width[Y] << " "; os << origin[X] << " " << origin[Y] + width[Y] ; os << " " ; os << origin[X] << " "<< origin[Y] << " 9999 9999\n" ; } else if (gc.isPostScript()) { os << origin[X] << " " << origin[Y] << " " ; os << origin[X] + width[X] << " " << origin[Y] ; os << " " ; os << origin[X] + width[X] << " " ; os << origin[Y] + width[Y] << " "; os << origin[X] << " " << origin[Y] + width[Y] ; os << " box*" << " %" << region << "\n"; ; } } }
// Print plot to FILENAME void PlotAgent::print(const string& filename, const PrintGC& gc) { std::ostringstream cmd; if (gc.isFig()) { cmd << "set term fig\n"; } else if (gc.isPostScript()) { const PostScriptPrintGC& ps = const_ref_cast(PostScriptPrintGC, gc); cmd << "set term postscript"; switch (ps.orientation) { case PostScriptPrintGC::PORTRAIT: { // Portrait plotting doesn't make too much sense, so we // use the more useful EPS plotting instead. cmd << " eps"; break; } case PostScriptPrintGC::LANDSCAPE: { cmd << " landscape"; break; } } if (ps.color) { cmd << " color"; } else { cmd << " monochrome"; } cmd << "\n"; switch (ps.orientation) { case PostScriptPrintGC::PORTRAIT: { // Use the default size for EPS. cmd << "set size\n"; break; } case PostScriptPrintGC::LANDSCAPE: { // Postscript defaults are: landscape 10" wide and 7" high. // Our `vsize' and `hsize' members assume portrait, so they // are just reversed. const int default_hsize = 7 * 72; // Default width in 1/72" const int default_vsize = 10 * 72; // Default height in 1/72" // Leave 1" extra vertical space const int hoffset = 0; const int voffset = 1 * 72; // Set size double xscale = double(ps.hsize - hoffset) / default_hsize; double yscale = double(ps.vsize - voffset) / default_vsize; cmd << "set size " << xscale << ", " << yscale << "\n"; } } } cmd << "set output " << quote(filename) << "\n" << "replot\n" << "set output\n" << "set size\n" << init_commands << "\n" << "replot\n"; string c(cmd); write(c.chars(), c.length()); }