LCOV - code coverage report
Current view: top level - include/mesh - postscript_io.h (source / functions) Hit Total Coverage
Test: libMesh/libmesh: #4229 (6a9aeb) with base 727f46 Lines: 0 1 0.0 %
Date: 2025-08-19 19:27:09 Functions: 0 2 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // The libMesh Finite Element Library.
       2             : // Copyright (C) 2002-2025 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
       3             : 
       4             : // This library is free software; you can redistribute it and/or
       5             : // modify it under the terms of the GNU Lesser General Public
       6             : // License as published by the Free Software Foundation; either
       7             : // version 2.1 of the License, or (at your option) any later version.
       8             : 
       9             : // This library is distributed in the hope that it will be useful,
      10             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      11             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12             : // Lesser General Public License for more details.
      13             : 
      14             : // You should have received a copy of the GNU Lesser General Public
      15             : // License along with this library; if not, write to the Free Software
      16             : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
      17             : 
      18             : 
      19             : 
      20             : #ifndef LIBMESH_POSTSCRIPT_IO_H
      21             : #define LIBMESH_POSTSCRIPT_IO_H
      22             : 
      23             : // Local includes
      24             : #include "libmesh/libmesh_common.h"
      25             : #include "libmesh/mesh_output.h"
      26             : //#include "libmesh/dense_matrix.h"
      27             : #include "libmesh/point.h"
      28             : 
      29             : // C++ includes
      30             : #include <fstream>
      31             : #include <sstream>
      32             : #include <vector>
      33             : 
      34             : namespace libMesh
      35             : {
      36             : 
      37             : // Forward declarations
      38             : class MeshBase;
      39             : class Elem;
      40             : 
      41             : /**
      42             :  * This class implements writing 2D meshes in Postscript.  It borrows
      43             :  * several ideas from, and is a more simple-minded version of, the
      44             :  * DataOutBase::write_eps() function from Deal II.  Only output is
      45             :  * supported here, and only the Mesh (none of the data) is written.
      46             :  * The main use I imagined for this class is creating nice Mesh
      47             :  * images for publications, since I didn't find/don't know of a free
      48             :  * visualization program which would do this.
      49             :  *
      50             :  * \author John W. Peterson
      51             :  * \date 2008
      52             :  */
      53           0 : class PostscriptIO : public MeshOutput<MeshBase>
      54             : {
      55             : public:
      56             :   /**
      57             :    * Constructor.
      58             :    */
      59             :   explicit
      60             :   PostscriptIO (const MeshBase & mesh);
      61             : 
      62             :   /**
      63             :    * Destructor.
      64             :    */
      65             :   virtual ~PostscriptIO ();
      66             : 
      67             :   /**
      68             :    * This method implements writing a mesh to a specified file.
      69             :    */
      70             :   virtual void write (const std::string &) override;
      71             : 
      72             :   /**
      73             :    * Controls greyscale shading of cells.  By default this value
      74             :    * is 0.0 (which actually corresponds to black) and this indicates
      75             :    * "no shading" i.e. only mesh lines will be drawn.  Any other
      76             :    * value in (0,1] will cause the cells to be grey-shaded to some
      77             :    * degree, with higher values being lighter.  A value of 0.75
      78             :    * gives decent results.
      79             :    */
      80             :   Real shade_value;
      81             : 
      82             :   /**
      83             :    * Control the thickness of the lines used.  0.5 is a reasonable default
      84             :    * for printed images, but you may need to decrease this value (or
      85             :    * choose it adaptively) when there are very slim cells present in
      86             :    * the mesh.
      87             :    */
      88             :   Real line_width;
      89             : 
      90             :   /**
      91             :    * Draws an element with Bezier curves
      92             :    */
      93             :   void plot_quadratic_elem(const Elem * elem);
      94             : 
      95             :   /**
      96             :    * Draws an element with straight lines
      97             :    */
      98             :   void plot_linear_elem(const Elem * elem);
      99             : 
     100             : private:
     101             :   /**
     102             :    * Given a quadratic edge Elem which lies in the x-y plane,
     103             :    * computes the Bezier coefficients.  These may be passed to
     104             :    * the Postscript routine "curveto".
     105             :    */
     106             :   void _compute_edge_bezier_coeffs(const Elem * elem);
     107             : 
     108             :   /**
     109             :    * Coefficients of the transformation from physical-space
     110             :    * edge coordinates to Bezier basis coefficients.  Transforms
     111             :    * x and y separately.
     112             :    */
     113             :   //DenseMatrix<float> _M;
     114             :   static const float _bezier_transform[3][3];
     115             : 
     116             :   /**
     117             :    * Vector containing 3 points corresponding to Bezier coefficients,
     118             :    * as computed by _compute_edge_bezier_coeffs.
     119             :    */
     120             :   std::vector<Point> _bezier_coeffs;
     121             : 
     122             :   /**
     123             :    * Amount to add to every (x,y) point to place it in Postscript coordinates.
     124             :    */
     125             :   Point _offset;
     126             : 
     127             :   /**
     128             :    * Amount by which to stretch each point to place it in Postscript coordinates.
     129             :    */
     130             :   Real _scale;
     131             : 
     132             :   /**
     133             :    * A point object used for temporary calculations
     134             :    */
     135             :   Point _current_point;
     136             : 
     137             :   /**
     138             :    * Drawing style-independent data for a single cell.  This can be
     139             :    * used as a temporary buffer for storing data which may be sent to
     140             :    * the output stream multiple times.
     141             :    */
     142             :   std::ostringstream _cell_string;
     143             : 
     144             :   /**
     145             :    * Output file stream which will be opened when the file name is known
     146             :    */
     147             :   std::ofstream _out;
     148             : };
     149             : 
     150             : } // namespace libMesh
     151             : 
     152             : #endif // LIBMESH_POSTSCRIPT_IO_H

Generated by: LCOV version 1.14