KiCad PCB EDA Suite
legacy_wx/eda_draw_frame.cpp File Reference
#include <fctsys.h>
#include <pgm_base.h>
#include <kiface_i.h>
#include <gr_basic.h>
#include <common.h>
#include <bitmaps.h>
#include <macros.h>
#include <id.h>
#include <class_drawpanel.h>
#include <base_screen.h>
#include <msgpanel.h>
#include <draw_frame.h>
#include <confirm.h>
#include <kicad_device_context.h>
#include <dialog_helpers.h>
#include <base_units.h>
#include <math/box2.h>
#include <lockfile.h>
#include <trace_helpers.h>
#include <wx/clipbrd.h>
#include <wx/fontdlg.h>
#include <wx/snglinst.h>
#include <view/view.h>
#include <view/view_controls.h>
#include <gal/graphics_abstraction_layer.h>
#include <tool/tool_manager.h>
#include <tool/tool_dispatcher.h>
#include <tool/actions.h>
#include <menus_helpers.h>
#include <worksheet_shape_builder.h>
#include <page_info.h>
#include <title_block.h>

Go to the source code of this file.


#define VIRT_MIN   (-MAX_AXIS/2.0)
 min X or Y coordinate in virtual space More...
#define VIRT_MAX   (MAX_AXIS/2.0)
 max X or Y coordinate in virtual space More...


static const wxString traceScrollSettings (wxT("KicadScrollSettings"))
 Definition for enabling and disabling scroll bar setting trace output. More...
static const wxString MaxUndoItemsEntry (wxT("DevelMaxUndoItems"))
 Integer to set the maximum number of undo items on the stack. More...
static bool DrawPageOnClipboard (EDA_DRAW_FRAME *aFrame)
void DrawPageLayout (wxDC *aDC, EDA_RECT *aClipBox, const PAGE_INFO &aPageInfo, const wxString &aFullSheetName, const wxString &aFileName, TITLE_BLOCK &aTitleBlock, int aSheetCount, int aSheetNumber, int aPenWidth, double aScalar, COLOR4D aColor, COLOR4D aAltColor, const wxString &aSheetLayer)
 Function DrawPageLayout is a core function to draw the page layout with the frame and the basic inscriptions. More...
static const wxString FirstRunShownKeyword (wxT("FirstRunShown"))


static const double MAX_AXIS = INT_MAX - 100

Macro Definition Documentation

#define VIRT_MAX   (MAX_AXIS/2.0)

max X or Y coordinate in virtual space

Definition at line 999 of file legacy_wx/eda_draw_frame.cpp.

#define VIRT_MIN   (-MAX_AXIS/2.0)

min X or Y coordinate in virtual space

Definition at line 998 of file legacy_wx/eda_draw_frame.cpp.

Function Documentation

void DrawPageLayout ( wxDC *  aDC,
EDA_RECT aClipBox,
const PAGE_INFO aPageInfo,
const wxString &  aFullSheetName,
const wxString &  aFileName,
TITLE_BLOCK aTitleBlock,
int  aSheetCount,
int  aSheetNumber,
int  aPenWidth,
double  aScalar,
COLOR4D  aColor,
COLOR4D  aAltColor,
const wxString &  aSheetLayer = wxEmptyString 

Function DrawPageLayout is a core function to draw the page layout with the frame and the basic inscriptions.

aDCThe device context.
aClipBox= the clipping rect, or NULL if no clipping.
aPageInfofor margins and page size (in mils).
aFullSheetNameThe sheetpath (full sheet name), for basic inscriptions.
aFileNameThe file name, for basic inscriptions.
aTitleBlockThe sheet title block, for basic inscriptions.
aSheetCountThe number of sheets (for basic inscriptions).
aSheetNumberThe sheet number (for basic inscriptions).
aPenWidththe pen size The line width for drawing.
aScalarthe scale factor to convert from mils to internal units.
aColorThe color for drawing.
aAltColorThe color for items which need to be "hightlighted".
aSheetLayerThe layer from pcbnew.

Parameters used in aPageInfo

  • the size of the page layout.
  • the LTmargin The left top margin of the page layout.
  • the RBmargin The right bottom margin of the page layout.

Definition at line 1989 of file legacy_wx/eda_draw_frame.cpp.

References WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList(), color, DARKDARKGRAY, WS_DRAW_ITEM_LIST::Draw(), EDA_DRAW_FRAME::DrawWorkSheet(), EDA_DRAW_PANEL::GetClipBox(), EDA_DRAW_FRAME::GetDocumentExtents(), EDA_DRAW_FRAME::GetPageSettings(), EDA_DRAW_FRAME::GetScreenDesc(), PAGE_INFO::GetSizeMils(), EDA_DRAW_FRAME::GetTitleBlock(), GR_COPY, GRRect(), GRSetDrawMode(), LIGHTGRAY, EDA_DRAW_FRAME::m_canvas, EDA_DRAW_FRAME::m_drawBgColor, BASE_SCREEN::m_IsPrinting, BASE_SCREEN::m_NumberOfScreens, BASE_SCREEN::m_ScreenNumber, EDA_DRAW_FRAME::m_showBorderAndTitleBlock, EDA_DRAW_FRAME::m_showPageLimits, RED, SaveCanvasImageToFile(), EDA_DRAW_FRAME::saveCanvasImageToFile(), WS_DRAW_ITEM_LIST::SetFileName(), BOX2< Vec >::SetMaximum(), WS_DRAW_ITEM_LIST::SetMilsToIUfactor(), WS_DRAW_ITEM_LIST::SetPenSize(), WS_DRAW_ITEM_LIST::SetSheetCount(), WS_DRAW_ITEM_LIST::SetSheetLayer(), WS_DRAW_ITEM_LIST::SetSheetName(), WS_DRAW_ITEM_LIST::SetSheetNumber(), WHITE, wxPoint::x, and wxPoint::y.

1998 {
1999  WS_DRAW_ITEM_LIST drawList;
2001  drawList.SetPenSize( aPenWidth );
2002  drawList.SetMilsToIUfactor( aScalar );
2003  drawList.SetSheetNumber( aSheetNumber );
2004  drawList.SetSheetCount( aSheetCount );
2005  drawList.SetFileName( aFileName );
2006  drawList.SetSheetName( aFullSheetName );
2007  drawList.SetSheetLayer( aSheetLayer );
2009  drawList.BuildWorkSheetGraphicList( aPageInfo,
2010  aTitleBlock, aColor, aAltColor );
2012  // Draw item list
2013  drawList.Draw( aClipBox, aDC );
2014 }
void SetFileName(const wxString &aFileName)
Set the filename to draw/plot.
void SetPenSize(int aPenSize)
Function SetPenSize Set the default pen size to draw/plot lines and texts.
void SetSheetLayer(const wxString &aSheetLayer)
Set the sheet layer to draw/plot.
void SetSheetName(const wxString &aSheetName)
Set the sheet name to draw/plot.
void BuildWorkSheetGraphicList(const PAGE_INFO &aPageInfo, const TITLE_BLOCK &aTitleBlock, COLOR4D aColor, COLOR4D aAltColor)
Function BuildWorkSheetGraphicList is a core function for drawing or plotting the page layout with th...
void SetSheetCount(int aSheetCount)
Function SetSheetCount Set the value of the count of sheets, for basic inscriptions.
void SetMilsToIUfactor(double aScale)
Function SetMilsToIUfactor Set the scalar to convert pages units ( mils) to draw/plot units...
void SetSheetNumber(int aSheetNumber)
Function SetSheetNumber Set the value of the sheet number, for basic inscriptions.
void Draw(EDA_RECT *aClipBox, wxDC *aDC)
Draws the item list created by BuildWorkSheetGraphicList.
bool DrawPageOnClipboard ( EDA_DRAW_FRAME aFrame)

Definition at line 1887 of file legacy_wx/eda_draw_frame.cpp.

References EDA_DRAW_PANEL::EraseScreen(), EDA_DRAW_FRAME::GetCanvas(), EDA_DRAW_PANEL::GetClipBox(), EDA_RECT::GetHeight(), EDA_DRAW_FRAME::GetPageSizeIU(), EDA_DRAW_PANEL::GetScreen(), EDA_RECT::GetWidth(), EDA_RECT::GetX(), EDA_RECT::GetY(), BASE_SCREEN::GetZoom(), GRForceBlackPen(), GRResetPenAndBrush(), BASE_SCREEN::IsBlockActive(), BASE_SCREEN::m_BlockLocate, BASE_SCREEN::m_DrawOrg, BASE_SCREEN::m_IsPrinting, BASE_SCREEN::m_StartVisu, max, BASE_SCREEN::MilsToIuScalar(), EDA_DRAW_FRAME::PrintPage(), scale, EDA_DRAW_PANEL::SetClipBox(), BASE_SCREEN::SetZoom(), wxPoint::x, and wxPoint::y.

1888 {
1889  bool DrawBlock = false;
1890  wxRect DrawArea;
1891  BASE_SCREEN* screen = aFrame->GetCanvas()->GetScreen();
1893  if( screen->IsBlockActive() )
1894  {
1895  DrawBlock = true;
1896  DrawArea.SetX( screen->m_BlockLocate.GetX() );
1897  DrawArea.SetY( screen->m_BlockLocate.GetY() );
1898  DrawArea.SetWidth( screen->m_BlockLocate.GetWidth() );
1899  DrawArea.SetHeight( screen->m_BlockLocate.GetHeight() );
1900  }
1901  else
1902  DrawArea.SetSize( aFrame->GetPageSizeIU() );
1904  // Calculate a reasonable dc size, in pixels, and the dc scale to fit
1905  // the drawings into the dc size
1906  // scale is the ratio resolution (in PPI) / internal units
1907  double ppi = 300; // Use 300 pixels per inch to create bitmap images on start
1908  double inch2Iu = 1000.0 * (double) screen->MilsToIuScalar();
1909  double scale = ppi / inch2Iu;
1911  wxSize dcsize = DrawArea.GetSize();
1913  int maxdim = std::max( dcsize.x, dcsize.y );
1915  // the max size in pixels of the bitmap used to byuild the sheet copy
1916  const int maxbitmapsize = 3000;
1918  while( int( maxdim * scale ) > maxbitmapsize )
1919  {
1920  ppi = ppi / 1.5;
1921  scale = ppi / inch2Iu;
1922  }
1924  dcsize.x *= scale;
1925  dcsize.y *= scale;
1927  // Set draw offset, zoom... to values needed to draw in the memory DC
1928  // after saving initial values:
1929  wxPoint tmp_startvisu = screen->m_StartVisu;
1930  double tmpzoom = screen->GetZoom();
1931  wxPoint old_org = screen->m_DrawOrg;
1932  screen->m_DrawOrg.x = screen->m_DrawOrg.y = 0;
1933  screen->m_StartVisu.x = screen->m_StartVisu.y = 0;
1935  screen->SetZoom( 1 ); // we use zoom = 1 in draw functions.
1937  wxMemoryDC dc;
1938  wxBitmap image( dcsize );
1939  dc.SelectObject( image );
1941  EDA_RECT tmp = *aFrame->GetCanvas()->GetClipBox();
1942  GRResetPenAndBrush( &dc );
1943  GRForceBlackPen( false );
1944  screen->m_IsPrinting = true;
1945  dc.SetUserScale( scale, scale );
1947  aFrame->GetCanvas()->SetClipBox( EDA_RECT( wxPoint( 0, 0 ),
1948  wxSize( 0x7FFFFF0, 0x7FFFFF0 ) ) );
1950  if( DrawBlock )
1951  {
1952  dc.SetClippingRegion( DrawArea );
1953  }
1955  dc.Clear();
1956  aFrame->GetCanvas()->EraseScreen( &dc );
1957  const LSET allLayersMask = LSET().set();
1958  aFrame->PrintPage( &dc, allLayersMask, false );
1959  screen->m_IsPrinting = false;
1960  aFrame->GetCanvas()->SetClipBox( tmp );
1962  bool success = true;
1964  if( wxTheClipboard->Open() )
1965  {
1966  // This data objects are held by the clipboard,
1967  // so do not delete them in the app.
1968  wxBitmapDataObject* clipbrd_data = new wxBitmapDataObject( image );
1969  wxTheClipboard->SetData( clipbrd_data );
1970  wxTheClipboard->Close();
1971  }
1972  else
1973  success = false;
1975  // Deselect Bitmap from DC in order to delete the MemoryDC safely
1976  // without deleting the bitmap
1977  dc.SelectObject( wxNullBitmap );
1979  GRForceBlackPen( false );
1981  screen->m_StartVisu = tmp_startvisu;
1982  screen->m_DrawOrg = old_org;
1983  screen->SetZoom( tmpzoom );
1985  return success;
1986 }
virtual BASE_SCREEN * GetScreen()=0
void GRResetPenAndBrush(wxDC *DC)
Definition: gr_basic.cpp:123
Block description for block commands.
Definition: base_screen.h:214
virtual EDA_DRAW_PANEL * GetCanvas() const
Definition: draw_frame.h:388
double GetZoom() const
Function GetZoom returns the current "zoom factor", which is a measure of "internal units per device ...
Definition: base_screen.h:340
int GetHeight() const
Definition: eda_rect.h:118
virtual EDA_RECT * GetClipBox()
virtual const wxSize GetPageSizeIU() const =0
Works off of GetPageSettings() to return the size of the paper page in the internal units of this par...
void SetClipBox(const EDA_RECT &aRect)
wxPoint m_StartVisu
Coordinates in drawing units of the current view position (upper left corner of device) ...
Definition: base_screen.h:198
bool IsBlockActive() const
Definition: base_screen.h:499
Class LSET is a set of PCB_LAYER_IDs.
virtual void PrintPage(wxDC *aDC, LSET aPrintMask, bool aPrintMirrorMode, void *aData=NULL)
Print the page pointed by current screen, set by the calling print function.
void GRForceBlackPen(bool flagforce)
Function GRForceBlackPen.
Definition: gr_basic.cpp:204
Class BASE_SCREEN handles how to draw a screen (a board, a schematic ...)
Definition: base_screen.h:76
virtual int MilsToIuScalar()
Function MilsToIuScalar returns the scalar required to convert mils to internal units.
Definition: base_screen.h:245
virtual bool SetZoom(double iu_per_du)
Function SetZoom adjusts the current zoom factor.
bool m_IsPrinting
Definition: base_screen.h:220
const int scale
#define max(a, b)
Definition: auxiliary.h:86
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
wxPoint m_DrawOrg
offsets for drawing the circuit on the screen
Definition: base_screen.h:183
int GetX() const
Definition: eda_rect.h:109
int GetWidth() const
Definition: eda_rect.h:117
int GetY() const
Definition: eda_rect.h:110
virtual void EraseScreen(wxDC *DC)
Function OnMouseWheel handles mouse wheel events.
static const wxString FirstRunShownKeyword ( wxT("FirstRunShown")  )
static const wxString MaxUndoItemsEntry ( wxT("DevelMaxUndoItems")  )

Integer to set the maximum number of undo items on the stack.

If zero, undo items are unlimited.

Present as:

  • SchematicFrameDevelMaxUndoItems (file: eeschema)
  • LibeditFrameDevelMaxUndoItems (file: eeschema)
  • PcbFrameDevelMaxUndoItems (file: pcbnew)
  • ModEditFrameDevelMaxUndoItems (file: pcbnew)
static const wxString traceScrollSettings ( wxT("KicadScrollSettings")  )

Definition for enabling and disabling scroll bar setting trace output.

See the wxWidgets documentation on useing the WXTRACE environment variable.

Variable Documentation


Definition at line 116 of file legacy_wx/eda_draw_frame.cpp.


Definition at line 129 of file legacy_wx/eda_draw_frame.cpp.

const double MAX_AXIS = INT_MAX - 100

Definition at line 996 of file legacy_wx/eda_draw_frame.cpp.