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 <advanced_config.h>
#include <menus_helpers.h>
#include <page_info.h>
#include <title_block.h>
#include <worksheet_shape_builder.h>

Go to the source code of this file.

Macros

#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...
 

Functions

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...
 
 EVT_MENU_RANGE (ID_POPUP_ZOOM_START_RANGE, ID_POPUP_ZOOM_END_RANGE, EDA_DRAW_FRAME::OnZoom) EVT_MENU_RANGE(ID_POPUP_GRID_LEVEL_1000
 
EDA_DRAW_FRAME::OnSelectGrid EVT_TOOL_RANGE (ID_TB_OPTIONS_SELECT_UNIT_MM, ID_TB_OPTIONS_SELECT_UNIT_INCH, EDA_DRAW_FRAME::OnSelectUnits) EVT_UPDATE_UI_RANGE(ID_TB_OPTIONS_SELECT_UNIT_MM
 
wxWindow * findDialog (wxWindowList &aList)
 
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"))
 

Variables

 ID_POPUP_GRID_USER
 
EDA_DRAW_FRAME::OnSelectGrid ID_TB_OPTIONS_SELECT_UNIT_INCH
 
static const double MAX_AXIS = INT_MAX - 100
 

Macro Definition Documentation

◆ VIRT_MAX

#define VIRT_MAX   (MAX_AXIS/2.0)

max X or Y coordinate in virtual space

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

◆ VIRT_MIN

#define VIRT_MIN   (-MAX_AXIS/2.0)

min X or Y coordinate in virtual space

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

Function Documentation

◆ DrawPageLayout()

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.

Parameters
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 2123 of file legacy_wx/eda_draw_frame.cpp.

References WS_DRAW_ITEM_LIST::BuildWorkSheetGraphicList(), WS_DRAW_ITEM_LIST::Draw(), WS_DRAW_ITEM_LIST::SetFileName(), 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(), and WS_DRAW_ITEM_LIST::SetSheetNumber().

2132 {
2133  WS_DRAW_ITEM_LIST drawList;
2134 
2135  drawList.SetPenSize( aPenWidth );
2136  drawList.SetMilsToIUfactor( aScalar );
2137  drawList.SetSheetNumber( aSheetNumber );
2138  drawList.SetSheetCount( aSheetCount );
2139  drawList.SetFileName( aFileName );
2140  drawList.SetSheetName( aFullSheetName );
2141  drawList.SetSheetLayer( aSheetLayer );
2142 
2143  drawList.BuildWorkSheetGraphicList( aPageInfo,
2144  aTitleBlock, aColor, aAltColor );
2145 
2146  // Draw item list
2147  drawList.Draw( aClipBox, aDC );
2148 }
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.

◆ DrawPageOnClipboard()

bool DrawPageOnClipboard ( EDA_DRAW_FRAME aFrame)
static

Definition at line 2021 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(), and BASE_SCREEN::SetZoom().

2022 {
2023  bool DrawBlock = false;
2024  wxRect DrawArea;
2025  BASE_SCREEN* screen = aFrame->GetCanvas()->GetScreen();
2026 
2027  if( screen->IsBlockActive() )
2028  {
2029  DrawBlock = true;
2030  DrawArea.SetX( screen->m_BlockLocate.GetX() );
2031  DrawArea.SetY( screen->m_BlockLocate.GetY() );
2032  DrawArea.SetWidth( screen->m_BlockLocate.GetWidth() );
2033  DrawArea.SetHeight( screen->m_BlockLocate.GetHeight() );
2034  }
2035  else
2036  DrawArea.SetSize( aFrame->GetPageSizeIU() );
2037 
2038  // Calculate a reasonable dc size, in pixels, and the dc scale to fit
2039  // the drawings into the dc size
2040  // scale is the ratio resolution (in PPI) / internal units
2041  double ppi = 300; // Use 300 pixels per inch to create bitmap images on start
2042  double inch2Iu = 1000.0 * (double) screen->MilsToIuScalar();
2043  double scale = ppi / inch2Iu;
2044 
2045  wxSize dcsize = DrawArea.GetSize();
2046 
2047  int maxdim = std::max( dcsize.x, dcsize.y );
2048 
2049  // the max size in pixels of the bitmap used to byuild the sheet copy
2050  const int maxbitmapsize = 3000;
2051 
2052  while( int( maxdim * scale ) > maxbitmapsize )
2053  {
2054  ppi = ppi / 1.5;
2055  scale = ppi / inch2Iu;
2056  }
2057 
2058  dcsize.x *= scale;
2059  dcsize.y *= scale;
2060 
2061  // Set draw offset, zoom... to values needed to draw in the memory DC
2062  // after saving initial values:
2063  wxPoint tmp_startvisu = screen->m_StartVisu;
2064  double tmpzoom = screen->GetZoom();
2065  wxPoint old_org = screen->m_DrawOrg;
2066  screen->m_DrawOrg.x = screen->m_DrawOrg.y = 0;
2067  screen->m_StartVisu.x = screen->m_StartVisu.y = 0;
2068 
2069  screen->SetZoom( 1 ); // we use zoom = 1 in draw functions.
2070 
2071  wxMemoryDC dc;
2072  wxBitmap image( dcsize );
2073  dc.SelectObject( image );
2074 
2075  EDA_RECT tmp = *aFrame->GetCanvas()->GetClipBox();
2076  GRResetPenAndBrush( &dc );
2077  GRForceBlackPen( false );
2078  screen->m_IsPrinting = true;
2079  dc.SetUserScale( scale, scale );
2080 
2081  aFrame->GetCanvas()->SetClipBox( EDA_RECT( wxPoint( 0, 0 ),
2082  wxSize( 0x7FFFFF0, 0x7FFFFF0 ) ) );
2083 
2084  if( DrawBlock )
2085  {
2086  dc.SetClippingRegion( DrawArea );
2087  }
2088 
2089  dc.Clear();
2090  aFrame->GetCanvas()->EraseScreen( &dc );
2091  const LSET allLayersMask = LSET().set();
2092  aFrame->PrintPage( &dc, allLayersMask, false );
2093  screen->m_IsPrinting = false;
2094  aFrame->GetCanvas()->SetClipBox( tmp );
2095 
2096  bool success = true;
2097 
2098  if( wxTheClipboard->Open() )
2099  {
2100  // This data objects are held by the clipboard,
2101  // so do not delete them in the app.
2102  wxBitmapDataObject* clipbrd_data = new wxBitmapDataObject( image );
2103  wxTheClipboard->SetData( clipbrd_data );
2104  wxTheClipboard->Close();
2105  }
2106  else
2107  success = false;
2108 
2109  // Deselect Bitmap from DC in order to delete the MemoryDC safely
2110  // without deleting the bitmap
2111  dc.SelectObject( wxNullBitmap );
2112 
2113  GRForceBlackPen( false );
2114 
2115  screen->m_StartVisu = tmp_startvisu;
2116  screen->m_DrawOrg = old_org;
2117  screen->SetZoom( tmpzoom );
2118 
2119  return success;
2120 }
virtual BASE_SCREEN * GetScreen()=0
void GRResetPenAndBrush(wxDC *DC)
Definition: gr_basic.cpp:123
BLOCK_SELECTOR m_BlockLocate
Block description for block commands.
Definition: base_screen.h:214
bool IsBlockActive() const
Definition: base_screen.h:499
int GetX() const
Definition: eda_rect.h:109
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 GetWidth() const
Definition: eda_rect.h:117
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
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.
virtual EDA_DRAW_PANEL * GetCanvas() const
Definition: draw_frame.h:394
bool m_IsPrinting
Definition: base_screen.h:220
int GetHeight() const
Definition: eda_rect.h:118
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 GetY() const
Definition: eda_rect.h:110
virtual void EraseScreen(wxDC *DC)
Function OnMouseWheel handles mouse wheel events.

◆ EVT_MENU_RANGE()

◆ EVT_TOOL_RANGE()

◆ findDialog()

wxWindow* findDialog ( wxWindowList &  aList)

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

1939 {
1940  for( wxWindow* window : aList )
1941  {
1942  if( dynamic_cast<DIALOG_SHIM*>( window ) )
1943  return window;
1944  }
1945  return NULL;
1946 }

◆ FirstRunShownKeyword()

static const wxString FirstRunShownKeyword ( wxT("FirstRunShown")  )
static

◆ MaxUndoItemsEntry()

static const wxString MaxUndoItemsEntry ( wxT("DevelMaxUndoItems")  )
static

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)

◆ traceScrollSettings()

static const wxString traceScrollSettings ( wxT("KicadScrollSettings")  )
static

Definition for enabling and disabling scroll bar setting trace output.

See the wxWidgets documentation on useing the WXTRACE environment variable.

Variable Documentation

◆ ID_POPUP_GRID_USER

ID_POPUP_GRID_USER

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

◆ ID_TB_OPTIONS_SELECT_UNIT_INCH

EDA_DRAW_FRAME::OnSelectGrid ID_TB_OPTIONS_SELECT_UNIT_INCH

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

◆ MAX_AXIS

const double MAX_AXIS = INT_MAX - 100
static

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