Collapse a level out of the zoom settings.
The APP_SETTINGS_BASE now holds the list of zoom factors, and the old legacy (screen-based) code has been removed.
This commit is contained in:
parent
fc44506fe1
commit
c48f4272f3
|
@ -27,7 +27,6 @@
|
||||||
#include <base_screen.h>
|
#include <base_screen.h>
|
||||||
#include <base_struct.h>
|
#include <base_struct.h>
|
||||||
#include <fctsys.h>
|
#include <fctsys.h>
|
||||||
#include <id.h>
|
|
||||||
#include <trace_helpers.h>
|
#include <trace_helpers.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,7 +40,6 @@ BASE_SCREEN::BASE_SCREEN( EDA_ITEM* aParent, KICAD_T aType ) :
|
||||||
m_Initialized = false;
|
m_Initialized = false;
|
||||||
m_ScreenNumber = 1;
|
m_ScreenNumber = 1;
|
||||||
m_NumberOfScreens = 1; // Hierarchy: Root: ScreenNumber = 1
|
m_NumberOfScreens = 1; // Hierarchy: Root: ScreenNumber = 1
|
||||||
m_Zoom = 32.0;
|
|
||||||
m_Center = true;
|
m_Center = true;
|
||||||
|
|
||||||
m_FlagModified = false; // Set when any change is made on board.
|
m_FlagModified = false; // Set when any change is made on board.
|
||||||
|
@ -72,25 +70,6 @@ void BASE_SCREEN::InitDataPoints( const wxSize& aPageSizeIU )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool BASE_SCREEN::SetZoom( double iu_per_du )
|
|
||||||
{
|
|
||||||
if( iu_per_du == m_Zoom )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
wxLogTrace( traceScreen, "Zoom:%.16g 1/Zoom:%.16g", iu_per_du, 1/iu_per_du );
|
|
||||||
|
|
||||||
if( iu_per_du < GetMinAllowedZoom() )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if( iu_per_du > GetMaxAllowedZoom() )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
m_Zoom = iu_per_du;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BASE_SCREEN::ClearUndoRedoList()
|
void BASE_SCREEN::ClearUndoRedoList()
|
||||||
{
|
{
|
||||||
ClearUndoORRedoList( m_UndoList );
|
ClearUndoORRedoList( m_UndoList );
|
||||||
|
|
|
@ -158,13 +158,10 @@ void EDA_DRAW_PANEL_GAL::SetFocus()
|
||||||
|
|
||||||
void EDA_DRAW_PANEL_GAL::onPaint( wxPaintEvent& WXUNUSED( aEvent ) )
|
void EDA_DRAW_PANEL_GAL::onPaint( wxPaintEvent& WXUNUSED( aEvent ) )
|
||||||
{
|
{
|
||||||
// Update current zoom settings if the canvas is managed by a EDA frame
|
// Update scroll position if the canvas is managed by a EDA frame
|
||||||
// (i.e. not by a preview panel in a dialog)
|
// (i.e. not by a preview panel in a dialog)
|
||||||
if( GetParentEDAFrame() && GetParentEDAFrame()->GetScreen() )
|
if( GetParentEDAFrame() && GetParentEDAFrame()->GetScreen() )
|
||||||
{
|
|
||||||
GetParentEDAFrame()->GetScreen()->SetZoom( GetLegacyZoom() );
|
|
||||||
GetParentEDAFrame()->GetScreen()->m_ScrollCenter = GetView()->GetCenter();
|
GetParentEDAFrame()->GetScreen()->m_ScrollCenter = GetView()->GetCenter();
|
||||||
}
|
|
||||||
|
|
||||||
m_viewControls->UpdateScrollbars();
|
m_viewControls->UpdateScrollbars();
|
||||||
|
|
||||||
|
@ -355,12 +352,6 @@ void EDA_DRAW_PANEL_GAL::SetTopLayer( int aLayer )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
double EDA_DRAW_PANEL_GAL::GetLegacyZoom() const
|
|
||||||
{
|
|
||||||
return m_edaFrame->GetZoomLevelCoeff() / m_gal->GetZoomFactor();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool EDA_DRAW_PANEL_GAL::SwitchBackend( GAL_TYPE aGalType )
|
bool EDA_DRAW_PANEL_GAL::SwitchBackend( GAL_TYPE aGalType )
|
||||||
{
|
{
|
||||||
// Do not do anything if the currently used GAL is correct
|
// Do not do anything if the currently used GAL is correct
|
||||||
|
|
|
@ -87,7 +87,6 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
|
||||||
// BLACK for Pcbnew, BLACK or WHITE for eeschema
|
// BLACK for Pcbnew, BLACK or WHITE for eeschema
|
||||||
m_colorSettings = nullptr;
|
m_colorSettings = nullptr;
|
||||||
m_MsgFrameHeight = EDA_MSG_PANEL::GetRequiredHeight();
|
m_MsgFrameHeight = EDA_MSG_PANEL::GetRequiredHeight();
|
||||||
m_zoomLevelCoeff = 1.0;
|
|
||||||
m_userUnits = EDA_UNITS::MILLIMETRES;
|
m_userUnits = EDA_UNITS::MILLIMETRES;
|
||||||
m_PolarCoords = false;
|
m_PolarCoords = false;
|
||||||
m_findReplaceData = new wxFindReplaceData( wxFR_DOWN );
|
m_findReplaceData = new wxFindReplaceData( wxFR_DOWN );
|
||||||
|
@ -342,12 +341,6 @@ void EDA_DRAW_FRAME::OnSelectZoom( wxCommandEvent& event )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
double EDA_DRAW_FRAME::GetZoom()
|
|
||||||
{
|
|
||||||
return GetScreen()->GetZoom();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void EDA_DRAW_FRAME::OnMove( wxMoveEvent& aEvent )
|
void EDA_DRAW_FRAME::OnMove( wxMoveEvent& aEvent )
|
||||||
{
|
{
|
||||||
// If the window is moved to a different display, the scaling factor may change
|
// If the window is moved to a different display, the scaling factor may change
|
||||||
|
@ -458,7 +451,8 @@ const wxString EDA_DRAW_FRAME::GetZoomLevelIndicator() const
|
||||||
{
|
{
|
||||||
// returns a human readable value which can be displayed as zoom
|
// returns a human readable value which can be displayed as zoom
|
||||||
// level indicator in dialogs.
|
// level indicator in dialogs.
|
||||||
return wxString::Format( wxT( "Z %.2f" ), m_canvas->GetGAL()->GetZoomFactor() );
|
double zoom = m_canvas->GetGAL()->GetZoomFactor() / ZOOM_COEFF;
|
||||||
|
return wxString::Format( wxT( "Z %.2f" ), zoom );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -255,6 +255,9 @@ void APP_SETTINGS_BASE::addParamsForWindow( WINDOW_SETTINGS* aWindow, const std:
|
||||||
|
|
||||||
m_params.emplace_back( new PARAM<int>( aJsonPath + ".pos_y", &aWindow->pos_y, 0 ) );
|
m_params.emplace_back( new PARAM<int>( aJsonPath + ".pos_y", &aWindow->pos_y, 0 ) );
|
||||||
|
|
||||||
|
m_params.emplace_back( new PARAM_LIST<double>( aJsonPath + ".zoom_factors",
|
||||||
|
&aWindow->zoom_factors, {} ) );
|
||||||
|
|
||||||
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.axes_enabled",
|
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.axes_enabled",
|
||||||
&aWindow->grid.axes_enabled, false ) );
|
&aWindow->grid.axes_enabled, false ) );
|
||||||
|
|
||||||
|
|
|
@ -195,30 +195,19 @@ int COMMON_TOOLS::ZoomInOutCenter( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
int COMMON_TOOLS::doZoomInOut( bool aDirection, bool aCenterOnCursor )
|
int COMMON_TOOLS::doZoomInOut( bool aDirection, bool aCenterOnCursor )
|
||||||
{
|
{
|
||||||
double zoom = m_frame->GetCanvas()->GetLegacyZoom();
|
double zoom = getView()->GetGAL()->GetZoomFactor() / ZOOM_COEFF;
|
||||||
|
|
||||||
// Step must be AT LEAST 1.3
|
// Step must be AT LEAST 1.3
|
||||||
if( aDirection )
|
if( aDirection )
|
||||||
zoom /= 1.3;
|
|
||||||
else
|
|
||||||
zoom *= 1.3;
|
zoom *= 1.3;
|
||||||
|
else
|
||||||
|
zoom /= 1.3;
|
||||||
|
|
||||||
// Now look for the next closest menu step
|
// Now look for the next closest menu step
|
||||||
std::vector<double>& zoomList = m_frame->GetScreen()->m_ZoomList;
|
std::vector<double>& zoomList = m_toolMgr->GetSettings()->m_Window.zoom_factors;
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
if( aDirection )
|
if( aDirection )
|
||||||
{
|
|
||||||
for( idx = zoomList.size() - 1; idx >= 0; --idx )
|
|
||||||
{
|
|
||||||
if( zoomList[idx] <= zoom )
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( idx < 0 )
|
|
||||||
idx = 0; // if we ran off the end then peg to the end
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
for( idx = 0; idx < (int)zoomList.size(); ++idx )
|
for( idx = 0; idx < (int)zoomList.size(); ++idx )
|
||||||
{
|
{
|
||||||
|
@ -226,8 +215,19 @@ int COMMON_TOOLS::doZoomInOut( bool aDirection, bool aCenterOnCursor )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( idx >= (int)zoomList.size() )
|
if( idx >= zoomList.size() )
|
||||||
idx = zoomList.size() - 1; // if we ran off the end then peg to the end
|
idx = (int) zoomList.size() - 1; // if we ran off the end then peg to the end
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for( idx = (int) zoomList.size() - 1; idx >= 0; --idx )
|
||||||
|
{
|
||||||
|
if( zoomList[idx] <= zoom )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( idx < 0 )
|
||||||
|
idx = 0; // if we ran off the end then peg to the end
|
||||||
}
|
}
|
||||||
|
|
||||||
return doZoomToPreset( idx + 1, aCenterOnCursor );
|
return doZoomToPreset( idx + 1, aCenterOnCursor );
|
||||||
|
@ -313,15 +313,14 @@ int COMMON_TOOLS::CenterContents( const TOOL_EVENT& aEvent )
|
||||||
int COMMON_TOOLS::ZoomPreset( const TOOL_EVENT& aEvent )
|
int COMMON_TOOLS::ZoomPreset( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
unsigned int idx = aEvent.Parameter<intptr_t>();
|
unsigned int idx = aEvent.Parameter<intptr_t>();
|
||||||
return doZoomToPreset( idx, false );
|
return doZoomToPreset( (int) idx, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Note: idx == 0 is Auto; idx == 1 is first entry in zoomList
|
// Note: idx == 0 is Auto; idx == 1 is first entry in zoomList
|
||||||
int COMMON_TOOLS::doZoomToPreset( int idx, bool aCenterOnCursor )
|
int COMMON_TOOLS::doZoomToPreset( int idx, bool aCenterOnCursor )
|
||||||
{
|
{
|
||||||
std::vector<double>& zoomList = m_frame->GetScreen()->m_ZoomList;
|
std::vector<double>& zoomList = m_toolMgr->GetSettings()->m_Window.zoom_factors;
|
||||||
KIGFX::VIEW* view = m_frame->GetCanvas()->GetView();
|
|
||||||
|
|
||||||
if( idx == 0 ) // Zoom Auto
|
if( idx == 0 ) // Zoom Auto
|
||||||
{
|
{
|
||||||
|
@ -333,18 +332,18 @@ int COMMON_TOOLS::doZoomToPreset( int idx, bool aCenterOnCursor )
|
||||||
idx--;
|
idx--;
|
||||||
}
|
}
|
||||||
|
|
||||||
double scale = m_frame->GetZoomLevelCoeff() / zoomList[idx];
|
double scale = zoomList[idx] * ZOOM_COEFF;
|
||||||
|
|
||||||
if( aCenterOnCursor )
|
if( aCenterOnCursor )
|
||||||
{
|
{
|
||||||
view->SetScale( scale, getViewControls()->GetCursorPosition() );
|
getView()->SetScale( scale, getViewControls()->GetCursorPosition() );
|
||||||
|
|
||||||
if( getViewControls()->IsCursorWarpingEnabled() )
|
if( getViewControls()->IsCursorWarpingEnabled() )
|
||||||
getViewControls()->CenterOnCursor();
|
getViewControls()->CenterOnCursor();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
view->SetScale( scale );
|
getView()->SetScale( scale );
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015 CERN
|
* Copyright (C) 2015 CERN
|
||||||
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
|
||||||
* Copyright (C) 2015-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2015-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -26,7 +26,6 @@
|
||||||
#include <tool/grid_menu.h>
|
#include <tool/grid_menu.h>
|
||||||
#include <id.h>
|
#include <id.h>
|
||||||
#include <eda_draw_frame.h>
|
#include <eda_draw_frame.h>
|
||||||
#include <base_screen.h>
|
|
||||||
#include <settings/app_settings.h>
|
#include <settings/app_settings.h>
|
||||||
#include <tool/actions.h>
|
#include <tool/actions.h>
|
||||||
#include <bitmaps.h>
|
#include <bitmaps.h>
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015 CERN
|
* Copyright (C) 2015 CERN
|
||||||
|
* Copyright (C) 2015-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
|
@ -23,61 +24,49 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <tool/zoom_menu.h>
|
#include <tool/zoom_menu.h>
|
||||||
#include <id.h>
|
|
||||||
#include <eda_draw_frame.h>
|
#include <eda_draw_frame.h>
|
||||||
#include <base_screen.h>
|
#include <settings/app_settings.h>
|
||||||
#include <tool/actions.h>
|
#include <tool/actions.h>
|
||||||
|
#include <gal/graphics_abstraction_layer.h>
|
||||||
#include <bitmaps.h>
|
#include <bitmaps.h>
|
||||||
|
#include <convert_to_biu.h>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
using namespace std::placeholders;
|
using namespace std::placeholders;
|
||||||
|
|
||||||
ZOOM_MENU::ZOOM_MENU( EDA_DRAW_FRAME* aParent ) :
|
ZOOM_MENU::ZOOM_MENU( EDA_DRAW_FRAME* aParent ) :
|
||||||
ACTION_MENU( true ),
|
ACTION_MENU( true ),
|
||||||
m_parent( aParent )
|
m_parent( aParent )
|
||||||
{
|
{
|
||||||
BASE_SCREEN* screen = aParent->GetScreen();
|
|
||||||
|
|
||||||
SetTitle( _( "Zoom" ) );
|
SetTitle( _( "Zoom" ) );
|
||||||
SetIcon( zoom_selection_xpm );
|
SetIcon( zoom_selection_xpm );
|
||||||
|
|
||||||
//int zoom = screen->GetZoom();
|
int i = 1; // 0 reserved for menus which support auto-zoom
|
||||||
int maxZoomIds = std::min( ID_POPUP_ZOOM_LEVEL_END - ID_POPUP_ZOOM_LEVEL_START,
|
|
||||||
(int) screen->m_ZoomList.size() );
|
|
||||||
|
|
||||||
for( int i = 0; i < maxZoomIds; ++i )
|
for( double factor : m_parent->config()->m_Window.zoom_factors )
|
||||||
{
|
Append( i++, wxString::Format( _( "Zoom: %.2f" ), factor ), wxEmptyString, wxITEM_CHECK );
|
||||||
Append( ID_POPUP_ZOOM_LEVEL_START+1 + i, // ID_POPUP_ZOOM_LEVEL_START == Auto
|
|
||||||
wxString::Format( _( "Zoom: %.2f" ), aParent->GetZoomLevelCoeff() / screen->m_ZoomList[i] ),
|
|
||||||
wxEmptyString, wxITEM_CHECK );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
OPT_TOOL_EVENT ZOOM_MENU::eventHandler( const wxMenuEvent& aEvent )
|
OPT_TOOL_EVENT ZOOM_MENU::eventHandler( const wxMenuEvent& aEvent )
|
||||||
{
|
{
|
||||||
OPT_TOOL_EVENT event( ACTIONS::zoomPreset.MakeEvent() );
|
OPT_TOOL_EVENT event( ACTIONS::zoomPreset.MakeEvent() );
|
||||||
intptr_t idx = aEvent.GetId() - ID_POPUP_ZOOM_LEVEL_START;
|
event->SetParameter( (intptr_t) aEvent.GetId() );
|
||||||
event->SetParameter( idx );
|
|
||||||
|
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ZOOM_MENU::update()
|
void ZOOM_MENU::update()
|
||||||
{
|
{
|
||||||
BASE_SCREEN* screen = m_parent->GetScreen();
|
double zoom = m_parent->GetCanvas()->GetGAL()->GetZoomFactor() / ZOOM_COEFF;
|
||||||
double zoom = screen->GetZoom();
|
|
||||||
const std::vector<double>& zoomList = m_parent->GetScreen()->m_ZoomList;
|
|
||||||
|
|
||||||
// Check the current zoom
|
const std::vector<double>& zoomList = m_parent->config()->m_Window.zoom_factors;
|
||||||
int maxZoomIds = std::min( ID_POPUP_ZOOM_LEVEL_END - ID_POPUP_ZOOM_LEVEL_START,
|
|
||||||
(int) screen->m_ZoomList.size() );
|
|
||||||
|
|
||||||
for( int i = 0; i < maxZoomIds; ++i )
|
for( int i = 0; i < zoomList.size(); ++i )
|
||||||
{
|
{
|
||||||
// Search for a value near the current zoom setting:
|
// Search for a value near the current zoom setting:
|
||||||
double rel_error = std::fabs( zoomList[i] - zoom )/zoom;
|
double rel_error = std::fabs( zoomList[i] - zoom ) / zoom;
|
||||||
Check( ID_POPUP_ZOOM_LEVEL_START+1 + i, rel_error < 0.1 );
|
// IDs start with 1 (leaving 0 for auto-zoom)
|
||||||
|
Check( i+1, rel_error < 0.1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,8 +146,6 @@ DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME( KIWAY* aKiway, wxWindow* aPa
|
||||||
auto& galOpts = GetGalDisplayOptions();
|
auto& galOpts = GetGalDisplayOptions();
|
||||||
galOpts.m_axesEnabled = true;
|
galOpts.m_axesEnabled = true;
|
||||||
|
|
||||||
GetCanvas()->GetView()->SetScale( GetZoomLevelCoeff() / GetScreen()->GetZoom() );
|
|
||||||
|
|
||||||
ActivateGalCanvas();
|
ActivateGalCanvas();
|
||||||
|
|
||||||
// Restore last zoom. (If auto-zooming we'll adjust when we load the footprint.)
|
// Restore last zoom. (If auto-zooming we'll adjust when we load the footprint.)
|
||||||
|
|
|
@ -103,7 +103,6 @@ SCH_ITEM* SCH_EDITOR_CONTROL::FindComponentAndItem( const wxString& aReference,
|
||||||
{
|
{
|
||||||
if( *sheetWithComponentFound != m_frame->GetCurrentSheet() )
|
if( *sheetWithComponentFound != m_frame->GetCurrentSheet() )
|
||||||
{
|
{
|
||||||
sheetWithComponentFound->LastScreen()->SetZoom( m_frame->GetScreen()->GetZoom() );
|
|
||||||
m_frame->Schematic().SetCurrentSheet( *sheetWithComponentFound );
|
m_frame->Schematic().SetCurrentSheet( *sheetWithComponentFound );
|
||||||
m_frame->DisplayCurrentSheet();
|
m_frame->DisplayCurrentSheet();
|
||||||
}
|
}
|
||||||
|
|
|
@ -361,7 +361,6 @@ void DIALOG_ERC::OnERCItemSelected( wxDataViewEvent& aEvent )
|
||||||
|
|
||||||
m_parent->SetCurrentSheet( sheet );
|
m_parent->SetCurrentSheet( sheet );
|
||||||
m_parent->DisplayCurrentSheet();
|
m_parent->DisplayCurrentSheet();
|
||||||
sheet.LastScreen()->SetZoom( m_parent->GetScreen()->GetZoom() );
|
|
||||||
m_parent->RedrawScreen( (wxPoint) m_parent->GetScreen()->m_ScrollCenter, false );
|
m_parent->RedrawScreen( (wxPoint) m_parent->GetScreen()->m_ScrollCenter, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,6 @@ void DIALOG_MIGRATE_BUSES::onItemSelected( wxListEvent& aEvent )
|
||||||
|
|
||||||
if( sheet != current )
|
if( sheet != current )
|
||||||
{
|
{
|
||||||
sheet.LastScreen()->SetZoom( m_frame->GetScreen()->GetZoom() );
|
|
||||||
sheet.UpdateAllScreenReferences();
|
sheet.UpdateAllScreenReferences();
|
||||||
m_frame->Schematic().SetCurrentSheet( sheet );
|
m_frame->Schematic().SetCurrentSheet( sheet );
|
||||||
sheet.LastScreen()->TestDanglingEnds();
|
sheet.LastScreen()->TestDanglingEnds();
|
||||||
|
|
|
@ -422,7 +422,6 @@ bool SCH_PRINTOUT::OnBeginDocument( int startPage, int endPage )
|
||||||
*/
|
*/
|
||||||
void SCH_PRINTOUT::PrintPage( SCH_SCREEN* aScreen )
|
void SCH_PRINTOUT::PrintPage( SCH_SCREEN* aScreen )
|
||||||
{
|
{
|
||||||
int oldZoom;
|
|
||||||
wxPoint tmp_startvisu;
|
wxPoint tmp_startvisu;
|
||||||
wxSize pageSizeIU; // Page size in internal units
|
wxSize pageSizeIU; // Page size in internal units
|
||||||
wxPoint old_org;
|
wxPoint old_org;
|
||||||
|
@ -431,9 +430,8 @@ void SCH_PRINTOUT::PrintPage( SCH_SCREEN* aScreen )
|
||||||
|
|
||||||
wxBusyCursor dummy;
|
wxBusyCursor dummy;
|
||||||
|
|
||||||
// Save current scale factor, offsets, and clip box.
|
// Save current offsets and clip box.
|
||||||
tmp_startvisu = aScreen->m_StartVisu;
|
tmp_startvisu = aScreen->m_StartVisu;
|
||||||
oldZoom = aScreen->GetZoom();
|
|
||||||
old_org = aScreen->m_DrawOrg;
|
old_org = aScreen->m_DrawOrg;
|
||||||
|
|
||||||
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
|
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
|
||||||
|
@ -532,7 +530,6 @@ void SCH_PRINTOUT::PrintPage( SCH_SCREEN* aScreen )
|
||||||
|
|
||||||
aScreen->m_StartVisu = tmp_startvisu;
|
aScreen->m_StartVisu = tmp_startvisu;
|
||||||
aScreen->m_DrawOrg = old_org;
|
aScreen->m_DrawOrg = old_org;
|
||||||
aScreen->SetZoom( oldZoom );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -440,6 +440,29 @@ void SCH_BASE_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
|
||||||
"1 mil" };
|
"1 mil" };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( aCfg->m_Window.zoom_factors.empty() )
|
||||||
|
{
|
||||||
|
aCfg->m_Window.zoom_factors = { 0.5,
|
||||||
|
0.7,
|
||||||
|
1.0,
|
||||||
|
1.5,
|
||||||
|
2.0,
|
||||||
|
3.0,
|
||||||
|
4.5,
|
||||||
|
6.5,
|
||||||
|
10.0,
|
||||||
|
15.0,
|
||||||
|
20.0,
|
||||||
|
30.0,
|
||||||
|
45.0,
|
||||||
|
65.0,
|
||||||
|
100.0,
|
||||||
|
150.0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
for( double& factor : aCfg->m_Window.zoom_factors )
|
||||||
|
factor = std::min( factor, MAX_ZOOM_FACTOR );
|
||||||
|
|
||||||
wxString templateFieldNames = cfg->m_Drawing.field_names;
|
wxString templateFieldNames = cfg->m_Drawing.field_names;
|
||||||
|
|
||||||
if( !templateFieldNames.IsEmpty() )
|
if( !templateFieldNames.IsEmpty() )
|
||||||
|
|
|
@ -87,10 +87,6 @@ SCH_BASE_FRAME::SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aWindo
|
||||||
m_defaults( &m_base_frame_defaults )
|
m_defaults( &m_base_frame_defaults )
|
||||||
{
|
{
|
||||||
createCanvas();
|
createCanvas();
|
||||||
|
|
||||||
// Adjusted to display zoom level ~ 1 when the screen shows a 1:1 image
|
|
||||||
// Obviously depends on the monitor, but this is an acceptable value
|
|
||||||
m_zoomLevelCoeff = 11.0 * IU_PER_MILS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -117,12 +113,6 @@ LIBEDIT_SETTINGS* SCH_BASE_FRAME::libeditconfig() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const wxString SCH_BASE_FRAME::GetZoomLevelIndicator() const
|
|
||||||
{
|
|
||||||
return EDA_DRAW_FRAME::GetZoomLevelIndicator();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void SCH_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
|
void SCH_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
|
||||||
{
|
{
|
||||||
GetScreen()->SetPageSettings( aPageSettings );
|
GetScreen()->SetPageSettings( aPageSettings );
|
||||||
|
@ -283,15 +273,6 @@ void SCH_BASE_FRAME::RedrawScreen( const wxPoint& aCenterPoint, bool aWarpPointe
|
||||||
{
|
{
|
||||||
KIGFX::GAL* gal = GetCanvas()->GetGAL();
|
KIGFX::GAL* gal = GetCanvas()->GetGAL();
|
||||||
|
|
||||||
double selectedZoom = GetScreen()->GetZoom();
|
|
||||||
double zoomFactor = gal->GetWorldScale() / gal->GetZoomFactor();
|
|
||||||
double scale = 1.0 / ( zoomFactor * selectedZoom );
|
|
||||||
|
|
||||||
if( aCenterPoint != wxPoint( 0, 0 ) )
|
|
||||||
GetCanvas()->GetView()->SetScale( scale, aCenterPoint );
|
|
||||||
else
|
|
||||||
GetCanvas()->GetView()->SetScale( scale );
|
|
||||||
|
|
||||||
GetCanvas()->GetView()->SetCenter( aCenterPoint );
|
GetCanvas()->GetView()->SetCenter( aCenterPoint );
|
||||||
|
|
||||||
if( aWarpPointer )
|
if( aWarpPointer )
|
||||||
|
|
|
@ -130,14 +130,6 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual bool GetShowAllPins() const { return true; }
|
virtual bool GetShowAllPins() const { return true; }
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetZoomLevelIndicator
|
|
||||||
* returns a human readable value which can be displayed as zoom
|
|
||||||
* level indicator in dialogs.
|
|
||||||
* Virtual from the base class
|
|
||||||
*/
|
|
||||||
const wxString GetZoomLevelIndicator() const override;
|
|
||||||
|
|
||||||
void SetPageSettings( const PAGE_INFO& aPageSettings ) override;
|
void SetPageSettings( const PAGE_INFO& aPageSettings ) override;
|
||||||
const PAGE_INFO& GetPageSettings () const override;
|
const PAGE_INFO& GetPageSettings () const override;
|
||||||
const wxSize GetPageSizeIU() const override;
|
const wxSize GetPageSizeIU() const override;
|
||||||
|
|
|
@ -430,8 +430,6 @@ void SCH_EDIT_FRAME::CreateScreens()
|
||||||
screen->SetMaxUndoItems( m_UndoRedoCountMax );
|
screen->SetMaxUndoItems( m_UndoRedoCountMax );
|
||||||
SetScreen( screen );
|
SetScreen( screen );
|
||||||
}
|
}
|
||||||
|
|
||||||
GetScreen()->SetZoom( 32.0 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -66,35 +66,6 @@
|
||||||
// TODO(JE) Debugging only
|
// TODO(JE) Debugging only
|
||||||
#include <profile.h>
|
#include <profile.h>
|
||||||
|
|
||||||
#define ZOOM_FACTOR( x ) ( x * IU_PER_MILS )
|
|
||||||
|
|
||||||
|
|
||||||
/* Default zoom values. Limited to these values to keep a decent size
|
|
||||||
* to menus
|
|
||||||
*/
|
|
||||||
static double SchematicZoomList[] =
|
|
||||||
{
|
|
||||||
ZOOM_FACTOR( 0.5 ),
|
|
||||||
ZOOM_FACTOR( 0.7 ),
|
|
||||||
ZOOM_FACTOR( 1.0 ),
|
|
||||||
ZOOM_FACTOR( 1.5 ),
|
|
||||||
ZOOM_FACTOR( 2.0 ),
|
|
||||||
ZOOM_FACTOR( 3.0 ),
|
|
||||||
ZOOM_FACTOR( 4.0 ),
|
|
||||||
ZOOM_FACTOR( 6.0 ),
|
|
||||||
ZOOM_FACTOR( 8.0 ),
|
|
||||||
ZOOM_FACTOR( 11.0 ),
|
|
||||||
ZOOM_FACTOR( 13.0 ),
|
|
||||||
ZOOM_FACTOR( 16.0 ),
|
|
||||||
ZOOM_FACTOR( 20.0 ),
|
|
||||||
ZOOM_FACTOR( 26.0 ),
|
|
||||||
ZOOM_FACTOR( 32.0 ),
|
|
||||||
ZOOM_FACTOR( 48.0 ),
|
|
||||||
ZOOM_FACTOR( 64.0 ),
|
|
||||||
ZOOM_FACTOR( 80.0 ),
|
|
||||||
ZOOM_FACTOR( 128.0 )
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
SCH_SCREEN::SCH_SCREEN( EDA_ITEM* aParent ) :
|
SCH_SCREEN::SCH_SCREEN( EDA_ITEM* aParent ) :
|
||||||
BASE_SCREEN( aParent, SCH_SCREEN_T ),
|
BASE_SCREEN( aParent, SCH_SCREEN_T ),
|
||||||
|
@ -102,11 +73,6 @@ SCH_SCREEN::SCH_SCREEN( EDA_ITEM* aParent ) :
|
||||||
{
|
{
|
||||||
m_modification_sync = 0;
|
m_modification_sync = 0;
|
||||||
|
|
||||||
SetZoom( 32 );
|
|
||||||
|
|
||||||
for( unsigned zoom : SchematicZoomList )
|
|
||||||
m_ZoomList.push_back( zoom );
|
|
||||||
|
|
||||||
m_refCount = 0;
|
m_refCount = 0;
|
||||||
|
|
||||||
// Suitable for schematic only. For libedit and viewlib, must be set to true
|
// Suitable for schematic only. For libedit and viewlib, must be set to true
|
||||||
|
|
|
@ -585,13 +585,10 @@ void SCH_EDIT_FRAME::DrawCurrentSheetToClipboard()
|
||||||
// Set draw offset, zoom... to values needed to draw in the memory DC
|
// Set draw offset, zoom... to values needed to draw in the memory DC
|
||||||
// after saving initial values:
|
// after saving initial values:
|
||||||
wxPoint tmp_startvisu = screen->m_StartVisu;
|
wxPoint tmp_startvisu = screen->m_StartVisu;
|
||||||
double tmpzoom = screen->GetZoom();
|
wxPoint old_org = screen->m_DrawOrg;
|
||||||
wxPoint old_org = screen->m_DrawOrg;
|
|
||||||
screen->m_DrawOrg.x = screen->m_DrawOrg.y = 0;
|
screen->m_DrawOrg.x = screen->m_DrawOrg.y = 0;
|
||||||
screen->m_StartVisu.x = screen->m_StartVisu.y = 0;
|
screen->m_StartVisu.x = screen->m_StartVisu.y = 0;
|
||||||
|
|
||||||
screen->SetZoom( 1 ); // we use zoom = 1 in draw functions.
|
|
||||||
|
|
||||||
wxMemoryDC dc;
|
wxMemoryDC dc;
|
||||||
wxBitmap image( dcsize );
|
wxBitmap image( dcsize );
|
||||||
dc.SelectObject( image );
|
dc.SelectObject( image );
|
||||||
|
@ -620,7 +617,6 @@ void SCH_EDIT_FRAME::DrawCurrentSheetToClipboard()
|
||||||
|
|
||||||
screen->m_StartVisu = tmp_startvisu;
|
screen->m_StartVisu = tmp_startvisu;
|
||||||
screen->m_DrawOrg = old_org;
|
screen->m_DrawOrg = old_org;
|
||||||
screen->SetZoom( tmpzoom );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -433,7 +433,6 @@ int SCH_EDITOR_CONTROL::FindNext( const TOOL_EVENT& aEvent )
|
||||||
m_frame->Schematic().SetCurrentSheet( *sheet );
|
m_frame->Schematic().SetCurrentSheet( *sheet );
|
||||||
m_frame->GetCurrentSheet().UpdateAllScreenReferences();
|
m_frame->GetCurrentSheet().UpdateAllScreenReferences();
|
||||||
|
|
||||||
screen->SetZoom( m_frame->GetScreen()->GetZoom() );
|
|
||||||
screen->TestDanglingEnds();
|
screen->TestDanglingEnds();
|
||||||
|
|
||||||
m_frame->SetScreen( screen );
|
m_frame->SetScreen( screen );
|
||||||
|
|
|
@ -30,7 +30,6 @@ set( GERBVIEW_SRCS
|
||||||
am_param.cpp
|
am_param.cpp
|
||||||
am_primitive.cpp
|
am_primitive.cpp
|
||||||
DCodeSelectionbox.cpp
|
DCodeSelectionbox.cpp
|
||||||
gbr_screen.cpp
|
|
||||||
gbr_layout.cpp
|
gbr_layout.cpp
|
||||||
gerber_file_image.cpp
|
gerber_file_image.cpp
|
||||||
gerber_file_image_list.cpp
|
gerber_file_image_list.cpp
|
||||||
|
|
|
@ -34,6 +34,8 @@
|
||||||
#include <gerber_file_image_list.h>
|
#include <gerber_file_image_list.h>
|
||||||
#include <gerbview_layer_widget.h>
|
#include <gerbview_layer_widget.h>
|
||||||
#include <view/view.h>
|
#include <view/view.h>
|
||||||
|
#include <base_screen.h>
|
||||||
|
|
||||||
#include <tool/tool_manager.h>
|
#include <tool/tool_manager.h>
|
||||||
|
|
||||||
bool GERBVIEW_FRAME::Clear_DrawLayers( bool query )
|
bool GERBVIEW_FRAME::Clear_DrawLayers( bool query )
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
/*
|
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2012-2014 Jean-Pierre Charras jp.charras at wanadoo.fr
|
|
||||||
* Copyright (C) 1992-2020 KiCad Developers, see change_log.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
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <fctsys.h>
|
|
||||||
#include <macros.h>
|
|
||||||
#include <gbr_screen.h>
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Default GerbView zoom values.
|
|
||||||
Roughly a 1.5 progression.
|
|
||||||
*/
|
|
||||||
static const double gbrZoomList[] =
|
|
||||||
{
|
|
||||||
ZOOM_FACTOR( 0.022 ),
|
|
||||||
ZOOM_FACTOR( 0.035 ),
|
|
||||||
ZOOM_FACTOR( 0.05 ),
|
|
||||||
ZOOM_FACTOR( 0.08 ),
|
|
||||||
ZOOM_FACTOR( 0.13 ),
|
|
||||||
ZOOM_FACTOR( 0.22 ),
|
|
||||||
ZOOM_FACTOR( 0.35 ),
|
|
||||||
ZOOM_FACTOR( 0.6 ),
|
|
||||||
ZOOM_FACTOR( 1.0 ),
|
|
||||||
ZOOM_FACTOR( 1.5 ),
|
|
||||||
ZOOM_FACTOR( 2.2 ),
|
|
||||||
ZOOM_FACTOR( 3.5 ),
|
|
||||||
ZOOM_FACTOR( 5.0 ),
|
|
||||||
ZOOM_FACTOR( 8.0 ),
|
|
||||||
ZOOM_FACTOR( 13.0 ),
|
|
||||||
ZOOM_FACTOR( 20.0 ),
|
|
||||||
ZOOM_FACTOR( 35.0 ),
|
|
||||||
ZOOM_FACTOR( 50.0 ),
|
|
||||||
ZOOM_FACTOR( 80.0 ),
|
|
||||||
ZOOM_FACTOR( 130.0 ),
|
|
||||||
ZOOM_FACTOR( 220.0 )
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
GBR_SCREEN::GBR_SCREEN( const wxSize& aPageSizeIU ) :
|
|
||||||
BASE_SCREEN( SCREEN_T )
|
|
||||||
{
|
|
||||||
for( unsigned i = 0; i < arrayDim( gbrZoomList ); ++i )
|
|
||||||
m_ZoomList.push_back( gbrZoomList[i] );
|
|
||||||
|
|
||||||
SetZoom( ZOOM_FACTOR( 350 ) ); // a default value for zoom
|
|
||||||
|
|
||||||
m_Active_Layer = 0; // default active layer = first graphic layer
|
|
||||||
|
|
||||||
InitDataPoints( aPageSizeIU );
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
/*
|
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2012-2014 Jean-Pierre Charras jp.charras at wanadoo.fr
|
|
||||||
* Copyright (C) 1992-2014 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 GBR_SCREEN_H
|
|
||||||
#define GBR_SCREEN_H
|
|
||||||
|
|
||||||
#include <base_units.h>
|
|
||||||
#include <base_screen.h>
|
|
||||||
|
|
||||||
#define ZOOM_FACTOR( x ) ( x * IU_PER_MILS )
|
|
||||||
|
|
||||||
/* Handle info to display a board */
|
|
||||||
class GBR_SCREEN : public BASE_SCREEN
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
int m_Active_Layer;
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param aPageSizeIU is the size of the initial paper page in internal units.
|
|
||||||
*/
|
|
||||||
GBR_SCREEN( const wxSize& aPageSizeIU );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function ClearUndoORRedoList
|
|
||||||
* virtual pure in BASE_SCREEN, so it must be defined here
|
|
||||||
*/
|
|
||||||
void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 ) override
|
|
||||||
{ }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif // GBR_SCREEN_H
|
|
|
@ -50,6 +50,7 @@
|
||||||
#include <tools/gerbview_selection_tool.h>
|
#include <tools/gerbview_selection_tool.h>
|
||||||
#include <tools/gerbview_control.h>
|
#include <tools/gerbview_control.h>
|
||||||
#include <view/view.h>
|
#include <view/view.h>
|
||||||
|
#include <base_screen.h>
|
||||||
#include <gerbview_painter.h>
|
#include <gerbview_painter.h>
|
||||||
#include <geometry/shape_poly_set.h>
|
#include <geometry/shape_poly_set.h>
|
||||||
#include <widgets/paged_dialog.h>
|
#include <widgets/paged_dialog.h>
|
||||||
|
@ -62,28 +63,24 @@
|
||||||
GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent )
|
GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent )
|
||||||
: EDA_DRAW_FRAME( aKiway, aParent, FRAME_GERBER, wxT( "GerbView" ), wxDefaultPosition,
|
: EDA_DRAW_FRAME( aKiway, aParent, FRAME_GERBER, wxT( "GerbView" ), wxDefaultPosition,
|
||||||
wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, GERBVIEW_FRAME_NAME ),
|
wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, GERBVIEW_FRAME_NAME ),
|
||||||
|
m_activeLayer( 0 ),
|
||||||
m_zipFileHistory( DEFAULT_FILE_HISTORY_SIZE, ID_GERBVIEW_ZIP_FILE1,
|
m_zipFileHistory( DEFAULT_FILE_HISTORY_SIZE, ID_GERBVIEW_ZIP_FILE1,
|
||||||
ID_GERBVIEW_ZIP_FILE_LIST_CLEAR, _( "Clear Recent Zip Files" ) ),
|
ID_GERBVIEW_ZIP_FILE_LIST_CLEAR, _( "Clear Recent Zip Files" ) ),
|
||||||
m_drillFileHistory( DEFAULT_FILE_HISTORY_SIZE, ID_GERBVIEW_DRILL_FILE1,
|
m_drillFileHistory( DEFAULT_FILE_HISTORY_SIZE, ID_GERBVIEW_DRILL_FILE1,
|
||||||
ID_GERBVIEW_DRILL_FILE_LIST_CLEAR, _( "Clear Recent Drill Files" ) ),
|
ID_GERBVIEW_DRILL_FILE_LIST_CLEAR, _( "Clear Recent Drill Files" ) ),
|
||||||
m_jobFileHistory( DEFAULT_FILE_HISTORY_SIZE, ID_GERBVIEW_JOB_FILE1,
|
m_jobFileHistory( DEFAULT_FILE_HISTORY_SIZE, ID_GERBVIEW_JOB_FILE1,
|
||||||
ID_GERBVIEW_JOB_FILE_LIST_CLEAR, _( "Clear Recent Job Files" ) )
|
ID_GERBVIEW_JOB_FILE_LIST_CLEAR, _( "Clear Recent Job Files" ) ),
|
||||||
|
m_TextInfo( nullptr )
|
||||||
{
|
{
|
||||||
m_gerberLayout = NULL;
|
m_gerberLayout = NULL;
|
||||||
m_zoomLevelCoeff = ZOOM_FACTOR( 110 ); // Adjusted to roughly displays zoom level = 1
|
|
||||||
// when the screen shows a 1:1 image
|
|
||||||
// obviously depends on the monitor,
|
|
||||||
// but this is an acceptable value
|
|
||||||
|
|
||||||
m_show_layer_manager_tools = true;
|
m_show_layer_manager_tools = true;
|
||||||
|
|
||||||
m_showBorderAndTitleBlock = false; // true for reference drawings.
|
m_showBorderAndTitleBlock = false; // true for reference drawings.
|
||||||
m_SelLayerBox = NULL;
|
m_SelLayerBox = NULL;
|
||||||
m_DCodeSelector = NULL;
|
m_DCodeSelector = NULL;
|
||||||
m_SelComponentBox = nullptr;
|
m_SelComponentBox = nullptr;
|
||||||
m_SelNetnameBox = nullptr;
|
m_SelNetnameBox = nullptr;
|
||||||
m_SelAperAttributesBox = nullptr;
|
m_SelAperAttributesBox = nullptr;
|
||||||
m_displayMode = 0;
|
m_displayMode = 0;
|
||||||
m_AboutTitle = "GerbView";
|
m_AboutTitle = "GerbView";
|
||||||
|
|
||||||
SHAPE_POLY_SET dummy; // A ugly trick to force the linker to include
|
SHAPE_POLY_SET dummy; // A ugly trick to force the linker to include
|
||||||
|
@ -115,7 +112,7 @@ GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent )
|
||||||
|
|
||||||
SetVisibleLayers( LSET::AllLayersMask() ); // All draw layers visible.
|
SetVisibleLayers( LSET::AllLayersMask() ); // All draw layers visible.
|
||||||
|
|
||||||
SetScreen( new GBR_SCREEN( GetPageSettings().GetSizeIU() ) );
|
SetScreen( new BASE_SCREEN( GetPageSettings().GetSizeIU() ) );
|
||||||
|
|
||||||
// Create the PCB_LAYER_WIDGET *after* SetLayout():
|
// Create the PCB_LAYER_WIDGET *after* SetLayout():
|
||||||
m_LayersManager = new GERBER_LAYER_WIDGET( this, GetCanvas() );
|
m_LayersManager = new GERBER_LAYER_WIDGET( this, GetCanvas() );
|
||||||
|
@ -300,35 +297,62 @@ void GERBVIEW_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
|
||||||
{
|
{
|
||||||
EDA_DRAW_FRAME::LoadSettings( aCfg );
|
EDA_DRAW_FRAME::LoadSettings( aCfg );
|
||||||
|
|
||||||
|
if( aCfg->m_Window.grid.sizes.empty() )
|
||||||
|
{
|
||||||
|
aCfg->m_Window.grid.sizes = { "100 mil",
|
||||||
|
"50 mil",
|
||||||
|
"25 mil",
|
||||||
|
"20 mil",
|
||||||
|
"10 mil",
|
||||||
|
"5 mil",
|
||||||
|
"2.5 mil",
|
||||||
|
"2 mil",
|
||||||
|
"1 mil",
|
||||||
|
"0.5 mil",
|
||||||
|
"0.2 mil",
|
||||||
|
"0.1 mil",
|
||||||
|
"5.0 mm",
|
||||||
|
"2.5 mm",
|
||||||
|
"1.0 mm",
|
||||||
|
"0.5 mm",
|
||||||
|
"0.25 mm",
|
||||||
|
"0.2 mm",
|
||||||
|
"0.1 mm",
|
||||||
|
"0.05 mm",
|
||||||
|
"0.025 mm",
|
||||||
|
"0.01 mm" };
|
||||||
|
}
|
||||||
|
|
||||||
|
if( aCfg->m_Window.zoom_factors.empty() )
|
||||||
|
{
|
||||||
|
aCfg->m_Window.zoom_factors = { 0.022,
|
||||||
|
0.035,
|
||||||
|
0.05,
|
||||||
|
0.08,
|
||||||
|
0.13,
|
||||||
|
0.22,
|
||||||
|
0.35,
|
||||||
|
0.6,
|
||||||
|
1.0,
|
||||||
|
2.2,
|
||||||
|
3.5,
|
||||||
|
5.0,
|
||||||
|
8.0,
|
||||||
|
13.0,
|
||||||
|
22.0,
|
||||||
|
35.0,
|
||||||
|
50.0,
|
||||||
|
80.0,
|
||||||
|
130.0,
|
||||||
|
220.0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
for( double& factor : aCfg->m_Window.zoom_factors )
|
||||||
|
factor = std::min( factor, MAX_ZOOM_FACTOR );
|
||||||
|
|
||||||
GERBVIEW_SETTINGS* cfg = dynamic_cast<GERBVIEW_SETTINGS*>( aCfg );
|
GERBVIEW_SETTINGS* cfg = dynamic_cast<GERBVIEW_SETTINGS*>( aCfg );
|
||||||
wxCHECK( cfg, /*void*/ );
|
wxCHECK( cfg, /*void*/ );
|
||||||
|
|
||||||
if( cfg->m_Window.grid.sizes.empty() )
|
|
||||||
{
|
|
||||||
cfg->m_Window.grid.sizes = { "100 mil",
|
|
||||||
"50 mil",
|
|
||||||
"25 mil",
|
|
||||||
"20 mil",
|
|
||||||
"10 mil",
|
|
||||||
"5 mil",
|
|
||||||
"2.5 mil",
|
|
||||||
"2 mil",
|
|
||||||
"1 mil",
|
|
||||||
"0.5 mil",
|
|
||||||
"0.2 mil",
|
|
||||||
"0.1 mil",
|
|
||||||
"5.0 mm",
|
|
||||||
"2.5 mm",
|
|
||||||
"1.0 mm",
|
|
||||||
"0.5 mm",
|
|
||||||
"0.25 mm",
|
|
||||||
"0.2 mm",
|
|
||||||
"0.1 mm",
|
|
||||||
"0.05 mm",
|
|
||||||
"0.025 mm",
|
|
||||||
"0.01 mm" };
|
|
||||||
}
|
|
||||||
|
|
||||||
SetElementVisibility( LAYER_WORKSHEET, cfg->m_Appearance.show_border_and_titleblock );
|
SetElementVisibility( LAYER_WORKSHEET, cfg->m_Appearance.show_border_and_titleblock );
|
||||||
|
|
||||||
PAGE_INFO pageInfo( wxT( "GERBER" ) );
|
PAGE_INFO pageInfo( wxT( "GERBER" ) );
|
||||||
|
@ -860,15 +884,9 @@ void GERBVIEW_FRAME::SetLayerColor( int aLayer, COLOR4D aColor )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int GERBVIEW_FRAME::GetActiveLayer()
|
|
||||||
{
|
|
||||||
return ( (GBR_SCREEN*) GetScreen() )->m_Active_Layer;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void GERBVIEW_FRAME::SetActiveLayer( int aLayer, bool doLayerWidgetUpdate )
|
void GERBVIEW_FRAME::SetActiveLayer( int aLayer, bool doLayerWidgetUpdate )
|
||||||
{
|
{
|
||||||
( (GBR_SCREEN*) GetScreen() )->m_Active_Layer = aLayer;
|
m_activeLayer = aLayer;
|
||||||
|
|
||||||
if( doLayerWidgetUpdate )
|
if( doLayerWidgetUpdate )
|
||||||
m_LayersManager->SelectLayer( aLayer );
|
m_LayersManager->SelectLayer( aLayer );
|
||||||
|
@ -886,10 +904,9 @@ void GERBVIEW_FRAME::SetActiveLayer( int aLayer, bool doLayerWidgetUpdate )
|
||||||
void GERBVIEW_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
|
void GERBVIEW_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
|
||||||
{
|
{
|
||||||
m_paper = aPageSettings;
|
m_paper = aPageSettings;
|
||||||
GBR_SCREEN* screen = static_cast<GBR_SCREEN*>( GetScreen() );
|
|
||||||
|
|
||||||
if( screen )
|
if( GetScreen() )
|
||||||
screen->InitDataPoints( aPageSettings.GetSizeIU() );
|
GetScreen()->InitDataPoints( aPageSettings.GetSizeIU() );
|
||||||
|
|
||||||
auto drawPanel = static_cast<GERBVIEW_DRAW_PANEL_GAL*>( GetCanvas() );
|
auto drawPanel = static_cast<GERBVIEW_DRAW_PANEL_GAL*>( GetCanvas() );
|
||||||
|
|
||||||
|
@ -897,7 +914,7 @@ void GERBVIEW_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
|
||||||
auto worksheet = new KIGFX::WS_PROXY_VIEW_ITEM( IU_PER_MILS, &GetPageSettings(),
|
auto worksheet = new KIGFX::WS_PROXY_VIEW_ITEM( IU_PER_MILS, &GetPageSettings(),
|
||||||
&Prj(), &GetTitleBlock() );
|
&Prj(), &GetTitleBlock() );
|
||||||
|
|
||||||
if( screen != NULL )
|
if( GetScreen() )
|
||||||
{
|
{
|
||||||
worksheet->SetSheetNumber( 1 );
|
worksheet->SetSheetNumber( 1 );
|
||||||
worksheet->SetSheetCount( 1 );
|
worksheet->SetSheetCount( 1 );
|
||||||
|
@ -987,9 +1004,7 @@ void GERBVIEW_FRAME::UpdateStatusBar()
|
||||||
{
|
{
|
||||||
EDA_DRAW_FRAME::UpdateStatusBar();
|
EDA_DRAW_FRAME::UpdateStatusBar();
|
||||||
|
|
||||||
GBR_SCREEN* screen = (GBR_SCREEN*) GetScreen();
|
if( !GetScreen() )
|
||||||
|
|
||||||
if( !screen )
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wxString line;
|
wxString line;
|
||||||
|
@ -997,8 +1012,8 @@ void GERBVIEW_FRAME::UpdateStatusBar()
|
||||||
|
|
||||||
if( GetShowPolarCoords() ) // display relative polar coordinates
|
if( GetShowPolarCoords() ) // display relative polar coordinates
|
||||||
{
|
{
|
||||||
double dx = cursorPos.x - screen->m_LocalOrigin.x;
|
double dx = cursorPos.x - GetScreen()->m_LocalOrigin.x;
|
||||||
double dy = cursorPos.y - screen->m_LocalOrigin.y;
|
double dy = cursorPos.y - GetScreen()->m_LocalOrigin.y;
|
||||||
double theta = RAD2DEG( atan2( -dy, dx ) );
|
double theta = RAD2DEG( atan2( -dy, dx ) );
|
||||||
double ro = hypot( dx, dy );
|
double ro = hypot( dx, dy );
|
||||||
wxString formatter;
|
wxString formatter;
|
||||||
|
@ -1051,8 +1066,8 @@ void GERBVIEW_FRAME::UpdateStatusBar()
|
||||||
if( !GetShowPolarCoords() ) // display relative cartesian coordinates
|
if( !GetShowPolarCoords() ) // display relative cartesian coordinates
|
||||||
{
|
{
|
||||||
// Display relative coordinates:
|
// Display relative coordinates:
|
||||||
dXpos = To_User_Unit( GetUserUnits(), cursorPos.x - screen->m_LocalOrigin.x );
|
dXpos = To_User_Unit( GetUserUnits(), cursorPos.x - GetScreen()->m_LocalOrigin.x );
|
||||||
dYpos = To_User_Unit( GetUserUnits(), cursorPos.y - screen->m_LocalOrigin.y );
|
dYpos = To_User_Unit( GetUserUnits(), cursorPos.y - GetScreen()->m_LocalOrigin.y );
|
||||||
|
|
||||||
// We already decided the formatter above
|
// We already decided the formatter above
|
||||||
line.Printf( relformatter, dXpos, dYpos, hypot( dXpos, dYpos ) );
|
line.Printf( relformatter, dXpos, dYpos, hypot( dXpos, dYpos ) );
|
||||||
|
@ -1063,12 +1078,6 @@ void GERBVIEW_FRAME::UpdateStatusBar()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const wxString GERBVIEW_FRAME::GetZoomLevelIndicator() const
|
|
||||||
{
|
|
||||||
return EDA_DRAW_FRAME::GetZoomLevelIndicator();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
GERBER_FILE_IMAGE* GERBVIEW_FRAME::GetGbrImage( int aIdx ) const
|
GERBER_FILE_IMAGE* GERBVIEW_FRAME::GetGbrImage( int aIdx ) const
|
||||||
{
|
{
|
||||||
return m_gerberLayout->GetImagesList()->GetGbrImage( aIdx );
|
return m_gerberLayout->GetImagesList()->GetGbrImage( aIdx );
|
||||||
|
@ -1184,23 +1193,19 @@ void GERBVIEW_FRAME::updateZoomSelectBox()
|
||||||
if( m_zoomSelectBox == NULL )
|
if( m_zoomSelectBox == NULL )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wxString msg;
|
double zoom = GetCanvas()->GetGAL()->GetZoomFactor() / ZOOM_COEFF;
|
||||||
|
|
||||||
m_zoomSelectBox->Clear();
|
m_zoomSelectBox->Clear();
|
||||||
m_zoomSelectBox->Append( _( "Zoom Auto" ) );
|
m_zoomSelectBox->Append( _( "Zoom Auto" ) );
|
||||||
m_zoomSelectBox->SetSelection( 0 );
|
m_zoomSelectBox->SetSelection( 0 );
|
||||||
|
|
||||||
for( unsigned i = 0; i < GetScreen()->m_ZoomList.size(); ++i )
|
for( unsigned i = 0; i < config()->m_Window.zoom_factors.size(); ++i )
|
||||||
{
|
{
|
||||||
msg = _( "Zoom " );
|
double current = config()->m_Window.zoom_factors[i];
|
||||||
|
|
||||||
double level = m_zoomLevelCoeff / (double)GetScreen()->m_ZoomList[i];
|
m_zoomSelectBox->Append( wxString::Format( _( "Zoom %.2f" ), current ) );
|
||||||
wxString value = wxString::Format( wxT( "%.2f" ), level );
|
|
||||||
msg += value;
|
|
||||||
|
|
||||||
m_zoomSelectBox->Append( msg );
|
if( zoom == current )
|
||||||
|
|
||||||
if( GetScreen()->GetZoom() == GetScreen()->m_ZoomList[i] )
|
|
||||||
m_zoomSelectBox->SetSelection( i + 1 );
|
m_zoomSelectBox->SetSelection( i + 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,9 +30,9 @@
|
||||||
#include <gerbview.h>
|
#include <gerbview.h>
|
||||||
#include <convert_to_biu.h>
|
#include <convert_to_biu.h>
|
||||||
#include <gbr_layout.h>
|
#include <gbr_layout.h>
|
||||||
#include <gbr_screen.h>
|
|
||||||
#include <page_info.h>
|
#include <page_info.h>
|
||||||
#include <gbr_display_options.h>
|
#include <gbr_display_options.h>
|
||||||
|
#include <undo_redo_container.h>
|
||||||
|
|
||||||
#define NO_AVAILABLE_LAYERS UNDEFINED_LAYER
|
#define NO_AVAILABLE_LAYERS UNDEFINED_LAYER
|
||||||
|
|
||||||
|
@ -55,6 +55,7 @@ class REPORTER;
|
||||||
class GERBVIEW_FRAME : public EDA_DRAW_FRAME // PCB_BASE_FRAME
|
class GERBVIEW_FRAME : public EDA_DRAW_FRAME // PCB_BASE_FRAME
|
||||||
{
|
{
|
||||||
GBR_LAYOUT* m_gerberLayout;
|
GBR_LAYOUT* m_gerberLayout;
|
||||||
|
int m_activeLayer;
|
||||||
wxPoint m_grid_origin;
|
wxPoint m_grid_origin;
|
||||||
PAGE_INFO m_paper; // used only to show paper limits to screen
|
PAGE_INFO m_paper; // used only to show paper limits to screen
|
||||||
GBR_DISPLAY_OPTIONS m_DisplayOptions;
|
GBR_DISPLAY_OPTIONS m_DisplayOptions;
|
||||||
|
@ -221,14 +222,6 @@ public:
|
||||||
void ReCreateMenuBar() override;
|
void ReCreateMenuBar() override;
|
||||||
void UpdateStatusBar() override;
|
void UpdateStatusBar() override;
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetZoomLevelIndicator
|
|
||||||
* returns a human readable value which can be displayed as zoom
|
|
||||||
* level indicator in dialogs.
|
|
||||||
* Virtual from the base class
|
|
||||||
*/
|
|
||||||
const wxString GetZoomLevelIndicator() const override;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetDisplayMode
|
* Function GetDisplayMode
|
||||||
* @return 0 for fast mode (not fully compatible with negative objects)
|
* @return 0 for fast mode (not fully compatible with negative objects)
|
||||||
|
@ -327,7 +320,7 @@ public:
|
||||||
* Function SetActiveLayer
|
* Function SetActiveLayer
|
||||||
* returns the active layer
|
* returns the active layer
|
||||||
*/
|
*/
|
||||||
int GetActiveLayer();
|
int GetActiveLayer() const { return m_activeLayer; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function getNextAvailableLayer
|
* Function getNextAvailableLayer
|
||||||
|
|
|
@ -55,8 +55,6 @@ private:
|
||||||
*/
|
*/
|
||||||
wxPoint m_crossHairPosition;
|
wxPoint m_crossHairPosition;
|
||||||
|
|
||||||
double m_Zoom; ///< Current zoom coefficient.
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static wxString m_PageLayoutDescrFileName; ///< the name of the page layout descr file,
|
static wxString m_PageLayoutDescrFileName; ///< the name of the page layout descr file,
|
||||||
///< or emty to used the default pagelayout
|
///< or emty to used the default pagelayout
|
||||||
|
@ -87,11 +85,15 @@ public:
|
||||||
int m_ScreenNumber;
|
int m_ScreenNumber;
|
||||||
int m_NumberOfScreens;
|
int m_NumberOfScreens;
|
||||||
|
|
||||||
std::vector<double> m_ZoomList; ///< standard zoom (i.e. scale) coefficients.
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BASE_SCREEN( EDA_ITEM* aParent, KICAD_T aType = SCREEN_T );
|
BASE_SCREEN( EDA_ITEM* aParent, KICAD_T aType = SCREEN_T );
|
||||||
|
|
||||||
|
BASE_SCREEN( const wxSize& aPageSizeIU, KICAD_T aType = SCREEN_T ) :
|
||||||
|
BASE_SCREEN( nullptr, aType )
|
||||||
|
{
|
||||||
|
InitDataPoints( aPageSizeIU );
|
||||||
|
}
|
||||||
|
|
||||||
BASE_SCREEN( KICAD_T aType = SCREEN_T ) :
|
BASE_SCREEN( KICAD_T aType = SCREEN_T ) :
|
||||||
BASE_SCREEN( nullptr, aType )
|
BASE_SCREEN( nullptr, aType )
|
||||||
{}
|
{}
|
||||||
|
@ -114,7 +116,8 @@ public:
|
||||||
* old commands this will empty the list of commands.
|
* old commands this will empty the list of commands.
|
||||||
* Commands are deleted from the older to the last.
|
* Commands are deleted from the older to the last.
|
||||||
*/
|
*/
|
||||||
virtual void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 ) = 0;
|
virtual void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 )
|
||||||
|
{ }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function ClearUndoRedoList
|
* Function ClearUndoRedoList
|
||||||
|
@ -184,40 +187,6 @@ public:
|
||||||
bool IsModify() const { return m_FlagModified; }
|
bool IsModify() const { return m_FlagModified; }
|
||||||
bool IsSave() const { return m_FlagSave; }
|
bool IsSave() const { return m_FlagSave; }
|
||||||
|
|
||||||
|
|
||||||
//----<zoom stuff>---------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetZoom
|
|
||||||
* returns the current "zoom factor", which is a measure of
|
|
||||||
* "internal units per device unit", or "world units per device unit".
|
|
||||||
* A device unit is typically a pixel.
|
|
||||||
*/
|
|
||||||
double GetZoom() const { return m_Zoom; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function SetZoom
|
|
||||||
* adjusts the current zoom factor.
|
|
||||||
*
|
|
||||||
* @param iu_per_du is the number of internal units (world units) per
|
|
||||||
* device units (pixels typically).
|
|
||||||
*/
|
|
||||||
virtual bool SetZoom( double iu_per_du );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetMaxAllowedZoom
|
|
||||||
* returns the maximum allowed zoom factor, which was established as the last entry
|
|
||||||
* in m_ZoomList.
|
|
||||||
*/
|
|
||||||
double GetMaxAllowedZoom() const { return m_ZoomList.size() ? *m_ZoomList.rbegin() : 1.0; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetMinAllowedZoom
|
|
||||||
* returns the minimum allowed zoom factor, which was established as the first entry
|
|
||||||
* in m_ZoomList.
|
|
||||||
*/
|
|
||||||
double GetMinAllowedZoom() const { return m_ZoomList.size() ? *m_ZoomList.begin() : 1.0; }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetClass
|
* Function GetClass
|
||||||
* returns the class name.
|
* returns the class name.
|
||||||
|
|
|
@ -161,12 +161,6 @@ public:
|
||||||
wxASSERT( false );
|
wxASSERT( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetLegacyZoom()
|
|
||||||
* Returns current view scale converted to zoom value used by the legacy canvas.
|
|
||||||
*/
|
|
||||||
double GetLegacyZoom() const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetParentEDAFrame()
|
* Function GetParentEDAFrame()
|
||||||
* Returns parent EDA_DRAW_FRAME, if available or NULL otherwise.
|
* Returns parent EDA_DRAW_FRAME, if available or NULL otherwise.
|
||||||
|
|
|
@ -122,4 +122,55 @@ constexpr inline double Iu2Millimeter( int iu )
|
||||||
constexpr int ARC_LOW_DEF = Millimeter2iu( 0.02 );
|
constexpr int ARC_LOW_DEF = Millimeter2iu( 0.02 );
|
||||||
constexpr int ARC_HIGH_DEF = Millimeter2iu( 0.005 );
|
constexpr int ARC_HIGH_DEF = Millimeter2iu( 0.005 );
|
||||||
|
|
||||||
|
/* ZOOM LIMITS
|
||||||
|
|
||||||
|
The largest distance that wx can support is INT_MAX, since it represents
|
||||||
|
distance often in a wxCoord or wxSize. As a scalar, a distance is always
|
||||||
|
positive. On most machines which run KiCad, int is 32 bits and INT_MAX is
|
||||||
|
2147483647. The most difficult distance for a virtual (world) cartesian
|
||||||
|
space is the hypotenuse, or diagonal measurement at a 45 degree angle. This
|
||||||
|
puts the most stress on the distance magnitude within the bounded virtual
|
||||||
|
space. So if we allow this distance to be our constraint of <= INT_MAX, this
|
||||||
|
constraint then propagates to the maximum distance in X and in Y that can be
|
||||||
|
supported on each axis. Remember that the hypotenuse of a 1x1 square is
|
||||||
|
sqrt( 1x1 + 1x1 ) = sqrt(2) = 1.41421356.
|
||||||
|
|
||||||
|
hypotenuse of any square = sqrt(2) * deltaX;
|
||||||
|
|
||||||
|
Let maximum supported hypotenuse be INT_MAX, then:
|
||||||
|
|
||||||
|
MAX_AXIS = INT_MAX / sqrt(2) = 2147483647 / 1.41421356 = 1518500251
|
||||||
|
|
||||||
|
This maximum distance is imposed by wxWidgets, not by KiCad. The imposition
|
||||||
|
comes in the form of the data structures used in the graphics API at the
|
||||||
|
wxDC level. Obviously when we are not interacting with wx we can use double
|
||||||
|
to compute distances larger than this. For example the computation of the
|
||||||
|
total length of a net, can and should be done in double, since it might
|
||||||
|
actually be longer than a single diagonal line.
|
||||||
|
|
||||||
|
The next choice is what to use for internal units (IU), sometimes called
|
||||||
|
world units. If nanometers, then the virtual space must be limited to
|
||||||
|
about 1.5 x 1.5 meters square. This is 1518500251 divided by 1e9 nm/meter.
|
||||||
|
|
||||||
|
The maximum zoom factor then depends on the client window size. If we ask
|
||||||
|
wx to handle something outside INT_MIN to INT_MAX, there are unreported
|
||||||
|
problems in the non-Debug build because wxRound() goes silent.
|
||||||
|
|
||||||
|
Let:
|
||||||
|
const double MAX_AXIS = 1518500251;
|
||||||
|
|
||||||
|
Then a maximum zoom factor for a screen of 1920 pixels wide is
|
||||||
|
1518500251 / 1920 = 790885.
|
||||||
|
|
||||||
|
The largest zoom factor allowed is therefore ~ 300 (which computes to 762000).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define MAX_ZOOM_FACTOR 300.0
|
||||||
|
|
||||||
|
// Adjusted to display zoom level ~ 1 when the screen shows a 1:1 image.
|
||||||
|
// Obviously depends on the monitor, but this is an acceptable value.
|
||||||
|
#define ZOOM_COEFF 1.1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // CONVERT_TO_BIU_H_
|
#endif // CONVERT_TO_BIU_H_
|
||||||
|
|
|
@ -84,9 +84,6 @@ protected:
|
||||||
COLOR4D m_gridColor; // Grid color
|
COLOR4D m_gridColor; // Grid color
|
||||||
COLOR4D m_drawBgColor; // The background color of the draw canvas; BLACK for
|
COLOR4D m_drawBgColor; // The background color of the draw canvas; BLACK for
|
||||||
// Pcbnew, BLACK or WHITE for eeschema
|
// Pcbnew, BLACK or WHITE for eeschema
|
||||||
double m_zoomLevelCoeff; // A suitable value to convert the internal zoom
|
|
||||||
// scaling factor to a zoom level value which rougly
|
|
||||||
// gives 1.0 when the board/schematic is at scale = 1
|
|
||||||
int m_UndoRedoCountMax; // Default Undo/Redo command Max depth, to be handed
|
int m_UndoRedoCountMax; // Default Undo/Redo command Max depth, to be handed
|
||||||
// to screens
|
// to screens
|
||||||
bool m_PolarCoords; // For those frames that support polar coordinates
|
bool m_PolarCoords; // For those frames that support polar coordinates
|
||||||
|
@ -245,17 +242,8 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a human readable value for display in dialogs.
|
* Return a human readable value for display in dialogs.
|
||||||
* this can be a percentage or other indicator.
|
|
||||||
* it is virtual because it could be different for pcbnew, gerbview or eeschema
|
|
||||||
* (different internal units and different purposes)
|
|
||||||
* note also adjust m_zoomLevelCoeff is the way to adjust the displayed value
|
|
||||||
*/
|
*/
|
||||||
virtual const wxString GetZoomLevelIndicator() const;
|
const wxString GetZoomLevelIndicator() const;
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the coefficient to convert internal display scale factor to zoom level.
|
|
||||||
*/
|
|
||||||
inline double GetZoomLevelCoeff() const { return m_zoomLevelCoeff; }
|
|
||||||
|
|
||||||
void EraseMsgBox();
|
void EraseMsgBox();
|
||||||
|
|
||||||
|
@ -328,8 +316,6 @@ public:
|
||||||
*/
|
*/
|
||||||
void FocusOnLocation( const wxPoint& aPos );
|
void FocusOnLocation( const wxPoint& aPos );
|
||||||
|
|
||||||
double GetZoom();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function CreateBasicMenu
|
* Function CreateBasicMenu
|
||||||
*
|
*
|
||||||
|
|
28
include/id.h
28
include/id.h
|
@ -165,34 +165,6 @@ enum main_id
|
||||||
ID_POPUP_ZOOM_END_RANGE, // last zoom id
|
ID_POPUP_ZOOM_END_RANGE, // last zoom id
|
||||||
|
|
||||||
ID_ON_GRID_SELECT,
|
ID_ON_GRID_SELECT,
|
||||||
ID_POPUP_GRID_SELECT,
|
|
||||||
ID_POPUP_GRID_FIRST,
|
|
||||||
ID_POPUP_GRID_LEVEL_1000 = ID_POPUP_GRID_FIRST, // These must be in same order as menu
|
|
||||||
ID_POPUP_GRID_LEVEL_500,
|
|
||||||
ID_POPUP_GRID_LEVEL_250,
|
|
||||||
ID_POPUP_GRID_LEVEL_200,
|
|
||||||
ID_POPUP_GRID_LEVEL_100,
|
|
||||||
ID_POPUP_GRID_LEVEL_50,
|
|
||||||
ID_POPUP_GRID_LEVEL_25,
|
|
||||||
ID_POPUP_GRID_LEVEL_20,
|
|
||||||
ID_POPUP_GRID_LEVEL_10,
|
|
||||||
ID_POPUP_GRID_LEVEL_5,
|
|
||||||
ID_POPUP_GRID_LEVEL_2,
|
|
||||||
ID_POPUP_GRID_LEVEL_1,
|
|
||||||
ID_POPUP_GRID_LEVEL_5MM,
|
|
||||||
ID_POPUP_GRID_LEVEL_2_5MM,
|
|
||||||
ID_POPUP_GRID_LEVEL_1MM,
|
|
||||||
ID_POPUP_GRID_LEVEL_0_5MM,
|
|
||||||
ID_POPUP_GRID_LEVEL_0_25MM,
|
|
||||||
ID_POPUP_GRID_LEVEL_0_2MM,
|
|
||||||
ID_POPUP_GRID_LEVEL_0_1MM,
|
|
||||||
ID_POPUP_GRID_LEVEL_0_0_5MM,
|
|
||||||
ID_POPUP_GRID_LEVEL_0_0_25MM,
|
|
||||||
ID_POPUP_GRID_LEVEL_0_0_1MM,
|
|
||||||
ID_POPUP_GRID_USER,
|
|
||||||
ID_POPUP_GRID_SEPARATOR,
|
|
||||||
ID_POPUP_GRID_SETTINGS,
|
|
||||||
|
|
||||||
ID_GRID_SETTINGS,
|
ID_GRID_SETTINGS,
|
||||||
|
|
||||||
ID_ZOOM_BEGIN,
|
ID_ZOOM_BEGIN,
|
||||||
|
|
|
@ -227,12 +227,6 @@ public:
|
||||||
|
|
||||||
void UpdateGridSelectBox();
|
void UpdateGridSelectBox();
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetZoomLevelIndicator
|
|
||||||
* returns a human readable value for display in dialogs.
|
|
||||||
*/
|
|
||||||
const wxString GetZoomLevelIndicator() const override;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows the 3D view frame.
|
* Shows the 3D view frame.
|
||||||
* If it does not exist, it is created.
|
* If it does not exist, it is created.
|
||||||
|
|
|
@ -63,6 +63,8 @@ struct WINDOW_SETTINGS
|
||||||
int pos_x;
|
int pos_x;
|
||||||
int pos_y;
|
int pos_y;
|
||||||
|
|
||||||
|
std::vector<double> zoom_factors;
|
||||||
|
|
||||||
CURSOR_SETTINGS cursor;
|
CURSOR_SETTINGS cursor;
|
||||||
GRID_SETTINGS grid;
|
GRID_SETTINGS grid;
|
||||||
};
|
};
|
||||||
|
|
|
@ -147,7 +147,6 @@ void PLEDITOR_PRINTOUT::GetPageInfo( int* minPage, int* maxPage,
|
||||||
*/
|
*/
|
||||||
void PLEDITOR_PRINTOUT::PrintPage( int aPageNum )
|
void PLEDITOR_PRINTOUT::PrintPage( int aPageNum )
|
||||||
{
|
{
|
||||||
int oldZoom;
|
|
||||||
wxPoint tmp_startvisu;
|
wxPoint tmp_startvisu;
|
||||||
wxSize pageSizeIU; // Page size in internal units
|
wxSize pageSizeIU; // Page size in internal units
|
||||||
wxPoint old_org;
|
wxPoint old_org;
|
||||||
|
@ -155,9 +154,8 @@ void PLEDITOR_PRINTOUT::PrintPage( int aPageNum )
|
||||||
wxDC* dc = GetDC();
|
wxDC* dc = GetDC();
|
||||||
PL_EDITOR_SCREEN* screen = m_parent->GetScreen();
|
PL_EDITOR_SCREEN* screen = m_parent->GetScreen();
|
||||||
|
|
||||||
// Save current scale factor, offsets, and clip box.
|
// Save current offsets and clip box.
|
||||||
tmp_startvisu = screen->m_StartVisu;
|
tmp_startvisu = screen->m_StartVisu;
|
||||||
oldZoom = screen->GetZoom();
|
|
||||||
old_org = screen->m_DrawOrg;
|
old_org = screen->m_DrawOrg;
|
||||||
|
|
||||||
// Change scale factor and offset to print the whole page.
|
// Change scale factor and offset to print the whole page.
|
||||||
|
@ -205,7 +203,6 @@ void PLEDITOR_PRINTOUT::PrintPage( int aPageNum )
|
||||||
|
|
||||||
screen->m_StartVisu = tmp_startvisu;
|
screen->m_StartVisu = tmp_startvisu;
|
||||||
screen->m_DrawOrg = old_org;
|
screen->m_DrawOrg = old_org;
|
||||||
screen->SetZoom( oldZoom );
|
|
||||||
|
|
||||||
// PrintWorkSheet clears the current display list when calling BuildWorkSheetGraphicList()
|
// PrintWorkSheet clears the current display list when calling BuildWorkSheetGraphicList()
|
||||||
// So rebuild and redraw it.
|
// So rebuild and redraw it.
|
||||||
|
|
|
@ -85,10 +85,6 @@ PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
KICAD_DEFAULT_DRAWFRAME_STYLE, PL_EDITOR_FRAME_NAME )
|
KICAD_DEFAULT_DRAWFRAME_STYLE, PL_EDITOR_FRAME_NAME )
|
||||||
{
|
{
|
||||||
m_userUnits = EDA_UNITS::MILLIMETRES;
|
m_userUnits = EDA_UNITS::MILLIMETRES;
|
||||||
m_zoomLevelCoeff = 290.0; // Adjusted to roughly displays zoom level = 1
|
|
||||||
// when the screen shows a 1:1 image
|
|
||||||
// obviously depends on the monitor,
|
|
||||||
// but this is an acceptable value
|
|
||||||
|
|
||||||
m_showBorderAndTitleBlock = true; // true for reference drawings.
|
m_showBorderAndTitleBlock = true; // true for reference drawings.
|
||||||
m_originSelectChoice = 0;
|
m_originSelectChoice = 0;
|
||||||
|
@ -180,7 +176,6 @@ PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
|
|
||||||
m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" ).Center() );
|
m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" ).Center() );
|
||||||
|
|
||||||
GetCanvas()->GetView()->SetScale( GetZoomLevelCoeff() / GetScreen()->GetZoom() );
|
|
||||||
ActivateGalCanvas();
|
ActivateGalCanvas();
|
||||||
|
|
||||||
// Call Update() to fix all pane default sizes, especially the "InfoBar" pane before
|
// Call Update() to fix all pane default sizes, especially the "InfoBar" pane before
|
||||||
|
@ -423,18 +418,45 @@ void PL_EDITOR_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
|
||||||
{
|
{
|
||||||
EDA_DRAW_FRAME::LoadSettings( aCfg );
|
EDA_DRAW_FRAME::LoadSettings( aCfg );
|
||||||
|
|
||||||
|
if( aCfg->m_Window.grid.sizes.empty() )
|
||||||
|
{
|
||||||
|
aCfg->m_Window.grid.sizes = { "1.0 mm",
|
||||||
|
"0.50 mm",
|
||||||
|
"0.25 mm",
|
||||||
|
"0.20 mm",
|
||||||
|
"0.10 mm" };
|
||||||
|
}
|
||||||
|
|
||||||
|
if( aCfg->m_Window.zoom_factors.empty() )
|
||||||
|
{
|
||||||
|
aCfg->m_Window.zoom_factors = { 0.022,
|
||||||
|
0.035,
|
||||||
|
0.05,
|
||||||
|
0.08,
|
||||||
|
0.13,
|
||||||
|
0.22,
|
||||||
|
0.35,
|
||||||
|
0.6,
|
||||||
|
1.0,
|
||||||
|
2.2,
|
||||||
|
3.5,
|
||||||
|
5.0,
|
||||||
|
8.0,
|
||||||
|
13.0,
|
||||||
|
22.0,
|
||||||
|
35.0,
|
||||||
|
50.0,
|
||||||
|
80.0,
|
||||||
|
130.0,
|
||||||
|
220.0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
for( double& factor : aCfg->m_Window.zoom_factors )
|
||||||
|
factor = std::min( factor, MAX_ZOOM_FACTOR );
|
||||||
|
|
||||||
PL_EDITOR_SETTINGS* cfg = dynamic_cast<PL_EDITOR_SETTINGS*>( aCfg );
|
PL_EDITOR_SETTINGS* cfg = dynamic_cast<PL_EDITOR_SETTINGS*>( aCfg );
|
||||||
wxCHECK( cfg, /*void*/ );
|
wxCHECK( cfg, /*void*/ );
|
||||||
|
|
||||||
if( cfg->m_Window.grid.sizes.empty() )
|
|
||||||
{
|
|
||||||
cfg->m_Window.grid.sizes = { "1.0 mm",
|
|
||||||
"0.50 mm",
|
|
||||||
"0.25 mm",
|
|
||||||
"0.20 mm",
|
|
||||||
"0.10 mm" };
|
|
||||||
}
|
|
||||||
|
|
||||||
m_propertiesFrameWidth = cfg->m_PropertiesFrameWidth;
|
m_propertiesFrameWidth = cfg->m_PropertiesFrameWidth;
|
||||||
m_originSelectChoice = cfg->m_CornerOrigin;
|
m_originSelectChoice = cfg->m_CornerOrigin;
|
||||||
|
|
||||||
|
@ -820,8 +842,3 @@ void PL_EDITOR_FRAME::OnNewPageLayout()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const wxString PL_EDITOR_FRAME::GetZoomLevelIndicator() const
|
|
||||||
{
|
|
||||||
return EDA_DRAW_FRAME::GetZoomLevelIndicator();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -122,12 +122,6 @@ public:
|
||||||
const PAGE_INFO& GetPageSettings () const override;
|
const PAGE_INFO& GetPageSettings () const override;
|
||||||
const wxSize GetPageSizeIU() const override;
|
const wxSize GetPageSizeIU() const override;
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetZoomLevelIndicator
|
|
||||||
* returns a human readable value which can be displayed in dialogs.
|
|
||||||
*/
|
|
||||||
const wxString GetZoomLevelIndicator() const override;
|
|
||||||
|
|
||||||
PL_DRAW_PANEL_GAL* GetCanvas() const override;
|
PL_DRAW_PANEL_GAL* GetCanvas() const override;
|
||||||
|
|
||||||
PL_EDITOR_SCREEN* GetScreen() const override
|
PL_EDITOR_SCREEN* GetScreen() const override
|
||||||
|
|
|
@ -25,49 +25,14 @@
|
||||||
|
|
||||||
#include <fctsys.h>
|
#include <fctsys.h>
|
||||||
#include <pl_editor_screen.h>
|
#include <pl_editor_screen.h>
|
||||||
#include <base_units.h>
|
|
||||||
|
|
||||||
|
|
||||||
#define ZOOM_FACTOR( x ) ( x * IU_PER_MM / 1000 )
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
Default zoom values.
|
|
||||||
Roughly a 1.5 progression.
|
|
||||||
*/
|
|
||||||
static const double pl_editorZoomList[] =
|
|
||||||
{
|
|
||||||
ZOOM_FACTOR( 10.0 ), // Zoom in
|
|
||||||
ZOOM_FACTOR( 15.0 ),
|
|
||||||
ZOOM_FACTOR( 22.0 ),
|
|
||||||
ZOOM_FACTOR( 35.0 ),
|
|
||||||
ZOOM_FACTOR( 50.0 ),
|
|
||||||
ZOOM_FACTOR( 80.0 ),
|
|
||||||
ZOOM_FACTOR( 120.0 ),
|
|
||||||
ZOOM_FACTOR( 160.0 ),
|
|
||||||
ZOOM_FACTOR( 230.0 ),
|
|
||||||
ZOOM_FACTOR( 290.0 ),
|
|
||||||
ZOOM_FACTOR( 380.0 ),
|
|
||||||
ZOOM_FACTOR( 500.0 ),
|
|
||||||
ZOOM_FACTOR( 750.0 ),
|
|
||||||
ZOOM_FACTOR( 1000.0 ),
|
|
||||||
ZOOM_FACTOR( 1500.0 ),
|
|
||||||
ZOOM_FACTOR( 2000.0 ),
|
|
||||||
ZOOM_FACTOR( 3000.0 ),
|
|
||||||
ZOOM_FACTOR( 4500.0 ), // Zoom out
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
PL_EDITOR_SCREEN::PL_EDITOR_SCREEN( const wxSize& aPageSizeIU ) :
|
PL_EDITOR_SCREEN::PL_EDITOR_SCREEN( const wxSize& aPageSizeIU ) :
|
||||||
BASE_SCREEN( SCREEN_T )
|
BASE_SCREEN( aPageSizeIU )
|
||||||
{
|
{
|
||||||
for( double zoom : pl_editorZoomList )
|
|
||||||
m_ZoomList.push_back( zoom );
|
|
||||||
|
|
||||||
// pl_editor uses the same frame position as schematic and board editors
|
// pl_editor uses the same frame position as schematic and board editors
|
||||||
m_Center = false;
|
m_Center = false;
|
||||||
|
|
||||||
InitDataPoints( aPageSizeIU );
|
|
||||||
m_NumberOfScreens = 2;
|
m_NumberOfScreens = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -219,7 +219,6 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent,
|
||||||
|
|
||||||
m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" ).Center() );
|
m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" ).Center() );
|
||||||
|
|
||||||
GetCanvas()->GetView()->SetScale( GetZoomLevelCoeff() / GetScreen()->GetZoom() );
|
|
||||||
ActivateGalCanvas();
|
ActivateGalCanvas();
|
||||||
|
|
||||||
// Call Update() to fix all pane default sizes, especially the "InfoBar" pane before
|
// Call Update() to fix all pane default sizes, especially the "InfoBar" pane before
|
||||||
|
|
|
@ -263,7 +263,6 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
|
||||||
// The canvas should not steal the focus from the list boxes
|
// The canvas should not steal the focus from the list boxes
|
||||||
GetCanvas()->SetCanFocus( false );
|
GetCanvas()->SetCanFocus( false );
|
||||||
GetCanvas()->GetGAL()->SetAxesEnabled( true );
|
GetCanvas()->GetGAL()->SetAxesEnabled( true );
|
||||||
GetCanvas()->GetView()->SetScale( GetZoomLevelCoeff() / GetScreen()->GetZoom() );
|
|
||||||
ActivateGalCanvas();
|
ActivateGalCanvas();
|
||||||
|
|
||||||
// Restore last zoom. (If auto-zooming we'll adjust when we load the footprint.)
|
// Restore last zoom. (If auto-zooming we'll adjust when we load the footprint.)
|
||||||
|
|
|
@ -211,7 +211,6 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, wxWindow* aParent
|
||||||
galOpts.m_forceDisplayCursor = true;
|
galOpts.m_forceDisplayCursor = true;
|
||||||
galOpts.m_axesEnabled = true;
|
galOpts.m_axesEnabled = true;
|
||||||
|
|
||||||
GetCanvas()->GetView()->SetScale( GetZoomLevelCoeff() / GetScreen()->GetZoom() );
|
|
||||||
ActivateGalCanvas();
|
ActivateGalCanvas();
|
||||||
updateView();
|
updateView();
|
||||||
|
|
||||||
|
|
|
@ -26,9 +26,7 @@
|
||||||
|
|
||||||
#include <fctsys.h>
|
#include <fctsys.h>
|
||||||
#include <kiface_i.h>
|
#include <kiface_i.h>
|
||||||
#include <eda_base_frame.h>
|
|
||||||
#include <confirm.h>
|
#include <confirm.h>
|
||||||
#include <kiface_i.h>
|
|
||||||
#include <dialog_helpers.h>
|
#include <dialog_helpers.h>
|
||||||
#include <pcb_base_frame.h>
|
#include <pcb_base_frame.h>
|
||||||
#include <base_units.h>
|
#include <base_units.h>
|
||||||
|
@ -40,12 +38,10 @@
|
||||||
#include <fp_lib_table.h>
|
#include <fp_lib_table.h>
|
||||||
#include <pcbnew_id.h>
|
#include <pcbnew_id.h>
|
||||||
#include <class_board.h>
|
#include <class_board.h>
|
||||||
#include <class_track.h>
|
|
||||||
#include <class_module.h>
|
#include <class_module.h>
|
||||||
#include <class_drawsegment.h>
|
#include <class_drawsegment.h>
|
||||||
#include <collectors.h>
|
#include <collectors.h>
|
||||||
#include <pcb_draw_panel_gal.h>
|
#include <pcb_draw_panel_gal.h>
|
||||||
#include <pcb_view.h>
|
|
||||||
#include <math/vector2d.h>
|
#include <math/vector2d.h>
|
||||||
#include <trigo.h>
|
#include <trigo.h>
|
||||||
#include <pcb_painter.h>
|
#include <pcb_painter.h>
|
||||||
|
@ -54,7 +50,6 @@
|
||||||
#include <tool/tool_manager.h>
|
#include <tool/tool_manager.h>
|
||||||
#include <tool/tool_dispatcher.h>
|
#include <tool/tool_dispatcher.h>
|
||||||
#include <tools/pcb_actions.h>
|
#include <tools/pcb_actions.h>
|
||||||
#include <pcbnew_settings.h>
|
|
||||||
#include <tool/grid_menu.h>
|
#include <tool/grid_menu.h>
|
||||||
|
|
||||||
wxDEFINE_EVENT( BOARD_CHANGED, wxCommandEvent );
|
wxDEFINE_EVENT( BOARD_CHANGED, wxCommandEvent );
|
||||||
|
@ -71,11 +66,6 @@ PCB_BASE_FRAME::PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
|
||||||
EDA_DRAW_FRAME( aKiway, aParent, aFrameType, aTitle, aPos, aSize, aStyle, aFrameName ),
|
EDA_DRAW_FRAME( aKiway, aParent, aFrameType, aTitle, aPos, aSize, aStyle, aFrameName ),
|
||||||
m_Pcb( nullptr )
|
m_Pcb( nullptr )
|
||||||
{
|
{
|
||||||
m_zoomLevelCoeff = 11.0 * IU_PER_MILS; // Adjusted to roughly displays zoom level = 1
|
|
||||||
// when the screen shows a 1:1 image
|
|
||||||
// obviously depends on the monitor,
|
|
||||||
// but this is an acceptable value
|
|
||||||
|
|
||||||
m_Settings = static_cast<PCBNEW_SETTINGS*>( Kiface().KifaceSettings() );
|
m_Settings = static_cast<PCBNEW_SETTINGS*>( Kiface().KifaceSettings() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -467,11 +457,11 @@ void PCB_BASE_FRAME::OnUpdateSelectZoom( wxUpdateUIEvent& aEvent )
|
||||||
int current = 0; // display Auto if no match found
|
int current = 0; // display Auto if no match found
|
||||||
|
|
||||||
// check for a match within 1%
|
// check for a match within 1%
|
||||||
double zoom = GetCanvas()->GetLegacyZoom();
|
double zoom = GetCanvas()->GetGAL()->GetZoomFactor() / ZOOM_COEFF;
|
||||||
|
|
||||||
for( unsigned i = 0; i < GetScreen()->m_ZoomList.size(); i++ )
|
for( unsigned i = 0; i < config()->m_Window.zoom_factors.size(); i++ )
|
||||||
{
|
{
|
||||||
if( std::fabs( zoom - GetScreen()->m_ZoomList[i] ) < ( zoom / 100.0 ) )
|
if( std::fabs( zoom - config()->m_Window.zoom_factors[i] ) < ( zoom / 100.0 ) )
|
||||||
{
|
{
|
||||||
current = i + 1;
|
current = i + 1;
|
||||||
break;
|
break;
|
||||||
|
@ -663,6 +653,34 @@ void PCB_BASE_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
|
||||||
"0.01 mm" };
|
"0.01 mm" };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( aCfg->m_Window.zoom_factors.empty() )
|
||||||
|
{
|
||||||
|
aCfg->m_Window.zoom_factors = { 0.035,
|
||||||
|
0.05,
|
||||||
|
0.08,
|
||||||
|
0.13,
|
||||||
|
0.22,
|
||||||
|
0.35,
|
||||||
|
0.6,
|
||||||
|
1.0,
|
||||||
|
1.5,
|
||||||
|
2.2,
|
||||||
|
3.5,
|
||||||
|
5.0,
|
||||||
|
8.0,
|
||||||
|
13.0,
|
||||||
|
20.0,
|
||||||
|
35.0,
|
||||||
|
50.0,
|
||||||
|
80.0,
|
||||||
|
130.0,
|
||||||
|
220.0,
|
||||||
|
300.0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
for( double& factor : aCfg->m_Window.zoom_factors )
|
||||||
|
factor = std::min( factor, MAX_ZOOM_FACTOR );
|
||||||
|
|
||||||
// Some, but not all derived classes have a PCBNEW_SETTINGS.
|
// Some, but not all derived classes have a PCBNEW_SETTINGS.
|
||||||
PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
|
PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
|
||||||
|
|
||||||
|
@ -731,12 +749,6 @@ void PCB_BASE_FRAME::OnModify()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const wxString PCB_BASE_FRAME::GetZoomLevelIndicator() const
|
|
||||||
{
|
|
||||||
return EDA_DRAW_FRAME::GetZoomLevelIndicator();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PCB_BASE_FRAME::UpdateGridSelectBox()
|
void PCB_BASE_FRAME::UpdateGridSelectBox()
|
||||||
{
|
{
|
||||||
UpdateStatusBar();
|
UpdateStatusBar();
|
||||||
|
@ -766,23 +778,19 @@ void PCB_BASE_FRAME::updateZoomSelectBox()
|
||||||
if( m_zoomSelectBox == NULL )
|
if( m_zoomSelectBox == NULL )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wxString msg;
|
double zoom = GetCanvas()->GetGAL()->GetZoomFactor() / ZOOM_COEFF;
|
||||||
|
|
||||||
m_zoomSelectBox->Clear();
|
m_zoomSelectBox->Clear();
|
||||||
m_zoomSelectBox->Append( _( "Zoom Auto" ) );
|
m_zoomSelectBox->Append( _( "Zoom Auto" ) );
|
||||||
m_zoomSelectBox->SetSelection( 0 );
|
m_zoomSelectBox->SetSelection( 0 );
|
||||||
|
|
||||||
for( unsigned i = 0; i < GetScreen()->m_ZoomList.size(); ++i )
|
for( unsigned i = 0; i < config()->m_Window.zoom_factors.size(); ++i )
|
||||||
{
|
{
|
||||||
msg = _( "Zoom " );
|
double current = config()->m_Window.zoom_factors[i];
|
||||||
|
|
||||||
double level = m_zoomLevelCoeff / (double)GetScreen()->m_ZoomList[i];
|
m_zoomSelectBox->Append( wxString::Format( _( "Zoom %.2f" ), current ) );
|
||||||
wxString value = wxString::Format( wxT( "%.2f" ), level );
|
|
||||||
msg += value;
|
|
||||||
|
|
||||||
m_zoomSelectBox->Append( msg );
|
if( zoom == current )
|
||||||
|
|
||||||
if( GetScreen()->GetZoom() == GetScreen()->m_ZoomList[i] )
|
|
||||||
m_zoomSelectBox->SetSelection( i + 1 );
|
m_zoomSelectBox->SetSelection( i + 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -311,7 +311,6 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
InitExitKey();
|
InitExitKey();
|
||||||
|
|
||||||
GetCanvas()->SwitchBackend( m_canvasType );
|
GetCanvas()->SwitchBackend( m_canvasType );
|
||||||
GetCanvas()->GetView()->SetScale( GetZoomLevelCoeff() / GetScreen()->GetZoom() );
|
|
||||||
ActivateGalCanvas();
|
ActivateGalCanvas();
|
||||||
|
|
||||||
// Default shutdown reason until a file is loaded
|
// Default shutdown reason until a file is loaded
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* Copyright (C) 2012 Jean-Pierre Charras, jean-pierre.charras@ujf-grenoble.fr
|
* Copyright (C) 2012 Jean-Pierre Charras, jean-pierre.charras@ujf-grenoble.fr
|
||||||
* Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
* Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||||
* Copyright (C) 2012 Wayne Stambaugh <stambaughw@verizon.net>
|
* Copyright (C) 2012 Wayne Stambaugh <stambaughw@verizon.net>
|
||||||
* Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -26,101 +26,15 @@
|
||||||
|
|
||||||
#include <fctsys.h>
|
#include <fctsys.h>
|
||||||
#include <pcb_screen.h>
|
#include <pcb_screen.h>
|
||||||
#include <base_units.h>
|
|
||||||
#include <layers_id_colors_and_visibility.h>
|
#include <layers_id_colors_and_visibility.h>
|
||||||
|
|
||||||
|
|
||||||
#define ZOOM_FACTOR( x ) ( x * IU_PER_MILS / 10 )
|
|
||||||
|
|
||||||
/**
|
|
||||||
Default Pcbnew zoom values.
|
|
||||||
Limited to 19 values to keep a decent size to menus.
|
|
||||||
Roughly a 1.5 progression.
|
|
||||||
The last 2 values are handy when somebody uses a library import of a module
|
|
||||||
(or foreign data) which has a bad coordinate.
|
|
||||||
Also useful in GerbView for this reason.
|
|
||||||
Zoom 5 and 10 can create artefacts when drawing (integer overflow in low level graphic
|
|
||||||
functions )
|
|
||||||
*/
|
|
||||||
static const double pcbZoomList[] =
|
|
||||||
{
|
|
||||||
ZOOM_FACTOR( 0.035 ),
|
|
||||||
ZOOM_FACTOR( 0.05 ),
|
|
||||||
ZOOM_FACTOR( 0.08 ),
|
|
||||||
ZOOM_FACTOR( 0.13 ),
|
|
||||||
ZOOM_FACTOR( 0.22 ),
|
|
||||||
ZOOM_FACTOR( 0.35 ),
|
|
||||||
ZOOM_FACTOR( 0.6 ),
|
|
||||||
ZOOM_FACTOR( 1.0 ),
|
|
||||||
ZOOM_FACTOR( 1.5 ),
|
|
||||||
ZOOM_FACTOR( 2.2 ),
|
|
||||||
ZOOM_FACTOR( 3.5 ),
|
|
||||||
ZOOM_FACTOR( 5.0 ),
|
|
||||||
ZOOM_FACTOR( 8.0 ),
|
|
||||||
ZOOM_FACTOR( 13.0 ),
|
|
||||||
ZOOM_FACTOR( 20.0 ),
|
|
||||||
ZOOM_FACTOR( 35.0 ),
|
|
||||||
ZOOM_FACTOR( 50.0 ),
|
|
||||||
ZOOM_FACTOR( 80.0 ),
|
|
||||||
ZOOM_FACTOR( 130.0 ),
|
|
||||||
ZOOM_FACTOR( 220.0 ),
|
|
||||||
ZOOM_FACTOR( 350.0 )
|
|
||||||
/*
|
|
||||||
The largest distance that wx can support is INT_MAX, since it represents
|
|
||||||
distance often in a wxCoord or wxSize. As a scalar, a distance is always
|
|
||||||
positive. On most machines which run KiCad, int is 32 bits and INT_MAX is
|
|
||||||
2147483647. The most difficult distance for a virtual (world) cartesian
|
|
||||||
space is the hypotenuse, or diagonal measurement at a 45 degree angle. This
|
|
||||||
puts the most stress on the distance magnitude within the bounded virtual
|
|
||||||
space. So if we allow this distance to be our constraint of <= INT_MAX, this
|
|
||||||
constraint then propagates to the maximum distance in X and in Y that can be
|
|
||||||
supported on each axis. Remember that the hypotenuse of a 1x1 square is
|
|
||||||
sqrt( 1x1 + 1x1 ) = sqrt(2) = 1.41421356.
|
|
||||||
|
|
||||||
hypotenuse of any square = sqrt(2) * deltaX;
|
|
||||||
|
|
||||||
Let maximum supported hypotenuse be INT_MAX, then:
|
|
||||||
|
|
||||||
MAX_AXIS = INT_MAX / sqrt(2) = 2147483647 / 1.41421356 = 1518500251
|
|
||||||
|
|
||||||
This maximum distance is imposed by wxWidgets, not by KiCad. The imposition
|
|
||||||
comes in the form of the data structures used in the graphics API at the
|
|
||||||
wxDC level. Obviously when we are not interacting with wx we can use double
|
|
||||||
to compute distances larger than this. For example the computation of the
|
|
||||||
total length of a net, can and should be done in double, since it might
|
|
||||||
actually be longer than a single diagonal line.
|
|
||||||
|
|
||||||
The next choice is what to use for internal units (IU), sometimes called
|
|
||||||
world units. If nanometers, then the virtual space must be limited to
|
|
||||||
about 1.5 x 1.5 meters square. This is 1518500251 divided by 1e9 nm/meter.
|
|
||||||
|
|
||||||
The maximum zoom factor then depends on the client window size. If we ask
|
|
||||||
wx to handle something outside INT_MIN to INT_MAX, there are unreported
|
|
||||||
problems in the non-Debug build because wxRound() goes silent.
|
|
||||||
|
|
||||||
Let:
|
|
||||||
const double MAX_AXIS = 1518500251;
|
|
||||||
|
|
||||||
Then a maximum zoom factor for a screen of 1920 pixels wide is
|
|
||||||
1518500251 / 1920 = 790885.
|
|
||||||
|
|
||||||
The largest ZOOM_FACTOR in above table is ZOOM_FACTOR( 300 ), which computes
|
|
||||||
out to 762000 just below 790885.
|
|
||||||
*/
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
PCB_SCREEN::PCB_SCREEN( const wxSize& aPageSizeIU ) :
|
PCB_SCREEN::PCB_SCREEN( const wxSize& aPageSizeIU ) :
|
||||||
BASE_SCREEN( SCREEN_T )
|
BASE_SCREEN( aPageSizeIU )
|
||||||
{
|
{
|
||||||
for( double zoom : pcbZoomList )
|
|
||||||
m_ZoomList.push_back( zoom );
|
|
||||||
|
|
||||||
m_Active_Layer = F_Cu; // default active layer = front layer
|
m_Active_Layer = F_Cu; // default active layer = front layer
|
||||||
m_Route_Layer_TOP = F_Cu; // default layers pair for vias (bottom to top)
|
m_Route_Layer_TOP = F_Cu; // default layers pair for vias (bottom to top)
|
||||||
m_Route_Layer_BOTTOM = B_Cu;
|
m_Route_Layer_BOTTOM = B_Cu;
|
||||||
|
|
||||||
InitDataPoints( aPageSizeIU );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue