KiCad PCB EDA Suite
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
pcb_draw_panel_gal.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2014-2017 CERN
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 * @author Maciej Suminski <maciej.suminski@cern.ch>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
26#include "pcb_draw_panel_gal.h"
27#include <pcb_view.h>
29#include <pcb_painter.h>
32
33#include <board.h>
34#include <footprint.h>
35#include <pcb_track.h>
36#include <macros.h>
37#include <pcb_marker.h>
38#include <pcb_generator.h>
39#include <pcb_base_frame.h>
40#include <pcbnew_settings.h>
43
44#include <pgm_base.h>
46#include <confirm.h>
47#include <progress_reporter.h>
48
50#include <zoom_defines.h>
51
52#include <functional>
53#include <memory>
54#include <thread>
55#include <fmt/format.h>
56
57using namespace std::placeholders;
58
59
60const int GAL_LAYER_ORDER[] =
61{
72
76
86
132
133
135
142
155
246
259
264
310
318
349
357
359};
360
361
362PCB_DRAW_PANEL_GAL::PCB_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWindowId,
363 const wxPoint& aPosition, const wxSize& aSize,
364 KIGFX::GAL_DISPLAY_OPTIONS& aOptions, GAL_TYPE aGalType ) :
365 EDA_DRAW_PANEL_GAL( aParentWindow, aWindowId, aPosition, aSize, aOptions, aGalType )
366{
367 m_view = new KIGFX::PCB_VIEW();
368 m_view->SetGAL( m_gal );
369
371
372 if( EDA_BASE_FRAME* frame = dynamic_cast<EDA_BASE_FRAME*>( aParentWindow ) )
373 frameType = frame->GetFrameType();
374
375 m_painter = std::make_unique<KIGFX::PCB_PAINTER>( m_gal, frameType );
376 m_view->SetPainter( m_painter.get() );
377
378 // This fixes the zoom in and zoom out limits:
380
383
384 // View controls is the first in the event handler chain, so the Tool Framework operates
385 // on updated viewport data.
387
388 // Load display options (such as filled/outline display of items).
389 // Can be made only if the parent window is an EDA_DRAW_FRAME (or a derived class)
390 // which is not always the case (namely when it is used from a wxDialog like the pad editor)
391 if( !IsDialogPreview() )
392 {
393 KIGFX::PCB_VIEW* view = static_cast<KIGFX::PCB_VIEW*>( m_view );
394 PCB_BASE_FRAME* frame = dynamic_cast<PCB_BASE_FRAME*>( GetParentEDAFrame() );
395
396 if( frame )
397 view->UpdateDisplayOptions( frame->GetDisplayOptions() );
398 }
399}
400
401
403{
404}
405
406
408{
409 m_view->Clear();
410
411 aBoard->CacheTriangulation( aReporter );
412
413 if( m_drawingSheet )
414 m_drawingSheet->SetFileName( TO_UTF8( aBoard->GetFileName() ) );
415
416 // Load drawings
417 for( BOARD_ITEM* drawing : aBoard->Drawings() )
418 m_view->Add( drawing );
419
420 // Load tracks
421 for( PCB_TRACK* track : aBoard->Tracks() )
422 m_view->Add( track );
423
424 // Load footprints and its additional elements
425 for( FOOTPRINT* footprint : aBoard->Footprints() )
426 m_view->Add( footprint );
427
428 // DRC markers
429 for( PCB_MARKER* marker : aBoard->Markers() )
430 m_view->Add( marker );
431
432 // Load zones
433 for( ZONE* zone : aBoard->Zones() )
434 m_view->Add( zone );
435
436 for( PCB_GENERATOR* generator : aBoard->Generators() )
437 m_view->Add( generator );
438
439 // Ratsnest
440 if( !aBoard->IsFootprintHolder() )
441 {
442 m_ratsnest = std::make_unique<RATSNEST_VIEW_ITEM>( aBoard->GetConnectivity() );
443 m_view->Add( m_ratsnest.get() );
444 }
445}
446
447
449{
450 m_drawingSheet.reset( aDrawingSheet );
451 m_view->Add( m_drawingSheet.get() );
452}
453
454
456{
457 COLOR_SETTINGS* cs = nullptr;
458
459 PCB_BASE_FRAME* frame = dynamic_cast<PCB_BASE_FRAME*>( GetParentEDAFrame() );
460
461 if( frame )
462 {
463 cs = frame->GetColorSettings();
464 }
465 else
466 {
467 auto* app = Pgm().GetSettingsManager().GetAppSettings<PCBNEW_SETTINGS>( "pcbnew" );
468
469 if( app )
470 cs = Pgm().GetSettingsManager().GetColorSettings( app->m_ColorTheme );
471 else
473 }
474
475 wxCHECK_RET( cs, wxT( "null COLOR_SETTINGS" ) );
476
477 auto rs = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( m_view->GetPainter()->GetSettings() );
478 rs->LoadColors( cs );
479
483}
484
485
487{
488 // Set display settings for high contrast mode
490
491 SetTopLayer( aLayer );
492 rSettings->SetActiveLayer( aLayer );
493
494 rSettings->ClearHighContrastLayers();
495 rSettings->SetLayerIsHighContrast( aLayer );
496
497 if( IsCopperLayer( aLayer ) )
498 {
499 // Bring some other layers to the front in case of copper layers and make them colored
500 // fixme do not like the idea of storing the list of layers here,
501 // should be done in some other way I guess..
502 int layers[] = {
504 GetNetnameLayer( aLayer ),
507 PAD_COPPER_LAYER_FOR( aLayer ),
508 VIA_COPPER_LAYER_FOR( aLayer ),
509 ZONE_LAYER_FOR( aLayer ),
510 BITMAP_LAYER_FOR( aLayer ),
518 };
519
520 for( int i : layers )
521 rSettings->SetLayerIsHighContrast( i );
522
523 for( int i = LAYER_UI_START; i < LAYER_UI_END; ++i )
524 rSettings->SetLayerIsHighContrast( i );
525
526 // Pads should be shown too
527 if( aLayer == B_Cu )
528 {
530 }
531 else if( aLayer == F_Cu )
532 {
534 }
535 }
536
538}
539
540
542{
545 m_view->SetTopLayer( aLayer );
546
547 // Layers that should always have on-top attribute enabled
548 const std::vector<int> layers = {
558 };
559
560 for( auto layer : layers )
561 m_view->SetTopLayer( layer );
562
563 for( int i = LAYER_UI_START; i < LAYER_UI_END; i++ )
564 m_view->SetTopLayer( i );
565
566 // Extra layers that are brought to the top if a F.* or B.* is selected
567 const std::vector<int> frontLayers = {
570 };
571
572 const std::vector<int> backLayers = {
575 };
576
577 const std::vector<int>* extraLayers = nullptr;
578
579 // Bring a few more extra layers to the top depending on the selected board side
580 if( IsFrontLayer( aLayer ) )
581 extraLayers = &frontLayers;
582 else if( IsBackLayer( aLayer ) )
583 extraLayers = &backLayers;
584
585 if( extraLayers )
586 {
587 for( auto layer : *extraLayers )
588 {
589 m_view->SetTopLayer( layer );
590
591 if( layer < PCB_LAYER_ID_COUNT )
592 {
593 m_view->SetTopLayer( ZONE_LAYER_FOR( layer ) );
597 }
598 }
599
600 // Move the active layer to the top of the stack but below all the overlay layers
601 if( !IsCopperLayer( aLayer ) )
602 {
606
607 // Fix up pad and via netnames to be below. This is hacky, we need a rethink
608 // of layer ordering...
613 }
614 }
615
616 if( IsCopperLayer( aLayer ) )
617 {
618 m_view->SetTopLayer( ZONE_LAYER_FOR( aLayer ) );
622
623 // Display labels for copper layers on the top
624 m_view->SetTopLayer( GetNetnameLayer( aLayer ) );
625 }
626
627 m_view->SetTopLayer( BITMAP_LAYER_FOR( aLayer ) );
628 m_view->EnableTopLayer( true );
630}
631
632
634{
635 // Load layer & elements visibility settings
636 for( int i = 0; i < PCB_LAYER_ID_COUNT; ++i )
637 m_view->SetLayerVisible( i, aBoard->IsLayerVisible( PCB_LAYER_ID( i ) ) );
638
640 m_view->SetLayerVisible( i, aBoard->IsElementVisible( i ) );
641
642 // Via layers controlled by dependencies
646
647 // Always enable netname layers, as their visibility is controlled by layer dependencies
648 for( int i = NETNAMES_LAYER_ID_START; i < NETNAMES_LAYER_ID_END; ++i )
649 m_view->SetLayerVisible( i, true );
650
651 for( int i = LAYER_ZONE_START; i < LAYER_ZONE_END; i++ )
652 m_view->SetLayerVisible( i, true );
653
654 for( int i = LAYER_PAD_COPPER_START; i < LAYER_PAD_COPPER_END; i++ )
655 m_view->SetLayerVisible( i, true );
656
657 for( int i = LAYER_VIA_COPPER_START; i < LAYER_VIA_COPPER_END; i++ )
658 m_view->SetLayerVisible( i, true );
659
660 for( int i = LAYER_CLEARANCE_START; i < LAYER_CLEARANCE_END; i++ )
661 m_view->SetLayerVisible( i, false );
662
663 for( int i = LAYER_BITMAP_START; i < LAYER_BITMAP_END; i++ )
664 m_view->SetLayerVisible( i, true );
665
666 for( int i = LAYER_UI_START; i < LAYER_UI_END; i++ )
667 m_view->SetLayerVisible( i, true );
668
669 // Enable some layers that are GAL specific
681}
682
683
685 std::vector<MSG_PANEL_ITEM>& aList )
686{
687 BOARD* board = static_cast<PCB_BASE_FRAME*>( GetParentEDAFrame() )->GetBoard();
688 int padCount = 0;
689 int viaCount = 0;
690 int trackSegmentCount = 0;
691 std::set<int> netCodes;
692 int unconnected = (int) board->GetConnectivity()->GetUnconnectedCount( true );
693
694 for( PCB_TRACK* item : board->Tracks() )
695 {
696 if( item->Type() == PCB_VIA_T )
697 viaCount++;
698 else
699 trackSegmentCount++;
700
701 if( item->GetNetCode() > 0 )
702 netCodes.insert( item->GetNetCode() );
703 }
704
705 for( FOOTPRINT* footprint : board->Footprints() )
706 {
707 for( PAD* pad : footprint->Pads() )
708 {
709 padCount++;
710
711 if( pad->GetNetCode() > 0 )
712 netCodes.insert( pad->GetNetCode() );
713 }
714 }
715
716 aList.emplace_back( _( "Pads" ), fmt::format( "{}", padCount ) );
717 aList.emplace_back( _( "Vias" ), fmt::format( "{}", viaCount ) );
718 aList.emplace_back( _( "Track Segments" ), fmt::format( "{}", trackSegmentCount ) );
719 aList.emplace_back( _( "Nets" ), fmt::format( "{}", (int) netCodes.size() ) );
720 aList.emplace_back( _( "Unrouted" ), fmt::format( "{}", unconnected ) );
721}
722
723
725{
726 PCB_BASE_FRAME* frame = nullptr;
727
728 if( !IsDialogPreview() )
729 frame = dynamic_cast<PCB_BASE_FRAME*>( GetParentEDAFrame() );
730
731 try
732 {
733 // Check if the current rendering back end can be properly initialized
735 }
736 catch( const std::runtime_error& e )
737 {
738 DisplayError( GetParent(), e.what() );
739
740 // Use the fallback if we have one
741 if( GAL_FALLBACK != m_backend )
742 {
744
745 if( frame )
746 frame->ActivateGalCanvas();
747 }
748 }
749
750 if( frame )
751 {
752 SetTopLayer( frame->GetActiveLayer() );
753
754 KIGFX::PCB_PAINTER* painter = static_cast<KIGFX::PCB_PAINTER*>( m_view->GetPainter() );
755 KIGFX::PCB_RENDER_SETTINGS* settings = painter->GetSettings();
756
757 settings->LoadDisplayOptions( frame->GetDisplayOptions() );
759 }
760}
761
762
764{
765 for( int i = 0; (unsigned) i < sizeof( GAL_LAYER_ORDER ) / sizeof( int ); ++i )
766 {
767 int layer = GAL_LAYER_ORDER[i];
768 wxASSERT( layer < KIGFX::VIEW::VIEW_MAX_LAYERS );
769
770 // MW: Gross hack to make SetTopLayer bring the correct bitmap layer to
771 // the top of the other bitmaps, but still below all the other layers
772 if( layer >= LAYER_BITMAP_START && layer < LAYER_BITMAP_END )
774 else
775 m_view->SetLayerOrder( layer, i );
776 }
777}
778
779
781{
782 bool rv = EDA_DRAW_PANEL_GAL::SwitchBackend( aGalType );
784 m_gal->SetWorldUnitLength( 1e-9 /* 1 nm */ / 0.0254 /* 1 inch in meters */ );
785 return rv;
786}
787
788
790{
791 if( m_ratsnest )
792 m_view->Update( m_ratsnest.get() );
793}
794
795
797{
799 return m_drawingSheet->ViewBBox();
800
801 return BOX2I();
802}
803
804
806{
807 // caching makes no sense for Cairo and other software renderers
809
810 for( int i = 0; i < KIGFX::VIEW::VIEW_MAX_LAYERS; i++ )
811 m_view->SetLayerTarget( i, target );
812
813 for( int i = 0; (unsigned) i < sizeof( GAL_LAYER_ORDER ) / sizeof( int ); ++i )
814 {
815 int layer = GAL_LAYER_ORDER[i];
816 wxASSERT( layer < KIGFX::VIEW::VIEW_MAX_LAYERS );
817
818 // Set layer display dependencies & targets
819 if( IsCopperLayer( layer ) )
820 {
821 m_view->SetRequired( ZONE_LAYER_FOR( layer ), layer );
822 m_view->SetRequired( PAD_COPPER_LAYER_FOR( layer ), layer );
823 m_view->SetRequired( VIA_COPPER_LAYER_FOR( layer ), layer );
824 m_view->SetRequired( CLEARANCE_LAYER_FOR( layer ), layer );
825
826 m_view->SetRequired( BITMAP_LAYER_FOR( layer ), layer );
828 m_view->SetRequired( GetNetnameLayer( layer ), layer );
829 }
830 else if( IsNonCopperLayer( layer ) )
831 {
832 m_view->SetRequired( ZONE_LAYER_FOR( layer ), layer );
834 m_view->SetRequired( BITMAP_LAYER_FOR( layer ), layer );
835 }
836 else if( IsNetnameLayer( layer ) )
837 {
838 m_view->SetLayerDisplayOnly( layer );
839 }
840 }
841
844
845 // Use TARGET_OVERLAY for LAYER_CONFLICTS_SHADOW, it is for items
846 // that may change while the view stays the same.
848
851
852 // Some more required layers settings
854
855 // Holes can be independent of their host objects (cf: printing drill marks)
861
862 // Via visibility
867
874
876 //m_view->SetLayerDisplayOnly( LAYER_DRC_ERROR );
878 //m_view->SetLayerDisplayOnly( LAYER_DRC_WARNING );
880 //m_view->SetLayerDisplayOnly( LAYER_DRC_EXCLUSION );
887
891
892 for( int i = LAYER_UI_START; i < LAYER_UI_END; ++i )
893 {
896 }
897}
898
899
901{
902 return static_cast<KIGFX::PCB_VIEW*>( m_view );
903}
BOX2< VECTOR2I > BOX2I
Definition: box2.h:922
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:78
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:297
bool IsFootprintHolder() const
Find out if the board is being used to hold a single footprint for editing/viewing.
Definition: board.h:327
const GENERATORS & Generators() const
Definition: board.h:344
bool IsElementVisible(GAL_LAYER_ID aLayer) const
Test whether a given element category is visible.
Definition: board.cpp:895
const ZONES & Zones() const
Definition: board.h:342
const MARKERS & Markers() const
Definition: board.h:346
const FOOTPRINTS & Footprints() const
Definition: board.h:338
const TRACKS & Tracks() const
Definition: board.h:336
const wxString & GetFileName() const
Definition: board.h:334
bool IsLayerVisible(PCB_LAYER_ID aLayer) const
A proxy function that calls the correspondent function in m_BoardSettings tests whether a given layer...
Definition: board.cpp:835
std::shared_ptr< CONNECTIVITY_DATA > GetConnectivity() const
Return a list of missing connections between components/tracks.
Definition: board.h:495
void CacheTriangulation(PROGRESS_REPORTER *aReporter=nullptr, const std::vector< ZONE * > &aZones={})
Definition: board.cpp:990
const DRAWINGS & Drawings() const
Definition: board.h:340
Color settings are a bit different than most of the settings objects in that there can be more than o...
COLOR4D GetColor(int aLayer) const
The base frame for deriving all KiCad main window classes.
The base class for create windows for drawing purpose.
static constexpr GAL_TYPE GAL_FALLBACK
std::unique_ptr< KIGFX::PAINTER > m_painter
Contains information about how to draw items using GAL.
KIGFX::GAL * m_gal
Interface for drawing objects on a 2D-surface.
@ GAL_TYPE_OPENGL
OpenGL implementation.
KIGFX::VIEW * m_view
Stores view settings (scale, center, etc.) and items to be drawn.
KIGFX::WX_VIEW_CONTROLS * m_viewControls
Control for VIEW (moving, zooming, etc.)
virtual bool SwitchBackend(GAL_TYPE aGalType)
Switch method of rendering graphics.
GAL_TYPE m_backend
Currently used GAL.
EDA_DRAW_FRAME * GetParentEDAFrame() const
Returns parent EDA_DRAW_FRAME, if available or NULL otherwise.
void SetGridColor(const COLOR4D &aGridColor)
Set the grid color.
void SetCursorColor(const COLOR4D &aCursorColor)
Set the cursor color.
void SetAxesColor(const COLOR4D &aAxesColor)
Set the axes color.
void SetWorldUnitLength(double aWorldUnitLength)
Set the unit length.
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
Contains methods for drawing PCB-specific items.
Definition: pcb_painter.h:181
virtual PCB_RENDER_SETTINGS * GetSettings() override
Return a pointer to current settings that are going to be used when drawing items.
Definition: pcb_painter.h:186
PCB specific render settings.
Definition: pcb_painter.h:79
void LoadColors(const COLOR_SETTINGS *aSettings) override
void LoadDisplayOptions(const PCB_DISPLAY_OPTIONS &aOptions)
Load settings related to display options (high-contrast mode, full or outline modes for vias/pads/tra...
void UpdateDisplayOptions(const PCB_DISPLAY_OPTIONS &aOptions)
Definition: pcb_view.cpp:122
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
void ClearHighContrastLayers()
Clear the list of active layers.
void SetActiveLayer(PCB_LAYER_ID aLayer)
void SetLayerIsHighContrast(int aLayerId, bool aEnabled=true)
Set the specified layer as high-contrast.
static constexpr int TOP_LAYER_MODIFIER
Rendering order modifier for layers that are marked as top layers.
Definition: view.h:744
void UpdateAllLayersOrder()
Do everything that is needed to apply the rendering order of layers.
Definition: view.cpp:896
void SetRequired(int aLayerId, int aRequiredId, bool aRequired=true)
Mark the aRequiredId layer as required for the aLayerId layer.
Definition: view.cpp:398
void SetLayerDisplayOnly(int aLayer, bool aDisplayOnly=true)
Set a layer display-only (ie: to be rendered but not returned by hit test queries).
Definition: view.h:477
int GetLayerOrder(int aLayer) const
Return rendering order of a particular layer.
Definition: view.cpp:654
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
Definition: view.cpp:297
virtual void EnableTopLayer(bool aEnable)
Enable or disable display of the top layer.
Definition: view.cpp:856
void SetPainter(PAINTER *aPainter)
Set the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:206
void UpdateAllLayersColor()
Apply the new coloring scheme to all layers.
Definition: view.cpp:765
void SetGAL(GAL *aGal)
Assign a rendering device for the VIEW.
Definition: view.cpp:501
void SetLayerTarget(int aLayer, RENDER_TARGET aTarget)
Change the rendering target for a particular layer.
Definition: view.h:493
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
Definition: view.cpp:1673
void SetLayerVisible(int aLayer, bool aVisible=true)
Control the visibility of a particular layer.
Definition: view.h:396
void Clear()
Remove all items from the view.
Definition: view.cpp:1131
void ClearTopLayers()
Remove all layers from the on-the-top set (they are no longer displayed over the rest of layers).
Definition: view.cpp:881
static constexpr int VIEW_MAX_LAYERS
Maximum number of layers that may be shown.
Definition: view.h:741
void UpdateItems()
Iterate through the list of items that asked for updating and updates them.
Definition: view.cpp:1456
virtual void SetTopLayer(int aLayer, bool aEnabled=true)
Set given layer to be displayed on the top or sets back the default order of layers.
Definition: view.cpp:829
bool IsLayerVisible(int aLayer) const
Return information about visibility of a particular layer.
Definition: view.h:418
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:216
void SetScaleLimits(double aMaximum, double aMinimum)
Set minimum and maximum values for scale.
Definition: view.h:312
void SetLayerOrder(int aLayer, int aRenderingOrder)
Set rendering order of a particular layer.
Definition: view.cpp:646
An implementation of class VIEW_CONTROLS for wxWidgets library.
Definition: pad.h:54
DISPLAY_OPTIONS m_Display
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
const PCB_DISPLAY_OPTIONS & GetDisplayOptions() const
Display options control the way tracks, vias, outlines and other things are shown (for instance solid...
PCBNEW_SETTINGS * GetPcbNewSettings() const
virtual PCB_LAYER_ID GetActiveLayer() const
virtual void ActivateGalCanvas() override
Use to start up the GAL drawing canvas.
virtual COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Helper to retrieve the current color settings.
void UpdateColors()
Update the color settings in the painter and GAL.
PCB_DRAW_PANEL_GAL(wxWindow *aParentWindow, wxWindowID aWindowId, const wxPoint &aPosition, const wxSize &aSize, KIGFX::GAL_DISPLAY_OPTIONS &aOptions, GAL_TYPE aGalType=GAL_TYPE_OPENGL)
BOX2I GetDefaultViewBBox() const override
Return the bounding box of the view that should be used if model is not valid.
virtual void SetTopLayer(int aLayer) override
SetTopLayer(), with some extra smarts for PCB.
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Called when the window is shown for the first time.
std::unique_ptr< RATSNEST_VIEW_ITEM > m_ratsnest
Ratsnest view item.
void SetDrawingSheet(DS_PROXY_VIEW_ITEM *aDrawingSheet)
Sets (or updates) drawing-sheet used by the draw panel.
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void OnShow() override
Called when the window is shown for the first time.
void DisplayBoard(BOARD *aBoard, PROGRESS_REPORTER *aReporter=nullptr)
Add all items from the current board to the VIEW, so they can be displayed by GAL.
void SyncLayersVisibility(const BOARD *aBoard)
Update "visibility" property of each layer of a given BOARD.
void setDefaultLayerOrder()
< Reassign layer order to the initial settings.
virtual void SetHighContrastLayer(int aLayer) override
SetHighContrastLayer(), with some extra smarts for PCB.
std::unique_ptr< DS_PROXY_VIEW_ITEM > m_drawingSheet
Currently used drawing-sheet.
bool SwitchBackend(GAL_TYPE aGalType) override
Force refresh of the ratsnest visual representation.
void RedrawRatsnest()
Return the bounding box of the view that should be used if model is not valid.
virtual SETTINGS_MANAGER & GetSettingsManager() const
Definition: pgm_base.h:125
A progress reporter interface for use in multi-threaded environments.
COLOR_SETTINGS * GetColorSettings(const wxString &aName="user")
Retrieve a color settings object that applications can read colors from.
T * GetAppSettings(const wxString &aFilename)
Return a handle to the a given settings by type.
Handle a list of polygons defining a copper zone.
Definition: zone.h:74
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:170
This file is part of the common library.
#define _(s)
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
Definition: frame_type.h:33
@ FRAME_FOOTPRINT_PREVIEW
Definition: frame_type.h:48
@ LAYER_PAD_FR_NETNAMES
Additional netnames layers (not associated with a PCB layer).
Definition: layer_ids.h:200
@ LAYER_PAD_BK_NETNAMES
Definition: layer_ids.h:201
@ LAYER_PAD_NETNAMES
Definition: layer_ids.h:202
@ NETNAMES_LAYER_ID_START
Definition: layer_ids.h:194
@ NETNAMES_LAYER_ID_END
Definition: layer_ids.h:205
@ LAYER_VIA_NETNAMES
Definition: layer_ids.h:203
#define BITMAP_LAYER_FOR(boardLayer)
Macros for getting the extra layers for a given board layer.
Definition: layer_ids.h:357
#define NETNAMES_LAYER_INDEX(layer)
Macro for obtaining netname layer for a given PCB layer.
Definition: layer_ids.h:209
bool IsFrontLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a front layer.
Definition: layer_ids.h:765
bool IsBackLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a back layer.
Definition: layer_ids.h:788
bool IsNonCopperLayer(int aLayerId)
Test whether a layer is a non copper layer.
Definition: layer_ids.h:696
int GetNetnameLayer(int aLayer)
Return a netname layer corresponding to the given layer.
Definition: layer_ids.h:839
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
Definition: layer_ids.h:663
GAL_LAYER_ID
GAL layers are "virtual" layers, i.e.
Definition: layer_ids.h:228
@ LAYER_GRID
Definition: layer_ids.h:253
@ GAL_LAYER_ID_START
Definition: layer_ids.h:229
@ LAYER_LOCKED_ITEM_SHADOW
Shadow layer for locked items.
Definition: layer_ids.h:306
@ LAYER_PAD_COPPER_START
Virtual layers for pad copper on a given copper layer.
Definition: layer_ids.h:331
@ LAYER_VIA_HOLEWALLS
Definition: layer_ids.h:297
@ LAYER_CLEARANCE_END
Definition: layer_ids.h:340
@ LAYER_GRID_AXES
Definition: layer_ids.h:254
@ LAYER_CONFLICTS_SHADOW
Shadow layer for items flagged conflicting.
Definition: layer_ids.h:309
@ LAYER_FOOTPRINTS_FR
Show footprints on front.
Definition: layer_ids.h:258
@ LAYER_DRC_SHAPE1
Custom shape for DRC marker.
Definition: layer_ids.h:314
@ LAYER_ZONE_END
Definition: layer_ids.h:328
@ LAYER_NON_PLATEDHOLES
Draw usual through hole vias.
Definition: layer_ids.h:238
@ LAYER_DRAWINGSHEET
Sheet frame and title block.
Definition: layer_ids.h:277
@ LAYER_FP_REFERENCES
Show footprints references (when texts are visible).
Definition: layer_ids.h:265
@ LAYER_DRC_EXCLUSION
Layer for DRC markers which have been individually excluded.
Definition: layer_ids.h:303
@ LAYER_PADS
Meta control for all pads opacity/visibility (color ignored).
Definition: layer_ids.h:291
@ LAYER_DRC_WARNING
Layer for DRC markers with #SEVERITY_WARNING.
Definition: layer_ids.h:300
@ LAYER_UI_START
Definition: layer_ids.h:347
@ LAYER_PAD_PLATEDHOLES
to draw pad holes (plated)
Definition: layer_ids.h:270
@ GAL_LAYER_ID_END
Definition: layer_ids.h:350
@ LAYER_GP_OVERLAY
General purpose overlay.
Definition: layer_ids.h:278
@ LAYER_VIA_COPPER_START
Virtual layers for via copper on a given copper layer.
Definition: layer_ids.h:335
@ LAYER_CURSOR
PCB cursor.
Definition: layer_ids.h:281
@ LAYER_RATSNEST
Definition: layer_ids.h:252
@ LAYER_CLEARANCE_START
Virtual layers for pad/via/track clearance outlines for a given copper layer.
Definition: layer_ids.h:339
@ LAYER_DRC_SHAPE2
Custom shape for DRC marker.
Definition: layer_ids.h:315
@ LAYER_PAD_COPPER_END
Definition: layer_ids.h:332
@ LAYER_ZONE_START
Virtual layers for stacking zones and tracks on a given copper layer.
Definition: layer_ids.h:327
@ LAYER_FP_TEXT
Definition: layer_ids.h:239
@ LAYER_FOOTPRINTS_BK
Show footprints on back.
Definition: layer_ids.h:259
@ LAYER_UI_END
Definition: layer_ids.h:348
@ LAYER_ANCHOR
Anchor of items having an anchor point (texts, footprints).
Definition: layer_ids.h:247
@ LAYER_VIA_COPPER_END
Definition: layer_ids.h:336
@ LAYER_MARKER_SHADOWS
Shadows for DRC markers.
Definition: layer_ids.h:304
@ LAYER_VIA_HOLES
Draw via holes (pad holes do not use this layer).
Definition: layer_ids.h:273
@ LAYER_FP_VALUES
Show footprints values (when texts are visible).
Definition: layer_ids.h:262
@ LAYER_VIA_MICROVIA
Definition: layer_ids.h:233
@ LAYER_SELECT_OVERLAY
Selected items overlay.
Definition: layer_ids.h:279
@ LAYER_VIA_THROUGH
Draw blind/buried vias.
Definition: layer_ids.h:235
@ LAYER_BITMAP_END
Definition: layer_ids.h:344
@ LAYER_BITMAP_START
Virtual layers for background images per board layer.
Definition: layer_ids.h:343
@ LAYER_DRC_ERROR
Layer for DRC markers with #SEVERITY_ERROR.
Definition: layer_ids.h:276
@ LAYER_VIAS
Meta control for all vias opacity/visibility.
Definition: layer_ids.h:232
@ LAYER_VIA_BBLIND
Draw micro vias.
Definition: layer_ids.h:234
@ LAYER_PAD_HOLEWALLS
Definition: layer_ids.h:296
#define CLEARANCE_LAYER_FOR(boardLayer)
Definition: layer_ids.h:361
bool IsNetnameLayer(int aLayer)
Test whether a layer is a netname layer.
Definition: layer_ids.h:854
#define VIA_COPPER_LAYER_FOR(boardLayer)
Definition: layer_ids.h:360
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:60
@ User_16
Definition: layer_ids.h:139
@ In22_Cu
Definition: layer_ids.h:87
@ In11_Cu
Definition: layer_ids.h:76
@ User_29
Definition: layer_ids.h:152
@ In29_Cu
Definition: layer_ids.h:94
@ In30_Cu
Definition: layer_ids.h:95
@ User_40
Definition: layer_ids.h:163
@ User_15
Definition: layer_ids.h:138
@ User_8
Definition: layer_ids.h:131
@ F_CrtYd
Definition: layer_ids.h:116
@ User_11
Definition: layer_ids.h:134
@ User_25
Definition: layer_ids.h:148
@ In17_Cu
Definition: layer_ids.h:82
@ User_34
Definition: layer_ids.h:157
@ User_45
Definition: layer_ids.h:168
@ B_Adhes
Definition: layer_ids.h:103
@ User_36
Definition: layer_ids.h:159
@ Edge_Cuts
Definition: layer_ids.h:112
@ Dwgs_User
Definition: layer_ids.h:107
@ F_Paste
Definition: layer_ids.h:104
@ In9_Cu
Definition: layer_ids.h:74
@ Cmts_User
Definition: layer_ids.h:108
@ User_6
Definition: layer_ids.h:129
@ User_7
Definition: layer_ids.h:130
@ In19_Cu
Definition: layer_ids.h:84
@ User_19
Definition: layer_ids.h:142
@ User_23
Definition: layer_ids.h:146
@ In7_Cu
Definition: layer_ids.h:72
@ In28_Cu
Definition: layer_ids.h:93
@ In26_Cu
Definition: layer_ids.h:91
@ F_Adhes
Definition: layer_ids.h:102
@ User_41
Definition: layer_ids.h:164
@ B_Mask
Definition: layer_ids.h:98
@ B_Cu
Definition: layer_ids.h:65
@ User_14
Definition: layer_ids.h:137
@ User_39
Definition: layer_ids.h:162
@ User_5
Definition: layer_ids.h:128
@ User_20
Definition: layer_ids.h:143
@ Eco1_User
Definition: layer_ids.h:109
@ F_Mask
Definition: layer_ids.h:97
@ In21_Cu
Definition: layer_ids.h:86
@ User_42
Definition: layer_ids.h:165
@ User_43
Definition: layer_ids.h:166
@ In23_Cu
Definition: layer_ids.h:88
@ B_Paste
Definition: layer_ids.h:105
@ In15_Cu
Definition: layer_ids.h:80
@ In2_Cu
Definition: layer_ids.h:67
@ User_10
Definition: layer_ids.h:133
@ User_9
Definition: layer_ids.h:132
@ User_27
Definition: layer_ids.h:150
@ User_28
Definition: layer_ids.h:151
@ F_Fab
Definition: layer_ids.h:119
@ In10_Cu
Definition: layer_ids.h:75
@ Margin
Definition: layer_ids.h:113
@ F_SilkS
Definition: layer_ids.h:100
@ In4_Cu
Definition: layer_ids.h:69
@ B_CrtYd
Definition: layer_ids.h:115
@ Eco2_User
Definition: layer_ids.h:110
@ In16_Cu
Definition: layer_ids.h:81
@ In24_Cu
Definition: layer_ids.h:89
@ In1_Cu
Definition: layer_ids.h:66
@ User_35
Definition: layer_ids.h:158
@ User_31
Definition: layer_ids.h:154
@ User_3
Definition: layer_ids.h:126
@ User_1
Definition: layer_ids.h:124
@ User_12
Definition: layer_ids.h:135
@ B_SilkS
Definition: layer_ids.h:101
@ User_30
Definition: layer_ids.h:153
@ User_37
Definition: layer_ids.h:160
@ User_22
Definition: layer_ids.h:145
@ User_38
Definition: layer_ids.h:161
@ In13_Cu
Definition: layer_ids.h:78
@ User_4
Definition: layer_ids.h:127
@ In8_Cu
Definition: layer_ids.h:73
@ User_21
Definition: layer_ids.h:144
@ In14_Cu
Definition: layer_ids.h:79
@ User_24
Definition: layer_ids.h:147
@ PCB_LAYER_ID_COUNT
Definition: layer_ids.h:171
@ User_13
Definition: layer_ids.h:136
@ User_2
Definition: layer_ids.h:125
@ In12_Cu
Definition: layer_ids.h:77
@ User_17
Definition: layer_ids.h:140
@ In27_Cu
Definition: layer_ids.h:92
@ In6_Cu
Definition: layer_ids.h:71
@ In5_Cu
Definition: layer_ids.h:70
@ User_33
Definition: layer_ids.h:156
@ User_26
Definition: layer_ids.h:149
@ In3_Cu
Definition: layer_ids.h:68
@ User_32
Definition: layer_ids.h:155
@ In20_Cu
Definition: layer_ids.h:85
@ User_18
Definition: layer_ids.h:141
@ User_44
Definition: layer_ids.h:167
@ F_Cu
Definition: layer_ids.h:64
@ In18_Cu
Definition: layer_ids.h:83
@ In25_Cu
Definition: layer_ids.h:90
@ B_Fab
Definition: layer_ids.h:118
#define ZONE_LAYER_FOR(boardLayer)
Definition: layer_ids.h:358
#define PAD_COPPER_LAYER_FOR(boardLayer)
Definition: layer_ids.h:359
This file contains miscellaneous commonly used macros and functions.
@ TARGET_NONCACHED
Auxiliary rendering target (noncached)
Definition: definitions.h:38
@ TARGET_CACHED
Main rendering target (cached)
Definition: definitions.h:37
@ TARGET_OVERLAY
Items that may change while the view stays the same (noncached)
Definition: definitions.h:39
const int GAL_LAYER_ORDER[]
BOARD * GetBoard()
PGM_BASE & Pgm()
The global program "get" accessor.
Definition: pgm_base.cpp:1071
see class PGM_BASE
Class that computes missing connections on a PCB.
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: string_utils.h:403
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:97
WX_VIEW_CONTROLS class definition.
#define ZOOM_MAX_LIMIT_PCBNEW
Definition: zoom_defines.h:65
#define ZOOM_MIN_LIMIT_PCBNEW
Definition: zoom_defines.h:66