KiCad PCB EDA Suite
bitmap_base.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2018 jean-pierre.charras jp.charras at wanadoo.fr
5  * Copyright (C) 2013-2018 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
25 #ifndef BITMAP_BASE_H
26 #define BITMAP_BASE_H
27 
28 #include <eda_rect.h>
29 
35 class PLOTTER;
36 
47 {
48 private:
49  double m_scale; // The scaling factor of the bitmap
50  // With m_pixelScaleFactor, controls the actual draw size
51  wxImage* m_image; // the raw image data (png format)
52  wxBitmap* m_bitmap; // the bitmap used to draw/plot image
53  double m_pixelScaleFactor; // The scaling factor of the bitmap
54  // to convert the bitmap size (in pixels)
55  // to internal KiCad units
56  // Usually does not change
57  int m_ppi; // the bitmap definition. the default is 300PPI
58 
59 
60 public:
61  BITMAP_BASE( const wxPoint& pos = wxPoint( 0, 0 ) );
62 
63  BITMAP_BASE( const BITMAP_BASE& aSchBitmap );
64 
66  {
67  delete m_bitmap;
68  delete m_image;
69  }
70 
71 
72  /*
73  * Accessors:
74  */
75  double GetPixelScaleFactor() const { return m_pixelScaleFactor; }
76  void SetPixelScaleFactor( double aSF ) { m_pixelScaleFactor = aSF; }
77  wxImage* GetImageData() { return m_image; }
78  void SetImage( wxImage* aImage )
79  {
80  delete m_image;
81  m_image = aImage;
82  }
83 
84  double GetScale() const { return m_scale; }
85  void SetScale( double aScale ) { m_scale = aScale; }
86 
87  /*
88  * Function RebuildBitmap
89  * Rebuild the internal bitmap used to draw/plot image
90  * must be called after a m_image change
91  */
92  void RebuildBitmap() { *m_bitmap = wxBitmap( *m_image ); }
93 
94  void SetBitmap( wxBitmap* aBitMap )
95  {
96  delete m_bitmap;
97  m_bitmap = aBitMap;
98  }
99 
104  void ImportData( BITMAP_BASE* aItem );
105 
117  double GetScalingFactor() const
118  {
119  return m_pixelScaleFactor * m_scale;
120  }
121 
122 
127  wxSize GetSize() const;
128 
133  wxSize GetSizePixels() const
134  {
135  if( m_image )
136  return wxSize( m_image->GetWidth(), m_image->GetHeight() );
137  else
138  return wxSize( 0, 0 );
139  }
140 
145  int GetPPI() const
146  {
147  return m_ppi;
148  }
149 
158  const EDA_RECT GetBoundingBox() const;
159 
160  void DrawBitmap( wxDC* aDC, const wxPoint& aPos );
161 
172  bool ReadImageFile( const wxString& aFullFilename );
173 
181  bool SaveData( FILE* aFile ) const;
182 
189  void SaveData( wxArrayString& aPngStrings ) const;
190 
198  bool LoadData( LINE_READER& aLine, wxString& aErrorMsg );
199 
200 
208  void Mirror( bool aVertically );
209 
215  void Rotate( bool aRotateCCW );
216 
226  void PlotImage( PLOTTER* aPlotter, const wxPoint& aPos,
227  COLOR4D aDefaultColor, int aDefaultPensize );
228 };
229 
230 
231 #endif // BITMAP_BASE_H
double GetPixelScaleFactor() const
Definition: bitmap_base.h:75
Class LINE_READER is an abstract class from which implementation specific LINE_READERs may be derived...
Definition: richio.h:81
BITMAP_BASE(const wxPoint &pos=wxPoint(0, 0))
Definition: bitmap_base.cpp:46
bool SaveData(FILE *aFile) const
writes the bitmap data to aFile The format is png, in Hexadecimal form: If the hexadecimal data is co...
Definition: bitmap_base.cpp:99
wxSize GetSize() const
Function GetSize.
void SetScale(double aScale)
Definition: bitmap_base.h:85
void RebuildBitmap()
Definition: bitmap_base.h:92
wxImage * GetImageData()
Definition: bitmap_base.h:77
void PlotImage(PLOTTER *aPlotter, const wxPoint &aPos, COLOR4D aDefaultColor, int aDefaultPensize)
Function PlotImage Plot bitmap on plotter.
const EDA_RECT GetBoundingBox() const
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes...
void Mirror(bool aVertically)
Function Mirror Mirror image vertically (i.e.
This class handle bitmap images in KiCad.
Definition: bitmap_base.h:46
double m_scale
Definition: bitmap_base.h:49
void SetBitmap(wxBitmap *aBitMap)
Definition: bitmap_base.h:94
wxBitmap * m_bitmap
Definition: bitmap_base.h:52
wxSize GetSizePixels() const
Function GetSizePixels.
Definition: bitmap_base.h:133
double GetScale() const
Definition: bitmap_base.h:84
double m_pixelScaleFactor
Definition: bitmap_base.h:53
void SetPixelScaleFactor(double aSF)
Definition: bitmap_base.h:76
Base plotter engine class.
Definition: plotter.h:97
void ImportData(BITMAP_BASE *aItem)
Function ImportData Copy aItem image to me and update m_bitmap.
Definition: bitmap_base.cpp:71
int GetPPI() const
Definition: bitmap_base.h:145
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
bool LoadData(LINE_READER &aLine, wxString &aErrorMsg)
Load an image data saved by SaveData (png, in Hexadecimal form)
double GetScalingFactor() const
Function GetScalingFactor.
Definition: bitmap_base.h:117
void DrawBitmap(wxDC *aDC, const wxPoint &aPos)
bool ReadImageFile(const wxString &aFullFilename)
Function ReadImageFile Reads and stores in memory an image file.
Definition: bitmap_base.cpp:81
void Rotate(bool aRotateCCW)
Function Rotate Rotate image CW or CCW.
wxImage * m_image
Definition: bitmap_base.h:51
void SetImage(wxImage *aImage)
Definition: bitmap_base.h:78