KiCad PCB EDA Suite
symbol_editor_plotter.cpp
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) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, you may find one here:
18  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19  * or you may search the http://www.gnu.org website for the version 2 license,
20  * or you may write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22  */
23 
24 
25 #include <sch_painter.h>
26 #include <symbol_edit_frame.h>
27 #include <locale_io.h>
28 #include <plotters_specific.h>
29 
30 void SYMBOL_EDIT_FRAME::SVGPlotSymbol( const wxString& aFullFileName )
31 {
32  KIGFX::SCH_RENDER_SETTINGS renderSettings;
33  renderSettings.LoadColors( GetColorSettings() );
34  renderSettings.SetDefaultPenWidth( GetRenderSettings()->GetDefaultPenWidth() );
35 
36  const PAGE_INFO& pageInfo = GetScreen()->GetPageSettings();
37 
38  SVG_PLOTTER* plotter = new SVG_PLOTTER();
39  plotter->SetRenderSettings( &renderSettings );
40  plotter->SetPageSettings( pageInfo );
41  plotter->SetColorMode( true );
42 
43  wxPoint plot_offset;
44  const double scale = 1.0;
45 
46  // Currently, plot units are in decimil
47  plotter->SetViewport( plot_offset, IU_PER_MILS/10, scale, false );
48 
49  // Init :
50  plotter->SetCreator( wxT( "Eeschema-SVG" ) );
51 
52  if( ! plotter->OpenFile( aFullFileName ) )
53  {
54  delete plotter;
55  return;
56  }
57 
58  LOCALE_IO toggle;
59 
60  plotter->StartPlot();
61 
62  if( m_symbol )
63  {
64  TRANSFORM temp; // Uses default transform
65  wxPoint plotPos;
66 
67  plotPos.x = pageInfo.GetWidthIU() / 2;
68  plotPos.y = pageInfo.GetHeightIU() / 2;
69 
70  m_symbol->Plot( plotter, GetUnit(), GetConvert(), plotPos, temp );
71 
72  // Plot lib fields, not plotted by m_symbol->Plot():
73  m_symbol->PlotLibFields( plotter, GetUnit(), GetConvert(), plotPos, temp );
74  }
75 
76  plotter->EndPlot();
77  delete plotter;
78 }
79 
80 
82 {
83  if( !m_symbol )
84  return;
85 
86  wxSize pagesize = GetScreen()->GetPageSettings().GetSizeIU();
87 
88  /* Plot item centered to the page
89  * In symbol_editor, the symbol is centered at 0,0 coordinates.
90  * So we must plot it with an offset = pagesize/2.
91  */
92  wxPoint plot_offset;
93  plot_offset.x = pagesize.x / 2;
94  plot_offset.y = pagesize.y / 2;
95 
96  m_symbol->Print( aSettings, plot_offset, m_unit, m_convert, LIB_SYMBOL_OPTIONS() );
97 }
COLOR_SETTINGS * GetColorSettings() const override
Returns a pointer to the active color theme settings.
int m_convert
Flag if the symbol being edited was loaded directly from a schematic.
virtual void SetCreator(const wxString &aCreator)
Definition: plotter.h:174
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
Definition: locale_io.h:40
virtual void SetViewport(const wxPoint &aOffset, double aIusPerDecimil, double aScale, bool aMirror) override
Set the plot offset and scaling for the current plot.
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
Plotting engines (PostScript, Gerber, HPGL and DXF)
virtual bool OpenFile(const wxString &aFullFilename)
Open or create the plot file aFullFilename.
Definition: plotter.cpp:76
virtual void SetColorMode(bool aColorMode)
Plot in B/W or color.
Definition: plotter.h:152
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
void SetRenderSettings(RENDER_SETTINGS *aSettings)
Definition: plotter.h:155
void PrintPage(const RENDER_SETTINGS *aSettings) override
Print a page.
KIGFX::SCH_RENDER_SETTINGS * GetRenderSettings()
void PlotLibFields(PLOTTER *aPlotter, int aUnit, int aConvert, const wxPoint &aOffset, const TRANSFORM &aTransform)
Plot Lib Fields only of the symbol to plotter.
Definition: lib_symbol.cpp:592
const PAGE_INFO & GetPageSettings() const
Definition: sch_screen.h:124
virtual bool EndPlot() override
for transforming drawing coordinates for a wxDC device context.
Definition: transform.h:45
Describe the page size and margins of a paper page on which to eventually print or plot.
Definition: page_info.h:53
virtual bool StartPlot() override
Create SVG file header.
void Print(const RENDER_SETTINGS *aSettings, const wxPoint &aOffset, int aMulti, int aConvert, const LIB_SYMBOL_OPTIONS &aOpts)
Print symbol.
Definition: lib_symbol.cpp:479
void LoadColors(const COLOR_SETTINGS *aSettings) override
Definition: sch_painter.cpp:93
const int scale
#define IU_PER_MILS
Definition: plotter.cpp:137
Store schematic specific render settings.
Definition: sch_painter.h:70
void SetDefaultPenWidth(int aWidth)
void Plot(PLOTTER *aPlotter, int aUnit, int aConvert, const wxPoint &aOffset, const TRANSFORM &aTransform) const
Plot lib symbol to plotter.
Definition: lib_symbol.cpp:546
virtual void SetPageSettings(const PAGE_INFO &aPageSettings)
Definition: plotter.h:158
void SVGPlotSymbol(const wxString &aFullFileName)
Create the SVG print file for the current edited symbol.