KiCad PCB EDA Suite
legacy_gal/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/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 <wx/clipbrd.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.

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
 
static const wxString productName = wxT( "KiCad E.D.A. " )
 

Macro Definition Documentation

#define VIRT_MAX   (MAX_AXIS/2.0)

max X or Y coordinate in virtual space

Definition at line 1016 of file legacy_gal/eda_draw_frame.cpp.

#define VIRT_MIN   (-MAX_AXIS/2.0)

min X or Y coordinate in virtual space

Definition at line 1015 of file legacy_gal/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.

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 1758 of file legacy_gal/eda_draw_frame.cpp.

Referenced by EDA_DRAW_FRAME::DrawWorkSheet(), and DIALOG_PAGES_SETTINGS::UpdatePageLayoutExample().

1767 {
1768  WS_DRAW_ITEM_LIST drawList;
1769 
1770  drawList.SetPenSize( aPenWidth );
1771  drawList.SetMilsToIUfactor( aScalar );
1772  drawList.SetSheetNumber( aSheetNumber );
1773  drawList.SetSheetCount( aSheetCount );
1774  drawList.SetFileName( aFileName );
1775  drawList.SetSheetName( aFullSheetName );
1776  drawList.SetSheetLayer( aSheetLayer );
1777 
1778  drawList.BuildWorkSheetGraphicList( aPageInfo,
1779  aTitleBlock, aColor, aAltColor );
1780 
1781  // Draw item list
1782  drawList.Draw( aClipBox, aDC );
1783 }
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)
static

Definition at line 1656 of file legacy_gal/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.

Referenced by EDA_DRAW_FRAME::CopyToClipboard(), and EDA_DRAW_FRAME::FocusOnLocation().

1657 {
1658  bool DrawBlock = false;
1659  wxRect DrawArea;
1660  BASE_SCREEN* screen = aFrame->GetCanvas()->GetScreen();
1661 
1662  if( screen->IsBlockActive() )
1663  {
1664  DrawBlock = true;
1665  DrawArea.SetX( screen->m_BlockLocate.GetX() );
1666  DrawArea.SetY( screen->m_BlockLocate.GetY() );
1667  DrawArea.SetWidth( screen->m_BlockLocate.GetWidth() );
1668  DrawArea.SetHeight( screen->m_BlockLocate.GetHeight() );
1669  }
1670  else
1671  DrawArea.SetSize( aFrame->GetPageSizeIU() );
1672 
1673  // Calculate a reasonable dc size, in pixels, and the dc scale to fit
1674  // the drawings into the dc size
1675  // scale is the ratio resolution (in PPI) / internal units
1676  double ppi = 300; // Use 300 pixels per inch to create bitmap images on start
1677  double inch2Iu = 1000.0 * (double) screen->MilsToIuScalar();
1678  double scale = ppi / inch2Iu;
1679 
1680  wxSize dcsize = DrawArea.GetSize();
1681 
1682  int maxdim = std::max( dcsize.x, dcsize.y );
1683  // the max size in pixels of the bitmap used to byuild the sheet copy
1684  const int maxbitmapsize = 3000;
1685 
1686  while( int( maxdim * scale ) > maxbitmapsize )
1687  {
1688  ppi = ppi / 1.5;
1689  scale = ppi / inch2Iu;
1690  }
1691 
1692  dcsize.x *= scale;
1693  dcsize.y *= scale;
1694 
1695  // Set draw offset, zoom... to values needed to draw in the memory DC
1696  // after saving initial values:
1697  wxPoint tmp_startvisu = screen->m_StartVisu;
1698  double tmpzoom = screen->GetZoom();
1699  wxPoint old_org = screen->m_DrawOrg;
1700  screen->m_DrawOrg.x = screen->m_DrawOrg.y = 0;
1701  screen->m_StartVisu.x = screen->m_StartVisu.y = 0;
1702 
1703  screen->SetZoom( 1 ); // we use zoom = 1 in draw functions.
1704 
1705  wxMemoryDC dc;
1706  wxBitmap image( dcsize );
1707  dc.SelectObject( image );
1708 
1709  EDA_RECT tmp = *aFrame->GetCanvas()->GetClipBox();
1710  GRResetPenAndBrush( &dc );
1711  GRForceBlackPen( false );
1712  screen->m_IsPrinting = true;
1713  dc.SetUserScale( scale, scale );
1714 
1715  aFrame->GetCanvas()->SetClipBox( EDA_RECT( wxPoint( 0, 0 ),
1716  wxSize( 0x7FFFFF0, 0x7FFFFF0 ) ) );
1717 
1718  if( DrawBlock )
1719  {
1720  dc.SetClippingRegion( DrawArea );
1721  }
1722 
1723  dc.Clear();
1724  aFrame->GetCanvas()->EraseScreen( &dc );
1725  const LSET allLayersMask = LSET().set();
1726  aFrame->PrintPage( &dc, allLayersMask, false );
1727  screen->m_IsPrinting = false;
1728  aFrame->GetCanvas()->SetClipBox( tmp );
1729 
1730  bool success = true;
1731 
1732  if( wxTheClipboard->Open() )
1733  {
1734  // This data objects are held by the clipboard,
1735  // so do not delete them in the app.
1736  wxBitmapDataObject* clipbrd_data = new wxBitmapDataObject( image );
1737  wxTheClipboard->SetData( clipbrd_data );
1738  wxTheClipboard->Close();
1739  }
1740  else
1741  success = false;
1742 
1743  // Deselect Bitmap from DC in order to delete the MemoryDC safely
1744  // without deleting the bitmap
1745  dc.SelectObject( wxNullBitmap );
1746 
1747  GRForceBlackPen( false );
1748 
1749  screen->m_StartVisu = tmp_startvisu;
1750  screen->m_DrawOrg = old_org;
1751  screen->SetZoom( tmpzoom );
1752 
1753  return success;
1754 }
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
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.
wxWindow* findDialog ( wxWindowList &  aList)

Definition at line 1599 of file legacy_gal/eda_draw_frame.cpp.

Referenced by EDA_DRAW_FRAME::FocusOnLocation().

1600 {
1601  for( wxWindow* window : aList )
1602  {
1603  if( dynamic_cast<DIALOG_SHIM*>( window ) )
1604  return window;
1605  }
1606  return NULL;
1607 }
static const wxString FirstRunShownKeyword ( wxT("FirstRunShown")  )
static
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

const double MAX_AXIS = INT_MAX - 100
static

Definition at line 1013 of file legacy_gal/eda_draw_frame.cpp.

const wxString productName = wxT( "KiCad E.D.A. " )
static

Definition at line 1756 of file legacy_gal/eda_draw_frame.cpp.