File: bitmap2cmp_panel.h

package info (click to toggle)
kicad 9.0.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 769,124 kB
  • sloc: cpp: 960,330; ansic: 121,001; xml: 66,428; python: 18,382; sh: 1,010; awk: 301; asm: 292; makefile: 227; javascript: 167; perl: 10
file content (137 lines) | stat: -rw-r--r-- 5,030 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
 * This program source code file is part of KICAD, a free EDA CAD application.
 *
 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, you may find one here:
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * or you may search the http://www.gnu.org website for the version 2 license,
 * or you may write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 */
#ifndef BITMAP2CMP_PANEL_H
#define BITMAP2CMP_PANEL_H

#include <bitmap2cmp_panel_base.h>
#include <eda_units.h>


class BITMAP2CMP_FRAME;
class BITMAP2CMP_SETTINGS;


class IMAGE_SIZE
{
public:
    IMAGE_SIZE();

    // Set the unit used for m_outputSize, and convert the old m_outputSize value
    // to the value in new unit
    void SetUnit( EDA_UNITS aUnit );

    void SetOriginalDPI( int aDPI ) { m_originalDPI = aDPI; }

    void SetOriginalSizePixels( int aPixels ) { m_originalSizePixels = aPixels; }
    int  GetOriginalSizePixels() { return m_originalSizePixels; }

    double GetOutputSize() { return m_outputSize; }
    void SetOutputSize( double aSize, EDA_UNITS aUnit ) { m_outputSize = aSize; m_unit = aUnit; }

    // Set the m_outputSize value from the m_originalSizePixels and the selected unit
    void SetOutputSizeFromInitialImageSize();

    /** @return the pixels per inch value to build the output image.
     * It is used by potrace to build the polygonal image
     */
    int GetOutputDPI();

private:
    EDA_UNITS m_unit;                 // The units for m_outputSize (mm, inch, dpi)
    double    m_outputSize;           // The size in m_unit of the output image, depending on
                                      // the user settings. Set to the initial image size
    int       m_originalDPI;          // The image DPI if specified in file, or 0 if unknown
    int       m_originalSizePixels;   // The original image size read from file, in pixels
};


class BITMAP2CMP_PANEL : public BITMAP2CMP_PANEL_BASE
{
public:
    BITMAP2CMP_PANEL( BITMAP2CMP_FRAME* aParent );
    ~BITMAP2CMP_PANEL() {}

    bool OpenProjectFiles( const std::vector<wxString>& aFilenames, int aCtl = 0 );

    void OnLoadFile( wxCommandEvent& event ) override;

    void LoadSettings( BITMAP2CMP_SETTINGS* aCfg );
    void SaveSettings( BITMAP2CMP_SETTINGS* aCfg );

    wxWindow* GetCurrentPage();

    IMAGE_SIZE GetOutputSizeX() const { return m_outputSizeX; }
    IMAGE_SIZE GetOutputSizeY() const { return m_outputSizeY; }
    void SetOutputSize( const IMAGE_SIZE& aSizeX, const IMAGE_SIZE& aSizeY );

    /**
     * generate a export data of the current bitmap.
     * @param aOutput is a string buffer to fill with data
     * @param aFormat is the format to generate
     */
    void ExportToBuffer( std::string& aOutput, OUTPUT_FMT_ID aFormat );

private:
    // Event handlers
    void OnPaintInit( wxPaintEvent& event ) override;
    void OnPaintGreyscale( wxPaintEvent& event ) override;
    void OnPaintBW( wxPaintEvent& event ) override;
    void OnExportToFile( wxCommandEvent& event ) override;
    void OnExportToClipboard( wxCommandEvent& event ) override;
    void OnFormatChange( wxCommandEvent& event ) override;
    void OnNegativeClicked( wxCommandEvent& event ) override;
    void OnThresholdChange( wxScrollEvent& event ) override;
    void OnSizeChangeX( wxCommandEvent& event ) override;
    void OnSizeChangeY( wxCommandEvent& event ) override;
    void OnSizeUnitChange( wxCommandEvent& event ) override;
    void ToggleAspectRatioLock( wxCommandEvent& event ) override;

    OUTPUT_FMT_ID getOutputFormat();

    ///< @return the EDA_UNITS from the m_PixelUnit choice
    EDA_UNITS getUnitFromSelection();

    // return a string giving the output size, according to the selected unit
    wxString formatOutputSize( double aSize );

    void binarize( double aThreshold ); // aThreshold = 0.0 (black level) to 1.0 (white level)

    void negateGreyscaleImage();

    void updateImageInfo();

private:
    BITMAP2CMP_FRAME* m_parentFrame;

    wxImage           m_Pict_Image;
    wxBitmap          m_Pict_Bitmap;
    wxImage           m_Greyscale_Image;
    wxBitmap          m_Greyscale_Bitmap;
    wxImage           m_NB_Image;
    wxBitmap          m_BN_Bitmap;
    IMAGE_SIZE        m_outputSizeX;
    IMAGE_SIZE        m_outputSizeY;
    bool              m_negative;
    double            m_aspectRatio;
};
#endif// BITMAP2CMP_PANEL