Grid Overrides: support grids-per-type that override the current grid.
Schematic only at this point while we test and refine. PCB support is a future addition. Fixes: https://gitlab.com/kicad/code/kicad/-/issues/14756
This commit is contained in:
parent
bd503647c6
commit
132a0ada73
|
@ -316,6 +316,7 @@ void BuildBitmapInfo( std::unordered_map<BITMAPS, std::vector<BITMAP_INFO>>& aBi
|
||||||
aBitmapInfoCache[BITMAPS::general_ratsnest].emplace_back( BITMAPS::general_ratsnest, wxT( "general_ratsnest_24.png" ), 24, wxT( "light" ) );
|
aBitmapInfoCache[BITMAPS::general_ratsnest].emplace_back( BITMAPS::general_ratsnest, wxT( "general_ratsnest_24.png" ), 24, wxT( "light" ) );
|
||||||
aBitmapInfoCache[BITMAPS::grid_select].emplace_back( BITMAPS::grid_select, wxT( "grid_select_24.png" ), 24, wxT( "light" ) );
|
aBitmapInfoCache[BITMAPS::grid_select].emplace_back( BITMAPS::grid_select, wxT( "grid_select_24.png" ), 24, wxT( "light" ) );
|
||||||
aBitmapInfoCache[BITMAPS::grid_select_axis].emplace_back( BITMAPS::grid_select_axis, wxT( "grid_select_axis_24.png" ), 24, wxT( "light" ) );
|
aBitmapInfoCache[BITMAPS::grid_select_axis].emplace_back( BITMAPS::grid_select_axis, wxT( "grid_select_axis_24.png" ), 24, wxT( "light" ) );
|
||||||
|
aBitmapInfoCache[BITMAPS::grid_override].emplace_back( BITMAPS::grid_override, wxT( "grid_override_24.png" ), 24, wxT( "light" ) );
|
||||||
aBitmapInfoCache[BITMAPS::grid].emplace_back( BITMAPS::grid, wxT( "grid_24.png" ), 24, wxT( "light" ) );
|
aBitmapInfoCache[BITMAPS::grid].emplace_back( BITMAPS::grid, wxT( "grid_24.png" ), 24, wxT( "light" ) );
|
||||||
aBitmapInfoCache[BITMAPS::group].emplace_back( BITMAPS::group, wxT( "group_24.png" ), 24, wxT( "light" ) );
|
aBitmapInfoCache[BITMAPS::group].emplace_back( BITMAPS::group, wxT( "group_24.png" ), 24, wxT( "light" ) );
|
||||||
aBitmapInfoCache[BITMAPS::group_enter].emplace_back( BITMAPS::group_enter, wxT( "group_enter_24.png" ), 24, wxT( "light" ) );
|
aBitmapInfoCache[BITMAPS::group_enter].emplace_back( BITMAPS::group_enter, wxT( "group_enter_24.png" ), 24, wxT( "light" ) );
|
||||||
|
@ -704,6 +705,7 @@ void BuildBitmapInfo( std::unordered_map<BITMAPS, std::vector<BITMAP_INFO>>& aBi
|
||||||
aBitmapInfoCache[BITMAPS::general_ratsnest].emplace_back( BITMAPS::general_ratsnest, wxT( "general_ratsnest_dark_24.png" ), 24, wxT( "dark" ) );
|
aBitmapInfoCache[BITMAPS::general_ratsnest].emplace_back( BITMAPS::general_ratsnest, wxT( "general_ratsnest_dark_24.png" ), 24, wxT( "dark" ) );
|
||||||
aBitmapInfoCache[BITMAPS::grid_select].emplace_back( BITMAPS::grid_select, wxT( "grid_select_dark_24.png" ), 24, wxT( "dark" ) );
|
aBitmapInfoCache[BITMAPS::grid_select].emplace_back( BITMAPS::grid_select, wxT( "grid_select_dark_24.png" ), 24, wxT( "dark" ) );
|
||||||
aBitmapInfoCache[BITMAPS::grid_select_axis].emplace_back( BITMAPS::grid_select_axis, wxT( "grid_select_axis_dark_24.png" ), 24, wxT( "dark" ) );
|
aBitmapInfoCache[BITMAPS::grid_select_axis].emplace_back( BITMAPS::grid_select_axis, wxT( "grid_select_axis_dark_24.png" ), 24, wxT( "dark" ) );
|
||||||
|
aBitmapInfoCache[BITMAPS::grid_override].emplace_back( BITMAPS::grid_override, wxT( "grid_override_dark_24.png" ), 24, wxT( "dark" ) );
|
||||||
aBitmapInfoCache[BITMAPS::grid].emplace_back( BITMAPS::grid, wxT( "grid_dark_24.png" ), 24, wxT( "dark" ) );
|
aBitmapInfoCache[BITMAPS::grid].emplace_back( BITMAPS::grid, wxT( "grid_dark_24.png" ), 24, wxT( "dark" ) );
|
||||||
aBitmapInfoCache[BITMAPS::group].emplace_back( BITMAPS::group, wxT( "group_dark_24.png" ), 24, wxT( "dark" ) );
|
aBitmapInfoCache[BITMAPS::group].emplace_back( BITMAPS::group, wxT( "group_dark_24.png" ), 24, wxT( "dark" ) );
|
||||||
aBitmapInfoCache[BITMAPS::group_enter].emplace_back( BITMAPS::group_enter, wxT( "group_enter_dark_24.png" ), 24, wxT( "dark" ) );
|
aBitmapInfoCache[BITMAPS::group_enter].emplace_back( BITMAPS::group_enter, wxT( "group_enter_dark_24.png" ), 24, wxT( "dark" ) );
|
||||||
|
|
|
@ -32,13 +32,20 @@
|
||||||
#include <pgm_base.h>
|
#include <pgm_base.h>
|
||||||
#include <settings/settings_manager.h>
|
#include <settings/settings_manager.h>
|
||||||
|
|
||||||
DIALOG_GRID_SETTINGS::DIALOG_GRID_SETTINGS( EDA_DRAW_FRAME* aParent ):
|
DIALOG_GRID_SETTINGS::DIALOG_GRID_SETTINGS( EDA_DRAW_FRAME* aParent ) :
|
||||||
DIALOG_GRID_SETTINGS_BASE( aParent ),
|
DIALOG_GRID_SETTINGS_BASE( aParent ), m_parent( aParent ),
|
||||||
m_parent( aParent ),
|
m_gridOriginX( aParent, m_staticTextGridPosX, m_GridOriginXCtrl, m_TextPosXUnits ),
|
||||||
m_gridOriginX( aParent, m_staticTextGridPosX, m_GridOriginXCtrl, m_TextPosXUnits ),
|
m_gridOriginY( aParent, m_staticTextGridPosY, m_GridOriginYCtrl, m_TextPosYUnits ),
|
||||||
m_gridOriginY( aParent, m_staticTextGridPosY, m_GridOriginYCtrl, m_TextPosYUnits ),
|
m_userGridX( aParent, m_staticTextSizeX, m_OptGridSizeX, m_TextSizeXUnits ),
|
||||||
m_userGridX( aParent, m_staticTextSizeX, m_OptGridSizeX, m_TextSizeXUnits ),
|
m_userGridY( aParent, m_staticTextSizeY, m_OptGridSizeY, m_TextSizeYUnits ),
|
||||||
m_userGridY( aParent, m_staticTextSizeY, m_OptGridSizeY, m_TextSizeYUnits )
|
m_gridOverrideConnectables( aParent, m_staticTextConnectables,
|
||||||
|
m_GridOverrideConnectablesSize, m_staticTextConnectablesUnits ),
|
||||||
|
m_gridOverrideWires( aParent, m_staticTextWires, m_GridOverrideWiresSize,
|
||||||
|
m_staticTextWiresUnits ),
|
||||||
|
m_gridOverrideText( aParent, m_staticTextText, m_GridOverrideTextSize,
|
||||||
|
m_staticTextTextUnits ),
|
||||||
|
m_gridOverrideGraphics( aParent, m_staticTextGraphics, m_GridOverrideGraphicsSize,
|
||||||
|
m_staticTextGraphicsUnits )
|
||||||
{
|
{
|
||||||
// Configure display origin transforms
|
// Configure display origin transforms
|
||||||
m_gridOriginX.SetCoordType( ORIGIN_TRANSFORMS::ABS_X_COORD );
|
m_gridOriginX.SetCoordType( ORIGIN_TRANSFORMS::ABS_X_COORD );
|
||||||
|
@ -58,6 +65,7 @@ DIALOG_GRID_SETTINGS::DIALOG_GRID_SETTINGS( EDA_DRAW_FRAME* aParent ):
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_book->SetSelection( 0 );
|
m_book->SetSelection( 0 );
|
||||||
|
sbGridOverridesSizer->ShowItems( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
int hk1 = ACTIONS::gridFast1.GetHotKey();
|
int hk1 = ACTIONS::gridFast1.GetHotKey();
|
||||||
|
@ -108,11 +116,13 @@ void DIALOG_GRID_SETTINGS::RebuildGridSizes()
|
||||||
bool DIALOG_GRID_SETTINGS::TransferDataFromWindow()
|
bool DIALOG_GRID_SETTINGS::TransferDataFromWindow()
|
||||||
{
|
{
|
||||||
// Validate new settings
|
// Validate new settings
|
||||||
if( !m_userGridX.Validate( 0.001, 1000.0, EDA_UNITS::MILLIMETRES ) )
|
for( UNIT_BINDER* entry :
|
||||||
return false;
|
{ &m_userGridX, &m_userGridY, &m_gridOverrideConnectables, &m_gridOverrideWires,
|
||||||
|
&m_gridOverrideText, &m_gridOverrideGraphics } )
|
||||||
if( !m_userGridY.Validate( 0.001, 1000.0, EDA_UNITS::MILLIMETRES ) )
|
{
|
||||||
return false;
|
if( !entry->Validate( 0.001, 1000.0, EDA_UNITS::MILLIMETRES ) )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Apply the new settings
|
// Apply the new settings
|
||||||
APP_SETTINGS_BASE* cfg = m_parent->config();
|
APP_SETTINGS_BASE* cfg = m_parent->config();
|
||||||
|
@ -125,6 +135,17 @@ bool DIALOG_GRID_SETTINGS::TransferDataFromWindow()
|
||||||
gridCfg.fast_grid_1 = m_grid1Ctrl->GetSelection();
|
gridCfg.fast_grid_1 = m_grid1Ctrl->GetSelection();
|
||||||
gridCfg.fast_grid_2 = m_grid2Ctrl->GetSelection();
|
gridCfg.fast_grid_2 = m_grid2Ctrl->GetSelection();
|
||||||
|
|
||||||
|
gridCfg.override_connectables = m_checkGridOverrideConnectables->GetValue();
|
||||||
|
gridCfg.override_connectables_size =
|
||||||
|
m_parent->StringFromValue( m_gridOverrideConnectables.GetValue(), true );
|
||||||
|
gridCfg.override_wires = m_checkGridOverrideWires->GetValue();
|
||||||
|
gridCfg.override_wires_size = m_parent->StringFromValue( m_gridOverrideWires.GetValue(), true );
|
||||||
|
gridCfg.override_text = m_checkGridOverrideText->GetValue();
|
||||||
|
gridCfg.override_text_size = m_parent->StringFromValue( m_gridOverrideText.GetValue(), true );
|
||||||
|
gridCfg.override_graphics = m_checkGridOverrideGraphics->GetValue();
|
||||||
|
gridCfg.override_graphics_size =
|
||||||
|
m_parent->StringFromValue( m_gridOverrideGraphics.GetValue(), true );
|
||||||
|
|
||||||
// Notify TOOLS
|
// Notify TOOLS
|
||||||
TOOL_MANAGER* mgr = m_parent->GetToolManager();
|
TOOL_MANAGER* mgr = m_parent->GetToolManager();
|
||||||
mgr->ResetTools( TOOL_BASE::REDRAW );
|
mgr->ResetTools( TOOL_BASE::REDRAW );
|
||||||
|
@ -153,6 +174,17 @@ bool DIALOG_GRID_SETTINGS::TransferDataToWindow()
|
||||||
m_userGridX.SetValue( m_parent->ValueFromString( gridCfg.user_grid_x ) );
|
m_userGridX.SetValue( m_parent->ValueFromString( gridCfg.user_grid_x ) );
|
||||||
m_userGridY.SetValue( m_parent->ValueFromString( gridCfg.user_grid_y ) );
|
m_userGridY.SetValue( m_parent->ValueFromString( gridCfg.user_grid_y ) );
|
||||||
|
|
||||||
|
m_gridOverrideConnectables.SetValue(
|
||||||
|
m_parent->ValueFromString( gridCfg.override_connectables_size ) );
|
||||||
|
m_gridOverrideWires.SetValue( m_parent->ValueFromString( gridCfg.override_wires_size ) );
|
||||||
|
m_gridOverrideText.SetValue( m_parent->ValueFromString( gridCfg.override_text_size ) );
|
||||||
|
m_gridOverrideGraphics.SetValue( m_parent->ValueFromString( gridCfg.override_graphics_size ) );
|
||||||
|
|
||||||
|
m_checkGridOverrideConnectables->SetValue( gridCfg.override_connectables );
|
||||||
|
m_checkGridOverrideWires->SetValue( gridCfg.override_wires );
|
||||||
|
m_checkGridOverrideText->SetValue( gridCfg.override_text );
|
||||||
|
m_checkGridOverrideGraphics->SetValue( gridCfg.override_graphics );
|
||||||
|
|
||||||
m_gridOriginX.SetValue( m_parent->GetGridOrigin().x );
|
m_gridOriginX.SetValue( m_parent->GetGridOrigin().x );
|
||||||
m_gridOriginY.SetValue( m_parent->GetGridOrigin().y );
|
m_gridOriginY.SetValue( m_parent->GetGridOrigin().y );
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
|
// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b3)
|
||||||
// http://www.wxformbuilder.org/
|
// http://www.wxformbuilder.org/
|
||||||
//
|
//
|
||||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||||
|
@ -135,8 +135,6 @@ DIALOG_GRID_SETTINGS_BASE::DIALOG_GRID_SETTINGS_BASE( wxWindow* parent, wxWindow
|
||||||
wxArrayString m_grid1CtrlChoices;
|
wxArrayString m_grid1CtrlChoices;
|
||||||
m_grid1Ctrl = new wxChoice( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_grid1CtrlChoices, 0 );
|
m_grid1Ctrl = new wxChoice( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_grid1CtrlChoices, 0 );
|
||||||
m_grid1Ctrl->SetSelection( 0 );
|
m_grid1Ctrl->SetSelection( 0 );
|
||||||
m_grid1Ctrl->SetMinSize( wxSize( 240,-1 ) );
|
|
||||||
|
|
||||||
fgSizer3->Add( m_grid1Ctrl, 1, wxALL|wxEXPAND, 5 );
|
fgSizer3->Add( m_grid1Ctrl, 1, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
m_grid1HotKey = new wxStaticText( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, _("(hotkey)"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_grid1HotKey = new wxStaticText( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, _("(hotkey)"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
@ -150,8 +148,6 @@ DIALOG_GRID_SETTINGS_BASE::DIALOG_GRID_SETTINGS_BASE( wxWindow* parent, wxWindow
|
||||||
wxArrayString m_grid2CtrlChoices;
|
wxArrayString m_grid2CtrlChoices;
|
||||||
m_grid2Ctrl = new wxChoice( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_grid2CtrlChoices, 0 );
|
m_grid2Ctrl = new wxChoice( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_grid2CtrlChoices, 0 );
|
||||||
m_grid2Ctrl->SetSelection( 0 );
|
m_grid2Ctrl->SetSelection( 0 );
|
||||||
m_grid2Ctrl->SetMinSize( wxSize( 240,-1 ) );
|
|
||||||
|
|
||||||
fgSizer3->Add( m_grid2Ctrl, 1, wxALL|wxEXPAND, 5 );
|
fgSizer3->Add( m_grid2Ctrl, 1, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
m_grid2HotKey = new wxStaticText( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, _("(hotkey)"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_grid2HotKey = new wxStaticText( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, _("(hotkey)"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
@ -164,6 +160,76 @@ DIALOG_GRID_SETTINGS_BASE::DIALOG_GRID_SETTINGS_BASE( wxWindow* parent, wxWindow
|
||||||
|
|
||||||
bSizerMain->Add( sbFastSwitchSizer, 0, wxEXPAND|wxALL, 10 );
|
bSizerMain->Add( sbFastSwitchSizer, 0, wxEXPAND|wxALL, 10 );
|
||||||
|
|
||||||
|
sbGridOverridesSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Grid Overrides") ), wxVERTICAL );
|
||||||
|
|
||||||
|
wxFlexGridSizer* fgGridOverrides;
|
||||||
|
fgGridOverrides = new wxFlexGridSizer( 4, 4, 0, 0 );
|
||||||
|
fgGridOverrides->AddGrowableCol( 2 );
|
||||||
|
fgGridOverrides->SetFlexibleDirection( wxBOTH );
|
||||||
|
fgGridOverrides->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_checkGridOverrideConnectables = new wxCheckBox( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgGridOverrides->Add( m_checkGridOverrideConnectables, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 10 );
|
||||||
|
|
||||||
|
m_staticTextConnectables = new wxStaticText( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, _("Connectable Items:"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||||
|
m_staticTextConnectables->Wrap( -1 );
|
||||||
|
fgGridOverrides->Add( m_staticTextConnectables, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
|
||||||
|
|
||||||
|
m_GridOverrideConnectablesSize = new wxTextCtrl( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgGridOverrides->Add( m_GridOverrideConnectablesSize, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_staticTextConnectablesUnits = new wxStaticText( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticTextConnectablesUnits->Wrap( -1 );
|
||||||
|
fgGridOverrides->Add( m_staticTextConnectablesUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_checkGridOverrideWires = new wxCheckBox( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgGridOverrides->Add( m_checkGridOverrideWires, 0, wxALIGN_CENTER|wxALIGN_CENTER_HORIZONTAL|wxALL|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_staticTextWires = new wxStaticText( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, _("Wires:"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||||
|
m_staticTextWires->Wrap( -1 );
|
||||||
|
fgGridOverrides->Add( m_staticTextWires, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_GridOverrideWiresSize = new wxTextCtrl( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgGridOverrides->Add( m_GridOverrideWiresSize, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_staticTextWiresUnits = new wxStaticText( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticTextWiresUnits->Wrap( -1 );
|
||||||
|
fgGridOverrides->Add( m_staticTextWiresUnits, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_checkGridOverrideText = new wxCheckBox( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgGridOverrides->Add( m_checkGridOverrideText, 0, wxALIGN_CENTER|wxALL|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_staticTextText = new wxStaticText( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, _("Text:"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||||
|
m_staticTextText->Wrap( -1 );
|
||||||
|
fgGridOverrides->Add( m_staticTextText, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT, 5 );
|
||||||
|
|
||||||
|
m_GridOverrideTextSize = new wxTextCtrl( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgGridOverrides->Add( m_GridOverrideTextSize, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_staticTextTextUnits = new wxStaticText( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||||
|
m_staticTextTextUnits->Wrap( -1 );
|
||||||
|
fgGridOverrides->Add( m_staticTextTextUnits, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_checkGridOverrideGraphics = new wxCheckBox( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgGridOverrides->Add( m_checkGridOverrideGraphics, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 10 );
|
||||||
|
|
||||||
|
m_staticTextGraphics = new wxStaticText( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, _("Graphics:"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||||
|
m_staticTextGraphics->Wrap( -1 );
|
||||||
|
fgGridOverrides->Add( m_staticTextGraphics, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_GridOverrideGraphicsSize = new wxTextCtrl( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgGridOverrides->Add( m_GridOverrideGraphicsSize, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_staticTextGraphicsUnits = new wxStaticText( sbGridOverridesSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||||
|
m_staticTextGraphicsUnits->Wrap( -1 );
|
||||||
|
fgGridOverrides->Add( m_staticTextGraphicsUnits, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
sbGridOverridesSizer->Add( fgGridOverrides, 1, wxBOTTOM|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
bSizerMain->Add( sbGridOverridesSizer, 0, wxALL|wxEXPAND, 10 );
|
||||||
|
|
||||||
wxBoxSizer* bButtonSizer;
|
wxBoxSizer* bButtonSizer;
|
||||||
bButtonSizer = new wxBoxSizer( wxHORIZONTAL );
|
bButtonSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
|
// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b3)
|
||||||
// http://www.wxformbuilder.org/
|
// http://www.wxformbuilder.org/
|
||||||
//
|
//
|
||||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||||
|
@ -23,6 +23,7 @@
|
||||||
#include <wx/panel.h>
|
#include <wx/panel.h>
|
||||||
#include <wx/choice.h>
|
#include <wx/choice.h>
|
||||||
#include <wx/simplebook.h>
|
#include <wx/simplebook.h>
|
||||||
|
#include <wx/checkbox.h>
|
||||||
#include <wx/button.h>
|
#include <wx/button.h>
|
||||||
#include <wx/bitmap.h>
|
#include <wx/bitmap.h>
|
||||||
#include <wx/image.h>
|
#include <wx/image.h>
|
||||||
|
@ -60,6 +61,23 @@ class DIALOG_GRID_SETTINGS_BASE : public DIALOG_SHIM
|
||||||
wxStaticText* m_staticTextGrid2;
|
wxStaticText* m_staticTextGrid2;
|
||||||
wxChoice* m_grid2Ctrl;
|
wxChoice* m_grid2Ctrl;
|
||||||
wxStaticText* m_grid2HotKey;
|
wxStaticText* m_grid2HotKey;
|
||||||
|
wxStaticBoxSizer* sbGridOverridesSizer;
|
||||||
|
wxCheckBox* m_checkGridOverrideConnectables;
|
||||||
|
wxStaticText* m_staticTextConnectables;
|
||||||
|
wxTextCtrl* m_GridOverrideConnectablesSize;
|
||||||
|
wxStaticText* m_staticTextConnectablesUnits;
|
||||||
|
wxCheckBox* m_checkGridOverrideWires;
|
||||||
|
wxStaticText* m_staticTextWires;
|
||||||
|
wxTextCtrl* m_GridOverrideWiresSize;
|
||||||
|
wxStaticText* m_staticTextWiresUnits;
|
||||||
|
wxCheckBox* m_checkGridOverrideText;
|
||||||
|
wxStaticText* m_staticTextText;
|
||||||
|
wxTextCtrl* m_GridOverrideTextSize;
|
||||||
|
wxStaticText* m_staticTextTextUnits;
|
||||||
|
wxCheckBox* m_checkGridOverrideGraphics;
|
||||||
|
wxStaticText* m_staticTextGraphics;
|
||||||
|
wxTextCtrl* m_GridOverrideGraphicsSize;
|
||||||
|
wxStaticText* m_staticTextGraphicsUnits;
|
||||||
wxButton* m_buttonResetOrigin;
|
wxButton* m_buttonResetOrigin;
|
||||||
wxButton* m_buttonResetSizes;
|
wxButton* m_buttonResetSizes;
|
||||||
wxStdDialogButtonSizer* m_sdbSizer;
|
wxStdDialogButtonSizer* m_sdbSizer;
|
||||||
|
|
|
@ -531,6 +531,22 @@ void EDA_DRAW_FRAME::SetGridVisibility( bool aVisible )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool EDA_DRAW_FRAME::IsGridOverridden() const
|
||||||
|
{
|
||||||
|
wxCHECK( config(), false );
|
||||||
|
|
||||||
|
return config()->m_Window.grid.overrides_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void EDA_DRAW_FRAME::SetGridOverrides( bool aOverride )
|
||||||
|
{
|
||||||
|
wxCHECK( config(), /* void */ );
|
||||||
|
|
||||||
|
config()->m_Window.grid.overrides_enabled = aOverride;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDA_DRAW_FRAME::UpdateZoomSelectBox()
|
void EDA_DRAW_FRAME::UpdateZoomSelectBox()
|
||||||
{
|
{
|
||||||
if( m_zoomSelectBox == nullptr )
|
if( m_zoomSelectBox == nullptr )
|
||||||
|
|
|
@ -354,6 +354,59 @@ void APP_SETTINGS_BASE::addParamsForWindow( WINDOW_SETTINGS* aWindow, const std:
|
||||||
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.user_grid_y",
|
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.user_grid_y",
|
||||||
&aWindow->grid.user_grid_y, "10 mil" ) );
|
&aWindow->grid.user_grid_y, "10 mil" ) );
|
||||||
|
|
||||||
|
// for grid overrides, give just the schematic and symbol editors sane values
|
||||||
|
if( m_filename == wxS( "eeschema" ) || m_filename == wxS( "symbol_editor" ) )
|
||||||
|
{
|
||||||
|
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.overrides_enabled",
|
||||||
|
&aWindow->grid.overrides_enabled, true ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.override_connectables",
|
||||||
|
&aWindow->grid.override_connectables, true ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.override_wires",
|
||||||
|
&aWindow->grid.override_wires, true ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.override_text",
|
||||||
|
&aWindow->grid.override_text, false ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.override_graphics",
|
||||||
|
&aWindow->grid.override_graphics, false ) );
|
||||||
|
|
||||||
|
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.override_connectables_size",
|
||||||
|
&aWindow->grid.override_connectables_size,
|
||||||
|
"50 mil" ) );
|
||||||
|
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.override_wires_size",
|
||||||
|
&aWindow->grid.override_wires_size,
|
||||||
|
"50 mil" ) );
|
||||||
|
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.override_text_size",
|
||||||
|
&aWindow->grid.override_text_size, "10 mil" ) );
|
||||||
|
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.override_graphics_size",
|
||||||
|
&aWindow->grid.override_graphics_size,
|
||||||
|
"25 mil" ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.overrides_enabled",
|
||||||
|
&aWindow->grid.overrides_enabled, false ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.override_connectables",
|
||||||
|
&aWindow->grid.override_connectables, false ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.override_wires",
|
||||||
|
&aWindow->grid.override_wires, false ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.override_text",
|
||||||
|
&aWindow->grid.override_text, false ) );
|
||||||
|
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.override_graphics",
|
||||||
|
&aWindow->grid.override_graphics, false ) );
|
||||||
|
|
||||||
|
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.override_connectables_size",
|
||||||
|
&aWindow->grid.override_connectables_size,
|
||||||
|
"100 mil" ) );
|
||||||
|
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.override_text_size",
|
||||||
|
&aWindow->grid.override_text_size, "10 mil" ) );
|
||||||
|
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.override_wires_size",
|
||||||
|
&aWindow->grid.override_wires_size,
|
||||||
|
"10 mil" ) );
|
||||||
|
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.override_graphics_size",
|
||||||
|
&aWindow->grid.override_graphics_size,
|
||||||
|
"10 mil" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
m_params.emplace_back( new PARAM<double>( aJsonPath + ".grid.line_width",
|
m_params.emplace_back( new PARAM<double>( aJsonPath + ".grid.line_width",
|
||||||
&aWindow->grid.line_width, 1.0 ) );
|
&aWindow->grid.line_width, 1.0 ) );
|
||||||
|
|
||||||
|
|
|
@ -551,10 +551,20 @@ TOOL_ACTION ACTIONS::gridPreset( TOOL_ACTION_ARGS()
|
||||||
.Scope( AS_GLOBAL )
|
.Scope( AS_GLOBAL )
|
||||||
.Parameter<int>( 0 ) ); // Default to the 1st element of the list
|
.Parameter<int>( 0 ) ); // Default to the 1st element of the list
|
||||||
|
|
||||||
TOOL_ACTION ACTIONS::toggleGrid( "common.Control.toggleGrid",
|
TOOL_ACTION ACTIONS::toggleGrid( TOOL_ACTION_ARGS()
|
||||||
AS_GLOBAL, 0, "",
|
.Name("common.Control.toggleGrid")
|
||||||
_( "Show Grid" ), _( "Display background grid in the edit window" ),
|
.Scope( AS_GLOBAL)
|
||||||
BITMAPS::grid );
|
.MenuText( _( "Show Grid" ) )
|
||||||
|
.Tooltip( _( "Display background grid in the edit window" ) )
|
||||||
|
.Icon( BITMAPS::grid ) );
|
||||||
|
|
||||||
|
TOOL_ACTION ACTIONS::toggleGridOverrides( TOOL_ACTION_ARGS()
|
||||||
|
.Name("common.Control.toggleGridOverrides")
|
||||||
|
.DefaultHotkey( MD_CTRL + MD_SHIFT + 'G' )
|
||||||
|
.Scope( AS_GLOBAL)
|
||||||
|
.MenuText( _( "Grid Overrides" ) )
|
||||||
|
.Tooltip( _( "Enables item-specific grids that override the current grid" ) )
|
||||||
|
.Icon( BITMAPS::grid_override ) );
|
||||||
|
|
||||||
TOOL_ACTION ACTIONS::gridProperties( "common.Control.gridProperties",
|
TOOL_ACTION ACTIONS::gridProperties( "common.Control.gridProperties",
|
||||||
AS_GLOBAL, 0, "",
|
AS_GLOBAL, 0, "",
|
||||||
|
|
|
@ -517,6 +517,14 @@ int COMMON_TOOLS::ToggleGrid( const TOOL_EVENT& aEvent )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int COMMON_TOOLS::ToggleGridOverrides( const TOOL_EVENT& aEvent )
|
||||||
|
{
|
||||||
|
m_frame->SetGridOverrides( !m_frame->IsGridOverridden() );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int COMMON_TOOLS::GridProperties( const TOOL_EVENT& aEvent )
|
int COMMON_TOOLS::GridProperties( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED );
|
wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED );
|
||||||
|
@ -664,6 +672,7 @@ void COMMON_TOOLS::setTransitions()
|
||||||
Go( &COMMON_TOOLS::GridFast1, ACTIONS::gridFast1.MakeEvent() );
|
Go( &COMMON_TOOLS::GridFast1, ACTIONS::gridFast1.MakeEvent() );
|
||||||
Go( &COMMON_TOOLS::GridFast2, ACTIONS::gridFast2.MakeEvent() );
|
Go( &COMMON_TOOLS::GridFast2, ACTIONS::gridFast2.MakeEvent() );
|
||||||
Go( &COMMON_TOOLS::ToggleGrid, ACTIONS::toggleGrid.MakeEvent() );
|
Go( &COMMON_TOOLS::ToggleGrid, ACTIONS::toggleGrid.MakeEvent() );
|
||||||
|
Go( &COMMON_TOOLS::ToggleGridOverrides, ACTIONS::toggleGridOverrides.MakeEvent() );
|
||||||
Go( &COMMON_TOOLS::GridProperties, ACTIONS::gridProperties.MakeEvent() );
|
Go( &COMMON_TOOLS::GridProperties, ACTIONS::gridProperties.MakeEvent() );
|
||||||
|
|
||||||
// Units and coordinates
|
// Units and coordinates
|
||||||
|
|
|
@ -84,6 +84,17 @@ SELECTION_CONDITION EDITOR_CONDITIONS::GridVisible()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SELECTION_CONDITION EDITOR_CONDITIONS::GridOverrides()
|
||||||
|
{
|
||||||
|
// The grid lock check requires a draw frame
|
||||||
|
EDA_DRAW_FRAME* drwFrame = dynamic_cast<EDA_DRAW_FRAME*>( m_frame );
|
||||||
|
|
||||||
|
wxASSERT( drwFrame );
|
||||||
|
|
||||||
|
return std::bind( &EDITOR_CONDITIONS::gridOverridesFunc, _1, drwFrame );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SELECTION_CONDITION EDITOR_CONDITIONS::PolarCoordinates()
|
SELECTION_CONDITION EDITOR_CONDITIONS::PolarCoordinates()
|
||||||
{
|
{
|
||||||
// The polar coordinates require a draw frame
|
// The polar coordinates require a draw frame
|
||||||
|
@ -170,6 +181,12 @@ bool EDITOR_CONDITIONS::gridFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* a
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool EDITOR_CONDITIONS::gridOverridesFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame )
|
||||||
|
{
|
||||||
|
return aFrame->IsGridOverridden();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool EDITOR_CONDITIONS::polarCoordFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame )
|
bool EDITOR_CONDITIONS::polarCoordFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame )
|
||||||
{
|
{
|
||||||
return aFrame->GetShowPolarCoords();
|
return aFrame->GetShowPolarCoords();
|
||||||
|
|
|
@ -90,22 +90,38 @@ void GRID_HELPER::SetAuxAxes( bool aEnable, const VECTOR2I& aOrigin )
|
||||||
|
|
||||||
VECTOR2I GRID_HELPER::AlignGrid( const VECTOR2I& aPoint ) const
|
VECTOR2I GRID_HELPER::AlignGrid( const VECTOR2I& aPoint ) const
|
||||||
{
|
{
|
||||||
const VECTOR2D gridOffset( GetOrigin() );
|
return computeNearest( aPoint, GetGrid(), GetOrigin() );
|
||||||
const VECTOR2D grid( GetGrid() );
|
}
|
||||||
|
|
||||||
VECTOR2I nearest( KiROUND( ( aPoint.x - gridOffset.x ) / grid.x ) * grid.x + gridOffset.x,
|
|
||||||
KiROUND( ( aPoint.y - gridOffset.y ) / grid.y ) * grid.y + gridOffset.y );
|
|
||||||
|
|
||||||
return nearest;
|
VECTOR2I GRID_HELPER::AlignGrid( const VECTOR2I& aPoint, const VECTOR2D& aGrid,
|
||||||
|
const VECTOR2D& aOffset ) const
|
||||||
|
{
|
||||||
|
return computeNearest( aPoint, aGrid, aOffset );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VECTOR2I GRID_HELPER::computeNearest( const VECTOR2I& aPoint, const VECTOR2I& aGrid,
|
||||||
|
const VECTOR2I& aOffset ) const
|
||||||
|
{
|
||||||
|
return VECTOR2I( KiROUND( ( aPoint.x - aOffset.x ) / aGrid.x ) * aGrid.x + aOffset.x,
|
||||||
|
KiROUND( ( aPoint.y - aOffset.y ) / aGrid.y ) * aGrid.y + aOffset.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VECTOR2I GRID_HELPER::Align( const VECTOR2I& aPoint ) const
|
VECTOR2I GRID_HELPER::Align( const VECTOR2I& aPoint ) const
|
||||||
|
{
|
||||||
|
return Align( aPoint, GetGrid(), GetOrigin() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VECTOR2I GRID_HELPER::Align( const VECTOR2I& aPoint, const VECTOR2D& aGrid,
|
||||||
|
const VECTOR2D& aOffset ) const
|
||||||
{
|
{
|
||||||
if( !canUseGrid() )
|
if( !canUseGrid() )
|
||||||
return aPoint;
|
return aPoint;
|
||||||
|
|
||||||
VECTOR2I nearest = AlignGrid( aPoint );
|
VECTOR2I nearest = AlignGrid( aPoint, aGrid, aOffset );
|
||||||
|
|
||||||
if( !m_auxAxis )
|
if( !m_auxAxis )
|
||||||
return nearest;
|
return nearest;
|
||||||
|
|
|
@ -542,6 +542,7 @@ void SCH_EDIT_FRAME::setupUIConditions()
|
||||||
mgr->SetConditions( EE_ACTIONS::showNetNavigator, CHECK( netNavigatorCond ) );
|
mgr->SetConditions( EE_ACTIONS::showNetNavigator, CHECK( netNavigatorCond ) );
|
||||||
mgr->SetConditions( ACTIONS::showProperties, CHECK( propertiesCond ) );
|
mgr->SetConditions( ACTIONS::showProperties, CHECK( propertiesCond ) );
|
||||||
mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) );
|
mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) );
|
||||||
|
mgr->SetConditions( ACTIONS::toggleGridOverrides, CHECK( cond.GridOverrides() ) );
|
||||||
mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) );
|
mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) );
|
||||||
mgr->SetConditions( ACTIONS::millimetersUnits,
|
mgr->SetConditions( ACTIONS::millimetersUnits,
|
||||||
CHECK( cond.Units( EDA_UNITS::MILLIMETRES ) ) );
|
CHECK( cond.Units( EDA_UNITS::MILLIMETRES ) ) );
|
||||||
|
|
|
@ -196,6 +196,7 @@ void SCH_EDIT_FRAME::ReCreateOptToolbar()
|
||||||
}
|
}
|
||||||
|
|
||||||
m_optionsToolBar->Add( ACTIONS::toggleGrid, ACTION_TOOLBAR::TOGGLE );
|
m_optionsToolBar->Add( ACTIONS::toggleGrid, ACTION_TOOLBAR::TOGGLE );
|
||||||
|
m_optionsToolBar->Add( ACTIONS::toggleGridOverrides, ACTION_TOOLBAR::TOGGLE );
|
||||||
m_optionsToolBar->Add( ACTIONS::inchesUnits, ACTION_TOOLBAR::TOGGLE );
|
m_optionsToolBar->Add( ACTIONS::inchesUnits, ACTION_TOOLBAR::TOGGLE );
|
||||||
m_optionsToolBar->Add( ACTIONS::milsUnits, ACTION_TOOLBAR::TOGGLE );
|
m_optionsToolBar->Add( ACTIONS::milsUnits, ACTION_TOOLBAR::TOGGLE );
|
||||||
m_optionsToolBar->Add( ACTIONS::millimetersUnits, ACTION_TOOLBAR::TOGGLE );
|
m_optionsToolBar->Add( ACTIONS::millimetersUnits, ACTION_TOOLBAR::TOGGLE );
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <sch_line.h>
|
#include <sch_line.h>
|
||||||
#include <sch_painter.h>
|
#include <sch_painter.h>
|
||||||
#include <tool/tool_manager.h>
|
#include <tool/tool_manager.h>
|
||||||
|
#include <settings/app_settings.h>
|
||||||
#include <trigo.h>
|
#include <trigo.h>
|
||||||
#include <view/view.h>
|
#include <view/view.h>
|
||||||
#include "ee_grid_helper.h"
|
#include "ee_grid_helper.h"
|
||||||
|
@ -60,7 +61,13 @@ EE_GRID_HELPER::EE_GRID_HELPER( TOOL_MANAGER* aToolMgr ) :
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VECTOR2I EE_GRID_HELPER::BestDragOrigin( const VECTOR2I& aMousePos, int aLayer,
|
VECTOR2I EE_GRID_HELPER::Align( const VECTOR2I& aPoint, GRID_HELPER_GRIDS aGrid ) const
|
||||||
|
{
|
||||||
|
return Align( aPoint, GetGridSize( aGrid ), GetOrigin() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VECTOR2I EE_GRID_HELPER::BestDragOrigin( const VECTOR2I& aMousePos, GRID_HELPER_GRIDS aGrid,
|
||||||
const EE_SELECTION& aItems )
|
const EE_SELECTION& aItems )
|
||||||
{
|
{
|
||||||
clearAnchors();
|
clearAnchors();
|
||||||
|
@ -77,9 +84,9 @@ VECTOR2I EE_GRID_HELPER::BestDragOrigin( const VECTOR2I& aMousePos, int aLayer,
|
||||||
double worldScale = m_toolMgr->GetView()->GetGAL()->GetWorldScale();
|
double worldScale = m_toolMgr->GetView()->GetGAL()->GetWorldScale();
|
||||||
double lineSnapMinCornerDistance = 50.0 / worldScale;
|
double lineSnapMinCornerDistance = 50.0 / worldScale;
|
||||||
|
|
||||||
ANCHOR* nearestOutline = nearestAnchor( aMousePos, OUTLINE, aLayer );
|
ANCHOR* nearestOutline = nearestAnchor( aMousePos, OUTLINE, aGrid );
|
||||||
ANCHOR* nearestCorner = nearestAnchor( aMousePos, CORNER, aLayer );
|
ANCHOR* nearestCorner = nearestAnchor( aMousePos, CORNER, aGrid );
|
||||||
ANCHOR* nearestOrigin = nearestAnchor( aMousePos, ORIGIN, aLayer );
|
ANCHOR* nearestOrigin = nearestAnchor( aMousePos, ORIGIN, aGrid );
|
||||||
ANCHOR* best = nullptr;
|
ANCHOR* best = nullptr;
|
||||||
double minDist = std::numeric_limits<double>::max();
|
double minDist = std::numeric_limits<double>::max();
|
||||||
|
|
||||||
|
@ -112,16 +119,17 @@ VECTOR2I EE_GRID_HELPER::BestDragOrigin( const VECTOR2I& aMousePos, int aLayer,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VECTOR2I EE_GRID_HELPER::BestSnapAnchor( const VECTOR2I& aOrigin, int aLayer, SCH_ITEM* aSkip )
|
VECTOR2I EE_GRID_HELPER::BestSnapAnchor( const VECTOR2I& aOrigin, GRID_HELPER_GRIDS aGrid,
|
||||||
|
SCH_ITEM* aSkip )
|
||||||
{
|
{
|
||||||
EE_SELECTION skipItems;
|
EE_SELECTION skipItems;
|
||||||
skipItems.Add( aSkip );
|
skipItems.Add( aSkip );
|
||||||
|
|
||||||
return BestSnapAnchor( aOrigin, aLayer, skipItems );
|
return BestSnapAnchor( aOrigin, aGrid, skipItems );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VECTOR2I EE_GRID_HELPER::BestSnapAnchor( const VECTOR2I& aOrigin, int aLayer,
|
VECTOR2I EE_GRID_HELPER::BestSnapAnchor( const VECTOR2I& aOrigin, GRID_HELPER_GRIDS aGrid,
|
||||||
const EE_SELECTION& aSkip )
|
const EE_SELECTION& aSkip )
|
||||||
{
|
{
|
||||||
constexpr int snapRange = SNAP_RANGE * schIUScale.IU_PER_MILS;
|
constexpr int snapRange = SNAP_RANGE * schIUScale.IU_PER_MILS;
|
||||||
|
@ -141,8 +149,8 @@ VECTOR2I EE_GRID_HELPER::BestSnapAnchor( const VECTOR2I& aOrigin, int aLayer,
|
||||||
for( SCH_ITEM* item : queryVisible( bb, aSkip ) )
|
for( SCH_ITEM* item : queryVisible( bb, aSkip ) )
|
||||||
computeAnchors( item, aOrigin );
|
computeAnchors( item, aOrigin );
|
||||||
|
|
||||||
ANCHOR* nearest = nearestAnchor( aOrigin, SNAPPABLE, aLayer );
|
ANCHOR* nearest = nearestAnchor( aOrigin, SNAPPABLE, aGrid );
|
||||||
VECTOR2I nearestGrid = Align( aOrigin );
|
VECTOR2I nearestGrid = Align( aOrigin, aGrid );
|
||||||
|
|
||||||
if( m_enableSnapLine && m_snapItem && m_skipPoint != VECTOR2I( m_viewSnapLine.GetPosition() ) )
|
if( m_enableSnapLine && m_snapItem && m_skipPoint != VECTOR2I( m_viewSnapLine.GetPosition() ) )
|
||||||
{
|
{
|
||||||
|
@ -233,6 +241,50 @@ VECTOR2I EE_GRID_HELPER::BestSnapAnchor( const VECTOR2I& aOrigin, int aLayer,
|
||||||
return pt;
|
return pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VECTOR2D EE_GRID_HELPER::GetGridSize( GRID_HELPER_GRIDS aGrid ) const
|
||||||
|
{
|
||||||
|
const GRID_SETTINGS& grid = m_toolMgr->GetSettings()->m_Window.grid;
|
||||||
|
|
||||||
|
VECTOR2D g = m_toolMgr->GetView()->GetGAL()->GetGridSize();
|
||||||
|
|
||||||
|
if( !grid.overrides_enabled )
|
||||||
|
return g;
|
||||||
|
|
||||||
|
switch( aGrid )
|
||||||
|
{
|
||||||
|
case GRID_CONNECTABLE:
|
||||||
|
if( grid.override_connectables )
|
||||||
|
g.x = g.y = EDA_UNIT_UTILS::UI::DoubleValueFromString(
|
||||||
|
schIUScale, EDA_UNITS::MILS, grid.override_connectables_size );
|
||||||
|
|
||||||
|
break;
|
||||||
|
case GRID_WIRES:
|
||||||
|
if( grid.override_wires )
|
||||||
|
g.x = g.y = EDA_UNIT_UTILS::UI::DoubleValueFromString( schIUScale, EDA_UNITS::MILS,
|
||||||
|
grid.override_wires_size );
|
||||||
|
|
||||||
|
break;
|
||||||
|
case GRID_TEXT:
|
||||||
|
if( grid.override_text )
|
||||||
|
g.x = g.y = EDA_UNIT_UTILS::UI::DoubleValueFromString( schIUScale, EDA_UNITS::MILS,
|
||||||
|
grid.override_text_size );
|
||||||
|
|
||||||
|
break;
|
||||||
|
case GRID_GRAPHICS:
|
||||||
|
if( grid.override_graphics )
|
||||||
|
g.x = g.y = EDA_UNIT_UTILS::UI::DoubleValueFromString( schIUScale, EDA_UNITS::MILS,
|
||||||
|
grid.override_graphics_size );
|
||||||
|
|
||||||
|
break;
|
||||||
|
case GRID_CURRENT:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return g;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SCH_ITEM* EE_GRID_HELPER::GetSnapped() const
|
SCH_ITEM* EE_GRID_HELPER::GetSnapped() const
|
||||||
{
|
{
|
||||||
if( !m_snapItem )
|
if( !m_snapItem )
|
||||||
|
@ -268,6 +320,68 @@ std::set<SCH_ITEM*> EE_GRID_HELPER::queryVisible( const BOX2I& aArea,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GRID_HELPER_GRIDS EE_GRID_HELPER::GetSelectionGrid( const EE_SELECTION& aSelection )
|
||||||
|
{
|
||||||
|
GRID_HELPER_GRIDS grid = GetItemGrid( static_cast<const SCH_ITEM*>( aSelection.Front() ) );
|
||||||
|
|
||||||
|
// Find the largest grid of all the items and use that
|
||||||
|
for( EDA_ITEM* item : aSelection )
|
||||||
|
{
|
||||||
|
GRID_HELPER_GRIDS itemGrid = GetItemGrid( static_cast<SCH_ITEM*>( item ) );
|
||||||
|
|
||||||
|
if( GetGridSize( itemGrid ) > GetGridSize( grid ) )
|
||||||
|
grid = itemGrid;
|
||||||
|
}
|
||||||
|
|
||||||
|
return grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GRID_HELPER_GRIDS EE_GRID_HELPER::GetItemGrid( const SCH_ITEM* aItem )
|
||||||
|
{
|
||||||
|
if( !aItem )
|
||||||
|
return GRID_CURRENT;
|
||||||
|
|
||||||
|
switch( aItem->Type() )
|
||||||
|
{
|
||||||
|
case SCH_SYMBOL_T:
|
||||||
|
case SCH_PIN_T:
|
||||||
|
case SCH_SHEET_PIN_T:
|
||||||
|
case SCH_SHEET_T:
|
||||||
|
case SCH_NO_CONNECT_T:
|
||||||
|
case SCH_GLOBAL_LABEL_T:
|
||||||
|
case SCH_HIER_LABEL_T:
|
||||||
|
case SCH_LABEL_T:
|
||||||
|
case SCH_DIRECTIVE_LABEL_T:
|
||||||
|
return GRID_CONNECTABLE;
|
||||||
|
|
||||||
|
case SCH_TEXT_T:
|
||||||
|
case SCH_TEXTBOX_T:
|
||||||
|
case SCH_FIELD_T:
|
||||||
|
return GRID_TEXT;
|
||||||
|
|
||||||
|
case SCH_SHAPE_T:
|
||||||
|
case SCH_BITMAP_T:
|
||||||
|
return GRID_GRAPHICS;
|
||||||
|
|
||||||
|
case SCH_JUNCTION_T:
|
||||||
|
return GRID_WIRES;
|
||||||
|
|
||||||
|
case SCH_LINE_T:
|
||||||
|
if( aItem->IsConnectable() )
|
||||||
|
return GRID_WIRES;
|
||||||
|
else
|
||||||
|
return GRID_GRAPHICS;
|
||||||
|
|
||||||
|
case SCH_BUS_BUS_ENTRY_T:
|
||||||
|
case SCH_BUS_WIRE_ENTRY_T:
|
||||||
|
return GRID_WIRES;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return GRID_CURRENT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EE_GRID_HELPER::computeAnchors( SCH_ITEM *aItem, const VECTOR2I &aRefPos, bool aFrom,
|
void EE_GRID_HELPER::computeAnchors( SCH_ITEM *aItem, const VECTOR2I &aRefPos, bool aFrom,
|
||||||
bool aIncludeText )
|
bool aIncludeText )
|
||||||
{
|
{
|
||||||
|
@ -346,9 +460,9 @@ EE_GRID_HELPER::ANCHOR* EE_GRID_HELPER::nearestAnchor( const VECTOR2I& aPos, int
|
||||||
if( ( aFlags & a.flags ) != aFlags )
|
if( ( aFlags & a.flags ) != aFlags )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( aMatchLayer == LAYER_CONNECTABLE && !item->IsConnectable() )
|
if( aMatchLayer == LAYER_NOCONNECT && !item->IsConnectable() )
|
||||||
continue;
|
continue;
|
||||||
else if( aMatchLayer == LAYER_GRAPHICS && item->IsConnectable() )
|
else if( aMatchLayer == GRID_GRAPHICS && item->IsConnectable() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
double dist = a.Distance( aPos );
|
double dist = a.Distance( aPos );
|
||||||
|
|
|
@ -34,11 +34,15 @@
|
||||||
class SCH_ITEM;
|
class SCH_ITEM;
|
||||||
|
|
||||||
|
|
||||||
enum EE_GRID_HELPER_LAYERS : int
|
enum GRID_HELPER_GRIDS : int
|
||||||
{
|
{
|
||||||
LAYER_ANY = SCH_LAYER_ID_END + 1,
|
// When the item doesn't match an override, use the current user grid
|
||||||
LAYER_CONNECTABLE,
|
GRID_CURRENT,
|
||||||
LAYER_GRAPHICS
|
|
||||||
|
GRID_CONNECTABLE,
|
||||||
|
GRID_WIRES,
|
||||||
|
GRID_TEXT,
|
||||||
|
GRID_GRAPHICS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,6 +52,10 @@ public:
|
||||||
|
|
||||||
EE_GRID_HELPER( TOOL_MANAGER* aToolMgr );
|
EE_GRID_HELPER( TOOL_MANAGER* aToolMgr );
|
||||||
|
|
||||||
|
using GRID_HELPER::Align;
|
||||||
|
using GRID_HELPER::AlignGrid;
|
||||||
|
VECTOR2I Align( const VECTOR2I& aPoint, GRID_HELPER_GRIDS aGrid ) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetSnapped
|
* Function GetSnapped
|
||||||
* If the EE_GRID_HELPER has highlighted a snap point (target shown), this function
|
* If the EE_GRID_HELPER has highlighted a snap point (target shown), this function
|
||||||
|
@ -57,10 +65,19 @@ public:
|
||||||
*/
|
*/
|
||||||
SCH_ITEM* GetSnapped() const;
|
SCH_ITEM* GetSnapped() const;
|
||||||
|
|
||||||
VECTOR2I BestDragOrigin( const VECTOR2I& aMousePos, int aLayer, const EE_SELECTION& aItems );
|
VECTOR2D GetGridSize( GRID_HELPER_GRIDS aGrid ) const;
|
||||||
|
using GRID_HELPER::GetGrid;
|
||||||
|
|
||||||
VECTOR2I BestSnapAnchor( const VECTOR2I& aOrigin, int aLayer, SCH_ITEM* aDraggedItem );
|
GRID_HELPER_GRIDS GetSelectionGrid( const EE_SELECTION& aItem );
|
||||||
VECTOR2I BestSnapAnchor( const VECTOR2I& aOrigin, int aLayer, const EE_SELECTION& aSkip = {} );
|
GRID_HELPER_GRIDS GetItemGrid( const SCH_ITEM* aItem );
|
||||||
|
|
||||||
|
VECTOR2I BestDragOrigin( const VECTOR2I& aMousePos, GRID_HELPER_GRIDS aGrid,
|
||||||
|
const EE_SELECTION& aItems );
|
||||||
|
|
||||||
|
VECTOR2I BestSnapAnchor( const VECTOR2I& aOrigin, GRID_HELPER_GRIDS aGrid,
|
||||||
|
SCH_ITEM* aDraggedItem );
|
||||||
|
VECTOR2I BestSnapAnchor( const VECTOR2I& aOrigin, GRID_HELPER_GRIDS aGrid,
|
||||||
|
const EE_SELECTION& aSkip = {} );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::set<SCH_ITEM*> queryVisible( const BOX2I& aArea, const EE_SELECTION& aSkipList ) const;
|
std::set<SCH_ITEM*> queryVisible( const BOX2I& aArea, const EE_SELECTION& aSkipList ) const;
|
||||||
|
|
|
@ -729,7 +729,7 @@ int EE_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||||
OPT_TOOL_EVENT EE_SELECTION_TOOL::autostartEvent( TOOL_EVENT* aEvent, EE_GRID_HELPER& aGrid,
|
OPT_TOOL_EVENT EE_SELECTION_TOOL::autostartEvent( TOOL_EVENT* aEvent, EE_GRID_HELPER& aGrid,
|
||||||
SCH_ITEM* aItem )
|
SCH_ITEM* aItem )
|
||||||
{
|
{
|
||||||
VECTOR2I pos = aGrid.BestSnapAnchor( aEvent->Position(), LAYER_CONNECTABLE );
|
VECTOR2I pos = aGrid.BestSnapAnchor( aEvent->Position(), aGrid.GetItemGrid( aItem ) );
|
||||||
|
|
||||||
if( m_frame->eeconfig()->m_Drawing.auto_start_wires
|
if( m_frame->eeconfig()->m_Drawing.auto_start_wires
|
||||||
&& !m_toolMgr->GetTool<EE_POINT_EDITOR>()->HasPoint()
|
&& !m_toolMgr->GetTool<EE_POINT_EDITOR>()->HasPoint()
|
||||||
|
@ -1826,7 +1826,8 @@ bool EE_SELECTION_TOOL::Selectable( const EDA_ITEM* aItem, const VECTOR2I* aPos,
|
||||||
{
|
{
|
||||||
EE_GRID_HELPER grid( m_toolMgr );
|
EE_GRID_HELPER grid( m_toolMgr );
|
||||||
|
|
||||||
if( pin->IsPointClickableAnchor( grid.BestSnapAnchor( *aPos, LAYER_CONNECTABLE ) ) )
|
if( pin->IsPointClickableAnchor( grid.BestSnapAnchor(
|
||||||
|
*aPos, grid.GetItemGrid( static_cast<const SCH_ITEM*>( aItem ) ) ) ) )
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -803,7 +803,7 @@ int SCH_DRAWING_TOOLS::SingleClickPlace( const TOOL_EVENT& aEvent )
|
||||||
grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
|
grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
|
||||||
|
|
||||||
cursorPos = evt->IsPrime() ? evt->Position() : controls->GetMousePosition();
|
cursorPos = evt->IsPrime() ? evt->Position() : controls->GetMousePosition();
|
||||||
cursorPos = grid.BestSnapAnchor( cursorPos, LAYER_CONNECTABLE, nullptr );
|
cursorPos = grid.BestSnapAnchor( cursorPos, grid.GetItemGrid( previewItem ), nullptr );
|
||||||
controls->ForceCursorPosition( true, cursorPos );
|
controls->ForceCursorPosition( true, cursorPos );
|
||||||
|
|
||||||
if( evt->IsCancelInteractive() )
|
if( evt->IsCancelInteractive() )
|
||||||
|
@ -1151,7 +1151,8 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
|
||||||
bool isClassLabel = aEvent.IsAction( &EE_ACTIONS::placeClassLabel );
|
bool isClassLabel = aEvent.IsAction( &EE_ACTIONS::placeClassLabel );
|
||||||
bool isNetLabel = aEvent.IsAction( &EE_ACTIONS::placeLabel );
|
bool isNetLabel = aEvent.IsAction( &EE_ACTIONS::placeLabel );
|
||||||
bool isSheetPin = aEvent.IsAction( &EE_ACTIONS::importSheetPin );
|
bool isSheetPin = aEvent.IsAction( &EE_ACTIONS::importSheetPin );
|
||||||
int snapLayer = isText ? LAYER_GRAPHICS : LAYER_CONNECTABLE;
|
|
||||||
|
GRID_HELPER_GRIDS snapGrid = isText ? GRID_TEXT : GRID_CONNECTABLE;
|
||||||
|
|
||||||
// If we have a selected sheet use it, otherwise try to get one under the cursor
|
// If we have a selected sheet use it, otherwise try to get one under the cursor
|
||||||
if( isSheetPin )
|
if( isSheetPin )
|
||||||
|
@ -1228,7 +1229,7 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
|
||||||
grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
|
grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
|
||||||
|
|
||||||
VECTOR2I cursorPos = controls->GetMousePosition();
|
VECTOR2I cursorPos = controls->GetMousePosition();
|
||||||
cursorPos = grid.BestSnapAnchor( cursorPos, snapLayer, item );
|
cursorPos = grid.BestSnapAnchor( cursorPos, snapGrid, item );
|
||||||
controls->ForceCursorPosition( true, cursorPos );
|
controls->ForceCursorPosition( true, cursorPos );
|
||||||
|
|
||||||
// The tool hotkey is interpreted as a click when drawing
|
// The tool hotkey is interpreted as a click when drawing
|
||||||
|
@ -1362,7 +1363,7 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
getViewControls()->PinCursorInsideNonAutoscrollArea( true );
|
getViewControls()->PinCursorInsideNonAutoscrollArea( true );
|
||||||
cursorPos = getViewControls()->GetMousePosition();
|
cursorPos = getViewControls()->GetMousePosition();
|
||||||
cursorPos = grid.BestSnapAnchor( cursorPos, snapLayer, item );
|
cursorPos = grid.BestSnapAnchor( cursorPos, snapGrid, item );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( item )
|
if( item )
|
||||||
|
|
|
@ -298,7 +298,7 @@ int SCH_LINE_WIRE_BUS_TOOL::DrawSegments( const TOOL_EVENT& aEvent )
|
||||||
grid.SetSnap( !aEvent.Modifier( MD_SHIFT ) );
|
grid.SetSnap( !aEvent.Modifier( MD_SHIFT ) );
|
||||||
grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !aEvent.DisableGridSnapping() );
|
grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !aEvent.DisableGridSnapping() );
|
||||||
|
|
||||||
VECTOR2D cursorPos = grid.BestSnapAnchor( aEvent.Position(), LAYER_CONNECTABLE, nullptr );
|
VECTOR2D cursorPos = grid.BestSnapAnchor( aEvent.Position(), GRID_WIRES, nullptr );
|
||||||
startSegments( params->layer, cursorPos, params->sourceSegment );
|
startSegments( params->layer, cursorPos, params->sourceSegment );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -652,7 +652,7 @@ int SCH_LINE_WIRE_BUS_TOOL::doDrawSegments( const TOOL_EVENT& aTool, int aType,
|
||||||
VECTOR2D eventPosition = evt->HasPosition() ? evt->Position()
|
VECTOR2D eventPosition = evt->HasPosition() ? evt->Position()
|
||||||
: controls->GetMousePosition();
|
: controls->GetMousePosition();
|
||||||
|
|
||||||
VECTOR2I cursorPos = grid.BestSnapAnchor( eventPosition, LAYER_CONNECTABLE, segment );
|
VECTOR2I cursorPos = grid.BestSnapAnchor( eventPosition, GRID_WIRES, segment );
|
||||||
controls->ForceCursorPosition( true, cursorPos );
|
controls->ForceCursorPosition( true, cursorPos );
|
||||||
|
|
||||||
// Need to handle change in H/V mode while drawing
|
// Need to handle change in H/V mode while drawing
|
||||||
|
|
|
@ -458,7 +458,7 @@ bool SCH_MOVE_TOOL::doMoveSelection( const TOOL_EVENT& aEvent, SCH_COMMIT* aComm
|
||||||
TOOL_EVENT copy = aEvent;
|
TOOL_EVENT copy = aEvent;
|
||||||
TOOL_EVENT* evt = ©
|
TOOL_EVENT* evt = ©
|
||||||
VECTOR2I prevPos;
|
VECTOR2I prevPos;
|
||||||
int snapLayer = UNDEFINED_LAYER;
|
GRID_HELPER_GRIDS snapLayer = GRID_CURRENT;
|
||||||
|
|
||||||
m_cursor = controls->GetCursorPosition();
|
m_cursor = controls->GetCursorPosition();
|
||||||
|
|
||||||
|
@ -577,25 +577,12 @@ bool SCH_MOVE_TOOL::doMoveSelection( const TOOL_EVENT& aEvent, SCH_COMMIT* aComm
|
||||||
static_cast<SCH_ITEM*>( item )->UpdateDanglingState( internalPoints );
|
static_cast<SCH_ITEM*>( item )->UpdateDanglingState( internalPoints );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Generic setup
|
// Generic setup
|
||||||
//
|
snapLayer = grid.GetSelectionGrid( selection );
|
||||||
|
|
||||||
for( EDA_ITEM* item : selection )
|
for( EDA_ITEM* item : selection )
|
||||||
{
|
{
|
||||||
if( static_cast<SCH_ITEM*>( item )->IsConnectable() )
|
|
||||||
{
|
|
||||||
if( snapLayer == LAYER_GRAPHICS )
|
|
||||||
snapLayer = LAYER_ANY;
|
|
||||||
else
|
|
||||||
snapLayer = LAYER_CONNECTABLE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if( snapLayer == LAYER_CONNECTABLE )
|
|
||||||
snapLayer = LAYER_ANY;
|
|
||||||
else
|
|
||||||
snapLayer = LAYER_GRAPHICS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( item->IsNew() )
|
if( item->IsNew() )
|
||||||
{
|
{
|
||||||
// Item was added to commit in a previous command
|
// Item was added to commit in a previous command
|
||||||
|
|
|
@ -221,6 +221,7 @@ enum class BITMAPS : unsigned int
|
||||||
go_down,
|
go_down,
|
||||||
go_up,
|
go_up,
|
||||||
grid,
|
grid,
|
||||||
|
grid_override,
|
||||||
grid_select,
|
grid_select,
|
||||||
grid_select_axis,
|
grid_select_axis,
|
||||||
group,
|
group,
|
||||||
|
|
|
@ -48,6 +48,10 @@ private:
|
||||||
UNIT_BINDER m_gridOriginY;
|
UNIT_BINDER m_gridOriginY;
|
||||||
UNIT_BINDER m_userGridX;
|
UNIT_BINDER m_userGridX;
|
||||||
UNIT_BINDER m_userGridY;
|
UNIT_BINDER m_userGridY;
|
||||||
|
UNIT_BINDER m_gridOverrideConnectables;
|
||||||
|
UNIT_BINDER m_gridOverrideWires;
|
||||||
|
UNIT_BINDER m_gridOverrideText;
|
||||||
|
UNIT_BINDER m_gridOverrideGraphics;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DIALOG_GRID_SETTINGS_H
|
#endif // DIALOG_GRID_SETTINGS_H
|
||||||
|
|
|
@ -217,6 +217,9 @@ public:
|
||||||
bool IsGridVisible() const;
|
bool IsGridVisible() const;
|
||||||
virtual void SetGridVisibility( bool aVisible );
|
virtual void SetGridVisibility( bool aVisible );
|
||||||
|
|
||||||
|
bool IsGridOverridden() const;
|
||||||
|
virtual void SetGridOverrides( bool aOverride );
|
||||||
|
|
||||||
virtual COLOR4D GetGridColor() { return m_gridColor; }
|
virtual COLOR4D GetGridColor() { return m_gridColor; }
|
||||||
virtual void SetGridColor( const COLOR4D& aColor ) { m_gridColor = aColor; }
|
virtual void SetGridColor( const COLOR4D& aColor ) { m_gridColor = aColor; }
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,16 @@ struct GRID_SETTINGS
|
||||||
bool show;
|
bool show;
|
||||||
int style;
|
int style;
|
||||||
int snap;
|
int snap;
|
||||||
|
bool force_component_snap;
|
||||||
|
bool overrides_enabled;
|
||||||
|
bool override_connectables;
|
||||||
|
wxString override_connectables_size;
|
||||||
|
bool override_wires;
|
||||||
|
wxString override_wires_size;
|
||||||
|
bool override_text;
|
||||||
|
wxString override_text_size;
|
||||||
|
bool override_graphics;
|
||||||
|
wxString override_graphics_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -142,6 +142,7 @@ public:
|
||||||
static TOOL_ACTION gridResetOrigin;
|
static TOOL_ACTION gridResetOrigin;
|
||||||
static TOOL_ACTION gridPreset;
|
static TOOL_ACTION gridPreset;
|
||||||
static TOOL_ACTION toggleGrid;
|
static TOOL_ACTION toggleGrid;
|
||||||
|
static TOOL_ACTION toggleGridOverrides;
|
||||||
static TOOL_ACTION gridProperties;
|
static TOOL_ACTION gridProperties;
|
||||||
|
|
||||||
// Units
|
// Units
|
||||||
|
|
|
@ -83,6 +83,7 @@ public:
|
||||||
int GridFast1( const TOOL_EVENT& aEvent );
|
int GridFast1( const TOOL_EVENT& aEvent );
|
||||||
int GridFast2( const TOOL_EVENT& aEvent );
|
int GridFast2( const TOOL_EVENT& aEvent );
|
||||||
int ToggleGrid( const TOOL_EVENT& aEvent );
|
int ToggleGrid( const TOOL_EVENT& aEvent );
|
||||||
|
int ToggleGridOverrides( const TOOL_EVENT& aEvent );
|
||||||
int GridProperties( const TOOL_EVENT& aEvent );
|
int GridProperties( const TOOL_EVENT& aEvent );
|
||||||
int GridPreset( int idx );
|
int GridPreset( int idx );
|
||||||
int OnGridChanged( bool aFromHotkey = true );
|
int OnGridChanged( bool aFromHotkey = true );
|
||||||
|
|
|
@ -100,6 +100,15 @@ public:
|
||||||
*/
|
*/
|
||||||
SELECTION_CONDITION GridVisible();
|
SELECTION_CONDITION GridVisible();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a functor testing if the grid overrides wires is enabled in a frame.
|
||||||
|
*
|
||||||
|
* @note This requires the frame passed into the constructor be be derived from EDA_DRAW_FRAME.
|
||||||
|
*
|
||||||
|
* @return Functor testing if grid overrides are enabled
|
||||||
|
*/
|
||||||
|
SELECTION_CONDITION GridOverrides();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a functor testing if polar coordinates are current being used.
|
* Create a functor testing if polar coordinates are current being used.
|
||||||
*
|
*
|
||||||
|
@ -152,6 +161,9 @@ protected:
|
||||||
///< Helper function used by GridVisible().
|
///< Helper function used by GridVisible().
|
||||||
static bool gridFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame );
|
static bool gridFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame );
|
||||||
|
|
||||||
|
///< Helper function used by GridOverrides().
|
||||||
|
static bool gridOverridesFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame );
|
||||||
|
|
||||||
///< Helper function used by PolarCoordinates().
|
///< Helper function used by PolarCoordinates().
|
||||||
static bool polarCoordFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame );
|
static bool polarCoordFunc( const SELECTION& aSelection, EDA_DRAW_FRAME* aFrame );
|
||||||
|
|
||||||
|
|
|
@ -46,8 +46,12 @@ public:
|
||||||
void SetAuxAxes( bool aEnable, const VECTOR2I& aOrigin = VECTOR2I( 0, 0 ) );
|
void SetAuxAxes( bool aEnable, const VECTOR2I& aOrigin = VECTOR2I( 0, 0 ) );
|
||||||
|
|
||||||
virtual VECTOR2I Align( const VECTOR2I& aPoint ) const;
|
virtual VECTOR2I Align( const VECTOR2I& aPoint ) const;
|
||||||
|
virtual VECTOR2I Align( const VECTOR2I& aPoint, const VECTOR2D& aGrid,
|
||||||
|
const VECTOR2D& aOffset ) const;
|
||||||
|
|
||||||
VECTOR2I AlignGrid( const VECTOR2I& aPoint ) const;
|
VECTOR2I AlignGrid( const VECTOR2I& aPoint ) const;
|
||||||
|
VECTOR2I AlignGrid( const VECTOR2I& aPoint, const VECTOR2D& aGrid,
|
||||||
|
const VECTOR2D& aOffset ) const;
|
||||||
|
|
||||||
void SetSkipPoint( const VECTOR2I& aPoint )
|
void SetSkipPoint( const VECTOR2I& aPoint )
|
||||||
{
|
{
|
||||||
|
@ -125,6 +129,9 @@ protected:
|
||||||
return m_enableGrid && m_toolMgr->GetView()->GetGAL()->GetGridSnapping();
|
return m_enableGrid && m_toolMgr->GetView()->GetGAL()->GetGridSnapping();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VECTOR2I computeNearest( const VECTOR2I& aPoint, const VECTOR2I& aGrid,
|
||||||
|
const VECTOR2I& aOffset ) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::vector<ANCHOR> m_anchors;
|
std::vector<ANCHOR> m_anchors;
|
||||||
|
|
||||||
|
|
|
@ -293,6 +293,7 @@ set( BMAPS_MID
|
||||||
general_ratsnest
|
general_ratsnest
|
||||||
grid_select
|
grid_select
|
||||||
grid_select_axis
|
grid_select_axis
|
||||||
|
grid_override
|
||||||
grid
|
grid
|
||||||
group
|
group
|
||||||
group_enter
|
group_enter
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 663 B |
Binary file not shown.
After Width: | Height: | Size: 685 B |
|
@ -0,0 +1,223 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
id="Слой_1"
|
||||||
|
data-name="Слой 1"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
version="1.1"
|
||||||
|
sodipodi:docname="grid_override.svg"
|
||||||
|
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1609"
|
||||||
|
inkscape:window-height="1049"
|
||||||
|
id="namedview30"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:zoom="27.961538"
|
||||||
|
inkscape:cx="3.3617607"
|
||||||
|
inkscape:cy="13.071527"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:current-layer="Слой_1"
|
||||||
|
inkscape:showpageshadow="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid_kicad"
|
||||||
|
spacingx="0.5"
|
||||||
|
spacingy="0.5"
|
||||||
|
color="#9999ff"
|
||||||
|
opacity="0.13"
|
||||||
|
empspacing="2" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata43">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title>grid</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs157368">
|
||||||
|
<style
|
||||||
|
id="style157366">.cls-1{fill:#DED3DD;}</style>
|
||||||
|
</defs>
|
||||||
|
<title
|
||||||
|
id="title157370">grid</title>
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="1.416321"
|
||||||
|
y="-1.4134227"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157372" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="6.1298695"
|
||||||
|
y="-6.1272392"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0012)"
|
||||||
|
id="rect157374" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="10.843364"
|
||||||
|
y="-10.841041"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157376" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="15.557203"
|
||||||
|
y="-15.55429"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45)"
|
||||||
|
id="rect157378" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="6.1338067"
|
||||||
|
y="3.3038428"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157380" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="10.847292"
|
||||||
|
y="-1.4098865"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0012)"
|
||||||
|
id="rect157382" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="15.560921"
|
||||||
|
y="-6.1237044"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157384" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="20.274595"
|
||||||
|
y="-10.836909"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45)"
|
||||||
|
id="rect157386" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="10.851293"
|
||||||
|
y="8.0211086"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157388" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="15.564784"
|
||||||
|
y="3.3073959"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0012)"
|
||||||
|
id="rect157390" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="20.278406"
|
||||||
|
y="-1.4064386"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157392" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="24.991987"
|
||||||
|
y="-6.1195278"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45)"
|
||||||
|
id="rect157394" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="15.56885"
|
||||||
|
y="12.738305"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157396" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="20.282276"
|
||||||
|
y="8.0246792"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0012)"
|
||||||
|
id="rect157398" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="24.995892"
|
||||||
|
y="3.3108282"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157400" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="29.709381"
|
||||||
|
y="-1.4021457"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45)"
|
||||||
|
id="rect157402" />
|
||||||
|
<path
|
||||||
|
class="cls-1"
|
||||||
|
d="M 18,10.445752 H 16 V 5.998451 a 4.0000002,4.0000002 0 0 0 -8,0 v 4.130001 H 6 V 5.998451 a 6.0000002,6.0000002 0 0 1 12,0 z"
|
||||||
|
id="path25679"
|
||||||
|
style="fill:#f2647e;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
class="cls-1"
|
||||||
|
d="M 19,10.104952 H 5 a 2,2 0 0 0 -2,2 v 10 a 2,2 0 0 0 2,2 h 14 a 2,2 0 0 0 2,-2 v -10 a 2,2 0 0 0 -2,-2 z m -6,8.5473 v 1.736 a 1,1 0 0 1 -2,0 v -1.736 a 2,2 0 1 1 2,0 z"
|
||||||
|
id="path25681"
|
||||||
|
style="fill:#f2647e;fill-opacity:1" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.7 KiB |
|
@ -0,0 +1,223 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
id="Слой_1"
|
||||||
|
data-name="Слой 1"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
version="1.1"
|
||||||
|
sodipodi:docname="grid_override.svg"
|
||||||
|
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1609"
|
||||||
|
inkscape:window-height="1049"
|
||||||
|
id="namedview30"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:zoom="9.8858966"
|
||||||
|
inkscape:cx="17.499677"
|
||||||
|
inkscape:cy="19.573338"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:current-layer="Слой_1"
|
||||||
|
inkscape:showpageshadow="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid_kicad"
|
||||||
|
spacingx="0.5"
|
||||||
|
spacingy="0.5"
|
||||||
|
color="#9999ff"
|
||||||
|
opacity="0.13"
|
||||||
|
empspacing="2" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata43">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title>grid</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs157368">
|
||||||
|
<style
|
||||||
|
id="style157366">.cls-1{fill:#545454;}</style>
|
||||||
|
</defs>
|
||||||
|
<title
|
||||||
|
id="title157370">grid</title>
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="1.416321"
|
||||||
|
y="-1.4134227"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157372" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="6.1298695"
|
||||||
|
y="-6.1272392"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0012)"
|
||||||
|
id="rect157374" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="10.843364"
|
||||||
|
y="-10.841041"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157376" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="15.557203"
|
||||||
|
y="-15.55429"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45)"
|
||||||
|
id="rect157378" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="6.1338067"
|
||||||
|
y="3.3038428"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157380" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="10.847292"
|
||||||
|
y="-1.4098865"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0012)"
|
||||||
|
id="rect157382" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="15.560921"
|
||||||
|
y="-6.1237044"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157384" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="20.274595"
|
||||||
|
y="-10.836909"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45)"
|
||||||
|
id="rect157386" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="10.851293"
|
||||||
|
y="8.0211086"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157388" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="15.564784"
|
||||||
|
y="3.3073959"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0012)"
|
||||||
|
id="rect157390" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="20.278406"
|
||||||
|
y="-1.4064386"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157392" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="24.991987"
|
||||||
|
y="-6.1195278"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45)"
|
||||||
|
id="rect157394" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="15.56885"
|
||||||
|
y="12.738305"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157396" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="20.282276"
|
||||||
|
y="8.0246792"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0012)"
|
||||||
|
id="rect157398" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="24.995892"
|
||||||
|
y="3.3108282"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45.0014)"
|
||||||
|
id="rect157400" />
|
||||||
|
<rect
|
||||||
|
class="cls-1"
|
||||||
|
x="29.709381"
|
||||||
|
y="-1.4021457"
|
||||||
|
width="2.8297"
|
||||||
|
height="2.8297"
|
||||||
|
transform="rotate(45)"
|
||||||
|
id="rect157402" />
|
||||||
|
<path
|
||||||
|
class="cls-1"
|
||||||
|
d="M 18,10.445752 H 16 V 5.998451 a 4.0000002,4.0000002 0 0 0 -8,0 v 4.130001 H 6 V 5.998451 a 6.0000002,6.0000002 0 0 1 12,0 z"
|
||||||
|
id="path25679"
|
||||||
|
style="fill:#bf2642;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
class="cls-1"
|
||||||
|
d="M 19,10.104952 H 5 a 2,2 0 0 0 -2,2 v 10 a 2,2 0 0 0 2,2 h 14 a 2,2 0 0 0 2,-2 v -10 a 2,2 0 0 0 -2,-2 z m -6,8.5473 v 1.736 a 1,1 0 0 1 -2,0 v -1.736 a 2,2 0 1 1 2,0 z"
|
||||||
|
id="path25681"
|
||||||
|
style="fill:#bf2642;fill-opacity:1" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.7 KiB |
Loading…
Reference in New Issue