KiCad PCB EDA Suite
KIGFX::PCB_VIEW Class Reference

#include <pcb_view.h>

Inheritance diagram for KIGFX::PCB_VIEW:
KIGFX::VIEW

Public Types

typedef std::pair< VIEW_ITEM *, int > LAYER_ITEM_PAIR
 

Public Member Functions

 PCB_VIEW (bool aIsDynamic=true)
 
virtual ~PCB_VIEW ()
 
virtual void Add (VIEW_ITEM *aItem, int aDrawPriority=-1) override
 Add a VIEW_ITEM to the view. More...
 
virtual void Remove (VIEW_ITEM *aItem) override
 Remove a VIEW_ITEM from the view. More...
 
virtual void Update (const VIEW_ITEM *aItem, int aUpdateFlags) const override
 For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has changed. More...
 
virtual void Update (const VIEW_ITEM *aItem) const override
 For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has changed. More...
 
void UpdateDisplayOptions (const PCB_DISPLAY_OPTIONS &aOptions)
 
virtual int Query (const BOX2I &aRect, std::vector< LAYER_ITEM_PAIR > &aResult) const
 Find all visible items that touch or are within the rectangle aRect. More...
 
void SetVisible (VIEW_ITEM *aItem, bool aIsVisible=true)
 Set the item visibility. More...
 
void Hide (VIEW_ITEM *aItem, bool aHide=true)
 Temporarily hide the item in the view (e.g. More...
 
bool IsVisible (const VIEW_ITEM *aItem) const
 Return information if the item is visible (or not). More...
 
bool HasItem (const VIEW_ITEM *aItem) const
 Indicates whether or not the given item has been added to the view. More...
 
void SetRequired (int aLayerId, int aRequiredId, bool aRequired=true)
 Mark the aRequiredId layer as required for the aLayerId layer. More...
 
void CopySettings (const VIEW *aOtherView)
 Copy layers and visibility settings from another view. More...
 
void SetGAL (GAL *aGal)
 Assign a rendering device for the VIEW. More...
 
GALGetGAL () const
 Return the #GAL this view is using to draw graphical primitives. More...
 
void SetPainter (PAINTER *aPainter)
 Set the painter object used by the view for drawing #VIEW_ITEMS. More...
 
PAINTERGetPainter () const
 Return the painter object used by the view for drawing #VIEW_ITEMS. More...
 
void SetViewport (const BOX2D &aViewport)
 Set the visible area of the VIEW. More...
 
BOX2D GetViewport () const
 Return the current viewport visible area rectangle. More...
 
void SetMirror (bool aMirrorX, bool aMirrorY)
 Control the mirroring of the VIEW. More...
 
bool IsMirroredX () const
 Return true if view is flipped across the X axis. More...
 
bool IsMirroredY () const
 Return true if view is flipped across the Y axis. More...
 
virtual void SetScale (double aScale, VECTOR2D aAnchor={ 0, 0 })
 Set the scaling factor, zooming around a given anchor point. More...
 
double GetScale () const
 
void SetBoundary (const BOX2D &aBoundary)
 Set limits for view area. More...
 
void SetBoundary (const BOX2I &aBoundary)
 Set limits for view area. More...
 
const BOX2DGetBoundary () const
 
void SetScaleLimits (double aMaximum, double aMinimum)
 Set minimum and maximum values for scale. More...
 
void SetCenter (const VECTOR2D &aCenter)
 Set the center point of the VIEW (i.e. More...
 
void SetCenter (const VECTOR2D &aCenter, const std::vector< BOX2D > &obscuringScreenRects)
 Set the center point of the VIEW, attempting to avoid obscuringScreenRects (for instance, the screen rect of a modeless dialog in front of the VIEW). More...
 
const VECTOR2DGetCenter () const
 Return the center point of this VIEW (in world space coordinates). More...
 
VECTOR2D ToWorld (const VECTOR2D &aCoord, bool aAbsolute=true) const
 Converts a screen space point/vector to a point/vector in world space coordinates. More...
 
double ToWorld (double aSize) const
 Converts a screen space one dimensional size to a one dimensional size in world space coordinates. More...
 
VECTOR2D ToScreen (const VECTOR2D &aCoord, bool aAbsolute=true) const
 Convert a world space point/vector to a point/vector in screen space coordinates. More...
 
double ToScreen (double aSize) const
 Convert a world space one dimensional size to a one dimensional size in screen space. More...
 
const VECTOR2IGetScreenPixelSize () const
 Return the size of the our rendering area in pixels. More...
 
void Clear ()
 Remove all items from the view. More...
 
void SetLayerVisible (int aLayer, bool aVisible=true)
 Control the visibility of a particular layer. More...
 
bool IsLayerVisible (int aLayer) const
 Return information about visibility of a particular layer. More...
 
void SetLayerDiff (int aLayer, bool aDiff=true)
 Set the whether the layer should drawn differentially. More...
 
void SetLayerHasNegatives (int aLayer, bool aNegatives=true)
 Set the status of negatives presense in a particular layer. More...
 
void SetLayerDisplayOnly (int aLayer, bool aDisplayOnly=true)
 Set a layer display-only (ie: to be rendered but not returned by hit test queries). More...
 
void SetLayerTarget (int aLayer, RENDER_TARGET aTarget)
 Change the rendering target for a particular layer. More...
 
void SetLayerOrder (int aLayer, int aRenderingOrder)
 Set rendering order of a particular layer. More...
 
int GetLayerOrder (int aLayer) const
 Return rendering order of a particular layer. More...
 
void SortLayers (int aLayers[], int &aCount) const
 Change the order of given layer ids, so after sorting the order corresponds to layers rendering order (descending, ie. More...
 
void ReorderLayerData (std::unordered_map< int, int > aReorderMap)
 Remap the data between layer ids without invalidating that data. More...
 
void UpdateLayerColor (int aLayer)
 Apply the new coloring scheme held by RENDER_SETTINGS in case that it has changed. More...
 
void UpdateAllLayersColor ()
 Apply the new coloring scheme to all layers. More...
 
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. More...
 
virtual void EnableTopLayer (bool aEnable)
 Enable or disable display of the top layer. More...
 
virtual int GetTopLayer () const
 
void ClearTopLayers ()
 Remove all layers from the on-the-top set (they are no longer displayed over the rest of layers). More...
 
void UpdateAllLayersOrder ()
 Do everything that is needed to apply the rendering order of layers. More...
 
void ClearTargets ()
 Clear targets that are marked as dirty. More...
 
virtual void Redraw ()
 Immediately redraws the whole view. More...
 
void RecacheAllItems ()
 Rebuild GAL display lists. More...
 
bool IsDynamic () const
 Tell if the VIEW is dynamic (ie. More...
 
bool IsDirty () const
 Return true if any of the VIEW layers needs to be refreshened. More...
 
bool IsTargetDirty (int aTarget) const
 Return true if any of layers belonging to the target or the target itself should be redrawn. More...
 
void MarkTargetDirty (int aTarget)
 Set or clear target 'dirty' flag. More...
 
bool IsCached (int aLayer) const
 Return true if the layer is cached. More...
 
void MarkDirty ()
 Force redraw of view on the next rendering. More...
 
void MarkClean ()
 Force redraw of view on the next rendering. More...
 
void UpdateItems ()
 Iterate through the list of items that asked for updating and updates them. More...
 
void UpdateAllItems (int aUpdateFlags)
 Update all items in the view according to the given flags. More...
 
void UpdateAllItemsConditionally (int aUpdateFlags, std::function< bool(VIEW_ITEM *)> aCondition)
 Update items in the view according to the given flags and condition. More...
 
bool IsUsingDrawPriority () const
 
void UseDrawPriority (bool aFlag)
 
void ReverseDrawOrder (bool aFlag)
 Only takes effect if UseDrawPriority is true. More...
 
std::shared_ptr< VIEW_OVERLAYMakeOverlay ()
 
void InitPreview ()
 
void ClearPreview ()
 
void AddToPreview (EDA_ITEM *aItem, bool aTakeOwnership=true)
 
void ShowPreview (bool aShow=true)
 
std::unique_ptr< VIEWDataReference () const
 Return a new VIEW object that shares the same set of VIEW_ITEMs and LAYERs. More...
 

Static Public Member Functions

static void OnDestroy (VIEW_ITEM *aItem)
 Nasty hack, invoked by the destructor of VIEW_ITEM to auto-remove the item from the owning VIEW if there is any. More...
 

Static Public Attributes

static constexpr int VIEW_MAX_LAYERS = 512
 Rendering order modifier for layers that are marked as top layers. More...
 
static constexpr int TOP_LAYER_MODIFIER = -VIEW_MAX_LAYERS
 

Protected Member Functions

void redrawRect (const BOX2I &aRect)
 
void markTargetClean (int aTarget)
 
void draw (VIEW_ITEM *aItem, int aLayer, bool aImmediate=false)
 Draw an item, but on a specified layers. More...
 
void draw (VIEW_ITEM *aItem, bool aImmediate=false)
 Draw an item on all layers that the item uses. More...
 
void draw (VIEW_GROUP *aGroup, bool aImmediate=false)
 Draw a group of items on all layers that those items use. More...
 
void sortLayers ()
 Clear cached GAL group numbers (ONLY numbers stored in VIEW_ITEMs, not group objects used by GAL) More...
 
void clearGroupCache ()
 
void invalidateItem (VIEW_ITEM *aItem, int aUpdateFlags)
 Manage dirty flags & redraw queuing when updating an item. More...
 
void updateItemColor (VIEW_ITEM *aItem, int aLayer)
 Update all information needed to draw an item. More...
 
void updateItemGeometry (VIEW_ITEM *aItem, int aLayer)
 Update bounding box of an item. More...
 
void updateBbox (VIEW_ITEM *aItem)
 Update set of layers that an item occupies. More...
 
void updateLayers (VIEW_ITEM *aItem)
 Determine rendering order of layers. Used in display order sorting function. More...
 
bool areRequiredLayersEnabled (int aLayerId) const
 

Static Protected Member Functions

static bool compareRenderingOrder (VIEW_LAYER *aI, VIEW_LAYER *aJ)
 Check if every layer required by the aLayerId layer is enabled. More...
 

Protected Attributes

std::unique_ptr< KIGFX::VIEW_GROUPm_preview
 
std::vector< EDA_ITEM * > m_ownedItems
 Whether to use rendering order modifier or not. More...
 
bool m_enableOrderModifier
 The set of possible displayed layers and its properties. More...
 
std::vector< VIEW_LAYERm_layers
 Sorted list of pointers to members of m_layers. More...
 
std::vector< VIEW_LAYER * > m_orderedLayers
 Flat list of all items. More...
 
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
 The set of layers that are displayed on the top. More...
 
std::set< unsigned int > m_topLayers
 Center point of the VIEW (the point at which we are looking at). More...
 
VECTOR2D m_center
 
double m_scale
 
BOX2D m_boundary
 
double m_minScale
 
double m_maxScale
 
bool m_mirrorX
 
bool m_mirrorY
 PAINTER contains information how do draw items. More...
 
PAINTERm_painter
 Interface to #PAINTER that is used to draw items. More...
 
GALm_gal
 Dynamic VIEW (eg. More...
 
bool m_dynamic
 Flag to mark targets as dirty so they have to be redrawn on the next refresh event. More...
 
bool m_dirtyTargets [TARGETS_NUMBER]
 Flag to respect draw priority when drawing items. More...
 
bool m_useDrawPriority
 The next sequential drawing priority. More...
 
int m_nextDrawPriority
 Flag to reverse the draw order when using draw priority. More...
 
bool m_reverseDrawOrder
 

Detailed Description

Definition at line 36 of file pcb_view.h.

Member Typedef Documentation

◆ LAYER_ITEM_PAIR

typedef std::pair<VIEW_ITEM*, int> KIGFX::VIEW::LAYER_ITEM_PAIR
inherited

Definition at line 73 of file view.h.

Constructor & Destructor Documentation

◆ PCB_VIEW()

KIGFX::PCB_VIEW::PCB_VIEW ( bool  aIsDynamic = true)

Definition at line 38 of file pcb_view.cpp.

38 :
39 VIEW( aIsDynamic )
40{
41 // Set m_boundary to define the max area size. The default value is acceptable for Pcbnew
42 // and Gerbview.
43 // However, ensure this area has the right size (max size allowed by integer coordinates) in
44 // case of the default value is changed. Could be a size depending on the drawing-sheet size.
45 typedef std::numeric_limits<int> coord_limits;
46 double pos = coord_limits::lowest() / 2 + coord_limits::epsilon();
47 double size = coord_limits::max() - coord_limits::epsilon();
48 m_boundary.SetOrigin( pos, pos );
49 m_boundary.SetSize( size, size );
50}
void SetOrigin(const Vec &pos)
Definition: box2.h:202
void SetSize(const Vec &size)
Definition: box2.h:213
VIEW(bool aIsDynamic=true)
Definition: view.cpp:256
BOX2D m_boundary
Definition: view.h:849

References KIGFX::VIEW::m_boundary, BOX2< Vec >::SetOrigin(), and BOX2< Vec >::SetSize().

◆ ~PCB_VIEW()

KIGFX::PCB_VIEW::~PCB_VIEW ( )
virtual

Definition at line 53 of file pcb_view.cpp.

54{
55}

Member Function Documentation

◆ Add()

void KIGFX::PCB_VIEW::Add ( KIGFX::VIEW_ITEM aItem,
int  aDrawPriority = -1 
)
overridevirtual

Add a VIEW_ITEM to the view.

Set aDrawPriority to -1 to assign sequential priorities.

Parameters
aItemitem to be added. No ownership is given
aDrawPrioritypriority to draw this item on its layer, lowest first.

Reimplemented from KIGFX::VIEW.

Definition at line 58 of file pcb_view.cpp.

59{
60 BOARD_ITEM* boardItem = dynamic_cast<BOARD_ITEM*>( aItem );
61
62 if( boardItem && boardItem->Type() == PCB_FOOTPRINT_T )
63 {
64 FOOTPRINT* footprint = static_cast<FOOTPRINT*>( boardItem );
65 footprint->RunOnChildren( [this]( BOARD_ITEM* aChild )
66 {
67 VIEW::Add( aChild );
68 } );
69 }
70
71 VIEW::Add( aItem, aDrawPriority );
72}
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:50
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:97
void RunOnChildren(const std::function< void(BOARD_ITEM *)> &aFunction) const
Invoke a function on all BOARD_ITEMs that belong to the footprint (pads, drawings,...
Definition: footprint.cpp:1356
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
Definition: view.cpp:316
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
Definition: typeinfo.h:86

References KIGFX::VIEW::Add(), PCB_FOOTPRINT_T, FOOTPRINT::RunOnChildren(), and EDA_ITEM::Type().

Referenced by PCB_TOOL_BASE::doInteractiveItemPlacement(), MICROWAVE_TOOL::drawMicrowaveInductor(), PCB_EDIT_FRAME::ImportSpecctraSession(), PCB_VIEWER_TOOLS::MeasureTool(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), PCB_SELECTION_TOOL::Reset(), PCB_EDIT_FRAME::ResolveDRCExclusions(), DIALOG_FOOTPRINT_CHECKER::runChecks(), PCB_SELECTION_TOOL::selectMultiple(), PCB_BASE_FRAME::ShowSolderMask(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataFromWindow(), and PCB_SELECTION_TOOL::zoomFitSelection().

◆ AddToPreview()

void KIGFX::VIEW::AddToPreview ( EDA_ITEM aItem,
bool  aTakeOwnership = true 
)
inherited

Definition at line 1618 of file view.cpp.

1619{
1620 Hide( aItem, false );
1621 m_preview->Add( aItem );
1622
1623 if( aTakeOwnership )
1624 m_ownedItems.push_back( aItem );
1625
1626 SetVisible( m_preview.get(), true );
1627 Hide( m_preview.get(), false );
1628 Update( m_preview.get() );
1629}
std::vector< EDA_ITEM * > m_ownedItems
Whether to use rendering order modifier or not.
Definition: view.h:828
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:1574
void Hide(VIEW_ITEM *aItem, bool aHide=true)
Temporarily hide the item in the view (e.g.
Definition: view.cpp:1533
std::unique_ptr< KIGFX::VIEW_GROUP > m_preview
Definition: view.h:827
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Set the item visibility.
Definition: view.cpp:1512

References KIGFX::VIEW::Hide(), KIGFX::VIEW::m_ownedItems, KIGFX::VIEW::m_preview, KIGFX::VIEW::SetVisible(), and KIGFX::VIEW::Update().

Referenced by SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), ROUTER_TOOL::InlineDrag(), DRAWING_TOOL::InteractivePlaceWithPreview(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImage(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), and SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace().

◆ areRequiredLayersEnabled()

bool KIGFX::VIEW::areRequiredLayersEnabled ( int  aLayerId) const
protectedinherited

Definition at line 1364 of file view.cpp.

1365{
1366 wxCHECK( (unsigned) aLayerId < m_layers.size(), false );
1367
1368 std::set<int>::const_iterator it, it_end;
1369
1370 for( int layer : m_layers.at( aLayerId ).requiredLayers )
1371 {
1372 // That is enough if just one layer is not enabled
1373 if( !m_layers.at( layer ).visible || !areRequiredLayersEnabled( layer ) )
1374 return false;
1375 }
1376
1377 return true;
1378}
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:834
bool areRequiredLayersEnabled(int aLayerId) const
Definition: view.cpp:1364

References KIGFX::VIEW::areRequiredLayersEnabled(), and KIGFX::VIEW::m_layers.

Referenced by KIGFX::VIEW::areRequiredLayersEnabled(), and KIGFX::VIEW::redrawRect().

◆ Clear()

void KIGFX::VIEW::Clear ( )
inherited

Remove all items from the view.

Definition at line 1096 of file view.cpp.

1097{
1098 BOX2I r;
1099 r.SetMaximum();
1100 m_allItems->clear();
1101
1102 for( VIEW_LAYER& layer : m_layers )
1103 layer.items->RemoveAll();
1104
1106
1107 m_gal->ClearCache();
1108}
virtual void ClearCache()
Delete all data created during caching of graphic items.
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
The set of layers that are displayed on the top.
Definition: view.h:840
int m_nextDrawPriority
Flag to reverse the draw order when using draw priority.
Definition: view.h:873
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:860
E_SERIE r
Definition: eserie.cpp:41

References KIGFX::GAL::ClearCache(), KIGFX::VIEW::m_allItems, KIGFX::VIEW::m_gal, KIGFX::VIEW::m_layers, KIGFX::VIEW::m_nextDrawPriority, and r.

Referenced by KIGFX::SCH_VIEW::Cleanup(), GERBVIEW_FRAME::Clear_DrawLayers(), PCB_DRAW_PANEL_GAL::DisplayBoard(), PL_DRAW_PANEL_GAL::DisplayDrawingSheet(), SCH_DRAW_PANEL::DisplaySheet(), SCH_DRAW_PANEL::DisplaySymbol(), KIGFX::SCH_VIEW::DisplaySymbol(), GERBVIEW_FRAME::doCloseWindow(), DISPLAY_FOOTPRINTS_FRAME::InitDisplay(), Refresh(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), DS_PROXY_UNDO_ITEM::Restore(), PCB_BASE_EDIT_FRAME::SetBoard(), SYMBOL_EDIT_FRAME::SetCurSymbol(), GERBVIEW_DRAW_PANEL_GAL::SwitchBackend(), DISPLAY_FOOTPRINTS_FRAME::~DISPLAY_FOOTPRINTS_FRAME(), FOOTPRINT_PREVIEW_PANEL::~FOOTPRINT_PREVIEW_PANEL(), FOOTPRINT_VIEWER_FRAME::~FOOTPRINT_VIEWER_FRAME(), GERBVIEW_FRAME::~GERBVIEW_FRAME(), and PCB_BASE_EDIT_FRAME::~PCB_BASE_EDIT_FRAME().

◆ clearGroupCache()

void KIGFX::VIEW::clearGroupCache ( )
protectedinherited

Definition at line 1187 of file view.cpp.

1188{
1189 BOX2I r;
1190
1191 r.SetMaximum();
1192 CLEAR_LAYER_CACHE_VISITOR visitor( this );
1193
1194 for( VIEW_LAYER& layer : m_layers )
1195 layer.items->Query( r, visitor );
1196}

References KIGFX::VIEW::m_layers, and r.

Referenced by KIGFX::VIEW::SetGAL().

◆ ClearPreview()

◆ ClearTargets()

void KIGFX::VIEW::ClearTargets ( )
inherited

Clear targets that are marked as dirty.

Definition at line 1111 of file view.cpp.

1112{
1114 {
1115 // TARGET_CACHED and TARGET_NONCACHED have to be redrawn together, as they contain
1116 // layers that rely on each other (eg. netnames are noncached, but tracks - are cached)
1119
1120 MarkDirty();
1121 }
1122
1124 {
1126 }
1127}
virtual void ClearTarget(RENDER_TARGET aTarget)
Clear the target for rendering.
bool IsTargetDirty(int aTarget) const
Return true if any of layers belonging to the target or the target itself should be redrawn.
Definition: view.h:606
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:641
@ TARGET_NONCACHED
Auxiliary rendering target (noncached)
Definition: definitions.h:49
@ TARGET_CACHED
Main rendering target (cached)
Definition: definitions.h:48
@ TARGET_OVERLAY
Items that may change while the view stays the same (noncached)
Definition: definitions.h:50

References KIGFX::GAL::ClearTarget(), KIGFX::VIEW::IsTargetDirty(), KIGFX::VIEW::m_gal, KIGFX::VIEW::MarkDirty(), KIGFX::TARGET_CACHED, KIGFX::TARGET_NONCACHED, and KIGFX::TARGET_OVERLAY.

Referenced by EDA_DRAW_PANEL_GAL::DoRePaint().

◆ ClearTopLayers()

void KIGFX::VIEW::ClearTopLayers ( )
inherited

Remove all layers from the on-the-top set (they are no longer displayed over the rest of layers).

Definition at line 874 of file view.cpp.

875{
876 std::set<unsigned int>::iterator it;
877
879 {
880 // Restore the previous rendering order for layers that were marked as top
881 for( it = m_topLayers.begin(); it != m_topLayers.end(); ++it )
882 m_layers[*it].renderingOrder -= TOP_LAYER_MODIFIER;
883 }
884
885 m_topLayers.clear();
886}
static constexpr int TOP_LAYER_MODIFIER
Definition: view.h:723
std::set< unsigned int > m_topLayers
Center point of the VIEW (the point at which we are looking at).
Definition: view.h:843
bool m_enableOrderModifier
The set of possible displayed layers and its properties.
Definition: view.h:831

References KIGFX::VIEW::m_enableOrderModifier, KIGFX::VIEW::m_layers, KIGFX::VIEW::m_topLayers, and KIGFX::VIEW::TOP_LAYER_MODIFIER.

Referenced by EDA_DRAW_PANEL_GAL::SetTopLayer(), GERBVIEW_DRAW_PANEL_GAL::SetTopLayer(), PL_DRAW_PANEL_GAL::SetTopLayer(), and PCB_DRAW_PANEL_GAL::SetTopLayer().

◆ compareRenderingOrder()

static bool KIGFX::VIEW::compareRenderingOrder ( VIEW_LAYER aI,
VIEW_LAYER aJ 
)
inlinestaticprotectedinherited

Check if every layer required by the aLayerId layer is enabled.

Definition at line 812 of file view.h.

References KIGFX::VIEW::VIEW_LAYER::renderingOrder.

Referenced by KIGFX::VIEW::sortLayers().

◆ CopySettings()

void KIGFX::VIEW::CopySettings ( const VIEW aOtherView)
inherited

Copy layers and visibility settings from another view.

Parameters
aOtherViewview from which settings will be copied.

Definition at line 483 of file view.cpp.

484{
485 wxASSERT_MSG( false, wxT( "This is not implemented" ) );
486}

◆ DataReference()

std::unique_ptr< VIEW > KIGFX::VIEW::DataReference ( ) const
inherited

Return a new VIEW object that shares the same set of VIEW_ITEMs and LAYERs.

GAL, PAINTER and other properties are left uninitialized. Maximum number of layers that may be shown

Definition at line 1502 of file view.cpp.

1503{
1504 std::unique_ptr<VIEW> ret = std::make_unique<VIEW>();
1505 ret->m_allItems = m_allItems;
1506 ret->m_layers = m_layers;
1507 ret->sortLayers();
1508 return ret;
1509}

References KIGFX::VIEW::m_allItems, and KIGFX::VIEW::m_layers.

Referenced by BOARD_PRINTOUT::DrawPage().

◆ draw() [1/3]

void KIGFX::VIEW::draw ( VIEW_GROUP aGroup,
bool  aImmediate = false 
)
protectedinherited

Draw a group of items on all layers that those items use.

Parameters
aGroupis the group to be drawn.
aImmediatedictates the way of drawing - it allows one to force immediate drawing mode for cached items. Sort m_orderedLayers when layer rendering order has changed

Definition at line 1055 of file view.cpp.

1056{
1057 for( unsigned int i = 0; i < aGroup->GetSize(); i++)
1058 draw( aGroup->GetItem(i), aImmediate );
1059}
void draw(VIEW_ITEM *aItem, int aLayer, bool aImmediate=false)
Draw an item, but on a specified layers.
Definition: view.cpp:1012

References KIGFX::VIEW::draw(), KIGFX::VIEW_GROUP::GetItem(), and KIGFX::VIEW_GROUP::GetSize().

◆ draw() [2/3]

void KIGFX::VIEW::draw ( VIEW_ITEM aItem,
bool  aImmediate = false 
)
protectedinherited

Draw an item on all layers that the item uses.

Parameters
aItemis the item to be drawn.
aImmediatedictates the way of drawing - it allows one to force immediate drawing mode for cached items.

Definition at line 1038 of file view.cpp.

1039{
1040 int layers[VIEW_MAX_LAYERS], layers_count;
1041
1042 aItem->ViewGetLayers( layers, layers_count );
1043
1044 // Sorting is needed for drawing order dependent GALs (like Cairo)
1045 SortLayers( layers, layers_count );
1046
1047 for( int i = 0; i < layers_count; ++i )
1048 {
1049 m_gal->SetLayerDepth( m_layers.at( layers[i] ).renderingOrder );
1050 draw( aItem, layers[i], aImmediate );
1051 }
1052}
virtual void SetLayerDepth(double aLayerDepth)
Set the depth of the layer (position on the z-axis)
void SortLayers(int aLayers[], int &aCount) const
Change the order of given layer ids, so after sorting the order corresponds to layers rendering order...
Definition: view.cpp:645
static constexpr int VIEW_MAX_LAYERS
Rendering order modifier for layers that are marked as top layers.
Definition: view.h:720

References KIGFX::VIEW::draw(), KIGFX::VIEW::m_gal, KIGFX::VIEW::m_layers, KIGFX::GAL::SetLayerDepth(), KIGFX::VIEW::SortLayers(), KIGFX::VIEW::VIEW_MAX_LAYERS, and KIGFX::VIEW_ITEM::ViewGetLayers().

◆ draw() [3/3]

void KIGFX::VIEW::draw ( VIEW_ITEM aItem,
int  aLayer,
bool  aImmediate = false 
)
protectedinherited

Draw an item, but on a specified layers.

It has to be marked that some of drawing settings are based on the layer on which an item is drawn.

Parameters
aItemis the item to be drawn.
aLayeris the layer which should be drawn.
aImmediatedictates the way of drawing - it allows one to force immediate drawing mode for cached items.

Definition at line 1012 of file view.cpp.

1013{
1014 VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1015
1016 if( !viewData )
1017 return;
1018
1019 if( IsCached( aLayer ) && !aImmediate )
1020 {
1021 // Draw using cached information or create one
1022 int group = viewData->getGroup( aLayer );
1023
1024 if( group >= 0 )
1025 m_gal->DrawGroup( group );
1026 else
1027 Update( aItem );
1028 }
1029 else
1030 {
1031 // Immediate mode
1032 if( !m_painter->Draw( aItem, aLayer ) )
1033 aItem->ViewDraw( aLayer, this ); // Alternative drawing method
1034 }
1035}
virtual void DrawGroup(int aGroupNumber)
Draw the stored group.
virtual bool Draw(const VIEW_ITEM *aItem, int aLayer)=0
Takes an instance of VIEW_ITEM and passes it to a function that knows how to draw the item.
PAINTER * m_painter
Interface to #PAINTER that is used to draw items.
Definition: view.h:857
bool IsCached(int aLayer) const
Return true if the layer is cached.
Definition: view.h:624

References KIGFX::PAINTER::Draw(), KIGFX::GAL::DrawGroup(), KIGFX::VIEW_ITEM_DATA::getGroup(), group, KIGFX::VIEW::IsCached(), KIGFX::VIEW::m_gal, KIGFX::VIEW::m_painter, KIGFX::VIEW::Update(), KIGFX::VIEW_ITEM::ViewDraw(), and KIGFX::VIEW_ITEM::viewPrivData().

Referenced by KIGFX::VIEW::DRAW_ITEM_VISITOR::deferredDraw(), KIGFX::VIEW::draw(), and KIGFX::VIEW::DRAW_ITEM_VISITOR::operator()().

◆ EnableTopLayer()

void KIGFX::VIEW::EnableTopLayer ( bool  aEnable)
virtualinherited

Enable or disable display of the top layer.

When disabled, layers are rendered as usual with no influence from SetTopLayer function. Otherwise on the top there is displayed the layer set previously with SetTopLayer function.

Parameters
aEnablewhether to enable or disable display of the top layer.

Definition at line 849 of file view.cpp.

850{
851 if( aEnable == m_enableOrderModifier )
852 return;
853
854 m_enableOrderModifier = aEnable;
855
856 std::set<unsigned int>::iterator it;
857
858 if( aEnable )
859 {
860 for( it = m_topLayers.begin(); it != m_topLayers.end(); ++it )
861 m_layers[*it].renderingOrder += TOP_LAYER_MODIFIER;
862 }
863 else
864 {
865 for( it = m_topLayers.begin(); it != m_topLayers.end(); ++it )
866 m_layers[*it].renderingOrder -= TOP_LAYER_MODIFIER;
867 }
868
871}
void UpdateAllLayersOrder()
Do everything that is needed to apply the rendering order of layers.
Definition: view.cpp:889
void UpdateAllLayersColor()
Apply the new coloring scheme to all layers.
Definition: view.cpp:758

References KIGFX::VIEW::m_enableOrderModifier, KIGFX::VIEW::m_layers, KIGFX::VIEW::m_topLayers, KIGFX::VIEW::TOP_LAYER_MODIFIER, KIGFX::VIEW::UpdateAllLayersColor(), and KIGFX::VIEW::UpdateAllLayersOrder().

Referenced by PCB_DRAW_PANEL_GAL::SetTopLayer().

◆ GetBoundary()

const BOX2D & KIGFX::VIEW::GetBoundary ( ) const
inlineinherited

◆ GetCenter()

◆ GetGAL()

GAL * KIGFX::VIEW::GetGAL ( ) const
inlineinherited

Return the #GAL this view is using to draw graphical primitives.

Returns
Pointer to the currently used GAL instance.

Definition at line 195 of file view.h.

196 {
197 return m_gal;
198 }

References KIGFX::VIEW::m_gal.

Referenced by EE_GRID_HELPER::BestDragOrigin(), PCB_GRID_HELPER::BestDragOrigin(), PCB_GRID_HELPER::BestSnapAnchor(), GRID_HELPER::canUseGrid(), KIGFX::WX_VIEW_CONTROLS::CenterOnCursor(), COMMON_TOOLS::CursorControl(), PCB_CONTROL::DoSetGridOrigin(), COMMON_TOOLS::doZoomInOut(), drawBacksideTicks(), KIGFX::PREVIEW::CENTRELINE_RECT_ITEM::drawPreviewShape(), KIGFX::PREVIEW::POLYGON_ITEM::drawPreviewShape(), KIGFX::PREVIEW::DrawTextNextToCursor(), drawTicksAlongLine(), KIGFX::VIEW_OVERLAY::COMMAND_LINE::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_RECTANGLE::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_CIRCLE::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_ARC::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_POLYGON::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_POLY_POLYGON::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_POINT_POLYGON::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_SET_STROKE::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_SET_FILL::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_SET_COLOR::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_SET_WIDTH::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_GLYPH_SIZE::Execute(), KIGFX::VIEW_OVERLAY::COMMAND_BITMAP_TEXT::Execute(), GRID_HELPER::GetGrid(), GRID_HELPER::GetOrigin(), KIGFX::WX_VIEW_CONTROLS::GetRawCursorPosition(), ROUTER_TOOL::handleCommonEvents(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), PCB_VIEWER_TOOLS::MeasureTool(), COMMON_TOOLS::OnGridChanged(), COMMON_TOOLS::PanControl(), DIALOG_PAD_PROPERTIES::prepareCanvas(), SCH_BASE_FRAME::RefreshZoomDependentItems(), KIGFX::WX_VIEW_CONTROLS::SetCrossHairCursorPosition(), KIGFX::VIEW_CONTROLS::ShowCursor(), DIALOG_ERC::testErc(), PNS::TOOL_BASE::updateEndItem(), PNS::TOOL_BASE::updateStartItem(), DS_PROXY_VIEW_ITEM::ViewDraw(), KIGFX::PREVIEW::SIMPLE_OVERLAY_ITEM::ViewDraw(), EDIT_POINTS::ViewDraw(), RATSNEST_VIEW_ITEM::ViewDraw(), ROUTER_PREVIEW_ITEM::ViewDraw(), MY_DRAWING::ViewDraw(), KIGFX::PREVIEW::ARC_ASSISTANT::ViewDraw(), KIGFX::PREVIEW::RULER_ITEM::ViewDraw(), KIGFX::PREVIEW::SELECTION_AREA::ViewDraw(), KIGFX::PREVIEW::TWO_POINT_ASSISTANT::ViewDraw(), KIGFX::ORIGIN_VIEWITEM::ViewDraw(), KIGFX::VIEW_GROUP::ViewDraw(), KIGFX::VIEW_OVERLAY::ViewDraw(), and KIGFX::WX_VIEW_CONTROLS::WarpMouseCursor().

◆ GetLayerOrder()

int KIGFX::VIEW::GetLayerOrder ( int  aLayer) const
inherited

Return rendering order of a particular layer.

Lower values are rendered first.

Parameters
aLayeris the layer.
Returns
Rendering order of a particular layer.

Definition at line 639 of file view.cpp.

640{
641 return m_layers.at( aLayer ).renderingOrder;
642}

References KIGFX::VIEW::m_layers.

Referenced by PCB_DRAW_PANEL_GAL::SetTopLayer(), and KIGFX::VIEW::SortLayers().

◆ GetPainter()

PAINTER * KIGFX::VIEW::GetPainter ( ) const
inlineinherited

Return the painter object used by the view for drawing #VIEW_ITEMS.

Returns
Pointer to the currently used Painter instance.

Definition at line 213 of file view.h.

214 {
215 return m_painter;
216 }

References KIGFX::VIEW::m_painter.

Referenced by PCB_BASE_FRAME::ActivateGalCanvas(), GERBVIEW_FRAME::ApplyDisplaySettingsToGAL(), EDITOR_CONDITIONS::bboxesFunc(), DS_PROXY_VIEW_ITEM::buildDrawList(), DIALOG_NET_INSPECTOR::buildNetsList(), GERBVIEW_CONTROL::ClearAllLayers(), BOARD_INSPECTION_TOOL::ClearHighlight(), SCH_BASE_FRAME::CommonSettingsChanged(), PCB_BASE_FRAME::CommonSettingsChanged(), PL_EDITOR_FRAME::CommonSettingsChanged(), PCB_EDIT_FRAME::CommonSettingsChanged(), PCB_GRID_HELPER::computeAnchors(), SYMBOL_PREVIEW_WIDGET::DisplayPart(), SYMBOL_PREVIEW_WIDGET::DisplaySymbol(), BOARD_INSPECTION_TOOL::doHideRatsnestNet(), KIGFX::PREVIEW::POLYGON_ITEM::drawPreviewShape(), KIGFX::PREVIEW::DrawTextNextToCursor(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), FOOTPRINT_PREVIEW_PANEL::GetBackgroundColor(), FOOTPRINT_PREVIEW_PANEL::GetForegroundColor(), ROUTER_PREVIEW_ITEM::getLayerColor(), GERBVIEW_CONTROL::HighlightControl(), PNS::TOOL_BASE::highlightNet(), BOARD_INSPECTION_TOOL::HighlightNet(), BOARD_INSPECTION_TOOL::highlightNet(), ROUTER_TOOL::Init(), DRAWING_TOOL::Init(), PCB_SELECTION_TOOL::Init(), PNS_KICAD_IFACE::IsItemVisible(), PCB_EDIT_FRAME::LoadProjectSettings(), PCB_BASE_FRAME::LoadSettings(), DIALOG_PAD_PROPERTIES::onChangePadMode(), ZONE_CREATE_HELPER::OnFirstPoint(), GERBER_LAYER_WIDGET::OnLayerColorChange(), GERBER_LAYER_WIDGET::OnLayerSelect(), APPEARANCE_CONTROLS::onNetclassColorChanged(), APPEARANCE_CONTROLS::onNetclassContextMenu(), DIALOG_NET_INSPECTOR::onSelChanged(), GERBVIEW_FRAME::OnSelectActiveDCode(), GERBVIEW_FRAME::OnSelectActiveLayer(), PCB_DRAW_PANEL_GAL::OnShow(), DIALOG_NET_INSPECTOR::onSortingChanged(), PCB_GRID_HELPER::PCB_GRID_HELPER(), DIALOG_PAD_PROPERTIES::prepareCanvas(), PCB_GRID_HELPER::queryVisible(), NET_GRID_TABLE::Rebuild(), APPEARANCE_CONTROLS::rebuildNets(), DIALOG_PAD_PROPERTIES::redraw(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), EE_SELECTION_TOOL::Reset(), GERBVIEW_SELECTION_TOOL::Reset(), PCB_SELECTION_TOOL::Reset(), PCB_EDIT_FRAME::SaveProjectSettings(), SCH_EDIT_FRAME::SCH_EDIT_FRAME(), PCB_SELECTION_TOOL::Selectable(), PCB_BASE_FRAME::SetBoard(), EDA_DRAW_PANEL_GAL::SetHighContrastLayer(), GERBVIEW_DRAW_PANEL_GAL::SetHighContrastLayer(), PCB_DRAW_PANEL_GAL::SetHighContrastLayer(), PCB_EDIT_FRAME::setupUIConditions(), PCBNEW_PRINTOUT::setupViewLayers(), SYMBOL_PREVIEW_WIDGET::SYMBOL_PREVIEW_WIDGET(), COMMON_TOOLS::ToggleBoundingBoxes(), PCB_DRAW_PANEL_GAL::UpdateColors(), UpdateDisplayOptions(), NET_GRID_TABLE::updateNetColor(), PANEL_EESCHEMA_COLOR_SETTINGS::updatePreview(), PANEL_PCBNEW_COLOR_SETTINGS::updatePreview(), DS_PROXY_VIEW_ITEM::ViewDraw(), EDIT_POINTS::ViewDraw(), RATSNEST_VIEW_ITEM::ViewDraw(), KIGFX::PREVIEW::RULER_ITEM::ViewDraw(), KIGFX::PREVIEW::SELECTION_AREA::ViewDraw(), KIGFX::VIEW_GROUP::ViewDraw(), FP_TEXTBOX::ViewGetLOD(), PAD::ViewGetLOD(), PCB_SHAPE::ViewGetLOD(), PCB_TEXT::ViewGetLOD(), PCB_TEXTBOX::ViewGetLOD(), PCB_TRACK::ViewGetLOD(), and PCB_VIA::ViewGetLOD().

◆ GetScale()

◆ GetScreenPixelSize()

const VECTOR2I & KIGFX::VIEW::GetScreenPixelSize ( ) const
inherited

Return the size of the our rendering area in pixels.

Returns
viewport screen size.

Definition at line 1163 of file view.cpp.

1164{
1165 return m_gal->GetScreenPixelSize();
1166}
const VECTOR2I & GetScreenPixelSize() const
Return GAL canvas size in pixels.

References KIGFX::GAL::GetScreenPixelSize(), and KIGFX::VIEW::m_gal.

Referenced by KIGFX::WX_VIEW_CONTROLS::handleAutoPanning(), KIGFX::WX_VIEW_CONTROLS::onScroll(), KIGFX::WX_VIEW_CONTROLS::onTimer(), KIGFX::WX_VIEW_CONTROLS::onWheel(), and KIGFX::WX_VIEW_CONTROLS::PinCursorInsideNonAutoscrollArea().

◆ GetTopLayer()

int KIGFX::VIEW::GetTopLayer ( ) const
virtualinherited

Definition at line 813 of file view.cpp.

814{
815 if( m_topLayers.size() == 0 )
816 return 0;
817
818 return *m_topLayers.begin();
819}

References KIGFX::VIEW::m_topLayers.

Referenced by ROUTER_TOOL::getStartLayer(), BOARD_INSPECTION_TOOL::highlightNet(), PNS::TOOL_BASE::pickSingleItem(), and PNS::TOOL_BASE::updateStartItem().

◆ GetViewport()

BOX2D KIGFX::VIEW::GetViewport ( ) const
inherited

Return the current viewport visible area rectangle.

Returns
Current viewport rectangle.

Definition at line 508 of file view.cpp.

509{
510 BOX2D rect;
511 VECTOR2D screenSize = m_gal->GetScreenPixelSize();
512
513 rect.SetOrigin( ToWorld( VECTOR2D( 0, 0 ) ) );
514 rect.SetEnd( ToWorld( screenSize ) );
515
516 return rect.Normalize();
517}
BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
Definition: box2.h:119
void SetEnd(coord_type x, coord_type y)
Definition: box2.h:255
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:445
VECTOR2< double > VECTOR2D
Definition: vector2d.h:617

References KIGFX::GAL::GetScreenPixelSize(), KIGFX::VIEW::m_gal, BOX2< Vec >::Normalize(), BOX2< Vec >::SetEnd(), BOX2< Vec >::SetOrigin(), and KIGFX::VIEW::ToWorld().

Referenced by drawBacksideTicks(), drawTicksAlongLine(), PCB_SELECTION_TOOL::FindItem(), PCB_BASE_FRAME::FocusOnItems(), EDA_DRAW_FRAME::FocusOnLocation(), NL_SCHEMATIC_PLUGIN_IMPL::GetViewExtents(), NL_PCBNEW_PLUGIN_IMPL::GetViewExtents(), PCB_SELECTION_TOOL::hitTestDistance(), APPEARANCE_CONTROLS::onViewportChanged(), NL_SCHEMATIC_PLUGIN_IMPL::SetViewExtents(), NL_PCBNEW_PLUGIN_IMPL::SetViewExtents(), KIGFX::WX_VIEW_CONTROLS::UpdateScrollbars(), PCB_TRACK::ViewGetLOD(), and EE_SELECTION_TOOL::ZoomFitCrossProbeBBox().

◆ HasItem()

bool KIGFX::VIEW::HasItem ( const VIEW_ITEM aItem) const
inherited

Indicates whether or not the given item has been added to the view.

Definition at line 1560 of file view.cpp.

1561{
1562 const VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1563
1564 return viewData && viewData->m_view == this;
1565}

References KIGFX::VIEW_ITEM_DATA::m_view, and KIGFX::VIEW_ITEM::viewPrivData().

Referenced by PCB_BASE_FRAME::HideSolderMask(), and PCB_BASE_FRAME::ShowSolderMask().

◆ Hide()

void KIGFX::VIEW::Hide ( VIEW_ITEM aItem,
bool  aHide = true 
)
inherited

Temporarily hide the item in the view (e.g.

for overlaying).

Parameters
aItemthe item to modify.
aHidewhether the item is hidden (on all layers), or not.

Definition at line 1533 of file view.cpp.

1534{
1535 VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1536
1537 if( !viewData )
1538 return;
1539
1540 if( !( viewData->m_flags & VISIBLE ) )
1541 return;
1542
1543 if( aHide )
1544 viewData->m_flags |= HIDDEN;
1545 else
1546 viewData->m_flags &= ~HIDDEN;
1547
1548 Update( aItem, APPEARANCE );
1549}
@ APPEARANCE
Visibility flag has changed.
Definition: view_item.h:47
@ HIDDEN
Item is temporarily hidden (e.g.
Definition: view_item.h:61
@ VISIBLE
Item is visible (in general)
Definition: view_item.h:60

References KIGFX::APPEARANCE, KIGFX::HIDDEN, KIGFX::VIEW_ITEM_DATA::m_flags, KIGFX::VIEW::Update(), KIGFX::VIEW_ITEM::viewPrivData(), and KIGFX::VISIBLE.

Referenced by KIGFX::VIEW::AddToPreview(), KIGFX::SCH_VIEW::ClearHiddenFlags(), PCB_SELECTION_TOOL::highlight(), ROUTER_TOOL::InlineDrag(), SCH_MOVE_TOOL::moveItem(), SCH_EDITOR_CONTROL::Paste(), GERBVIEW_SELECTION_TOOL::selectVisually(), PCB_SELECTION_TOOL::unhighlight(), and GERBVIEW_SELECTION_TOOL::unselectVisually().

◆ InitPreview()

void KIGFX::VIEW::InitPreview ( )
inherited

Definition at line 1611 of file view.cpp.

1612{
1613 m_preview.reset( new KIGFX::VIEW_GROUP() );
1614 Add( m_preview.get() );
1615}
Extend VIEW_ITEM by possibility of grouping items into a single object.
Definition: view_group.h:47

References KIGFX::VIEW::Add(), and KIGFX::VIEW::m_preview.

Referenced by KIGFX::SCH_VIEW::DisplaySheet(), KIGFX::SCH_VIEW::DisplaySymbol(), ROUTER_TOOL::InlineDrag(), DRAWING_TOOL::InteractivePlaceWithPreview(), Refresh(), and PCB_BASE_EDIT_FRAME::SetBoard().

◆ invalidateItem()

void KIGFX::VIEW::invalidateItem ( VIEW_ITEM aItem,
int  aUpdateFlags 
)
protectedinherited

Manage dirty flags & redraw queuing when updating an item.

Parameters
aItemis the item to be updated.
aUpdateFlagsdetermines the way an item is refreshed. Update colors that are used for an item to be drawn

Definition at line 1199 of file view.cpp.

1200{
1201 if( aUpdateFlags & INITIAL_ADD )
1202 {
1203 // Don't update layers or bbox, since it was done in VIEW::Add()
1204 // Now that we have initialized, set flags to ALL for the code below
1205 aUpdateFlags = ALL;
1206 }
1207 else
1208 {
1209 // updateLayers updates geometry too, so we do not have to update both of them at the
1210 // same time
1211 if( aUpdateFlags & LAYERS )
1212 updateLayers( aItem );
1213 else if( aUpdateFlags & GEOMETRY )
1214 updateBbox( aItem );
1215 }
1216
1217 int layers[VIEW_MAX_LAYERS], layers_count;
1218 aItem->ViewGetLayers( layers, layers_count );
1219
1220 // Iterate through layers used by the item and recache it immediately
1221 for( int i = 0; i < layers_count; ++i )
1222 {
1223 int layerId = layers[i];
1224
1225 if( IsCached( layerId ) )
1226 {
1227 if( aUpdateFlags & ( GEOMETRY | LAYERS | REPAINT ) )
1228 updateItemGeometry( aItem, layerId );
1229 else if( aUpdateFlags & COLOR )
1230 updateItemColor( aItem, layerId );
1231 }
1232
1233 // Mark those layers as dirty, so the VIEW will be refreshed
1234 MarkTargetDirty( m_layers[layerId].target );
1235 }
1236
1237 aItem->viewPrivData()->clearUpdateFlags();
1238}
void updateItemColor(VIEW_ITEM *aItem, int aLayer)
Update all information needed to draw an item.
Definition: view.cpp:1256
void updateItemGeometry(VIEW_ITEM *aItem, int aLayer)
Update bounding box of an item.
Definition: view.cpp:1275
void updateLayers(VIEW_ITEM *aItem)
Determine rendering order of layers. Used in display order sorting function.
Definition: view.cpp:1321
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:617
void updateBbox(VIEW_ITEM *aItem)
Update set of layers that an item occupies.
Definition: view.cpp:1305
@ COLOR
Color has changed.
Definition: view_item.h:48
@ INITIAL_ADD
Item is being added to the view.
Definition: view_item.h:51
@ REPAINT
Item needs to be redrawn.
Definition: view_item.h:52
@ GEOMETRY
Position or shape has changed.
Definition: view_item.h:49
@ LAYERS
Layers have changed.
Definition: view_item.h:50
@ ALL
All except INITIAL_ADD.
Definition: view_item.h:53

References KIGFX::ALL, KIGFX::VIEW_ITEM_DATA::clearUpdateFlags(), KIGFX::COLOR, KIGFX::GEOMETRY, KIGFX::INITIAL_ADD, KIGFX::VIEW::IsCached(), KIGFX::LAYERS, KIGFX::VIEW::m_layers, KIGFX::VIEW::MarkTargetDirty(), KIGFX::REPAINT, KIGFX::VIEW::updateBbox(), KIGFX::VIEW::updateItemColor(), KIGFX::VIEW::updateItemGeometry(), KIGFX::VIEW::updateLayers(), KIGFX::VIEW::VIEW_MAX_LAYERS, KIGFX::VIEW_ITEM::ViewGetLayers(), and KIGFX::VIEW_ITEM::viewPrivData().

Referenced by KIGFX::VIEW::UpdateItems().

◆ IsCached()

bool KIGFX::VIEW::IsCached ( int  aLayer) const
inlineinherited

Return true if the layer is cached.

Definition at line 624 of file view.h.

625 {
626 wxCHECK( aLayer < (int) m_layers.size(), false );
627
628 try
629 {
630 return m_layers.at( aLayer ).target == TARGET_CACHED;
631 }
632 catch( const std::out_of_range& )
633 {
634 return false;
635 }
636 }

References KIGFX::VIEW::m_layers, and KIGFX::TARGET_CACHED.

Referenced by KIGFX::VIEW::draw(), KIGFX::VIEW::invalidateItem(), KIGFX::VIEW::RecacheAllItems(), KIGFX::VIEW::updateItemColor(), KIGFX::VIEW::updateItemGeometry(), KIGFX::VIEW::UpdateLayerColor(), and KIGFX::VIEW::updateLayers().

◆ IsDirty()

bool KIGFX::VIEW::IsDirty ( ) const
inlineinherited

Return true if any of the VIEW layers needs to be refreshened.

Returns
True in case if any of layers is marked as dirty.

Definition at line 589 of file view.h.

590 {
591 for( int i = 0; i < TARGETS_NUMBER; ++i )
592 {
593 if( IsTargetDirty( i ) )
594 return true;
595 }
596
597 return false;
598 }
@ TARGETS_NUMBER
Number of available rendering targets.
Definition: definitions.h:52

References KIGFX::VIEW::IsTargetDirty(), and KIGFX::TARGETS_NUMBER.

Referenced by EDA_DRAW_PANEL_GAL::DoRePaint(), and TOOL_MANAGER::ProcessEvent().

◆ IsDynamic()

bool KIGFX::VIEW::IsDynamic ( ) const
inlineinherited

Tell if the VIEW is dynamic (ie.

can be changed, for example displaying PCBs in a window) or static (that cannot be modified, eg. displaying image/PDF).

Definition at line 579 of file view.h.

580 {
581 return m_dynamic;
582 }
bool m_dynamic
Flag to mark targets as dirty so they have to be redrawn on the next refresh event.
Definition: view.h:864

References KIGFX::VIEW::m_dynamic.

◆ IsLayerVisible()

◆ IsMirroredX()

◆ IsMirroredY()

bool KIGFX::VIEW::IsMirroredY ( ) const
inlineinherited

Return true if view is flipped across the Y axis.

Definition at line 251 of file view.h.

252 {
253 return m_mirrorY;
254 }
bool m_mirrorY
PAINTER contains information how do draw items.
Definition: view.h:854

References KIGFX::VIEW::m_mirrorY.

Referenced by NL_SCHEMATIC_PLUGIN_IMPL::GetCameraMatrix(), and NL_PCBNEW_PLUGIN_IMPL::GetCameraMatrix().

◆ IsTargetDirty()

bool KIGFX::VIEW::IsTargetDirty ( int  aTarget) const
inlineinherited

Return true if any of layers belonging to the target or the target itself should be redrawn.

Returns
True if the above condition is fulfilled.

Definition at line 606 of file view.h.

607 {
608 wxCHECK( aTarget < TARGETS_NUMBER, false );
609 return m_dirtyTargets[aTarget];
610 }
bool m_dirtyTargets[TARGETS_NUMBER]
Flag to respect draw priority when drawing items.
Definition: view.h:867

References KIGFX::VIEW::m_dirtyTargets, and KIGFX::TARGETS_NUMBER.

Referenced by KIGFX::VIEW::ClearTargets(), EDA_DRAW_PANEL_GAL::DoRePaint(), KIGFX::VIEW::IsDirty(), and KIGFX::VIEW::redrawRect().

◆ IsUsingDrawPriority()

bool KIGFX::VIEW::IsUsingDrawPriority ( ) const
inlineinherited
Returns
true if draw priority is being respected while redrawing.

Definition at line 680 of file view.h.

681 {
682 return m_useDrawPriority;
683 }
bool m_useDrawPriority
The next sequential drawing priority.
Definition: view.h:870

References KIGFX::VIEW::m_useDrawPriority.

◆ IsVisible()

bool KIGFX::VIEW::IsVisible ( const VIEW_ITEM aItem) const
inherited

Return information if the item is visible (or not).

Parameters
aItemthe item to test.
Returns
when true, the item is visible (i.e. to be displayed, not visible in the current viewport)

Definition at line 1552 of file view.cpp.

1553{
1554 const VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1555
1556 return viewData && ( viewData->m_flags & VISIBLE );
1557}

References KIGFX::VIEW_ITEM_DATA::m_flags, KIGFX::VIEW_ITEM::viewPrivData(), and KIGFX::VISIBLE.

Referenced by PCB_GRID_HELPER::BestSnapAnchor(), EE_GRID_HELPER::BestSnapAnchor(), PCB_GRID_HELPER::computeAnchors(), PNS_KICAD_IFACE::HideItem(), PNS_KICAD_IFACE::IsItemVisible(), EE_GRID_HELPER::queryVisible(), PCB_GRID_HELPER::queryVisible(), and PCB_SELECTION_TOOL::Selectable().

◆ MakeOverlay()

std::shared_ptr< VIEW_OVERLAY > KIGFX::VIEW::MakeOverlay ( )
inherited

Definition at line 1587 of file view.cpp.

1588{
1589 std::shared_ptr<VIEW_OVERLAY> overlay = std::make_shared<VIEW_OVERLAY>();
1590
1591 Add( overlay.get() );
1592 return overlay;
1593}
std::shared_ptr< PNS_LOG_VIEWER_OVERLAY > overlay
Definition: playground.cpp:36

References KIGFX::VIEW::Add(), and overlay.

Referenced by AUTOPLACE_TOOL::autoplace().

◆ MarkClean()

void KIGFX::VIEW::MarkClean ( )
inlineinherited

Force redraw of view on the next rendering.

Definition at line 650 of file view.h.

651 {
652 for( int i = 0; i < TARGETS_NUMBER; ++i )
653 m_dirtyTargets[i] = false;
654 }

References KIGFX::VIEW::m_dirtyTargets, and KIGFX::TARGETS_NUMBER.

Referenced by KIGFX::VIEW::Redraw().

◆ MarkDirty()

◆ markTargetClean()

void KIGFX::VIEW::markTargetClean ( int  aTarget)
inlineprotectedinherited

Definition at line 747 of file view.h.

748 {
749 wxCHECK( aTarget < TARGETS_NUMBER, /* void */ );
750 m_dirtyTargets[aTarget] = false;
751 }

References KIGFX::VIEW::m_dirtyTargets, and KIGFX::TARGETS_NUMBER.

◆ MarkTargetDirty()

◆ OnDestroy()

void KIGFX::VIEW::OnDestroy ( VIEW_ITEM aItem)
staticinherited

Nasty hack, invoked by the destructor of VIEW_ITEM to auto-remove the item from the owning VIEW if there is any.

KiCad relies too much on this mechanism. This is the only linking dependency now between EDA_ITEM and VIEW class. In near future I'll replace it with observers.

Definition at line 241 of file view.cpp.

242{
243 VIEW_ITEM_DATA* data = aItem->viewPrivData();
244
245 if( !data )
246 return;
247
248 if( data->m_view )
249 data->m_view->VIEW::Remove( aItem );
250
251 delete data;
252 aItem->ClearViewPrivData();
253}

References KIGFX::VIEW_ITEM::ClearViewPrivData(), KIGFX::VIEW_ITEM_DATA::m_view, and KIGFX::VIEW_ITEM::viewPrivData().

Referenced by KIGFX::VIEW_ITEM::~VIEW_ITEM().

◆ Query()

int KIGFX::VIEW::Query ( const BOX2I aRect,
std::vector< LAYER_ITEM_PAIR > &  aResult 
) const
virtualinherited

Find all visible items that touch or are within the rectangle aRect.

Parameters
aRectarea to search for items
aResultresult of the search, containing VIEW_ITEMs associated with their layers. Sorted according to the rendering order (items that are on top of the rendering stack as first).
Returns
Number of found items.

Definition at line 422 of file view.cpp.

423{
424 if( m_orderedLayers.empty() )
425 return 0;
426
427 std::vector<VIEW_LAYER*>::const_reverse_iterator i;
428
429 // execute queries in reverse direction, so that items that are on the top of
430 // the rendering stack are returned first.
431 for( i = m_orderedLayers.rbegin(); i != m_orderedLayers.rend(); ++i )
432 {
433 // ignore layers that do not contain actual items (i.e. the selection box, menus, floats)
434 if( ( *i )->displayOnly || !( *i )->visible )
435 continue;
436
437 QUERY_VISITOR<std::vector<LAYER_ITEM_PAIR> > visitor( aResult, ( *i )->id );
438 ( *i )->items->Query( aRect, visitor );
439 }
440
441 return aResult.size();
442}
std::vector< VIEW_LAYER * > m_orderedLayers
Flat list of all items.
Definition: view.h:837

References KIGFX::VIEW::m_orderedLayers.

Referenced by DRAWING_TOOL::DrawVia(), EE_GRID_HELPER::queryVisible(), PCB_GRID_HELPER::queryVisible(), EE_SELECTION_TOOL::SelectAll(), PCB_SELECTION_TOOL::SelectAll(), EE_SELECTION_TOOL::selectMultiple(), and PCB_SELECTION_TOOL::selectMultiple().

◆ RecacheAllItems()

void KIGFX::VIEW::RecacheAllItems ( )
inherited

◆ Redraw()

void KIGFX::VIEW::Redraw ( )
virtualinherited

Immediately redraws the whole view.

Definition at line 1130 of file view.cpp.

1131{
1132#ifdef KICAD_GAL_PROFILE
1133 PROF_TIMER totalRealTime;
1134#endif /* KICAD_GAL_PROFILE */
1135
1136 VECTOR2D screenSize = m_gal->GetScreenPixelSize();
1137 BOX2D rect( ToWorld( VECTOR2D( 0, 0 ) ),
1138 ToWorld( screenSize ) - ToWorld( VECTOR2D( 0, 0 ) ) );
1139
1140 rect.Normalize();
1141 BOX2I recti( rect.GetPosition(), rect.GetSize() );
1142
1143 // The view rtree uses integer positions. Large screens can overflow this size so in
1144 // this case, simply set the rectangle to the full rtree.
1145 if( rect.GetWidth() > std::numeric_limits<int>::max()
1146 || rect.GetHeight() > std::numeric_limits<int>::max() )
1147 {
1148 recti.SetMaximum();
1149 }
1150
1151 redrawRect( recti );
1152
1153 // All targets were redrawn, so nothing is dirty
1154 MarkClean();
1155
1156#ifdef KICAD_GAL_PROFILE
1157 totalRealTime.Stop();
1158 wxLogTrace( traceGalProfile, "VIEW::Redraw(): %.1f ms", totalRealTime.msecs() );
1159#endif /* KICAD_GAL_PROFILE */
1160}
void MarkClean()
Force redraw of view on the next rendering.
Definition: view.h:650
void redrawRect(const BOX2I &aRect)
Definition: view.cpp:979
A small class to help profiling.
Definition: profile.h:47
void Stop()
Save the time when this function was called, and set the counter stane to stop.
Definition: profile.h:86
double msecs(bool aSinceLast=false)
Definition: profile.h:147
const wxChar *const traceGalProfile
Flag to enable debug output of GAL performance profiling.

References BOX2< Vec >::GetHeight(), BOX2< Vec >::GetPosition(), KIGFX::GAL::GetScreenPixelSize(), BOX2< Vec >::GetSize(), BOX2< Vec >::GetWidth(), KIGFX::VIEW::m_gal, KIGFX::VIEW::MarkClean(), PROF_TIMER::msecs(), BOX2< Vec >::Normalize(), KIGFX::VIEW::redrawRect(), BOX2< Vec >::SetMaximum(), PROF_TIMER::Stop(), KIGFX::VIEW::ToWorld(), and traceGalProfile.

Referenced by EDA_DRAW_PANEL_GAL::DoRePaint().

◆ redrawRect()

void KIGFX::VIEW::redrawRect ( const BOX2I aRect)
protectedinherited
  • Redraws contents within rect aRect

Definition at line 979 of file view.cpp.

980{
981 for( VIEW_LAYER* l : m_orderedLayers )
982 {
983 if( l->visible && IsTargetDirty( l->target ) && areRequiredLayersEnabled( l->id ) )
984 {
985 DRAW_ITEM_VISITOR drawFunc( this, l->id, m_useDrawPriority, m_reverseDrawOrder );
986
987 m_gal->SetTarget( l->target );
988 m_gal->SetLayerDepth( l->renderingOrder );
989
990 // Differential layer also work for the negatives, since both special layer types
991 // will composite on separate layers (at least in Cairo)
992 if( l->diffLayer )
994 else if( l->hasNegatives )
996
997
998 l->items->Query( aRect, drawFunc );
999
1000 if( m_useDrawPriority )
1001 drawFunc.deferredDraw();
1002
1003 if( l->diffLayer )
1005 else if( l->hasNegatives )
1007 }
1008 }
1009}
virtual void StartDiffLayer()
Begins rendering of a differential layer.
virtual void EndDiffLayer()
Ends rendering of a differential layer.
virtual void EndNegativesLayer()
Ends rendering of a negatives layer and draws it to the main layer.
virtual void StartNegativesLayer()
Begins rendering in a new layer that will be copied to the main layer in EndNegativesLayer().
virtual void SetTarget(RENDER_TARGET aTarget)
Set the target for rendering.
bool m_reverseDrawOrder
Definition: view.h:876

References KIGFX::VIEW::areRequiredLayersEnabled(), KIGFX::VIEW::DRAW_ITEM_VISITOR::deferredDraw(), KIGFX::GAL::EndDiffLayer(), KIGFX::GAL::EndNegativesLayer(), KIGFX::VIEW::IsTargetDirty(), KIGFX::VIEW::m_gal, KIGFX::VIEW::m_orderedLayers, KIGFX::VIEW::m_reverseDrawOrder, KIGFX::VIEW::m_useDrawPriority, KIGFX::GAL::SetLayerDepth(), KIGFX::GAL::SetTarget(), KIGFX::GAL::StartDiffLayer(), and KIGFX::GAL::StartNegativesLayer().

Referenced by KIGFX::VIEW::Redraw().

◆ Remove()

void KIGFX::PCB_VIEW::Remove ( KIGFX::VIEW_ITEM aItem)
overridevirtual

Remove a VIEW_ITEM from the view.

Parameters
aItemitem to be removed. Caller must dispose the removed item if necessary

Reimplemented from KIGFX::VIEW.

Definition at line 75 of file pcb_view.cpp.

76{
77 BOARD_ITEM* boardItem = dynamic_cast<BOARD_ITEM*>( aItem );
78
79 if( boardItem && boardItem->Type() == PCB_FOOTPRINT_T )
80 {
81 FOOTPRINT* footprint = static_cast<FOOTPRINT*>( boardItem );
82 footprint->RunOnChildren( [this]( BOARD_ITEM* aChild )
83 {
84 VIEW::Remove( aChild );
85 } );
86 }
87
88 VIEW::Remove( aItem );
89}
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
Definition: view.cpp:346

References PCB_FOOTPRINT_T, KIGFX::VIEW::Remove(), FOOTPRINT::RunOnChildren(), and EDA_ITEM::Type().

Referenced by PCB_TOOL_BASE::doInteractiveItemPlacement(), MICROWAVE_TOOL::drawMicrowaveInductor(), PCB_BASE_FRAME::HideSolderMask(), PCB_EDIT_FRAME::ImportSpecctraSession(), PCB_VIEWER_TOOLS::MeasureTool(), DIALOG_DRC::OnDRCItemRClick(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), PCB_SELECTION_TOOL::Reset(), PCB_EDIT_FRAME::ResolveDRCExclusions(), PCB_SELECTION_TOOL::selectMultiple(), PCB_BASE_FRAME::ShowSolderMask(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataFromWindow(), and FOOTPRINT_PREVIEW_PANEL::~FOOTPRINT_PREVIEW_PANEL().

◆ ReorderLayerData()

void KIGFX::VIEW::ReorderLayerData ( std::unordered_map< int, int >  aReorderMap)
inherited

Remap the data between layer ids without invalidating that data.

Used by GerbView for the "Sort by X2" functionality.

Parameters
aReorderMapis a mapping of old to new layer ids.

Definition at line 673 of file view.cpp.

674{
675 std::vector<VIEW_LAYER> new_map;
676 new_map.reserve( m_layers.size() );
677
678 for( const VIEW_LAYER& layer : m_layers )
679 new_map.push_back( layer );
680
681 for( auto& pair : aReorderMap )
682 {
683 new_map[pair.second] = m_layers[pair.first];
684 new_map[pair.second].id = pair.second;
685 }
686
687 m_layers = new_map;
688
689 for( VIEW_ITEM* item : *m_allItems )
690 {
691 VIEW_ITEM_DATA* viewData = item->viewPrivData();
692
693 if( !viewData )
694 continue;
695
696 int layers[VIEW::VIEW_MAX_LAYERS], layers_count;
697
698 item->ViewGetLayers( layers, layers_count );
699 viewData->saveLayers( layers, layers_count );
700
701 viewData->reorderGroups( aReorderMap );
702
703 viewData->m_requiredUpdate |= COLOR;
704 }
705
706 UpdateItems();
707}
void UpdateItems()
Iterate through the list of items that asked for updating and updates them.
Definition: view.cpp:1398
friend class VIEW_ITEM
Definition: view.h:71

References KIGFX::COLOR, KIGFX::VIEW::m_allItems, KIGFX::VIEW::m_layers, KIGFX::VIEW_ITEM_DATA::m_requiredUpdate, KIGFX::VIEW_ITEM_DATA::reorderGroups(), KIGFX::VIEW_ITEM_DATA::saveLayers(), KIGFX::VIEW::UpdateItems(), and KIGFX::VIEW::VIEW_MAX_LAYERS.

Referenced by GERBVIEW_FRAME::RemapLayers().

◆ ReverseDrawOrder()

void KIGFX::VIEW::ReverseDrawOrder ( bool  aFlag)
inlineinherited

Only takes effect if UseDrawPriority is true.

Parameters
aFlagis true if draw order should be reversed

Definition at line 698 of file view.h.

699 {
700 m_reverseDrawOrder = aFlag;
701 }

References KIGFX::VIEW::m_reverseDrawOrder.

Referenced by EDA_DRAW_PANEL_GAL::SwitchBackend().

◆ SetBoundary() [1/2]

void KIGFX::VIEW::SetBoundary ( const BOX2D aBoundary)
inlineinherited

Set limits for view area.

Parameters
aBoundaryis the box that limits view area.

Definition at line 279 of file view.h.

280 {
281 m_boundary = aBoundary;
282 }

References KIGFX::VIEW::m_boundary.

Referenced by PL_DRAW_PANEL_GAL::DisplayDrawingSheet(), DIALOG_PAD_PROPERTIES::redraw(), and SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME().

◆ SetBoundary() [2/2]

void KIGFX::VIEW::SetBoundary ( const BOX2I aBoundary)
inlineinherited

Set limits for view area.

Parameters
aBoundaryis the box that limits view area.

Definition at line 289 of file view.h.

290 {
291 m_boundary.SetOrigin( aBoundary.GetOrigin() );
292 m_boundary.SetEnd( aBoundary.GetEnd() );
293 }
const Vec & GetOrigin() const
Definition: box2.h:183
const Vec GetEnd() const
Definition: box2.h:185

References BOX2< Vec >::GetEnd(), BOX2< Vec >::GetOrigin(), KIGFX::VIEW::m_boundary, BOX2< Vec >::SetEnd(), and BOX2< Vec >::SetOrigin().

◆ SetCenter() [1/2]

void KIGFX::VIEW::SetCenter ( const VECTOR2D aCenter)
inherited

Set the center point of the VIEW (i.e.

the point in world space that will be drawn in the middle of the screen).

Parameters
aCenterthe new center point, in world space coordinates.

Definition at line 574 of file view.cpp.

575{
576 m_center = aCenter;
577
578 if( !m_boundary.Contains( aCenter ) )
579 {
580 if( m_center.x < m_boundary.GetLeft() )
582 else if( aCenter.x > m_boundary.GetRight() )
584
585 if( m_center.y < m_boundary.GetTop() )
587 else if( m_center.y > m_boundary.GetBottom() )
589 }
590
593
594 // Redraw everything after the viewport has changed
595 MarkDirty();
596}
coord_type GetTop() const
Definition: box2.h:194
bool Contains(const Vec &aPoint) const
Definition: box2.h:141
coord_type GetRight() const
Definition: box2.h:189
coord_type GetLeft() const
Definition: box2.h:193
coord_type GetBottom() const
Definition: box2.h:190
void SetLookAtPoint(const VECTOR2D &aPoint)
Get/set the Point in world space to look at.
virtual void ComputeWorldScreenMatrix()
Compute the world <-> screen transformation matrix.

References KIGFX::GAL::ComputeWorldScreenMatrix(), BOX2< Vec >::Contains(), BOX2< Vec >::GetBottom(), BOX2< Vec >::GetLeft(), BOX2< Vec >::GetRight(), BOX2< Vec >::GetTop(), KIGFX::VIEW::m_boundary, KIGFX::VIEW::m_center, KIGFX::VIEW::m_gal, KIGFX::VIEW::MarkDirty(), KIGFX::GAL::SetLookAtPoint(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by COMMON_TOOLS::CenterContents(), KIGFX::WX_VIEW_CONTROLS::CenterOnCursor(), COMMON_TOOLS::doZoomFit(), SYMBOL_PREVIEW_WIDGET::fitOnDrawArea(), EDA_DRAW_FRAME::FocusOnLocation(), KIGFX::WX_VIEW_CONTROLS::onMotion(), KIGFX::WX_VIEW_CONTROLS::onScroll(), EDA_DRAW_PANEL_GAL::onSize(), KIGFX::WX_VIEW_CONTROLS::onTimer(), KIGFX::WX_VIEW_CONTROLS::onWheel(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), SCH_BASE_FRAME::RedrawScreen(), ZOOM_TOOL::selectRegion(), NL_SCHEMATIC_PLUGIN_IMPL::SetCameraMatrix(), NL_PCBNEW_PLUGIN_IMPL::SetCameraMatrix(), KIGFX::VIEW::SetCenter(), KIGFX::WX_VIEW_CONTROLS::SetCrossHairCursorPosition(), KIGFX::VIEW::SetGAL(), KIGFX::VIEW::SetScale(), KIGFX::VIEW::SetViewport(), KIGFX::WX_VIEW_CONTROLS::WarpMouseCursor(), PANEL_EESCHEMA_COLOR_SETTINGS::zoomFitPreview(), PANEL_PCBNEW_COLOR_SETTINGS::zoomFitPreview(), and PCB_SELECTION_TOOL::zoomFitSelection().

◆ SetCenter() [2/2]

void KIGFX::VIEW::SetCenter ( const VECTOR2D aCenter,
const std::vector< BOX2D > &  obscuringScreenRects 
)
inherited

Set the center point of the VIEW, attempting to avoid obscuringScreenRects (for instance, the screen rect of a modeless dialog in front of the VIEW).

Parameters
aCenterthe new center point, in world space coordinates.
obscuringScreenRectsthe obscuring rects, in screen space coordinates.

Definition at line 599 of file view.cpp.

600{
601 if( obscuringScreenRects.empty() )
602 return SetCenter( aCenter );
603
604 BOX2D screenRect( { 0, 0 }, m_gal->GetScreenPixelSize() );
605 SHAPE_POLY_SET unobscuredPoly( screenRect );
606 VECTOR2D unobscuredCenter = screenRect.Centre();
607
608 for( const BOX2D& obscuringScreenRect : obscuringScreenRects )
609 {
610 SHAPE_POLY_SET obscuringPoly( obscuringScreenRect );
611 unobscuredPoly.BooleanSubtract( obscuringPoly, SHAPE_POLY_SET::PM_FAST );
612 }
613
614 /*
615 * Perform a step-wise deflate to find the center of the largest unobscured area
616 */
617
618 BOX2I bbox = unobscuredPoly.BBox();
619 int step = std::min( bbox.GetWidth(), bbox.GetHeight() ) / 10;
620
621 while( !unobscuredPoly.IsEmpty() )
622 {
623 unobscuredCenter = unobscuredPoly.BBox().Centre();
624 unobscuredPoly.Deflate( step, 4 );
625 }
626
627 SetCenter( aCenter - ToWorld( unobscuredCenter - screenRect.Centre(), false ) );
628}
coord_type GetHeight() const
Definition: box2.h:188
coord_type GetWidth() const
Definition: box2.h:187
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:574
Represent a set of closed polygons.

References SHAPE_POLY_SET::BBox(), SHAPE_POLY_SET::BooleanSubtract(), BOX2< Vec >::Centre(), SHAPE_POLY_SET::Deflate(), BOX2< Vec >::GetHeight(), KIGFX::GAL::GetScreenPixelSize(), BOX2< Vec >::GetWidth(), SHAPE_POLY_SET::IsEmpty(), KIGFX::VIEW::m_gal, SHAPE_POLY_SET::PM_FAST, KIGFX::VIEW::SetCenter(), and KIGFX::VIEW::ToWorld().

◆ SetGAL()

void KIGFX::VIEW::SetGAL ( GAL aGal)
inherited

Assign a rendering device for the VIEW.

Parameters
aGalpointer to the GAL output device.

Definition at line 489 of file view.cpp.

490{
491 bool recacheGroups = ( m_gal != nullptr ); // recache groups only if GAL is reassigned
492 m_gal = aGal;
493
494 // clear group numbers, so everything is going to be recached
495 if( recacheGroups )
497
498 // every target has to be refreshed
499 MarkDirty();
500
501 // force the new GAL to display the current viewport.
503 SetScale( m_scale );
505}
void SetMirror(bool aMirrorX, bool aMirrorY)
Control the mirroring of the VIEW.
Definition: view.cpp:535
virtual void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 })
Set the scaling factor, zooming around a given anchor point.
Definition: view.cpp:548
void clearGroupCache()
Definition: view.cpp:1187

References KIGFX::VIEW::clearGroupCache(), KIGFX::VIEW::m_center, KIGFX::VIEW::m_gal, KIGFX::VIEW::m_mirrorX, KIGFX::VIEW::m_mirrorY, KIGFX::VIEW::m_scale, KIGFX::VIEW::MarkDirty(), KIGFX::VIEW::SetCenter(), KIGFX::VIEW::SetMirror(), and KIGFX::VIEW::SetScale().

Referenced by GERBVIEW_DRAW_PANEL_GAL::GERBVIEW_DRAW_PANEL_GAL(), PCB_DRAW_PANEL_GAL::PCB_DRAW_PANEL_GAL(), PL_DRAW_PANEL_GAL::PL_DRAW_PANEL_GAL(), SCH_DRAW_PANEL::SCH_DRAW_PANEL(), SCH_PREVIEW_PANEL::SCH_PREVIEW_PANEL(), and EDA_DRAW_PANEL_GAL::SwitchBackend().

◆ SetLayerDiff()

void KIGFX::VIEW::SetLayerDiff ( int  aLayer,
bool  aDiff = true 
)
inlineinherited

Set the whether the layer should drawn differentially.

Parameters
aLayeris the layer to set to be draw differentially
aDiffis the layer diff'ing state.

Definition at line 424 of file view.h.

425 {
426 wxCHECK( aLayer < (int) m_layers.size(), /*void*/ );
427
428 if( m_layers[aLayer].diffLayer != aDiff )
429 {
430 // Target has to be redrawn after changing its layers' diff status
431 MarkTargetDirty( m_layers[aLayer].target );
432 m_layers[aLayer].diffLayer = aDiff;
433 }
434 }

References KIGFX::VIEW::m_layers, and KIGFX::VIEW::MarkTargetDirty().

Referenced by GERBVIEW_FRAME::UpdateDiffLayers().

◆ SetLayerDisplayOnly()

void KIGFX::VIEW::SetLayerDisplayOnly ( int  aLayer,
bool  aDisplayOnly = true 
)
inlineinherited

Set a layer display-only (ie: to be rendered but not returned by hit test queries).

Definition at line 457 of file view.h.

458 {
459 wxCHECK( aLayer < (int) m_layers.size(), /*void*/ );
460 m_layers[aLayer].displayOnly = aDisplayOnly;
461 }

References KIGFX::VIEW::m_layers.

Referenced by SCH_DRAW_PANEL::setDefaultLayerDeps(), SCH_PREVIEW_PANEL::setDefaultLayerDeps(), GERBVIEW_DRAW_PANEL_GAL::setDefaultLayerDeps(), PL_DRAW_PANEL_GAL::setDefaultLayerDeps(), and PCB_DRAW_PANEL_GAL::setDefaultLayerDeps().

◆ SetLayerHasNegatives()

void KIGFX::VIEW::SetLayerHasNegatives ( int  aLayer,
bool  aNegatives = true 
)
inlineinherited

Set the status of negatives presense in a particular layer.

Parameters
aLayeris the layer to set as containing negatives (or not).
aNegativesis the layer negatives state.

Definition at line 442 of file view.h.

443 {
444 wxCHECK( aLayer < (int) m_layers.size(), /*void*/ );
445
446 if( m_layers[aLayer].hasNegatives != aNegatives )
447 {
448 // Target has to be redrawn after changing a layers' negatives
449 MarkTargetDirty( m_layers[aLayer].target );
450 m_layers[aLayer].hasNegatives = aNegatives;
451 }
452 }

References KIGFX::VIEW::m_layers, and KIGFX::VIEW::MarkTargetDirty().

Referenced by GERBVIEW_FRAME::unarchiveFiles().

◆ SetLayerOrder()

void KIGFX::VIEW::SetLayerOrder ( int  aLayer,
int  aRenderingOrder 
)
inherited

Set rendering order of a particular layer.

Lower values are rendered first.

Parameters
aLayeris the layer.
aRenderingOrderis an arbitrary number denoting the rendering order.

Definition at line 631 of file view.cpp.

632{
633 m_layers[aLayer].renderingOrder = aRenderingOrder;
634
635 sortLayers();
636}
void sortLayers()
Clear cached GAL group numbers (ONLY numbers stored in VIEW_ITEMs, not group objects used by GAL)
Definition: view.cpp:1241

References KIGFX::VIEW::m_layers, and KIGFX::VIEW::sortLayers().

Referenced by SCH_DRAW_PANEL::setDefaultLayerOrder(), SCH_PREVIEW_PANEL::setDefaultLayerOrder(), PCB_DRAW_PANEL_GAL::setDefaultLayerOrder(), GERBVIEW_DRAW_PANEL_GAL::SetTopLayer(), and PCB_DRAW_PANEL_GAL::SetTopLayer().

◆ SetLayerTarget()

void KIGFX::VIEW::SetLayerTarget ( int  aLayer,
RENDER_TARGET  aTarget 
)
inlineinherited

Change the rendering target for a particular layer.

Parameters
aLayeris the layer.
aTargetis the rendering target.

Definition at line 469 of file view.h.

470 {
471 wxCHECK( aLayer < (int) m_layers.size(), /*void*/ );
472 m_layers[aLayer].target = aTarget;
473 }

References KIGFX::VIEW::m_layers.

Referenced by SCH_DRAW_PANEL::setDefaultLayerDeps(), SCH_PREVIEW_PANEL::setDefaultLayerDeps(), GERBVIEW_DRAW_PANEL_GAL::setDefaultLayerDeps(), PL_DRAW_PANEL_GAL::setDefaultLayerDeps(), PCB_DRAW_PANEL_GAL::setDefaultLayerDeps(), BOARD_PRINTOUT::setupViewLayers(), and GERBVIEW_FRAME::UpdateDiffLayers().

◆ SetLayerVisible()

void KIGFX::VIEW::SetLayerVisible ( int  aLayer,
bool  aVisible = true 
)
inlineinherited

◆ SetMirror()

void KIGFX::VIEW::SetMirror ( bool  aMirrorX,
bool  aMirrorY 
)
inherited

Control the mirroring of the VIEW.

Parameters
aMirrorXwhen true, the X axis is mirrored.
aMirrorYwhen true, the Y axis is mirrored.

Definition at line 535 of file view.cpp.

536{
537 wxASSERT_MSG( !aMirrorY, _( "Mirroring for Y axis is not supported yet" ) );
538
539 m_mirrorX = aMirrorX;
540 m_mirrorY = aMirrorY;
541 m_gal->SetFlip( aMirrorX, aMirrorY );
542
543 // Redraw everything
544 MarkDirty();
545}
void SetFlip(bool xAxis, bool yAxis)
Sets flipping of the screen.
#define _(s)

References _, KIGFX::VIEW::m_gal, KIGFX::VIEW::m_mirrorX, KIGFX::VIEW::m_mirrorY, KIGFX::VIEW::MarkDirty(), and KIGFX::GAL::SetFlip().

Referenced by GERBVIEW_CONTROL::DisplayControl(), PCB_CONTROL::FlipPcbView(), SCH_DRAW_PANEL::SCH_DRAW_PANEL(), SCH_PREVIEW_PANEL::SCH_PREVIEW_PANEL(), and KIGFX::VIEW::SetGAL().

◆ SetPainter()

void KIGFX::VIEW::SetPainter ( PAINTER aPainter)
inlineinherited

Set the painter object used by the view for drawing #VIEW_ITEMS.

Definition at line 203 of file view.h.

204 {
205 m_painter = aPainter;
206 }

References KIGFX::VIEW::m_painter.

Referenced by GERBVIEW_DRAW_PANEL_GAL::GERBVIEW_DRAW_PANEL_GAL(), PCB_DRAW_PANEL_GAL::PCB_DRAW_PANEL_GAL(), PL_DRAW_PANEL_GAL::PL_DRAW_PANEL_GAL(), SCH_DRAW_PANEL::SCH_DRAW_PANEL(), and SCH_PREVIEW_PANEL::SCH_PREVIEW_PANEL().

◆ SetRequired()

void KIGFX::VIEW::SetRequired ( int  aLayerId,
int  aRequiredId,
bool  aRequired = true 
)
inherited

Mark the aRequiredId layer as required for the aLayerId layer.

In order to display the layer, all of its required layers have to be enabled.

Parameters
aLayerIdis the id of the layer for which we enable/disable the required layer.
aRequiredIdis the id of the required layer.
aRequiredtells if the required layer should be added or removed from the list.

Definition at line 386 of file view.cpp.

387{
388 wxCHECK( (unsigned) aLayerId < m_layers.size(), /*void*/ );
389 wxCHECK( (unsigned) aRequiredId < m_layers.size(), /*void*/ );
390
391 if( aRequired )
392 m_layers[aLayerId].requiredLayers.insert( aRequiredId );
393 else
394 m_layers[aLayerId].requiredLayers.erase( aRequired );
395}

References KIGFX::VIEW::m_layers.

Referenced by PCB_DRAW_PANEL_GAL::setDefaultLayerDeps().

◆ SetScale()

void KIGFX::VIEW::SetScale ( double  aScale,
VECTOR2D  aAnchor = { 0, 0 } 
)
virtualinherited

Set the scaling factor, zooming around a given anchor point.

(depending on correct GAL unit length & DPI settings).

Parameters
aAnchoris the zooming anchor point.
aScaleis the scale factor.

Reimplemented in KIGFX::SCH_VIEW.

Definition at line 548 of file view.cpp.

549{
550 if( aAnchor == VECTOR2D( 0, 0 ) )
551 aAnchor = m_center;
552
553 VECTOR2D a = ToScreen( aAnchor );
554
555 if( aScale < m_minScale )
557 else if( aScale > m_maxScale )
559 else
560 m_scale = aScale;
561
564
565 VECTOR2D delta = ToWorld( a ) - aAnchor;
566
568
569 // Redraw everything after the viewport has changed
570 MarkDirty();
571}
void SetZoomFactor(double aZoomFactor)
double m_maxScale
Definition: view.h:851
VECTOR2D ToScreen(const VECTOR2D &aCoord, bool aAbsolute=true) const
Convert a world space point/vector to a point/vector in screen space coordinates.
Definition: view.cpp:464
double m_minScale
Definition: view.h:850
constexpr int delta

References KIGFX::GAL::ComputeWorldScreenMatrix(), delta, KIGFX::VIEW::m_center, KIGFX::VIEW::m_gal, KIGFX::VIEW::m_maxScale, KIGFX::VIEW::m_minScale, KIGFX::VIEW::m_scale, KIGFX::VIEW::MarkDirty(), KIGFX::VIEW::SetCenter(), KIGFX::GAL::SetZoomFactor(), KIGFX::VIEW::ToScreen(), and KIGFX::VIEW::ToWorld().

Referenced by COMMON_TOOLS::doZoomFit(), COMMON_TOOLS::doZoomToPreset(), PCB_SELECTION_TOOL::FindItem(), SYMBOL_PREVIEW_WIDGET::fitOnDrawArea(), KIGFX::WX_VIEW_CONTROLS::onMotion(), KIGFX::WX_VIEW_CONTROLS::onWheel(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), ZOOM_TOOL::selectRegion(), KIGFX::VIEW::SetGAL(), KIGFX::SCH_VIEW::SetScale(), NL_PCBNEW_PLUGIN_IMPL::SetViewExtents(), KIGFX::VIEW::SetViewport(), EE_SELECTION_TOOL::ZoomFitCrossProbeBBox(), PCB_SELECTION_TOOL::ZoomFitCrossProbeBBox(), PANEL_EESCHEMA_COLOR_SETTINGS::zoomFitPreview(), PANEL_PCBNEW_COLOR_SETTINGS::zoomFitPreview(), and PCB_SELECTION_TOOL::zoomFitSelection().

◆ SetScaleLimits()

void KIGFX::VIEW::SetScaleLimits ( double  aMaximum,
double  aMinimum 
)
inlineinherited

Set minimum and maximum values for scale.

Parameters
aMaximumis the maximum value for scale.
aMinimumis the minimum value for scale.

Definition at line 309 of file view.h.

310 {
311 wxASSERT_MSG( aMaximum > aMinimum, wxT( "I guess you passed parameters in wrong order" ) );
312
313 m_minScale = aMinimum;
314 m_maxScale = aMaximum;
315 }

References KIGFX::VIEW::m_maxScale, and KIGFX::VIEW::m_minScale.

Referenced by GERBVIEW_DRAW_PANEL_GAL::GERBVIEW_DRAW_PANEL_GAL(), PCB_DRAW_PANEL_GAL::PCB_DRAW_PANEL_GAL(), PL_DRAW_PANEL_GAL::PL_DRAW_PANEL_GAL(), SCH_DRAW_PANEL::SCH_DRAW_PANEL(), and SCH_PREVIEW_PANEL::SCH_PREVIEW_PANEL().

◆ SetTopLayer()

void KIGFX::VIEW::SetTopLayer ( int  aLayer,
bool  aEnabled = true 
)
virtualinherited

Set given layer to be displayed on the top or sets back the default order of layers.

Parameters
aEnabled= true to display aLayer on the top.
aLayeris the layer or -1 in case when no particular layer should be displayed on the top.

Definition at line 822 of file view.cpp.

823{
824 if( aEnabled )
825 {
826 if( m_topLayers.count( aLayer ) == 1 )
827 return;
828
829 m_topLayers.insert( aLayer );
830
831 // Move the layer closer to front
833 m_layers[aLayer].renderingOrder += TOP_LAYER_MODIFIER;
834 }
835 else
836 {
837 if( m_topLayers.count( aLayer ) == 0 )
838 return;
839
840 m_topLayers.erase( aLayer );
841
842 // Restore the previous rendering order
844 m_layers[aLayer].renderingOrder -= TOP_LAYER_MODIFIER;
845 }
846}

References KIGFX::VIEW::m_enableOrderModifier, KIGFX::VIEW::m_layers, KIGFX::VIEW::m_topLayers, and KIGFX::VIEW::TOP_LAYER_MODIFIER.

Referenced by DIALOG_PAD_PROPERTIES::redraw(), EDA_DRAW_PANEL_GAL::SetTopLayer(), GERBVIEW_DRAW_PANEL_GAL::SetTopLayer(), PL_DRAW_PANEL_GAL::SetTopLayer(), PCB_DRAW_PANEL_GAL::SetTopLayer(), BOARD_PRINTOUT::setupViewLayers(), and PCBNEW_PRINTOUT::setupViewLayers().

◆ SetViewport()

void KIGFX::VIEW::SetViewport ( const BOX2D aViewport)
inherited

Set the visible area of the VIEW.

Parameters
aViewportdesired visible area, in world space coordinates.

Definition at line 520 of file view.cpp.

521{
522 VECTOR2D ssize = ToWorld( m_gal->GetScreenPixelSize(), false );
523
524 wxCHECK( ssize.x > 0 && ssize.y > 0, /*void*/ );
525
526 VECTOR2D centre = aViewport.Centre();
527 VECTOR2D vsize = aViewport.GetSize();
528 double zoom = 1.0 / std::max( fabs( vsize.x / ssize.x ), fabs( vsize.y / ssize.y ) );
529
530 SetCenter( centre );
531 SetScale( GetScale() * zoom );
532}
Vec Centre() const
Definition: box2.h:70
const Vec & GetSize() const
Definition: box2.h:179
double GetScale() const
Definition: view.h:269

References BOX2< Vec >::Centre(), KIGFX::VIEW::GetScale(), KIGFX::GAL::GetScreenPixelSize(), BOX2< Vec >::GetSize(), KIGFX::VIEW::m_gal, KIGFX::VIEW::SetCenter(), KIGFX::VIEW::SetScale(), KIGFX::VIEW::ToWorld(), VECTOR2< T >::x, VECTOR2< T >::y, and zoom.

Referenced by APPEARANCE_CONTROLS::doApplyViewport(), DIALOG_PAD_PROPERTIES::redraw(), and FOOTPRINT_PREVIEW_PANEL::renderFootprint().

◆ SetVisible()

void KIGFX::VIEW::SetVisible ( VIEW_ITEM aItem,
bool  aIsVisible = true 
)
inherited

Set the item visibility.

Parameters
aItemthe item to modify.
aIsVisiblewhether the item is visible (on all layers), or not.

Definition at line 1512 of file view.cpp.

1513{
1514 VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1515
1516 if( !viewData )
1517 return;
1518
1519 bool cur_visible = viewData->m_flags & VISIBLE;
1520
1521 if( cur_visible != aIsVisible )
1522 {
1523 if( aIsVisible )
1524 viewData->m_flags |= VISIBLE;
1525 else
1526 viewData->m_flags &= ~VISIBLE;
1527
1528 Update( aItem, APPEARANCE | COLOR );
1529 }
1530}

References KIGFX::APPEARANCE, KIGFX::COLOR, KIGFX::VIEW_ITEM_DATA::m_flags, KIGFX::VIEW::Update(), KIGFX::VIEW_ITEM::viewPrivData(), and KIGFX::VISIBLE.

Referenced by KIGFX::VIEW::Add(), KIGFX::VIEW::AddToPreview(), PCB_GRID_HELPER::BestSnapAnchor(), EE_GRID_HELPER::BestSnapAnchor(), MICROWAVE_TOOL::drawMicrowaveInductor(), EE_GRID_HELPER::EE_GRID_HELPER(), PNS_KICAD_IFACE::EraseView(), PNS_KICAD_IFACE::HideItem(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), ZONE_CREATE_HELPER::OnComplete(), ZONE_CREATE_HELPER::OnFirstPoint(), PCB_GRID_HELPER::PCB_GRID_HELPER(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), EE_SELECTION_TOOL::selectMultiple(), PL_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), GRID_HELPER::SetAuxAxes(), KIGFX::VIEW::ShowPreview(), and ZONE_CREATE_HELPER::~ZONE_CREATE_HELPER().

◆ ShowPreview()

◆ sortLayers()

void KIGFX::VIEW::sortLayers ( )
protectedinherited

Clear cached GAL group numbers (ONLY numbers stored in VIEW_ITEMs, not group objects used by GAL)

Definition at line 1241 of file view.cpp.

1242{
1243 int n = 0;
1244
1245 m_orderedLayers.resize( m_layers.size() );
1246
1247 for( VIEW_LAYER& layer : m_layers )
1248 m_orderedLayers[n++] = &layer;
1249
1251
1252 MarkDirty();
1253}
static bool compareRenderingOrder(VIEW_LAYER *aI, VIEW_LAYER *aJ)
Check if every layer required by the aLayerId layer is enabled.
Definition: view.h:812

References KIGFX::VIEW::compareRenderingOrder(), KIGFX::VIEW::m_layers, KIGFX::VIEW::m_orderedLayers, and KIGFX::VIEW::MarkDirty().

Referenced by KIGFX::VIEW::SetLayerOrder(), KIGFX::VIEW::UpdateAllLayersOrder(), and KIGFX::VIEW::VIEW().

◆ SortLayers()

void KIGFX::VIEW::SortLayers ( int  aLayers[],
int &  aCount 
) const
inherited

Change the order of given layer ids, so after sorting the order corresponds to layers rendering order (descending, ie.

order in which layers should be drawn - from the bottom to the top).

Parameters
aLayersstores id of layers to be sorted.
aCountstores the number of layers.

Definition at line 645 of file view.cpp.

646{
647 int maxLay, maxOrd, maxIdx;
648
649 for( int i = 0; i < aCount; ++i )
650 {
651 maxLay = aLayers[i];
652 maxOrd = GetLayerOrder( maxLay );
653 maxIdx = i;
654
655 // Look for the max element in the range (j..aCount)
656 for( int j = i; j < aCount; ++j )
657 {
658 if( maxOrd < GetLayerOrder( aLayers[j] ) )
659 {
660 maxLay = aLayers[j];
661 maxOrd = GetLayerOrder( maxLay );
662 maxIdx = j;
663 }
664 }
665
666 // Swap elements
667 aLayers[maxIdx] = aLayers[i];
668 aLayers[i] = maxLay;
669 }
670}
int GetLayerOrder(int aLayer) const
Return rendering order of a particular layer.
Definition: view.cpp:639

References KIGFX::VIEW::GetLayerOrder().

Referenced by KIGFX::VIEW::draw(), and KIGFX::VIEW_GROUP::ViewDraw().

◆ ToScreen() [1/2]

VECTOR2D KIGFX::VIEW::ToScreen ( const VECTOR2D aCoord,
bool  aAbsolute = true 
) const
inherited

Convert a world space point/vector to a point/vector in screen space coordinates.

Parameters
aCoordis the point/vector to be converted.
aAbsolutewhen true aCoord is treated as a point, otherwise as a direction (vector).

Definition at line 464 of file view.cpp.

465{
466 const MATRIX3x3D& matrix = m_gal->GetWorldScreenMatrix();
467
468 if( aAbsolute )
469 return VECTOR2D( matrix * aCoord );
470 else
471 return VECTOR2D( matrix.GetScale().x * aCoord.x, matrix.GetScale().y * aCoord.y );
472}
const MATRIX3x3D & GetWorldScreenMatrix() const
Get the world <-> screen transformation matrix.
VECTOR2< T > GetScale() const
Get the scale components of the matrix.
Definition: matrix3x3.h:265

References MATRIX3x3< T >::GetScale(), KIGFX::GAL::GetWorldScreenMatrix(), KIGFX::VIEW::m_gal, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by KIGFX::WX_VIEW_CONTROLS::handleAutoPanning(), ROUTER_TOOL::handleLayerSwitch(), KIGFX::WX_VIEW_CONTROLS::SetCrossHairCursorPosition(), KIGFX::VIEW::SetScale(), and KIGFX::WX_VIEW_CONTROLS::WarpMouseCursor().

◆ ToScreen() [2/2]

double KIGFX::VIEW::ToScreen ( double  aSize) const
inherited

Convert a world space one dimensional size to a one dimensional size in screen space.

Parameters
aSizethe size to be transformed.

Definition at line 475 of file view.cpp.

476{
477 const MATRIX3x3D& matrix = m_gal->GetWorldScreenMatrix();
478
479 return matrix.GetScale().x * aSize;
480}

References MATRIX3x3< T >::GetScale(), KIGFX::GAL::GetWorldScreenMatrix(), KIGFX::VIEW::m_gal, and VECTOR2< T >::x.

◆ ToWorld() [1/2]

VECTOR2D KIGFX::VIEW::ToWorld ( const VECTOR2D aCoord,
bool  aAbsolute = true 
) const
inherited

Converts a screen space point/vector to a point/vector in world space coordinates.

Parameters
aCoordis the point/vector to be converted.
aAbsolutewhen true aCoord is treated as a point, otherwise as a direction (vector).

Definition at line 445 of file view.cpp.

446{
447 const MATRIX3x3D& matrix = m_gal->GetScreenWorldMatrix();
448
449 if( aAbsolute )
450 return VECTOR2D( matrix * aCoord );
451 else
452 return VECTOR2D( matrix.GetScale().x * aCoord.x, matrix.GetScale().y * aCoord.y );
453}
const MATRIX3x3D & GetScreenWorldMatrix() const
Get the screen <-> world transformation matrix.

References MATRIX3x3< T >::GetScale(), KIGFX::GAL::GetScreenWorldMatrix(), KIGFX::VIEW::m_gal, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by EE_POINT_EDITOR::addCornerCondition(), COMMON_TOOLS::CenterContents(), COMMON_TOOLS::doZoomFit(), KIGFX::PREVIEW::POLYGON_ITEM::drawPreviewShape(), EDIT_POINTS::FindPoint(), SYMBOL_PREVIEW_WIDGET::fitOnDrawArea(), PCB_BASE_FRAME::FocusOnItems(), GENERAL_COLLECTORS_GUIDE::GENERAL_COLLECTORS_GUIDE(), KIGFX::WX_VIEW_CONTROLS::GetMousePosition(), KIGFX::VIEW::GetViewport(), DS_PROXY_VIEW_ITEM::HitTestDrawingSheetItems(), KIGFX::WX_VIEW_CONTROLS::onMotion(), KIGFX::WX_VIEW_CONTROLS::onScroll(), EDA_DRAW_PANEL_GAL::onSize(), KIGFX::WX_VIEW_CONTROLS::onTimer(), KIGFX::WX_VIEW_CONTROLS::onWheel(), KIGFX::WX_VIEW_CONTROLS::PinCursorInsideNonAutoscrollArea(), KIGFX::VIEW::Redraw(), KIGFX::WX_VIEW_CONTROLS::refreshMouse(), EE_SELECTION_TOOL::selectionContains(), PL_SELECTION_TOOL::selectionContains(), ZOOM_TOOL::selectRegion(), KIGFX::VIEW::SetCenter(), KIGFX::VIEW::SetScale(), KIGFX::VIEW::SetViewport(), EDIT_POINTS::ViewDraw(), KIGFX::ORIGIN_VIEWITEM::ViewDraw(), PCB_SELECTION_TOOL::ZoomFitCrossProbeBBox(), PANEL_EESCHEMA_COLOR_SETTINGS::zoomFitPreview(), PANEL_PCBNEW_COLOR_SETTINGS::zoomFitPreview(), and PCB_SELECTION_TOOL::zoomFitSelection().

◆ ToWorld() [2/2]

double KIGFX::VIEW::ToWorld ( double  aSize) const
inherited

Converts a screen space one dimensional size to a one dimensional size in world space coordinates.

Parameters
aSizeis the size to be converted.

Definition at line 456 of file view.cpp.

457{
458 const MATRIX3x3D& matrix = m_gal->GetScreenWorldMatrix();
459
460 return fabs( matrix.GetScale().x * aSize );
461}

References MATRIX3x3< T >::GetScale(), KIGFX::GAL::GetScreenWorldMatrix(), KIGFX::VIEW::m_gal, and VECTOR2< T >::x.

◆ Update() [1/2]

void KIGFX::PCB_VIEW::Update ( const VIEW_ITEM aItem) const
overridevirtual

For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has changed.

For static views calling has no effect.

Parameters
aItemthe item to update.
aUpdateFlagshow much the object has changed.

Reimplemented from KIGFX::VIEW.

Definition at line 119 of file pcb_view.cpp.

120{
122}
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const override
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
Definition: pcb_view.cpp:92

References KIGFX::ALL, and Update().

◆ Update() [2/2]

void KIGFX::PCB_VIEW::Update ( const VIEW_ITEM aItem,
int  aUpdateFlags 
) const
overridevirtual

For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has changed.

For static views calling has no effect.

Parameters
aItemthe item to update.
aUpdateFlagshow much the object has changed.

Reimplemented from KIGFX::VIEW.

Definition at line 92 of file pcb_view.cpp.

93{
94 const BOARD_ITEM* boardItem = dynamic_cast<const BOARD_ITEM*>( aItem );
95
96 if( boardItem && boardItem->Type() == PCB_FOOTPRINT_T )
97 {
98 const FOOTPRINT* footprint = static_cast<const FOOTPRINT*>( boardItem );
99 footprint->RunOnChildren(
100 [this, aUpdateFlags]( BOARD_ITEM* child )
101 {
102 VIEW::Update( child, aUpdateFlags );
103 } );
104 }
105 else if( boardItem && boardItem->Type() == PCB_GROUP_T )
106 {
107 const PCB_GROUP* group = static_cast<const PCB_GROUP*>( boardItem );
108 group->RunOnChildren(
109 [this, aUpdateFlags]( BOARD_ITEM* child )
110 {
111 Update( child, aUpdateFlags );
112 } );
113 }
114
115 VIEW::Update( aItem, aUpdateFlags );
116}
A set of BOARD_ITEMs (i.e., without duplicates).
Definition: pcb_group.h:51
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
Definition: typeinfo.h:115

References group, PCB_FOOTPRINT_T, PCB_GROUP_T, FOOTPRINT::RunOnChildren(), EDA_ITEM::Type(), KIGFX::VIEW::Update(), and Update().

Referenced by PCB_SELECTION_TOOL::ClearSelection(), PCB_TOOL_BASE::doInteractiveItemPlacement(), MICROWAVE_TOOL::drawMicrowaveInductor(), PCB_EDIT_FRAME::Edit_Zone_Params(), DIALOG_DRC::ExcludeMarker(), PCB_BASE_FRAME::FocusOnItems(), PCB_VIEWER_TOOLS::GraphicOutlines(), PCB_SELECTION_TOOL::highlight(), PCB_VIEWER_TOOLS::MeasureTool(), DIALOG_DRC::OnDRCItemRClick(), PCB_EDIT_FRAME::OnNetlistChanged(), PCB_VIEWER_TOOLS::PadDisplayMode(), DIALOG_BOARD_REANNOTATE::ReannotateBoard(), refreshCallback(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), FOOTPRINT_EDITOR_CONTROL::Save(), FOOTPRINT_EDITOR_CONTROL::SaveAs(), PCB_SELECTION_TOOL::selectMultiple(), PCB_VIEWER_TOOLS::ShowPadNumbers(), GLOBAL_EDIT_TOOL::swapBoardItem(), GLOBAL_EDIT_TOOL::SwapLayers(), PCB_VIEWER_TOOLS::TextOutlines(), PCB_CONTROL::TrackDisplayMode(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::TransferDataFromWindow(), PCB_SELECTION_TOOL::unhighlight(), Update(), PCB_POINT_EDITOR::updateItem(), PCB_CONTROL::ViaDisplayMode(), and PCB_CONTROL::ZoneDisplayMode().

◆ UpdateAllItems()

◆ UpdateAllItemsConditionally()

void KIGFX::VIEW::UpdateAllItemsConditionally ( int  aUpdateFlags,
std::function< bool(VIEW_ITEM *)>  aCondition 
)
inherited

Update items in the view according to the given flags and condition.

Parameters
aUpdateFlagsis is according to KIGFX::VIEW_UPDATE_FLAGS.
aConditionis a function returning true if the item should be updated.

Definition at line 1488 of file view.cpp.

1490{
1491 for( VIEW_ITEM* item : *m_allItems )
1492 {
1493 if( aCondition( item ) )
1494 {
1495 if( item->viewPrivData() )
1496 item->viewPrivData()->m_requiredUpdate |= aUpdateFlags;
1497 }
1498 }
1499}

References KIGFX::VIEW::m_allItems.

Referenced by SCH_EDITOR_CONTROL::AssignNetclass(), PCB_BASE_FRAME::CommonSettingsChanged(), GERBVIEW_CONTROL::DisplayControl(), DIALOG_NET_INSPECTOR::onDeleteNet(), BOARD_EDITOR_CONTROL::PageSettings(), SCH_EDIT_FRAME::RecalculateConnections(), PCB_EDIT_FRAME::SetActiveLayer(), PCB_BASE_FRAME::SetDisplayOptions(), GERBVIEW_FRAME::SetElementVisibility(), and PCB_EDIT_FRAME::ShowBoardSetupDialog().

◆ UpdateAllLayersColor()

void KIGFX::VIEW::UpdateAllLayersColor ( )
inherited

Apply the new coloring scheme to all layers.

The used scheme is held by #RENDER_SETTINGS.

See also
RENDER_SETTINGS

Definition at line 758 of file view.cpp.

759{
760 if( m_gal->IsVisible() )
761 {
762 GAL_UPDATE_CONTEXT ctx( m_gal );
763
764 for( VIEW_ITEM* item : *m_allItems )
765 {
766 VIEW_ITEM_DATA* viewData = item->viewPrivData();
767
768 if( !viewData )
769 continue;
770
771 int layers[VIEW::VIEW_MAX_LAYERS], layers_count;
772 viewData->getLayers( layers, layers_count );
773
774 for( int i = 0; i < layers_count; ++i )
775 {
776 const COLOR4D color = m_painter->GetSettings()->GetColor( item, layers[i] );
777 int group = viewData->getGroup( layers[i] );
778
779 if( group >= 0 )
780 m_gal->ChangeGroupColor( group, color );
781 }
782 }
783 }
784
785 MarkDirty();
786}
int color
Definition: DXF_plotter.cpp:57
virtual void ChangeGroupColor(int aGroupNumber, const COLOR4D &aNewColor)
Change the color used to draw the group.
virtual bool IsVisible() const
Return true if the GAL canvas is visible on the screen.
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
virtual COLOR4D GetColor(const VIEW_ITEM *aItem, int aLayer) const =0
Returns the color that should be used to draw the specific VIEW_ITEM on the specific layer using curr...

References KIGFX::GAL::ChangeGroupColor(), color, KIGFX::RENDER_SETTINGS::GetColor(), KIGFX::VIEW_ITEM_DATA::getGroup(), KIGFX::VIEW_ITEM_DATA::getLayers(), KIGFX::PAINTER::GetSettings(), group, KIGFX::GAL::IsVisible(), KIGFX::VIEW::m_allItems, KIGFX::VIEW::m_gal, KIGFX::VIEW::m_painter, KIGFX::VIEW::MarkDirty(), and KIGFX::VIEW::VIEW_MAX_LAYERS.

Referenced by DIALOG_NET_INSPECTOR::buildNetsList(), BOARD_INSPECTION_TOOL::ClearHighlight(), FOOTPRINT_EDIT_FRAME::CommonSettingsChanged(), PCB_SELECTION_TOOL::doSyncSelection(), KIGFX::VIEW::EnableTopLayer(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), PNS::TOOL_BASE::highlightNet(), BOARD_INSPECTION_TOOL::HighlightNet(), BOARD_INSPECTION_TOOL::highlightNet(), APPEARANCE_CONTROLS::onNetclassColorChanged(), APPEARANCE_CONTROLS::onNetclassContextMenu(), APPEARANCE_CONTROLS::onNetColorMode(), DIALOG_NET_INSPECTOR::onSelChanged(), DIALOG_NET_INSPECTOR::onSortingChanged(), EDA_DRAW_PANEL_GAL::SetHighContrastLayer(), GERBVIEW_DRAW_PANEL_GAL::SetHighContrastLayer(), PCB_DRAW_PANEL_GAL::SetHighContrastLayer(), and NET_GRID_TABLE::updateNetColor().

◆ UpdateAllLayersOrder()

void KIGFX::VIEW::UpdateAllLayersOrder ( )
inherited

Do everything that is needed to apply the rendering order of layers.

It has to be called after modification of renderingOrder field of LAYER.

Definition at line 889 of file view.cpp.

890{
891 sortLayers();
892
893 if( m_gal->IsVisible() )
894 {
895 GAL_UPDATE_CONTEXT ctx( m_gal );
896
897 for( VIEW_ITEM* item : *m_allItems )
898 {
899 VIEW_ITEM_DATA* viewData = item->viewPrivData();
900
901 if( !viewData )
902 continue;
903
904 int layers[VIEW::VIEW_MAX_LAYERS], layers_count;
905 viewData->getLayers( layers, layers_count );
906
907 for( int i = 0; i < layers_count; ++i )
908 {
909 int group = viewData->getGroup( layers[i] );
910
911 if( group >= 0 )
912 m_gal->ChangeGroupDepth( group, m_layers[layers[i]].renderingOrder );
913 }
914 }
915 }
916
917 MarkDirty();
918}
virtual void ChangeGroupDepth(int aGroupNumber, int aDepth)
Change the depth (Z-axis position) of the group.

References KIGFX::GAL::ChangeGroupDepth(), KIGFX::VIEW_ITEM_DATA::getGroup(), KIGFX::VIEW_ITEM_DATA::getLayers(), group, KIGFX::GAL::IsVisible(), KIGFX::VIEW::m_allItems, KIGFX::VIEW::m_gal, KIGFX::VIEW::m_layers, KIGFX::VIEW::MarkDirty(), KIGFX::VIEW::sortLayers(), and KIGFX::VIEW::VIEW_MAX_LAYERS.

Referenced by KIGFX::VIEW::EnableTopLayer(), SCH_DRAW_PANEL::SCH_DRAW_PANEL(), SCH_PREVIEW_PANEL::SCH_PREVIEW_PANEL(), EDA_DRAW_PANEL_GAL::SetTopLayer(), GERBVIEW_DRAW_PANEL_GAL::SetTopLayer(), PL_DRAW_PANEL_GAL::SetTopLayer(), and PCB_DRAW_PANEL_GAL::SetTopLayer().

◆ updateBbox()

void KIGFX::VIEW::updateBbox ( VIEW_ITEM aItem)
protectedinherited

Update set of layers that an item occupies.

Definition at line 1305 of file view.cpp.

1306{
1307 int layers[VIEW_MAX_LAYERS], layers_count;
1308
1309 aItem->ViewGetLayers( layers, layers_count );
1310
1311 for( int i = 0; i < layers_count; ++i )
1312 {
1313 VIEW_LAYER& l = m_layers[layers[i]];
1314 l.items->Remove( aItem );
1315 l.items->Insert( aItem );
1316 MarkTargetDirty( l.target );
1317 }
1318}

References KIGFX::VIEW::VIEW_LAYER::items, KIGFX::VIEW::m_layers, KIGFX::VIEW::MarkTargetDirty(), KIGFX::VIEW::VIEW_LAYER::target, KIGFX::VIEW::VIEW_MAX_LAYERS, and KIGFX::VIEW_ITEM::ViewGetLayers().

Referenced by KIGFX::VIEW::invalidateItem().

◆ UpdateDisplayOptions()

void KIGFX::PCB_VIEW::UpdateDisplayOptions ( const PCB_DISPLAY_OPTIONS aOptions)

Definition at line 125 of file pcb_view.cpp.

126{
127 auto painter = static_cast<KIGFX::PCB_PAINTER*>( GetPainter() );
128 auto settings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( painter->GetSettings() );
129
130 settings->LoadDisplayOptions( aOptions );
131}
Contains methods for drawing PCB-specific items.
Definition: pcb_painter.h:156
PCB specific render settings.
Definition: pcb_painter.h:71
void LoadDisplayOptions(const PCB_DISPLAY_OPTIONS &aOptions)
Load settings related to display options (high-contrast mode, full or outline modes for vias/pads/tra...
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:213

References KIGFX::VIEW::GetPainter(), and KIGFX::PCB_RENDER_SETTINGS::LoadDisplayOptions().

Referenced by PCB_DRAW_PANEL_GAL::PCB_DRAW_PANEL_GAL(), and PCB_BASE_FRAME::SetDisplayOptions().

◆ updateItemColor()

void KIGFX::VIEW::updateItemColor ( VIEW_ITEM aItem,
int  aLayer 
)
protectedinherited

Update all information needed to draw an item.

Definition at line 1256 of file view.cpp.

1257{
1258 VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1259 wxCHECK( (unsigned) aLayer < m_layers.size(), /*void*/ );
1260 wxCHECK( IsCached( aLayer ), /*void*/ );
1261
1262 if( !viewData )
1263 return;
1264
1265 // Obtain the color that should be used for coloring the item on the specific layerId
1266 const COLOR4D color = m_painter->GetSettings()->GetColor( aItem, aLayer );
1267 int group = viewData->getGroup( aLayer );
1268
1269 // Change the color, only if it has group assigned
1270 if( group >= 0 )
1271 m_gal->ChangeGroupColor( group, color );
1272}

References KIGFX::GAL::ChangeGroupColor(), color, KIGFX::RENDER_SETTINGS::GetColor(), KIGFX::VIEW_ITEM_DATA::getGroup(), KIGFX::PAINTER::GetSettings(), group, KIGFX::VIEW::IsCached(), KIGFX::VIEW::m_gal, KIGFX::VIEW::m_layers, KIGFX::VIEW::m_painter, and KIGFX::VIEW_ITEM::viewPrivData().

Referenced by KIGFX::VIEW::invalidateItem().

◆ updateItemGeometry()

void KIGFX::VIEW::updateItemGeometry ( VIEW_ITEM aItem,
int  aLayer 
)
protectedinherited

Update bounding box of an item.

Definition at line 1275 of file view.cpp.

1276{
1277 VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1278 wxCHECK( (unsigned) aLayer < m_layers.size(), /*void*/ );
1279 wxCHECK( IsCached( aLayer ), /*void*/ );
1280
1281 if( !viewData )
1282 return;
1283
1284 VIEW_LAYER& l = m_layers.at( aLayer );
1285
1286 m_gal->SetTarget( l.target );
1287 m_gal->SetLayerDepth( l.renderingOrder );
1288
1289 // Redraw the item from scratch
1290 int group = viewData->getGroup( aLayer );
1291
1292 if( group >= 0 )
1293 m_gal->DeleteGroup( group );
1294
1295 group = m_gal->BeginGroup();
1296 viewData->setGroup( aLayer, group );
1297
1298 if( !m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), aLayer ) )
1299 aItem->ViewDraw( aLayer, this ); // Alternative drawing method
1300
1301 m_gal->EndGroup();
1302}
virtual void DeleteGroup(int aGroupNumber)
Delete the group from the memory.
virtual int BeginGroup()
Begin a group.
virtual void EndGroup()
End the group.

References KIGFX::GAL::BeginGroup(), KIGFX::GAL::DeleteGroup(), KIGFX::PAINTER::Draw(), KIGFX::GAL::EndGroup(), KIGFX::VIEW_ITEM_DATA::getGroup(), group, KIGFX::VIEW::IsCached(), KIGFX::VIEW::m_gal, KIGFX::VIEW::m_layers, KIGFX::VIEW::m_painter, KIGFX::VIEW::VIEW_LAYER::renderingOrder, KIGFX::VIEW_ITEM_DATA::setGroup(), KIGFX::GAL::SetLayerDepth(), KIGFX::GAL::SetTarget(), KIGFX::VIEW::VIEW_LAYER::target, KIGFX::VIEW_ITEM::ViewDraw(), and KIGFX::VIEW_ITEM::viewPrivData().

Referenced by KIGFX::VIEW::invalidateItem().

◆ UpdateItems()

void KIGFX::VIEW::UpdateItems ( )
inherited

Iterate through the list of items that asked for updating and updates them.

Definition at line 1398 of file view.cpp.

1399{
1400 if( !m_gal->IsVisible() )
1401 return;
1402
1403 unsigned int cntGeomUpdate = 0;
1404 unsigned int cntAnyUpdate = 0;
1405
1406 for( VIEW_ITEM* item : *m_allItems )
1407 {
1408 auto vpd = item->viewPrivData();
1409
1410 if( !vpd )
1411 continue;
1412
1413 if( vpd->m_requiredUpdate & ( GEOMETRY | LAYERS ) )
1414 {
1415 cntGeomUpdate++;
1416 }
1417 if( vpd->m_requiredUpdate != NONE )
1418 {
1419 cntAnyUpdate++;
1420 }
1421 }
1422
1423 unsigned int cntTotal = m_allItems->size();
1424
1425 double ratio = (double) cntGeomUpdate / (double) cntTotal;
1426
1427 // Optimization to improve view update time. If a lot of items (say, 30%) have their
1428 // bboxes/geometry changed it's way faster (around 10 times) to rebuild the R-Trees
1429 // from scratch rather than update the bbox of each changed item. Pcbnew does multiple
1430 // full geometry updates during file load, this can save a solid 30 seconds on load time
1431 // for larger designs...
1432
1433 if( ratio > 0.3 )
1434 {
1435 auto allItems = *m_allItems;
1436 int layers[VIEW_MAX_LAYERS], layers_count;
1437
1438 // kill all Rtrees
1439 for( VIEW_LAYER& layer : m_layers )
1440 layer.items->RemoveAll();
1441
1442 // and re-insert items from scratch
1443 for( VIEW_ITEM* item : allItems )
1444 {
1445 item->ViewGetLayers( layers, layers_count );
1446 item->viewPrivData()->saveLayers( layers, layers_count );
1447
1448 for( int i = 0; i < layers_count; ++i )
1449 {
1450 VIEW_LAYER& l = m_layers[layers[i]];
1451 l.items->Insert( item );
1452 MarkTargetDirty( l.target );
1453 }
1454
1455 item->viewPrivData()->m_requiredUpdate &= ~( LAYERS | GEOMETRY );
1456 }
1457 }
1458
1459 if( cntAnyUpdate )
1460 {
1461 GAL_UPDATE_CONTEXT ctx( m_gal );
1462
1463 for( VIEW_ITEM* item : *m_allItems.get() )
1464 {
1465 if( item->viewPrivData() && item->viewPrivData()->m_requiredUpdate != NONE )
1466 {
1467 invalidateItem( item, item->viewPrivData()->m_requiredUpdate );
1468 item->viewPrivData()->m_requiredUpdate = NONE;
1469 }
1470 }
1471 }
1472
1473 KI_TRACE( traceGalProfile, "View update: total items %u, geom %u updates %u\n", cntTotal,
1474 cntGeomUpdate, cntAnyUpdate );
1475}
void invalidateItem(VIEW_ITEM *aItem, int aUpdateFlags)
Manage dirty flags & redraw queuing when updating an item.
Definition: view.cpp:1199
@ NONE
No updates are required.
Definition: view_item.h:46
#define KI_TRACE(aWhat,...)

References KIGFX::GEOMETRY, KIGFX::VIEW::invalidateItem(), KIGFX::GAL::IsVisible(), KIGFX::VIEW::VIEW_LAYER::items, KI_TRACE, KIGFX::LAYERS, KIGFX::VIEW::m_allItems, KIGFX::VIEW::m_gal, KIGFX::VIEW::m_layers, KIGFX::VIEW::MarkTargetDirty(), KIGFX::NONE, KIGFX::VIEW::VIEW_LAYER::target, traceGalProfile, and KIGFX::VIEW::VIEW_MAX_LAYERS.

Referenced by EDA_DRAW_PANEL_GAL::DoRePaint(), SCH_DRAW_PANEL::OnShow(), PCB_DRAW_PANEL_GAL::OnShow(), KIGFX::VIEW::ReorderLayerData(), and SCH_EDITOR_CONTROL::UpdateFind().

◆ UpdateLayerColor()

void KIGFX::VIEW::UpdateLayerColor ( int  aLayer)
inherited

Apply the new coloring scheme held by RENDER_SETTINGS in case that it has changed.

Parameters
aLayeris a number of the layer to be updated.
See also
RENDER_SETTINGS

Definition at line 737 of file view.cpp.

738{
739 // There is no point in updating non-cached layers
740 if( !IsCached( aLayer ) )
741 return;
742
743 BOX2I r;
744
745 r.SetMaximum();
746
747 if( m_gal->IsVisible() )
748 {
749 GAL_UPDATE_CONTEXT ctx( m_gal );
750
751 UPDATE_COLOR_VISITOR visitor( aLayer, m_painter, m_gal );
752 m_layers[aLayer].items->Query( r, visitor );
753 MarkTargetDirty( m_layers[aLayer].target );
754 }
755}

References KIGFX::VIEW::IsCached(), KIGFX::GAL::IsVisible(), KIGFX::VIEW::m_gal, KIGFX::VIEW::m_layers, KIGFX::VIEW::m_painter, KIGFX::VIEW::MarkTargetDirty(), and r.

Referenced by PCB_CONTROL::LayerAlphaDec(), PCB_CONTROL::LayerAlphaInc(), APPEARANCE_CONTROLS::OnColorSwatchChanged(), and GERBER_LAYER_WIDGET::OnLayerColorChange().

◆ updateLayers()

void KIGFX::VIEW::updateLayers ( VIEW_ITEM aItem)
protectedinherited

Determine rendering order of layers. Used in display order sorting function.

Definition at line 1321 of file view.cpp.

1322{
1323 VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1324 int layers[VIEW_MAX_LAYERS], layers_count;
1325
1326 if( !viewData )
1327 return;
1328
1329 // Remove the item from previous layer set
1330 viewData->getLayers( layers, layers_count );
1331
1332 for( int i = 0; i < layers_count; ++i )
1333 {
1334 VIEW_LAYER& l = m_layers[layers[i]];
1335 l.items->Remove( aItem );
1336 MarkTargetDirty( l.target );
1337
1338 if( IsCached( l.id ) )
1339 {
1340 // Redraw the item from scratch
1341 int prevGroup = viewData->getGroup( layers[i] );
1342
1343 if( prevGroup >= 0 )
1344 {
1345 m_gal->DeleteGroup( prevGroup );
1346 viewData->setGroup( l.id, -1 );
1347 }
1348 }
1349 }
1350
1351 // Add the item to new layer set
1352 aItem->ViewGetLayers( layers, layers_count );
1353 viewData->saveLayers( layers, layers_count );
1354
1355 for( int i = 0; i < layers_count; i++ )
1356 {
1357 VIEW_LAYER& l = m_layers[layers[i]];
1358 l.items->Insert( aItem );
1359 MarkTargetDirty( l.target );
1360 }
1361}

References KIGFX::GAL::DeleteGroup(), KIGFX::VIEW_ITEM_DATA::getGroup(), KIGFX::VIEW_ITEM_DATA::getLayers(), KIGFX::VIEW::VIEW_LAYER::id, KIGFX::VIEW::IsCached(), KIGFX::VIEW::VIEW_LAYER::items, KIGFX::VIEW::m_gal, KIGFX::VIEW::m_layers, KIGFX::VIEW::MarkTargetDirty(), KIGFX::VIEW_ITEM_DATA::saveLayers(), KIGFX::VIEW_ITEM_DATA::setGroup(), KIGFX::VIEW::VIEW_LAYER::target, KIGFX::VIEW::VIEW_MAX_LAYERS, KIGFX::VIEW_ITEM::ViewGetLayers(), and KIGFX::VIEW_ITEM::viewPrivData().

Referenced by KIGFX::VIEW::invalidateItem().

◆ UseDrawPriority()

void KIGFX::VIEW::UseDrawPriority ( bool  aFlag)
inlineinherited
Parameters
aFlagis true if draw priority should be respected while redrawing.

Definition at line 688 of file view.h.

689 {
690 m_useDrawPriority = aFlag;
691 }

References KIGFX::VIEW::m_useDrawPriority.

Member Data Documentation

◆ m_allItems

◆ m_boundary

◆ m_center

VECTOR2D KIGFX::VIEW::m_center
protectedinherited

◆ m_dirtyTargets

bool KIGFX::VIEW::m_dirtyTargets[TARGETS_NUMBER]
protectedinherited

Flag to respect draw priority when drawing items.

Definition at line 867 of file view.h.

Referenced by KIGFX::VIEW::IsTargetDirty(), KIGFX::VIEW::MarkClean(), KIGFX::VIEW::MarkDirty(), KIGFX::VIEW::markTargetClean(), and KIGFX::VIEW::MarkTargetDirty().

◆ m_dynamic

bool KIGFX::VIEW::m_dynamic
protectedinherited

Flag to mark targets as dirty so they have to be redrawn on the next refresh event.

Definition at line 864 of file view.h.

Referenced by KIGFX::VIEW::IsDynamic().

◆ m_enableOrderModifier

bool KIGFX::VIEW::m_enableOrderModifier
protectedinherited

The set of possible displayed layers and its properties.

Definition at line 831 of file view.h.

Referenced by KIGFX::VIEW::ClearTopLayers(), KIGFX::VIEW::EnableTopLayer(), and KIGFX::VIEW::SetTopLayer().

◆ m_gal

◆ m_layers

◆ m_maxScale

double KIGFX::VIEW::m_maxScale
protectedinherited

Definition at line 851 of file view.h.

Referenced by KIGFX::VIEW::SetScale(), and KIGFX::VIEW::SetScaleLimits().

◆ m_minScale

double KIGFX::VIEW::m_minScale
protectedinherited

Definition at line 850 of file view.h.

Referenced by KIGFX::VIEW::SetScale(), and KIGFX::VIEW::SetScaleLimits().

◆ m_mirrorX

bool KIGFX::VIEW::m_mirrorX
protectedinherited

Definition at line 853 of file view.h.

Referenced by KIGFX::VIEW::IsMirroredX(), KIGFX::VIEW::SetGAL(), and KIGFX::VIEW::SetMirror().

◆ m_mirrorY

bool KIGFX::VIEW::m_mirrorY
protectedinherited

PAINTER contains information how do draw items.

Definition at line 854 of file view.h.

Referenced by KIGFX::VIEW::IsMirroredY(), KIGFX::VIEW::SetGAL(), and KIGFX::VIEW::SetMirror().

◆ m_nextDrawPriority

int KIGFX::VIEW::m_nextDrawPriority
protectedinherited

Flag to reverse the draw order when using draw priority.

Definition at line 873 of file view.h.

Referenced by KIGFX::VIEW::Add(), and KIGFX::VIEW::Clear().

◆ m_orderedLayers

std::vector<VIEW_LAYER*> KIGFX::VIEW::m_orderedLayers
protectedinherited

Flat list of all items.

Definition at line 837 of file view.h.

Referenced by KIGFX::VIEW::Query(), KIGFX::VIEW::redrawRect(), and KIGFX::VIEW::sortLayers().

◆ m_ownedItems

std::vector<EDA_ITEM *> KIGFX::VIEW::m_ownedItems
protectedinherited

Whether to use rendering order modifier or not.

Definition at line 828 of file view.h.

Referenced by KIGFX::VIEW::AddToPreview(), and KIGFX::VIEW::ClearPreview().

◆ m_painter

PAINTER* KIGFX::VIEW::m_painter
protectedinherited

◆ m_preview

◆ m_reverseDrawOrder

bool KIGFX::VIEW::m_reverseDrawOrder
protectedinherited

Definition at line 876 of file view.h.

Referenced by KIGFX::VIEW::redrawRect(), and KIGFX::VIEW::ReverseDrawOrder().

◆ m_scale

double KIGFX::VIEW::m_scale
protectedinherited

◆ m_topLayers

std::set<unsigned int> KIGFX::VIEW::m_topLayers
protectedinherited

Center point of the VIEW (the point at which we are looking at).

Definition at line 843 of file view.h.

Referenced by KIGFX::VIEW::ClearTopLayers(), KIGFX::VIEW::EnableTopLayer(), KIGFX::VIEW::GetTopLayer(), and KIGFX::VIEW::SetTopLayer().

◆ m_useDrawPriority

bool KIGFX::VIEW::m_useDrawPriority
protectedinherited

The next sequential drawing priority.

Definition at line 870 of file view.h.

Referenced by KIGFX::VIEW::IsUsingDrawPriority(), KIGFX::VIEW::redrawRect(), and KIGFX::VIEW::UseDrawPriority().

◆ TOP_LAYER_MODIFIER

constexpr int KIGFX::VIEW::TOP_LAYER_MODIFIER = -VIEW_MAX_LAYERS
staticconstexprinherited

◆ VIEW_MAX_LAYERS


The documentation for this class was generated from the following files: