KiCad PCB EDA Suite
KIGFX::VIEW Class Reference

Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the GAL. More...

#include <view.h>

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

Classes

struct  CLEAR_LAYER_CACHE_VISITOR
 
struct  DRAW_ITEM_VISITOR
 
struct  RECACHE_ITEM_VISITOR
 
struct  UPDATE_COLOR_VISITOR
 
struct  UPDATE_DEPTH_VISITOR
 
struct  VIEW_LAYER
 

Public Types

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

Public Member Functions

 VIEW (bool aIsDynamic=true)
 
virtual ~VIEW ()
 
virtual void Add (VIEW_ITEM *aItem, int aDrawPriority=-1)
 Add a VIEW_ITEM to the view. More...
 
virtual void Remove (VIEW_ITEM *aItem)
 Remove a VIEW_ITEM from the view. More...
 
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...
 
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 changed. More...
 
virtual void Update (const VIEW_ITEM *aItem) const
 
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 (VECTOR2D aCenter, const BOX2D &occultingScreenRect)
 Set the center point of the VIEW, attempting to avoid occultingScreenRect (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 SetLayerDisplayOnly (int aLayer, bool aDisplayOnly=true)
 
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 MarkForUpdate (VIEW_ITEM *aItem)
 Add an item to a list of items that are going to be refreshed upon the next frame 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)
 
bool IsDrawOrderReversed () const
 
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...
 
int GetPrintMode () const
 Get the current print mode. More...
 
void SetPrintMode (int aPrintMode)
 Set the printing mode. 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
 maximum number of layers that may be shown More...
 

Protected Member Functions

 VIEW (const VIEW &)=delete
 
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
 Scale of displayed VIEW_ITEMs. More...
 
double m_scale
 View boundaries. More...
 
BOX2D m_boundary
 Scale lower limit. More...
 
double m_minScale
 Scale upper limit. More...
 
double m_maxScale
 Horizontal flip flag. More...
 
bool m_mirrorX
 Vertical flip flag. More...
 
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]
 Rendering order modifier for layers that are marked as top layers. 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
 A control for printing: m_printMode <= 0 means no printing mode (normal draw mode m_printMode > 0 is a printing mode (currently means "we are in printing mode"). More...
 
int m_printMode
 

Static Protected Attributes

static const int TOP_LAYER_MODIFIER = -VIEW_MAX_LAYERS
 Flag to respect draw priority when drawing items. More...
 

Friends

class VIEW_ITEM
 

Detailed Description

Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the GAL.

VIEWs can exist in two flavors:

  • dynamic - where items can be added, removed or changed anytime, intended for the main editing panel. Each VIEW_ITEM can be added to a single dynamic view.
  • static - where items are added once at the startup and are not linked with the VIEW. Foreseen for preview windows and printing.

Items in a view are grouped in layers (not to be confused with Kicad's PCB layers). Each layer is identified by an integer number. Visibility and rendering order can be set individually for each of the layers. Future versions of the VIEW will also allows one to assign different layers to different rendering targets, which will be composited at the final stage by the GAL. The VIEW class also provides fast methods for finding all visible objects that are within a given rectangular area, useful for object selection/hit testing.

Definition at line 67 of file view.h.

Member Typedef Documentation

◆ LAYER_ITEM_PAIR

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

Definition at line 72 of file view.h.

Constructor & Destructor Documentation

◆ VIEW() [1/2]

KIGFX::VIEW::VIEW ( bool  aIsDynamic = true)
Parameters
aIsDynamicdecides whether we are creating a static or a dynamic VIEW.

Definition at line 263 of file view.cpp.

263  :
264  m_enableOrderModifier( true ),
265  m_scale( 4.0 ),
266  m_minScale( 0.2 ), m_maxScale( 5000.0 ),
267  m_mirrorX( false ), m_mirrorY( false ),
268  m_painter( NULL ),
269  m_gal( NULL ),
270  m_dynamic( aIsDynamic ),
271  m_useDrawPriority( false ),
272  m_nextDrawPriority( 0 ),
273  m_reverseDrawOrder( false )
274 {
275  // Set m_boundary to define the max area size. The default area size
276  // is defined here as the max value of a int.
277  // this is a default value acceptable for Pcbnew and Gerbview, but too large for Eeschema.
278  // So in eeschema a call to SetBoundary() with a smaller value will be needed.
279  typedef std::numeric_limits<int> coord_limits;
280  double pos = coord_limits::lowest() / 2 + coord_limits::epsilon();
281  double size = coord_limits::max() - coord_limits::epsilon();
282  m_boundary.SetOrigin( pos, pos );
283  m_boundary.SetSize( size, size );
284  SetPrintMode( 0 );
285 
286  m_allItems.reset( new std::vector<VIEW_ITEM*> );
287  m_allItems->reserve( 32768 );
288 
289  // Redraw everything at the beginning
290  MarkDirty();
291 
292  m_layers.reserve( VIEW_MAX_LAYERS );
293 
294  // View uses layers to display EDA_ITEMs (item may be displayed on several layers, for example
295  // pad may be shown on pad, pad hole and solder paste layers). There are usual copper layers
296  // (eg. F.Cu, B.Cu, internal and so on) and layers for displaying objects such as texts,
297  // silkscreen, pads, vias, etc.
298  for( int ii = 0; ii < VIEW_MAX_LAYERS; ++ii )
299  {
300  m_layers.emplace_back();
301  m_layers[ii].items = std::make_shared<VIEW_RTREE>();
302  m_layers[ii].id = ii;
303  m_layers[ii].renderingOrder = ii;
304  m_layers[ii].visible = true;
305  m_layers[ii].displayOnly = false;
306  m_layers[ii].target = TARGET_CACHED;
307  }
308 
309  sortLayers();
310 
311  m_preview.reset( new KIGFX::VIEW_GROUP() );
312  Add( m_preview.get() );
313 }
bool m_useDrawPriority
The next sequential drawing priority.
Definition: view.h:858
std::unique_ptr< KIGFX::VIEW_GROUP > m_preview
Definition: view.h:800
void sortLayers()
Clear cached GAL group numbers (ONLY numbers stored in VIEW_ITEMs, not group objects used by GAL)
Definition: view.cpp:1239
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
void SetSize(const Vec &size)
Definition: box2.h:212
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:700
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
The set of layers that are displayed on the top.
Definition: view.h:815
double m_minScale
Scale upper limit.
Definition: view.h:830
void SetPrintMode(int aPrintMode)
Set the printing mode.
Definition: view.h:698
#define NULL
bool m_mirrorX
Vertical flip flag.
Definition: view.h:836
bool m_dynamic
Flag to mark targets as dirty so they have to be redrawn on the next refresh event.
Definition: view.h:849
Extend VIEW_ITEM by possibility of grouping items into a single object.
Definition: view_group.h:46
PAINTER * m_painter
Interface to #PAINTER that is used to draw items.
Definition: view.h:842
bool m_reverseDrawOrder
A control for printing: m_printMode <= 0 means no printing mode (normal draw mode m_printMode > 0 is ...
Definition: view.h:864
int m_nextDrawPriority
Flag to reverse the draw order when using draw priority.
Definition: view.h:861
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
double m_maxScale
Horizontal flip flag.
Definition: view.h:833
Main rendering target (cached)
Definition: definitions.h:48
bool m_enableOrderModifier
The set of possible displayed layers and its properties.
Definition: view.h:806
BOX2D m_boundary
Scale lower limit.
Definition: view.h:827
void SetOrigin(const Vec &pos)
Definition: box2.h:210
bool m_mirrorY
PAINTER contains information how do draw items.
Definition: view.h:839
double m_scale
View boundaries.
Definition: view.h:824
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
Definition: view.cpp:322
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:598

References Add(), m_allItems, m_boundary, m_layers, m_preview, MarkDirty(), BOX2< Vec >::SetOrigin(), SetPrintMode(), BOX2< Vec >::SetSize(), sortLayers(), KIGFX::TARGET_CACHED, and VIEW_MAX_LAYERS.

◆ ~VIEW()

KIGFX::VIEW::~VIEW ( )
virtual

Definition at line 316 of file view.cpp.

317 {
318  Remove( m_preview.get() );
319 }
std::unique_ptr< KIGFX::VIEW_GROUP > m_preview
Definition: view.h:800
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
Definition: view.cpp:352

References m_preview, and Remove().

◆ VIEW() [2/2]

KIGFX::VIEW::VIEW ( const VIEW )
protecteddelete

Member Function Documentation

◆ Add()

void KIGFX::VIEW::Add ( VIEW_ITEM aItem,
int  aDrawPriority = -1 
)
virtual

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 in KIGFX::PCB_VIEW.

Definition at line 322 of file view.cpp.

323 {
324  int layers[VIEW_MAX_LAYERS], layers_count;
325 
326  if( aDrawPriority < 0 )
327  aDrawPriority = m_nextDrawPriority++;
328 
329  if( !aItem->m_viewPrivData )
330  aItem->m_viewPrivData = new VIEW_ITEM_DATA;
331 
332  aItem->m_viewPrivData->m_view = this;
333  aItem->m_viewPrivData->m_drawPriority = aDrawPriority;
334 
335  aItem->ViewGetLayers( layers, layers_count );
336  aItem->viewPrivData()->saveLayers( layers, layers_count );
337 
338  m_allItems->push_back( aItem );
339 
340  for( int i = 0; i < layers_count; ++i )
341  {
342  VIEW_LAYER& l = m_layers[layers[i]];
343  l.items->Insert( aItem );
344  MarkTargetDirty( l.target );
345  }
346 
347  SetVisible( aItem, true );
348  Update( aItem, KIGFX::INITIAL_ADD );
349 }
Item is being added to the view.
Definition: view_item.h:56
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:700
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
The set of layers that are displayed on the top.
Definition: view.h:815
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:574
int m_nextDrawPriority
Flag to reverse the draw order when using draw priority.
Definition: view.h:861
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Set the item visibility.
Definition: view.cpp:1449
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:1503

References KIGFX::INITIAL_ADD, KIGFX::VIEW::VIEW_LAYER::items, m_allItems, KIGFX::VIEW_ITEM_DATA::m_drawPriority, m_layers, m_nextDrawPriority, KIGFX::VIEW_ITEM_DATA::m_view, KIGFX::VIEW_ITEM::m_viewPrivData, MarkTargetDirty(), KIGFX::VIEW_ITEM_DATA::saveLayers(), SetVisible(), KIGFX::VIEW::VIEW_LAYER::target, Update(), VIEW_MAX_LAYERS, KIGFX::VIEW_ITEM::ViewGetLayers(), and KIGFX::VIEW_ITEM::viewPrivData().

Referenced by KIGFX::PCB_VIEW::Add(), SCH_BASE_FRAME::AddToScreen(), PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems(), EDA_DRAW_PANEL_GAL::DebugOverlay(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), PCB_DRAW_PANEL_GAL::DisplayBoard(), KIGFX::SCH_VIEW::DisplayComponent(), SYMBOL_PREVIEW_WIDGET::DisplayPart(), KIGFX::SCH_VIEW::DisplaySheet(), SYMBOL_PREVIEW_WIDGET::DisplaySymbol(), PL_DRAW_PANEL_GAL::DisplayWorksheet(), PCB_SELECTION_TOOL::doSelectionMenu(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::drawSegment(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), EE_GRID_HELPER::EE_GRID_HELPER(), InitPreview(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), MakeOverlay(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), PCB_GRID_HELPER::PCB_GRID_HELPER(), DRAWING_TOOL::PlaceImportedGraphics(), DIALOG_PAD_PROPERTIES::prepareCanvas(), BOARD_COMMIT::Push(), GERBVIEW_FRAME::Read_EXCELLON_File(), GERBVIEW_FRAME::Read_GERBER_File(), DIALOG_PAD_PROPERTIES::redraw(), BOARD_EDITOR_CONTROL::Reset(), PCB_CONTROL::Reset(), GERBVIEW_SELECTION_TOOL::Reset(), EE_SELECTION_TOOL::Reset(), BOARD_COMMIT::Revert(), GERBVIEW_SELECTION_TOOL::select(), PL_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), PCB_DRAW_PANEL_GAL::SetDrawingSheet(), GERBVIEW_DRAW_PANEL_GAL::SetDrawingSheet(), PNS_KICAD_IFACE::SetView(), PNS_PCBNEW_DEBUG_DECORATOR::SetView(), GERBVIEW_DRAW_PANEL_GAL::SwitchBackend(), DS_DATA_ITEM::SyncDrawItems(), DS_DATA_ITEM_POLYGONS::SyncDrawItems(), DS_DATA_ITEM_TEXT::SyncDrawItems(), DS_DATA_ITEM_BITMAP::SyncDrawItems(), DIALOG_ERC::testErc(), EE_POINT_EDITOR::updatePoints(), PCB_POINT_EDITOR::updatePoints(), SYMBOL_VIEWER_FRAME::updatePreviewSymbol(), VIEW(), and ZONE_CREATE_HELPER::ZONE_CREATE_HELPER().

◆ AddToPreview()

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

Definition at line 1547 of file view.cpp.

1548 {
1549  Hide( aItem, false );
1550  m_preview->Add( aItem );
1551 
1552  if( aTakeOwnership )
1553  m_ownedItems.push_back( aItem );
1554 
1555  SetVisible( m_preview.get(), true );
1556  Hide( m_preview.get(), false );
1557  Update( m_preview.get() );
1558 }
void Hide(VIEW_ITEM *aItem, bool aHide=true)
Temporarily hide the item in the view (e.g.
Definition: view.cpp:1470
std::unique_ptr< KIGFX::VIEW_GROUP > m_preview
Definition: view.h:800
std::vector< EDA_ITEM * > m_ownedItems
Whether to use rendering order modifier or not.
Definition: view.h:803
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Set the item visibility.
Definition: view.cpp:1449
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:1503

References Hide(), m_ownedItems, m_preview, SetVisible(), and Update().

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

◆ areRequiredLayersEnabled()

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

Definition at line 1362 of file view.cpp.

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

References m_layers.

Referenced by redrawRect().

◆ Clear()

void KIGFX::VIEW::Clear ( )

Remove all items from the view.

Definition at line 1091 of file view.cpp.

1092 {
1093  BOX2I r;
1094  r.SetMaximum();
1095  m_allItems->clear();
1096 
1097  for( VIEW_LAYER& layer : m_layers )
1098  layer.items->RemoveAll();
1099 
1100  m_nextDrawPriority = 0;
1101 
1102  m_gal->ClearCache();
1103 }
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
The set of layers that are displayed on the top.
Definition: view.h:815
void SetMaximum()
Definition: box2.h:73
int m_nextDrawPriority
Flag to reverse the draw order when using draw priority.
Definition: view.h:861
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
virtual void ClearCache()
Delete all data created during caching of graphic items.

References KIGFX::GAL::ClearCache(), m_allItems, m_gal, m_layers, m_nextDrawPriority, and BOX2< Vec >::SetMaximum().

Referenced by KIGFX::SCH_VIEW::Cleanup(), GERBVIEW_FRAME::Clear_DrawLayers(), PCB_DRAW_PANEL_GAL::DisplayBoard(), SCH_DRAW_PANEL::DisplayComponent(), KIGFX::SCH_VIEW::DisplayComponent(), SCH_DRAW_PANEL::DisplaySheet(), PL_DRAW_PANEL_GAL::DisplayWorksheet(), GERBVIEW_FRAME::doCloseWindow(), DISPLAY_FOOTPRINTS_FRAME::InitDisplay(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), DS_PROXY_UNDO_ITEM::Restore(), PCB_BASE_EDIT_FRAME::SetBoard(), SYMBOL_EDIT_FRAME::SetCurPart(), 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 ( )
protected

Definition at line 1181 of file view.cpp.

1182 {
1183  BOX2I r;
1184 
1185  r.SetMaximum();
1186  CLEAR_LAYER_CACHE_VISITOR visitor( this );
1187 
1188  for( VIEW_LAYER& layer : m_layers )
1189  layer.items->Query( r, visitor );
1190 }
void SetMaximum()
Definition: box2.h:73
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809

References m_layers, and BOX2< Vec >::SetMaximum().

Referenced by SetGAL().

◆ ClearPreview()

void KIGFX::VIEW::ClearPreview ( )

Definition at line 1525 of file view.cpp.

1526 {
1527  if( !m_preview )
1528  return;
1529 
1530  m_preview->Clear();
1531 
1532  for( EDA_ITEM *item : m_ownedItems )
1533  delete item;
1534 
1535  m_ownedItems.clear();
1536  Update( m_preview.get() );
1537 }
std::unique_ptr< KIGFX::VIEW_GROUP > m_preview
Definition: view.h:800
std::vector< EDA_ITEM * > m_ownedItems
Whether to use rendering order modifier or not.
Definition: view.h:803
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:150
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:1503

References m_ownedItems, m_preview, and Update().

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

◆ ClearTargets()

void KIGFX::VIEW::ClearTargets ( )

Clear targets that are marked as dirty.

Definition at line 1106 of file view.cpp.

1107 {
1109  {
1110  // TARGET_CACHED and TARGET_NONCACHED have to be redrawn together, as they contain
1111  // layers that rely on each other (eg. netnames are noncached, but tracks - are cached)
1114 
1115  MarkDirty();
1116  }
1117 
1118  if( IsTargetDirty( TARGET_OVERLAY ) )
1119  {
1121  }
1122 }
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
Auxiliary rendering target (noncached)
Definition: definitions.h:49
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:563
virtual void ClearTarget(RENDER_TARGET aTarget)
Clear the target for rendering.
Items that may change while the view stays the same (noncached)
Definition: definitions.h:50
Main rendering target (cached)
Definition: definitions.h:48
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:598

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

Referenced by EDA_DRAW_PANEL_GAL::DoRePaint().

◆ ClearTopLayers()

void KIGFX::VIEW::ClearTopLayers ( )

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

Definition at line 889 of file view.cpp.

890 {
891  std::set<unsigned int>::iterator it;
892 
894  {
895  // Restore the previous rendering order for layers that were marked as top
896  for( it = m_topLayers.begin(); it != m_topLayers.end(); ++it )
897  m_layers[*it].renderingOrder -= TOP_LAYER_MODIFIER;
898  }
899 
900  m_topLayers.clear();
901 }
static const int TOP_LAYER_MODIFIER
Flag to respect draw priority when drawing items.
Definition: view.h:855
std::set< unsigned int > m_topLayers
Center point of the VIEW (the point at which we are looking at).
Definition: view.h:818
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
bool m_enableOrderModifier
The set of possible displayed layers and its properties.
Definition: view.h:806

References m_enableOrderModifier, m_layers, m_topLayers, and TOP_LAYER_MODIFIER.

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

◆ compareRenderingOrder()

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

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

Definition at line 787 of file view.h.

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

Referenced by sortLayers().

◆ CopySettings()

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

Copy layers and visibility settings from another view.

Parameters
aOtherViewview from which settings will be copied.

Definition at line 489 of file view.cpp.

490 {
491  wxASSERT_MSG( false, wxT( "This is not implemented" ) );
492 }

◆ DataReference()

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

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

GAL, PAINTER and other properties are left uninitialized.

Definition at line 1439 of file view.cpp.

1440 {
1441  std::unique_ptr<VIEW> ret = std::make_unique<VIEW>();
1442  ret->m_allItems = m_allItems;
1443  ret->m_layers = m_layers;
1444  ret->sortLayers();
1445  return ret;
1446 }
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
The set of layers that are displayed on the top.
Definition: view.h:815
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809

References m_allItems, and m_layers.

Referenced by BOARD_PRINTOUT::DrawPage().

◆ draw() [1/3]

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

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 1007 of file view.cpp.

1008 {
1009  VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1010 
1011  if( !viewData )
1012  return;
1013 
1014  if( IsCached( aLayer ) && !aImmediate )
1015  {
1016  // Draw using cached information or create one
1017  int group = viewData->getGroup( aLayer );
1018 
1019  if( group >= 0 )
1020  m_gal->DrawGroup( group );
1021  else
1022  Update( aItem );
1023  }
1024  else
1025  {
1026  // Immediate mode
1027  if( !m_painter->Draw( aItem, aLayer ) )
1028  aItem->ViewDraw( aLayer, this ); // Alternative drawing method
1029  }
1030 }
virtual void DrawGroup(int aGroupNumber)
Draw the stored group.
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
PAINTER * m_painter
Interface to #PAINTER that is used to draw items.
Definition: view.h:842
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.
bool IsCached(int aLayer) const
Return true if the layer is cached.
Definition: view.h:581
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:1503

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

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

◆ draw() [2/3]

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

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 1033 of file view.cpp.

1034 {
1035  int layers[VIEW_MAX_LAYERS], layers_count;
1036 
1037  aItem->ViewGetLayers( layers, layers_count );
1038 
1039  // Sorting is needed for drawing order dependent GALs (like Cairo)
1040  SortLayers( layers, layers_count );
1041 
1042  for( int i = 0; i < layers_count; ++i )
1043  {
1044  m_gal->SetLayerDepth( m_layers.at( layers[i] ).renderingOrder );
1045  draw( aItem, layers[i], aImmediate );
1046  }
1047 }
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
virtual void SetLayerDepth(double aLayerDepth)
Set the depth of the layer (position on the z-axis)
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:700
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:654
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
void draw(VIEW_ITEM *aItem, int aLayer, bool aImmediate=false)
Draw an item, but on a specified layers.
Definition: view.cpp:1007

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

◆ draw() [3/3]

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

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 1050 of file view.cpp.

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

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

◆ EnableTopLayer()

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

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 864 of file view.cpp.

865 {
866  if( aEnable == m_enableOrderModifier )
867  return;
868 
869  m_enableOrderModifier = aEnable;
870 
871  std::set<unsigned int>::iterator it;
872 
873  if( aEnable )
874  {
875  for( it = m_topLayers.begin(); it != m_topLayers.end(); ++it )
876  m_layers[*it].renderingOrder += TOP_LAYER_MODIFIER;
877  }
878  else
879  {
880  for( it = m_topLayers.begin(); it != m_topLayers.end(); ++it )
881  m_layers[*it].renderingOrder -= TOP_LAYER_MODIFIER;
882  }
883 
886 }
static const int TOP_LAYER_MODIFIER
Flag to respect draw priority when drawing items.
Definition: view.h:855
std::set< unsigned int > m_topLayers
Center point of the VIEW (the point at which we are looking at).
Definition: view.h:818
void UpdateAllLayersOrder()
Do everything that is needed to apply the rendering order of layers.
Definition: view.cpp:904
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
bool m_enableOrderModifier
The set of possible displayed layers and its properties.
Definition: view.h:806
void UpdateAllLayersColor()
Apply the new coloring scheme to all layers.
Definition: view.cpp:773

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

Referenced by PCB_DRAW_PANEL_GAL::SetTopLayer().

◆ GetBoundary()

const BOX2D& KIGFX::VIEW::GetBoundary ( ) const
inline
Returns
Current view area boundary.

Definition at line 292 of file view.h.

293  {
294  return m_boundary;
295  }
BOX2D m_boundary
Scale lower limit.
Definition: view.h:827

References m_boundary.

Referenced by KIGFX::WX_VIEW_CONTROLS::onScroll(), and KIGFX::WX_VIEW_CONTROLS::UpdateScrollbars().

◆ GetCenter()

const VECTOR2D& KIGFX::VIEW::GetCenter ( ) const
inline

Return the center point of this VIEW (in world space coordinates).

Returns
center point of the view

Definition at line 333 of file view.h.

334  {
335  return m_center;
336  }
VECTOR2D m_center
Scale of displayed VIEW_ITEMs.
Definition: view.h:821

References m_center.

Referenced by EDA_DRAW_PANEL_GAL::DoRePaint(), KIGFX::WX_VIEW_CONTROLS::onButton(), KIGFX::WX_VIEW_CONTROLS::onScroll(), KIGFX::WX_VIEW_CONTROLS::onTimer(), KIGFX::WX_VIEW_CONTROLS::onWheel(), and SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor().

◆ GetGAL()

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

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

Returns
Pointer to the currently used GAL instance.

Definition at line 189 of file view.h.

190  {
191  return m_gal;
192  }
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845

References m_gal.

Referenced by PCB_GRID_HELPER::BestDragOrigin(), EE_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(), EE_SELECTION_TOOL::GetNode(), GRID_HELPER::GetOrigin(), KIGFX::WX_VIEW_CONTROLS::GetRawCursorPosition(), ROUTER_TOOL::handleCommonEvents(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), PCB_VIEWER_TOOLS::MeasureTool(), COMMON_TOOLS::OnGridChanged(), PCB_POINT_EDITOR::OnSelectionChange(), COMMON_TOOLS::PanControl(), DIALOG_PAD_PROPERTIES::prepareCanvas(), KIGFX::WX_VIEW_CONTROLS::SetCrossHairCursorPosition(), KIGFX::VIEW_CONTROLS::ShowCursor(), PNS::TOOL_BASE::updateEndItem(), PNS::TOOL_BASE::updateStartItem(), RATSNEST_VIEW_ITEM::ViewDraw(), KIGFX::PREVIEW::RULER_ITEM::ViewDraw(), KIGFX::PREVIEW::ARC_ASSISTANT::ViewDraw(), KIGFX::ORIGIN_VIEWITEM::ViewDraw(), KIGFX::PREVIEW::TWO_POINT_ASSISTANT::ViewDraw(), KIGFX::PREVIEW::SIMPLE_OVERLAY_ITEM::ViewDraw(), MY_DRAWING::ViewDraw(), KIGFX::PREVIEW::SELECTION_AREA::ViewDraw(), KIGFX::VIEW_GROUP::ViewDraw(), ROUTER_PREVIEW_ITEM::ViewDraw(), DS_PROXY_VIEW_ITEM::ViewDraw(), EDIT_POINTS::ViewDraw(), and KIGFX::WX_VIEW_CONTROLS::WarpCursor().

◆ GetLayerOrder()

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

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 648 of file view.cpp.

649 {
650  return m_layers.at( aLayer ).renderingOrder;
651 }
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809

References m_layers.

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

◆ GetPainter()

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

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

Returns
Pointer to the currently used Painter instance.

Definition at line 207 of file view.h.

208  {
209  return m_painter;
210  }
PAINTER * m_painter
Interface to #PAINTER that is used to draw items.
Definition: view.h:842

References m_painter.

Referenced by PCB_BASE_FRAME::ActivateGalCanvas(), DS_PROXY_VIEW_ITEM::buildDrawList(), DIALOG_NET_INSPECTOR::buildNetsList(), BOARD_INSPECTION_TOOL::ClearHighlight(), PL_EDITOR_FRAME::CommonSettingsChanged(), PCB_BASE_FRAME::CommonSettingsChanged(), PCB_GRID_HELPER::computeAnchors(), SYMBOL_PREVIEW_WIDGET::DisplayPart(), SYMBOL_PREVIEW_WIDGET::DisplaySymbol(), PL_DRAW_PANEL_GAL::DisplayWorksheet(), BOARD_INSPECTION_TOOL::doHideNet(), KIGFX::PREVIEW::POLYGON_ITEM::drawPreviewShape(), KIGFX::PREVIEW::DrawTextNextToCursor(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), GERBVIEW_DRAW_PANEL_GAL::GERBVIEW_DRAW_PANEL_GAL(), FOOTPRINT_PREVIEW_PANEL::GetBackgroundColor(), FOOTPRINT_PREVIEW_PANEL::GetForegroundColor(), ROUTER_PREVIEW_ITEM::getLayerColor(), SCH_BASE_FRAME::GetRenderSettings(), PNS::TOOL_BASE::highlightNet(), BOARD_INSPECTION_TOOL::HighlightNet(), BOARD_INSPECTION_TOOL::highlightNet(), PNS_KICAD_IFACE::IsItemVisible(), PCB_BASE_FRAME::LoadSettings(), DIALOG_PAD_PROPERTIES::onChangePadMode(), ZONE_CREATE_HELPER::OnFirstPoint(), APPEARANCE_CONTROLS::OnLayerAlphaChanged(), GERBER_LAYER_WIDGET::OnLayerColorChange(), GERBER_LAYER_WIDGET::OnLayerSelect(), APPEARANCE_CONTROLS::onNetclassColorChanged(), APPEARANCE_CONTROLS::onNetclassContextMenu(), DIALOG_NET_INSPECTOR::onSelChanged(), GERBVIEW_DRAW_PANEL_GAL::OnShow(), 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(), GERBVIEW_SELECTION_TOOL::Reset(), EE_SELECTION_TOOL::Reset(), PCB_SELECTION_TOOL::Reset(), PCB_SELECTION_TOOL::Selectable(), GERBVIEW_DRAW_PANEL_GAL::SetHighContrastLayer(), PCB_DRAW_PANEL_GAL::SetHighContrastLayer(), EDA_DRAW_PANEL_GAL::SetHighContrastLayer(), PCBNEW_PRINTOUT::setupViewLayers(), SYMBOL_PREVIEW_WIDGET::SYMBOL_PREVIEW_WIDGET(), PANEL_DISPLAY_OPTIONS::TransferDataFromWindow(), PANEL_PL_EDITOR_COLOR_SETTINGS::TransferDataFromWindow(), PANEL_EDIT_OPTIONS::TransferDataFromWindow(), PANEL_SYM_COLOR_SETTINGS::TransferDataFromWindow(), PANEL_EESCHEMA_COLOR_SETTINGS::TransferDataFromWindow(), PCB_DRAW_PANEL_GAL::UpdateColors(), KIGFX::PCB_VIEW::UpdateDisplayOptions(), NET_GRID_TABLE::updateNetColor(), PANEL_PCBNEW_COLOR_SETTINGS::updatePreview(), PANEL_EESCHEMA_COLOR_SETTINGS::updatePreview(), RATSNEST_VIEW_ITEM::ViewDraw(), KIGFX::PREVIEW::RULER_ITEM::ViewDraw(), KIGFX::PREVIEW::SELECTION_AREA::ViewDraw(), KIGFX::VIEW_GROUP::ViewDraw(), DS_PROXY_VIEW_ITEM::ViewDraw(), EDIT_POINTS::ViewDraw(), TRACK::ViewGetLOD(), VIA::ViewGetLOD(), and PAD::ViewGetLOD().

◆ GetPrintMode()

int KIGFX::VIEW::GetPrintMode ( ) const
inline

Get the current print mode.

Return values less than or equal to zero indicate the current mode is the draw mode. Return values greater than zero indicate print mode.

Returns
the printing mode.

Definition at line 690 of file view.h.

690 { return m_printMode; }
int m_printMode
Definition: view.h:868

References m_printMode.

Referenced by IsLayerVisible(), VIA::ViewGetLOD(), and PAD::ViewGetLOD().

◆ GetScale()

◆ GetScreenPixelSize()

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

Return the size of the our rendering area in pixels.

Returns
viewport screen size.

Definition at line 1157 of file view.cpp.

1158 {
1159  return m_gal->GetScreenPixelSize();
1160 }
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
const VECTOR2I & GetScreenPixelSize() const
Return GAL canvas size in pixels.

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

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

◆ GetTopLayer()

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

Definition at line 828 of file view.cpp.

829 {
830  if( m_topLayers.size() == 0 )
831  return 0;
832 
833  return *m_topLayers.begin();
834 }
std::set< unsigned int > m_topLayers
Center point of the VIEW (the point at which we are looking at).
Definition: view.h:818

References m_topLayers.

Referenced by ROUTER_TOOL::getStartLayer(), PCB_SELECTION_TOOL::GuessSelectionCandidates(), PNS::TOOL_BASE::pickSingleItem(), and PNS::TOOL_BASE::updateStartItem().

◆ GetViewport()

BOX2D KIGFX::VIEW::GetViewport ( ) const

Return the current viewport visible area rectangle.

Returns
Current viewport rectangle.

Definition at line 514 of file view.cpp.

515 {
516  BOX2D rect;
517  VECTOR2D screenSize = m_gal->GetScreenPixelSize();
518 
519  rect.SetOrigin( ToWorld( VECTOR2D( 0, 0 ) ) );
520  rect.SetEnd( ToWorld( screenSize ) );
521 
522  return rect.Normalize();
523 }
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:451
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
const VECTOR2I & GetScreenPixelSize() const
Return GAL canvas size in pixels.
VECTOR2< double > VECTOR2D
Definition: vector2d.h:622
BOX2< Vec > & Normalize()
Function Normalize ensures that the height ant width are positive.
Definition: box2.h:129
void SetEnd(coord_type x, coord_type y)
Definition: box2.h:225
void SetOrigin(const Vec &pos)
Definition: box2.h:210

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

Referenced by drawBacksideTicks(), drawTicksAlongLine(), SCH_EDITOR_CONTROL::FindComponentAndItem(), EDA_DRAW_FRAME::FocusOnLocation(), PCB_SELECTION_TOOL::hitTestDistance(), and KIGFX::WX_VIEW_CONTROLS::UpdateScrollbars().

◆ Hide()

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

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 1470 of file view.cpp.

1471 {
1472  VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1473 
1474  if( !viewData )
1475  return;
1476 
1477  if( !( viewData->m_flags & VISIBLE ) )
1478  return;
1479 
1480  if( aHide )
1481  viewData->m_flags |= HIDDEN;
1482  else
1483  viewData->m_flags &= ~HIDDEN;
1484 
1485  Update( aItem, APPEARANCE );
1486 }
Item is temporarily hidden (e.g.
Definition: view_item.h:66
Visibility flag has changed.
Definition: view_item.h:52
Item is visible (in general)
Definition: view_item.h:65
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:1503

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

Referenced by AddToPreview(), KIGFX::SCH_VIEW::ClearHiddenFlags(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), PCB_SELECTION_TOOL::highlightInternal(), ROUTER_TOOL::InlineDrag(), SCH_MOVE_TOOL::moveItem(), SCH_EDITOR_CONTROL::Paste(), GERBVIEW_SELECTION_TOOL::selectVisually(), PCB_SELECTION_TOOL::unhighlightInternal(), and GERBVIEW_SELECTION_TOOL::unselectVisually().

◆ InitPreview()

void KIGFX::VIEW::InitPreview ( )

Definition at line 1540 of file view.cpp.

1541 {
1542  m_preview.reset( new KIGFX::VIEW_GROUP() );
1543  Add( m_preview.get() );
1544 }
std::unique_ptr< KIGFX::VIEW_GROUP > m_preview
Definition: view.h:800
Extend VIEW_ITEM by possibility of grouping items into a single object.
Definition: view_group.h:46
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
Definition: view.cpp:322

References Add(), and m_preview.

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

◆ invalidateItem()

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

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 1193 of file view.cpp.

1194 {
1195  if( aUpdateFlags & INITIAL_ADD )
1196  {
1197  // Don't update layers or bbox, since it was done in VIEW::Add()
1198  // Now that we have initialized, set flags to ALL for the code below
1199  aUpdateFlags = ALL;
1200  }
1201  else
1202  {
1203  // updateLayers updates geometry too, so we do not have to update both of them at the
1204  // same time
1205  if( aUpdateFlags & LAYERS )
1206  {
1207  updateLayers( aItem );
1208  }
1209  else if( aUpdateFlags & GEOMETRY )
1210  {
1211  updateBbox( aItem );
1212  }
1213  }
1214 
1215  int layers[VIEW_MAX_LAYERS], layers_count;
1216  aItem->ViewGetLayers( layers, layers_count );
1217 
1218  // Iterate through layers used by the item and recache it immediately
1219  for( int i = 0; i < layers_count; ++i )
1220  {
1221  int layerId = layers[i];
1222 
1223  if( IsCached( layerId ) )
1224  {
1225  if( aUpdateFlags & ( GEOMETRY | LAYERS | REPAINT ) )
1226  updateItemGeometry( aItem, layerId );
1227  else if( aUpdateFlags & COLOR )
1228  updateItemColor( aItem, layerId );
1229  }
1230 
1231  // Mark those layers as dirty, so the VIEW will be refreshed
1232  MarkTargetDirty( m_layers[layerId].target );
1233  }
1234 
1235  aItem->viewPrivData()->clearUpdateFlags();
1236 }
Item is being added to the view.
Definition: view_item.h:56
void updateLayers(VIEW_ITEM *aItem)
Determine rendering order of layers. Used in display order sorting function.
Definition: view.cpp:1319
void updateItemColor(VIEW_ITEM *aItem, int aLayer)
Update all information needed to draw an item.
Definition: view.cpp:1254
Color has changed.
Definition: view_item.h:53
All except INITIAL_ADD.
Definition: view_item.h:58
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:700
Item needs to be redrawn.
Definition: view_item.h:57
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:574
void updateBbox(VIEW_ITEM *aItem)
Update set of layers that an item occupies.
Definition: view.cpp:1303
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
void updateItemGeometry(VIEW_ITEM *aItem, int aLayer)
Update bounding box of an item.
Definition: view.cpp:1273
bool IsCached(int aLayer) const
Return true if the layer is cached.
Definition: view.h:581
Layers have changed.
Definition: view_item.h:55
Position or shape has changed.
Definition: view_item.h:54

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

Referenced by UpdateItems().

◆ IsCached()

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

Return true if the layer is cached.

Definition at line 581 of file view.h.

582  {
583  wxCHECK( aLayer < (int) m_layers.size(), false );
584 
585  try
586  {
587  return m_layers.at( aLayer ).target == TARGET_CACHED;
588  }
589  catch( const std::out_of_range& )
590  {
591  return false;
592  }
593  }
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
Main rendering target (cached)
Definition: definitions.h:48

References m_layers, and KIGFX::TARGET_CACHED.

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

◆ IsDirty()

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

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 546 of file view.h.

547  {
548  for( int i = 0; i < TARGETS_NUMBER; ++i )
549  {
550  if( IsTargetDirty( i ) )
551  return true;
552  }
553 
554  return false;
555  }
Number of available rendering targets.
Definition: definitions.h:51
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:563

References IsTargetDirty(), and KIGFX::TARGETS_NUMBER.

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

◆ IsDrawOrderReversed()

bool KIGFX::VIEW::IsDrawOrderReversed ( ) const
inline
Returns
true if draw order is reversed

Definition at line 651 of file view.h.

652  {
653  return m_reverseDrawOrder;
654  }
bool m_reverseDrawOrder
A control for printing: m_printMode <= 0 means no printing mode (normal draw mode m_printMode > 0 is ...
Definition: view.h:864

References m_reverseDrawOrder.

◆ IsDynamic()

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

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 536 of file view.h.

537  {
538  return m_dynamic;
539  }
bool m_dynamic
Flag to mark targets as dirty so they have to be redrawn on the next refresh event.
Definition: view.h:849

References m_dynamic.

◆ IsLayerVisible()

bool KIGFX::VIEW::IsLayerVisible ( int  aLayer) const
inline

◆ IsMirroredX()

◆ IsMirroredY()

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

Return true if view is flipped across the Y axis.

Definition at line 245 of file view.h.

246  {
247  return m_mirrorY;
248  }
bool m_mirrorY
PAINTER contains information how do draw items.
Definition: view.h:839

References m_mirrorY.

◆ IsTargetDirty()

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

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 563 of file view.h.

564  {
565  wxCHECK( aTarget < TARGETS_NUMBER, false );
566  return m_dirtyTargets[aTarget];
567  }
Number of available rendering targets.
Definition: definitions.h:51
bool m_dirtyTargets[TARGETS_NUMBER]
Rendering order modifier for layers that are marked as top layers.
Definition: view.h:852

References m_dirtyTargets, and KIGFX::TARGETS_NUMBER.

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

◆ IsUsingDrawPriority()

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

Definition at line 635 of file view.h.

636  {
637  return m_useDrawPriority;
638  }
bool m_useDrawPriority
The next sequential drawing priority.
Definition: view.h:858

References m_useDrawPriority.

◆ IsVisible()

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

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 1489 of file view.cpp.

1490 {
1491  const VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1492 
1493  return viewData && ( viewData->m_flags & VISIBLE );
1494 }
Item is visible (in general)
Definition: view_item.h:65

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

Referenced by EE_GRID_HELPER::BestSnapAnchor(), PCB_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 ( )

Definition at line 1516 of file view.cpp.

1517 {
1518  std::shared_ptr<VIEW_OVERLAY> overlay( new VIEW_OVERLAY );
1519 
1520  Add( overlay.get() );
1521  return overlay;
1522 }
static std::shared_ptr< KIGFX::VIEW_OVERLAY > overlay
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
Definition: view.cpp:322

References Add(), and overlay.

Referenced by AUTOPLACE_TOOL::autoplace().

◆ MarkDirty()

void KIGFX::VIEW::MarkDirty ( )
inline

Force redraw of view on the next rendering.

Definition at line 598 of file view.h.

599  {
600  for( int i = 0; i < TARGETS_NUMBER; ++i )
601  m_dirtyTargets[i] = true;
602  }
Number of available rendering targets.
Definition: definitions.h:51
bool m_dirtyTargets[TARGETS_NUMBER]
Rendering order modifier for layers that are marked as top layers.
Definition: view.h:852

References m_dirtyTargets, and KIGFX::TARGETS_NUMBER.

Referenced by ClearTargets(), EDA_DRAW_PANEL_GAL::DoRePaint(), BOARD_EDITOR_CONTROL::DoSetDrillOrigin(), PCB_CONTROL::DoSetGridOrigin(), EDA_DRAW_FRAME::OnMove(), refreshCallback(), SetCenter(), SetGAL(), SetMirror(), SetScale(), sortLayers(), PANEL_EESCHEMA_DISPLAY_OPTIONS::TransferDataFromWindow(), PANEL_SETUP_FORMATTING::TransferDataFromWindow(), UpdateAllLayersColor(), UpdateAllLayersOrder(), and VIEW().

◆ MarkForUpdate()

void KIGFX::VIEW::MarkForUpdate ( VIEW_ITEM aItem)

Add an item to a list of items that are going to be refreshed upon the next frame rendering.

Parameters
aItemis the item to be refreshed.

◆ markTargetClean()

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

Definition at line 722 of file view.h.

723  {
724  wxCHECK( aTarget < TARGETS_NUMBER, /* void */ );
725  m_dirtyTargets[aTarget] = false;
726  }
Number of available rendering targets.
Definition: definitions.h:51
bool m_dirtyTargets[TARGETS_NUMBER]
Rendering order modifier for layers that are marked as top layers.
Definition: view.h:852

References m_dirtyTargets, and KIGFX::TARGETS_NUMBER.

Referenced by Redraw().

◆ MarkTargetDirty()

◆ OnDestroy()

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

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 248 of file view.cpp.

249 {
250  VIEW_ITEM_DATA* data = aItem->viewPrivData();
251 
252  if( !data )
253  return;
254 
255  if( data->m_view )
256  data->m_view->VIEW::Remove( aItem );
257 
258  delete data;
259  aItem->ClearViewPrivData();
260 }

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
virtual

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 428 of file view.cpp.

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

References m_orderedLayers.

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

◆ RecacheAllItems()

void KIGFX::VIEW::RecacheAllItems ( )

Rebuild GAL display lists.

Definition at line 1380 of file view.cpp.

1381 {
1382  BOX2I r;
1383 
1384  r.SetMaximum();
1385 
1386  for( const VIEW_LAYER& l : m_layers )
1387  {
1388  if( IsCached( l.id ) )
1389  {
1390  RECACHE_ITEM_VISITOR visitor( this, m_gal, l.id );
1391  l.items->Query( r, visitor );
1392  }
1393  }
1394 }
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
void SetMaximum()
Definition: box2.h:73
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
bool IsCached(int aLayer) const
Return true if the layer is cached.
Definition: view.h:581

References IsCached(), m_gal, m_layers, and BOX2< Vec >::SetMaximum().

Referenced by GERBVIEW_FRAME::ActivateGalCanvas(), PCB_BASE_FRAME::ActivateGalCanvas(), PCB_CONTROL::FlipPcbView(), SCH_EDIT_TOOL::Mirror(), GERBVIEW_DRAW_PANEL_GAL::OnShow(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), SCH_DRAWING_TOOLS::PlaceImage(), SCH_EDIT_TOOL::Properties(), SCH_EDIT_FRAME::PutDataInPreviousState(), SCH_EDIT_TOOL::Rotate(), and PANEL_GAL_DISPLAY_OPTIONS::TransferDataFromWindow().

◆ Redraw()

void KIGFX::VIEW::Redraw ( )
virtual

Immediately redraws the whole view.

Definition at line 1125 of file view.cpp.

1126 {
1127 #ifdef __WXDEBUG__
1128  PROF_COUNTER totalRealTime;
1129 #endif /* __WXDEBUG__ */
1130 
1131  VECTOR2D screenSize = m_gal->GetScreenPixelSize();
1132  BOX2D rect( ToWorld( VECTOR2D( 0, 0 ) ),
1133  ToWorld( screenSize ) - ToWorld( VECTOR2D( 0, 0 ) ) );
1134 
1135  rect.Normalize();
1136  BOX2I recti( rect.GetPosition(), rect.GetSize() );
1137 
1138  // The view rtree uses integer positions. Large screens can overflow
1139  // this size so in this case, simply set the rectangle to the full rtree
1140  if( rect.GetWidth() > std::numeric_limits<int>::max() ||
1141  rect.GetHeight() > std::numeric_limits<int>::max() )
1142  recti.SetMaximum();
1143 
1144  redrawRect( recti );
1145  // All targets were redrawn, so nothing is dirty
1149 
1150 #ifdef __WXDEBUG__
1151  totalRealTime.Stop();
1152  wxLogTrace( traceGalProfile, "VIEW::Redraw(): %.1f ms", totalRealTime.msecs() );
1153 #endif /* __WXDEBUG__ */
1154 }
void Stop()
Save the time when this function was called, and set the counter stane to stop.
Definition: profile.h:85
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:451
double msecs(bool aSinceLast=false)
Definition: profile.h:146
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
const wxChar *const traceGalProfile
Flag to enable debug output of GAL performance profiling.
A small class to help profiling.
Definition: profile.h:45
Auxiliary rendering target (noncached)
Definition: definitions.h:49
const VECTOR2I & GetScreenPixelSize() const
Return GAL canvas size in pixels.
VECTOR2< double > VECTOR2D
Definition: vector2d.h:622
void SetMaximum()
Definition: box2.h:73
Items that may change while the view stays the same (noncached)
Definition: definitions.h:50
void markTargetClean(int aTarget)
Definition: view.h:722
void redrawRect(const BOX2I &aRect)
Definition: view.cpp:988
Main rendering target (cached)
Definition: definitions.h:48

References BOX2< Vec >::GetHeight(), BOX2< Vec >::GetPosition(), KIGFX::GAL::GetScreenPixelSize(), BOX2< Vec >::GetSize(), BOX2< Vec >::GetWidth(), m_gal, markTargetClean(), PROF_COUNTER::msecs(), BOX2< Vec >::Normalize(), redrawRect(), BOX2< Vec >::SetMaximum(), PROF_COUNTER::Stop(), KIGFX::TARGET_CACHED, KIGFX::TARGET_NONCACHED, KIGFX::TARGET_OVERLAY, ToWorld(), and traceGalProfile.

Referenced by EDA_DRAW_PANEL_GAL::DoRePaint().

◆ redrawRect()

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

Definition at line 988 of file view.cpp.

989 {
990  for( VIEW_LAYER* l : m_orderedLayers )
991  {
992  if( l->visible && IsTargetDirty( l->target ) && areRequiredLayersEnabled( l->id ) )
993  {
994  DRAW_ITEM_VISITOR drawFunc( this, l->id, m_useDrawPriority, m_reverseDrawOrder );
995 
996  m_gal->SetTarget( l->target );
997  m_gal->SetLayerDepth( l->renderingOrder );
998  l->items->Query( aRect, drawFunc );
999 
1000  if( m_useDrawPriority )
1001  drawFunc.deferredDraw();
1002  }
1003  }
1004 }
bool m_useDrawPriority
The next sequential drawing priority.
Definition: view.h:858
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
bool areRequiredLayersEnabled(int aLayerId) const
Definition: view.cpp:1362
virtual void SetLayerDepth(double aLayerDepth)
Set the depth of the layer (position on the z-axis)
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:563
bool m_reverseDrawOrder
A control for printing: m_printMode <= 0 means no printing mode (normal draw mode m_printMode > 0 is ...
Definition: view.h:864
std::vector< VIEW_LAYER * > m_orderedLayers
Flat list of all items.
Definition: view.h:812
virtual void SetTarget(RENDER_TARGET aTarget)
Set the target for rendering.

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

Referenced by Redraw().

◆ Remove()

void KIGFX::VIEW::Remove ( VIEW_ITEM aItem)
virtual

Remove a VIEW_ITEM from the view.

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

Reimplemented in KIGFX::PCB_VIEW.

Definition at line 352 of file view.cpp.

353 {
354  if( !aItem )
355  return;
356 
357  auto viewData = aItem->viewPrivData();
358 
359  if( !viewData )
360  return;
361 
362  wxCHECK( viewData->m_view == this, /*void*/ );
363  auto item = std::find( m_allItems->begin(), m_allItems->end(), aItem );
364 
365  if( item != m_allItems->end() )
366  {
367  m_allItems->erase( item );
368  viewData->clearUpdateFlags();
369  }
370 
371  int layers[VIEW::VIEW_MAX_LAYERS], layers_count;
372  viewData->getLayers( layers, layers_count );
373 
374  for( int i = 0; i < layers_count; ++i )
375  {
376  VIEW_LAYER& l = m_layers[layers[i]];
377  l.items->Remove( aItem );
378  MarkTargetDirty( l.target );
379 
380  // Clear the GAL cache
381  int prevGroup = viewData->getGroup( layers[i] );
382 
383  if( prevGroup >= 0 )
384  m_gal->DeleteGroup( prevGroup );
385  }
386 
387  viewData->deleteGroups();
388  viewData->m_view = nullptr;
389 }
virtual void DeleteGroup(int aGroupNumber)
Delete the group from the memory.
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:700
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
The set of layers that are displayed on the top.
Definition: view.h:815
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:574
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809

References KIGFX::GAL::DeleteGroup(), KIGFX::VIEW::VIEW_LAYER::items, m_allItems, m_gal, m_layers, MarkTargetDirty(), KIGFX::VIEW::VIEW_LAYER::target, VIEW_MAX_LAYERS, and KIGFX::VIEW_ITEM::viewPrivData().

Referenced by EDA_DRAW_PANEL_GAL::ClearDebugOverlay(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), SYMBOL_PREVIEW_WIDGET::DisplayPart(), SYMBOL_PREVIEW_WIDGET::DisplaySymbol(), PL_EDIT_TOOL::DoDelete(), PCB_SELECTION_TOOL::doSelectionMenu(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::drawSegment(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), DRAWING_TOOL::PlaceImportedGraphics(), BOARD_COMMIT::Push(), KIGFX::PCB_VIEW::Remove(), EDIT_TOOL::Remove(), SCH_BASE_FRAME::RemoveFromScreen(), BOARD_EDITOR_CONTROL::Reset(), PCB_CONTROL::Reset(), GERBVIEW_SELECTION_TOOL::Reset(), EE_SELECTION_TOOL::Reset(), BOARD_COMMIT::Revert(), PL_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), DS_DATA_ITEM::SyncDrawItems(), DS_DATA_ITEM_POLYGONS::SyncDrawItems(), DS_DATA_ITEM_TEXT::SyncDrawItems(), DS_DATA_ITEM_BITMAP::SyncDrawItems(), DIALOG_ERC::testErc(), GERBVIEW_SELECTION_TOOL::unselect(), EE_POINT_EDITOR::updatePoints(), PCB_POINT_EDITOR::updatePoints(), SYMBOL_VIEWER_FRAME::updatePreviewSymbol(), EE_SELECTION_TOOL::~EE_SELECTION_TOOL(), GERBVIEW_SELECTION_TOOL::~GERBVIEW_SELECTION_TOOL(), PCB_SELECTION_TOOL::~PCB_SELECTION_TOOL(), SYMBOL_PREVIEW_WIDGET::~SYMBOL_PREVIEW_WIDGET(), SYMBOL_VIEWER_FRAME::~SYMBOL_VIEWER_FRAME(), ~VIEW(), and ZONE_CREATE_HELPER::~ZONE_CREATE_HELPER().

◆ ReorderLayerData()

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

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 682 of file view.cpp.

683 {
684  std::vector<VIEW_LAYER> new_map;
685  new_map.reserve( m_layers.size() );
686 
687  for( int ii = 0; ii < VIEW_MAX_LAYERS; ++ii )
688  new_map.emplace_back();
689 
690  for( const VIEW_LAYER& layer : m_layers )
691  {
692  int orig_idx = layer.id;
693  int new_idx = orig_idx;
694 
695  if( aReorderMap.count( orig_idx ) )
696  new_idx = aReorderMap.at( orig_idx );
697 
698  new_map[new_idx] = layer;
699  new_map[new_idx].id = new_idx;
700  }
701 
702  m_layers = new_map;
703 
704  for( VIEW_ITEM* item : *m_allItems )
705  {
706  VIEW_ITEM_DATA* viewData = item->viewPrivData();
707 
708  if( !viewData )
709  continue;
710 
711  int layers[VIEW::VIEW_MAX_LAYERS], layers_count;
712 
713  item->ViewGetLayers( layers, layers_count );
714  viewData->saveLayers( layers, layers_count );
715 
716  viewData->reorderGroups( aReorderMap );
717 
718  viewData->m_requiredUpdate |= COLOR;
719  }
720 
721  UpdateItems();
722 }
friend class VIEW_ITEM
Definition: view.h:70
Color has changed.
Definition: view_item.h:53
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:700
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
The set of layers that are displayed on the top.
Definition: view.h:815
void UpdateItems()
Iterate through the list of items that asked for updating and updates them.
Definition: view.cpp:1397
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809

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

Referenced by GERBVIEW_FRAME::SortLayersByX2Attributes().

◆ ReverseDrawOrder()

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

Only takes effect if UseDrawPriority is true.

Parameters
aFlagis true if draw order should be reversed

Definition at line 661 of file view.h.

662  {
663  m_reverseDrawOrder = aFlag;
664  }
bool m_reverseDrawOrder
A control for printing: m_printMode <= 0 means no printing mode (normal draw mode m_printMode > 0 is ...
Definition: view.h:864

References m_reverseDrawOrder.

Referenced by EDA_DRAW_PANEL_GAL::SwitchBackend().

◆ SetBoundary() [1/2]

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

Set limits for view area.

Parameters
aBoundaryis the box that limits view area.

Definition at line 273 of file view.h.

274  {
275  m_boundary = aBoundary;
276  }
BOX2D m_boundary
Scale lower limit.
Definition: view.h:827

References m_boundary.

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

◆ SetBoundary() [2/2]

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

Set limits for view area.

Parameters
aBoundaryis the box that limits view area.

Definition at line 283 of file view.h.

284  {
285  m_boundary.SetOrigin( aBoundary.GetOrigin() );
286  m_boundary.SetEnd( aBoundary.GetEnd() );
287  }
const Vec GetEnd() const
Definition: box2.h:195
void SetEnd(coord_type x, coord_type y)
Definition: box2.h:225
BOX2D m_boundary
Scale lower limit.
Definition: view.h:827
void SetOrigin(const Vec &pos)
Definition: box2.h:210
const Vec & GetOrigin() const
Definition: box2.h:193

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

◆ SetCenter() [1/2]

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

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 580 of file view.cpp.

581 {
582  m_center = aCenter;
583 
584  if( !m_boundary.Contains( aCenter ) )
585  {
586  if( m_center.x < m_boundary.GetLeft() )
588  else if( aCenter.x > m_boundary.GetRight() )
590 
591  if( m_center.y < m_boundary.GetTop() )
593  else if( m_center.y > m_boundary.GetBottom() )
595  }
596 
599 
600  // Redraw everything after the viewport has changed
601  MarkDirty();
602 }
coord_type GetTop() const
Definition: box2.h:204
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
coord_type GetRight() const
Definition: box2.h:199
coord_type GetBottom() const
Definition: box2.h:200
virtual void ComputeWorldScreenMatrix()
Compute the world <-> screen transformation matrix.
VECTOR2D m_center
Scale of displayed VIEW_ITEMs.
Definition: view.h:821
bool Contains(const Vec &aPoint) const
Function Contains.
Definition: box2.h:151
BOX2D m_boundary
Scale lower limit.
Definition: view.h:827
void SetLookAtPoint(const VECTOR2D &aPoint)
Set the Point in world space to look at.
coord_type GetLeft() const
Definition: box2.h:203
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:598

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

Referenced by COMMON_TOOLS::CenterContents(), KIGFX::WX_VIEW_CONTROLS::CenterOnCursor(), SCH_BASE_FRAME::CenterScreen(), COMMON_TOOLS::doZoomFit(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), 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(), SetCenter(), KIGFX::WX_VIEW_CONTROLS::SetCrossHairCursorPosition(), SetGAL(), SetScale(), SetViewport(), KIGFX::WX_VIEW_CONTROLS::WarpCursor(), PANEL_PCBNEW_COLOR_SETTINGS::zoomFitPreview(), and PCB_SELECTION_TOOL::zoomFitSelection().

◆ SetCenter() [2/2]

void KIGFX::VIEW::SetCenter ( VECTOR2D  aCenter,
const BOX2D occultingScreenRect 
)

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

Parameters
aCenterthe new center point, in world space coordinates.
occultingScreenRectthe occulting rect, in screen space coordinates.

Definition at line 605 of file view.cpp.

606 {
607  BOX2D screenRect( VECTOR2D( 0, 0 ), m_gal->GetScreenPixelSize() );
608 
609  if( !screenRect.Intersects( occultingScreenRect ) )
610  {
611  SetCenter( aCenter );
612  return;
613  }
614 
615  BOX2D occultedRect = screenRect.Intersect( occultingScreenRect );
616  double topExposed = occultedRect.GetTop() - screenRect.GetTop();
617  double bottomExposed = screenRect.GetBottom() - occultedRect.GetBottom();
618  double leftExposed = occultedRect.GetLeft() - screenRect.GetLeft();
619  double rightExposed = screenRect.GetRight() - occultedRect.GetRight();
620 
621  if( std::max( topExposed, bottomExposed ) > std::max( leftExposed, rightExposed ) )
622  {
623  if( topExposed > bottomExposed )
624  aCenter.y += ToWorld( screenRect.GetHeight() / 2 - topExposed / 2 );
625  else
626  aCenter.y -= ToWorld( screenRect.GetHeight() / 2 - bottomExposed / 2 );
627  }
628  else
629  {
630  if( leftExposed > rightExposed )
631  aCenter.x += ToWorld( screenRect.GetWidth() / 2 - leftExposed / 2 );
632  else
633  aCenter.x -= ToWorld( screenRect.GetWidth() / 2 - rightExposed / 2 );
634  }
635 
636  SetCenter( aCenter );
637 }
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:451
coord_type GetTop() const
Definition: box2.h:204
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
coord_type GetRight() const
Definition: box2.h:199
coord_type GetBottom() const
Definition: box2.h:200
const VECTOR2I & GetScreenPixelSize() const
Return GAL canvas size in pixels.
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:580
VECTOR2< double > VECTOR2D
Definition: vector2d.h:622
coord_type GetLeft() const
Definition: box2.h:203
BOX2< Vec > Intersect(const BOX2< Vec > &aRect)
Function Intersect Returns the intersection of this with another rectangle.
Definition: box2.h:268

References BOX2< Vec >::GetBottom(), BOX2< Vec >::GetLeft(), BOX2< Vec >::GetRight(), KIGFX::GAL::GetScreenPixelSize(), BOX2< Vec >::GetTop(), BOX2< Vec >::Intersect(), m_gal, SetCenter(), ToWorld(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ SetGAL()

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

Assign a rendering device for the VIEW.

Parameters
aGalpointer to the GAL output device.

Definition at line 495 of file view.cpp.

496 {
497  bool recacheGroups = ( m_gal != nullptr ); // recache groups only if GAL is reassigned
498  m_gal = aGal;
499 
500  // clear group numbers, so everything is going to be recached
501  if( recacheGroups )
502  clearGroupCache();
503 
504  // every target has to be refreshed
505  MarkDirty();
506 
507  // force the new GAL to display the current viewport.
508  SetCenter( m_center );
509  SetScale( m_scale );
511 }
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
void SetMirror(bool aMirrorX, bool aMirrorY)
Control the mirroring of the VIEW.
Definition: view.cpp:541
VECTOR2D m_center
Scale of displayed VIEW_ITEMs.
Definition: view.h:821
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:580
bool m_mirrorX
Vertical flip flag.
Definition: view.h:836
virtual void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 })
Set the scaling factor, zooming around a given anchor point.
Definition: view.cpp:554
void clearGroupCache()
Definition: view.cpp:1181
bool m_mirrorY
PAINTER contains information how do draw items.
Definition: view.h:839
double m_scale
View boundaries.
Definition: view.h:824
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:598

References clearGroupCache(), m_center, m_gal, m_mirrorX, m_mirrorY, m_scale, MarkDirty(), SetCenter(), SetMirror(), and 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().

◆ SetLayerDisplayOnly()

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

Definition at line 414 of file view.h.

415  {
416  wxCHECK( aLayer < (int) m_layers.size(), /*void*/ );
417  m_layers[aLayer].displayOnly = aDisplayOnly;
418  }
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809

References m_layers.

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

◆ SetLayerOrder()

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

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 640 of file view.cpp.

641 {
642  m_layers[aLayer].renderingOrder = aRenderingOrder;
643 
644  sortLayers();
645 }
void sortLayers()
Clear cached GAL group numbers (ONLY numbers stored in VIEW_ITEMs, not group objects used by GAL)
Definition: view.cpp:1239
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809

References m_layers, and 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 
)
inline

Change the rendering target for a particular layer.

Parameters
aLayeris the layer.
aTargetis the rendering target.

Definition at line 426 of file view.h.

427  {
428  wxCHECK( aLayer < (int) m_layers.size(), /*void*/ );
429  m_layers[aLayer].target = aTarget;
430  }
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809

References m_layers.

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

◆ SetLayerVisible()

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

Control the visibility of a particular layer.

Parameters
aLayeris the layer to show/hide.
aVisibleis the layer visibility state.

Definition at line 387 of file view.h.

388  {
389  wxCHECK( aLayer < (int) m_layers.size(), /*void*/ );
390 
391  if( m_layers[aLayer].visible != aVisible )
392  {
393  // Target has to be redrawn after changing its visibility
394  MarkTargetDirty( m_layers[aLayer].target );
395  m_layers[aLayer].visible = aVisible;
396  }
397  }
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:574
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809

References m_layers, and MarkTargetDirty().

Referenced by APPEARANCE_CONTROLS::onLayerVisibilityChanged(), APPEARANCE_CONTROLS::onObjectVisibilityChanged(), GERBER_LAYER_WIDGET::OnRenderEnable(), PL_EDITOR_FRAME::OnSelectPage(), PL_DRAW_PANEL_GAL::PL_DRAW_PANEL_GAL(), GERBVIEW_FRAME::SetElementVisibility(), APPEARANCE_CONTROLS::SetLayerVisible(), APPEARANCE_CONTROLS::SetObjectVisible(), GERBVIEW_PRINTOUT::setupViewLayers(), PCBNEW_PRINTOUT::setupViewLayers(), BOARD_PRINTOUT::setupViewLayers(), GERBVIEW_FRAME::SetVisibleLayers(), APPEARANCE_CONTROLS::setVisibleLayers(), APPEARANCE_CONTROLS::setVisibleObjects(), PCB_DRAW_PANEL_GAL::SyncLayersVisibility(), and PCB_EDIT_FRAME::UpdateUserInterface().

◆ SetMirror()

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

Control the mirroring of the VIEW.

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

Definition at line 541 of file view.cpp.

542 {
543  wxASSERT_MSG( !aMirrorY, _( "Mirroring for Y axis is not supported yet" ) );
544 
545  m_mirrorX = aMirrorX;
546  m_mirrorY = aMirrorY;
547  m_gal->SetFlip( aMirrorX, aMirrorY );
548 
549  // Redraw everything
550  MarkDirty();
551 }
void SetFlip(bool xAxis, bool yAxis)
Sets flipping of the screen.
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
bool m_mirrorX
Vertical flip flag.
Definition: view.h:836
#define _(s)
Definition: 3d_actions.cpp:33
bool m_mirrorY
PAINTER contains information how do draw items.
Definition: view.h:839
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:598

References _, m_gal, m_mirrorX, m_mirrorY, 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 SetGAL().

◆ SetPainter()

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

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

Definition at line 197 of file view.h.

198  {
199  m_painter = aPainter;
200  }
PAINTER * m_painter
Interface to #PAINTER that is used to draw items.
Definition: view.h:842

References 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().

◆ SetPrintMode()

void KIGFX::VIEW::SetPrintMode ( int  aPrintMode)
inline

Set the printing mode.

Parameters
aPrintModeis the printing mode. If 0, the current mode is not a printing mode, just the draw mode

Definition at line 698 of file view.h.

698 { m_printMode = aPrintMode; }
int m_printMode
Definition: view.h:868

References m_printMode.

Referenced by VIEW().

◆ SetRequired()

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

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 392 of file view.cpp.

393 {
394  wxCHECK( (unsigned) aLayerId < m_layers.size(), /*void*/ );
395  wxCHECK( (unsigned) aRequiredId < m_layers.size(), /*void*/ );
396 
397  if( aRequired )
398  m_layers[aLayerId].requiredLayers.insert( aRequiredId );
399  else
400  m_layers[aLayerId].requiredLayers.erase( aRequired );
401 }
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809

References m_layers.

Referenced by PCB_DRAW_PANEL_GAL::setDefaultLayerDeps().

◆ SetScale()

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

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 554 of file view.cpp.

555 {
556  if( aAnchor == VECTOR2D( 0, 0 ) )
557  aAnchor = m_center;
558 
559  VECTOR2D a = ToScreen( aAnchor );
560 
561  if( aScale < m_minScale )
563  else if( aScale > m_maxScale )
565  else
566  m_scale = aScale;
567 
570 
571  VECTOR2D delta = ToWorld( a ) - aAnchor;
572 
573  SetCenter( m_center - delta );
574 
575  // Redraw everything after the viewport has changed
576  MarkDirty();
577 }
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:451
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
virtual void ComputeWorldScreenMatrix()
Compute the world <-> screen transformation matrix.
VECTOR2D m_center
Scale of displayed VIEW_ITEMs.
Definition: view.h:821
double m_minScale
Scale upper limit.
Definition: view.h:830
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:580
VECTOR2< double > VECTOR2D
Definition: vector2d.h:622
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:470
double m_maxScale
Horizontal flip flag.
Definition: view.h:833
void SetZoomFactor(double aZoomFactor)
Set the zoom factor of the scene.
double m_scale
View boundaries.
Definition: view.h:824
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:598

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

Referenced by COMMON_TOOLS::doZoomFit(), COMMON_TOOLS::doZoomToPreset(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), SCH_EDITOR_CONTROL::FindComponentAndItem(), SYMBOL_PREVIEW_WIDGET::fitOnDrawArea(), FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME(), KIGFX::WX_VIEW_CONTROLS::onMotion(), KIGFX::WX_VIEW_CONTROLS::onWheel(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), ZOOM_TOOL::selectRegion(), SetGAL(), KIGFX::SCH_VIEW::SetScale(), SetViewport(), PANEL_PCBNEW_COLOR_SETTINGS::zoomFitPreview(), PANEL_EESCHEMA_COLOR_SETTINGS::zoomFitPreview(), and PCB_SELECTION_TOOL::zoomFitSelection().

◆ SetScaleLimits()

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

Set minimum and maximum values for scale.

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

Definition at line 303 of file view.h.

304  {
305  wxASSERT_MSG( aMaximum > aMinimum, wxT( "I guess you passed parameters in wrong order" ) );
306 
307  m_minScale = aMinimum;
308  m_maxScale = aMaximum;
309  }
double m_minScale
Scale upper limit.
Definition: view.h:830
double m_maxScale
Horizontal flip flag.
Definition: view.h:833

References m_maxScale, and 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 
)
virtual

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 837 of file view.cpp.

838 {
839  if( aEnabled )
840  {
841  if( m_topLayers.count( aLayer ) == 1 )
842  return;
843 
844  m_topLayers.insert( aLayer );
845 
846  // Move the layer closer to front
848  m_layers[aLayer].renderingOrder += TOP_LAYER_MODIFIER;
849  }
850  else
851  {
852  if( m_topLayers.count( aLayer ) == 0 )
853  return;
854 
855  m_topLayers.erase( aLayer );
856 
857  // Restore the previous rendering order
859  m_layers[aLayer].renderingOrder -= TOP_LAYER_MODIFIER;
860  }
861 }
static const int TOP_LAYER_MODIFIER
Flag to respect draw priority when drawing items.
Definition: view.h:855
std::set< unsigned int > m_topLayers
Center point of the VIEW (the point at which we are looking at).
Definition: view.h:818
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
bool m_enableOrderModifier
The set of possible displayed layers and its properties.
Definition: view.h:806

References m_enableOrderModifier, m_layers, m_topLayers, and TOP_LAYER_MODIFIER.

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

◆ SetViewport()

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

Set the visible area of the VIEW.

Parameters
aViewportdesired visible area, in world space coordinates.

Definition at line 526 of file view.cpp.

527 {
528  VECTOR2D ssize = ToWorld( m_gal->GetScreenPixelSize(), false );
529 
530  wxCHECK( ssize.x > 0 && ssize.y > 0, /*void*/ );
531 
532  VECTOR2D centre = aViewport.Centre();
533  VECTOR2D vsize = aViewport.GetSize();
534  double zoom = 1.0 / std::max( fabs( vsize.x / ssize.x ), fabs( vsize.y / ssize.y ) );
535 
536  SetCenter( centre );
537  SetScale( GetScale() * zoom );
538 }
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:451
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
const VECTOR2I & GetScreenPixelSize() const
Return GAL canvas size in pixels.
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
Definition: view.cpp:580
virtual void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 })
Set the scaling factor, zooming around a given anchor point.
Definition: view.cpp:554
Vec Centre() const
Definition: box2.h:79
const Vec & GetSize() const
Definition: box2.h:189
double GetScale() const
Definition: view.h:263

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

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

◆ SetVisible()

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

Set the item visibility.

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

Definition at line 1449 of file view.cpp.

1450 {
1451  VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1452 
1453  if( !viewData )
1454  return;
1455 
1456  bool cur_visible = viewData->m_flags & VISIBLE;
1457 
1458  if( cur_visible != aIsVisible )
1459  {
1460  if( aIsVisible )
1461  viewData->m_flags |= VISIBLE;
1462  else
1463  viewData->m_flags &= ~VISIBLE;
1464 
1465  Update( aItem, APPEARANCE | COLOR );
1466  }
1467 }
Visibility flag has changed.
Definition: view_item.h:52
Color has changed.
Definition: view_item.h:53
Item is visible (in general)
Definition: view_item.h:65
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:1503

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

Referenced by Add(), AddToPreview(), EE_GRID_HELPER::BestSnapAnchor(), PCB_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(), PL_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), GRID_HELPER::SetAuxAxes(), ShowPreview(), and ZONE_CREATE_HELPER::~ZONE_CREATE_HELPER().

◆ ShowPreview()

void KIGFX::VIEW::ShowPreview ( bool  aShow = true)

Definition at line 1561 of file view.cpp.

1562 {
1563  SetVisible( m_preview.get(), aShow );
1564 }
std::unique_ptr< KIGFX::VIEW_GROUP > m_preview
Definition: view.h:800
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Set the item visibility.
Definition: view.cpp:1449

References m_preview, and SetVisible().

Referenced by SCH_EDIT_FRAME::AddJunction(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), ROUTER_TOOL::InlineDrag(), and DRAWING_TOOL::InteractivePlaceWithPreview().

◆ SortLayers()

void KIGFX::VIEW::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.

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 654 of file view.cpp.

655 {
656  int maxLay, maxOrd, maxIdx;
657 
658  for( int i = 0; i < aCount; ++i )
659  {
660  maxLay = aLayers[i];
661  maxOrd = GetLayerOrder( maxLay );
662  maxIdx = i;
663 
664  // Look for the max element in the range (j..aCount)
665  for( int j = i; j < aCount; ++j )
666  {
667  if( maxOrd < GetLayerOrder( aLayers[j] ) )
668  {
669  maxLay = aLayers[j];
670  maxOrd = GetLayerOrder( maxLay );
671  maxIdx = j;
672  }
673  }
674 
675  // Swap elements
676  aLayers[maxIdx] = aLayers[i];
677  aLayers[i] = maxLay;
678  }
679 }
int GetLayerOrder(int aLayer) const
Return rendering order of a particular layer.
Definition: view.cpp:648

References GetLayerOrder().

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

◆ sortLayers()

void KIGFX::VIEW::sortLayers ( )
protected

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

Definition at line 1239 of file view.cpp.

1240 {
1241  int n = 0;
1242 
1243  m_orderedLayers.resize( m_layers.size() );
1244 
1245  for( VIEW_LAYER& layer : m_layers )
1246  m_orderedLayers[n++] = &layer;
1247 
1248  sort( m_orderedLayers.begin(), m_orderedLayers.end(), compareRenderingOrder );
1249 
1250  MarkDirty();
1251 }
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
std::vector< VIEW_LAYER * > m_orderedLayers
Flat list of all items.
Definition: view.h:812
static bool compareRenderingOrder(VIEW_LAYER *aI, VIEW_LAYER *aJ)
Check if every layer required by the aLayerId layer is enabled.
Definition: view.h:787
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:598

References compareRenderingOrder(), m_layers, m_orderedLayers, and MarkDirty().

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

◆ ToScreen() [1/2]

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

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 470 of file view.cpp.

471 {
472  const MATRIX3x3D& matrix = m_gal->GetWorldScreenMatrix();
473 
474  if( aAbsolute )
475  return VECTOR2D( matrix * aCoord );
476  else
477  return VECTOR2D( matrix.GetScale().x * aCoord.x, matrix.GetScale().y * aCoord.y );
478 }
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
VECTOR2< T > GetScale() const
Get the scale components of the matrix.
Definition: matrix3x3.h:269
VECTOR2< double > VECTOR2D
Definition: vector2d.h:622
const MATRIX3x3D & GetWorldScreenMatrix() const
Get the world <-> screen transformation matrix.

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

Referenced by KIGFX::WX_VIEW_CONTROLS::handleAutoPanning(), ROUTER_TOOL::handleLayerSwitch(), TOOL_DISPATCHER::handleMouseButton(), KIGFX::WX_VIEW_CONTROLS::SetCrossHairCursorPosition(), SetScale(), and KIGFX::WX_VIEW_CONTROLS::WarpCursor().

◆ ToScreen() [2/2]

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

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

Parameters
aSizethe size to be transformed.

Definition at line 481 of file view.cpp.

482 {
483  const MATRIX3x3D& matrix = m_gal->GetWorldScreenMatrix();
484 
485  return matrix.GetScale().x * aSize;
486 }
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
VECTOR2< T > GetScale() const
Get the scale components of the matrix.
Definition: matrix3x3.h:269
const MATRIX3x3D & GetWorldScreenMatrix() const
Get the world <-> screen transformation matrix.

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

◆ ToWorld() [1/2]

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

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 451 of file view.cpp.

452 {
453  const MATRIX3x3D& matrix = m_gal->GetScreenWorldMatrix();
454 
455  if( aAbsolute )
456  return VECTOR2D( matrix * aCoord );
457  else
458  return VECTOR2D( matrix.GetScale().x * aCoord.x, matrix.GetScale().y * aCoord.y );
459 }
const MATRIX3x3D & GetScreenWorldMatrix() const
Get the screen <-> world transformation matrix.
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
VECTOR2< T > GetScale() const
Get the scale components of the matrix.
Definition: matrix3x3.h:269
VECTOR2< double > VECTOR2D
Definition: vector2d.h:622

References MATRIX3x3< T >::GetScale(), KIGFX::GAL::GetScreenWorldMatrix(), 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(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), EDIT_POINTS::FindPoint(), SYMBOL_PREVIEW_WIDGET::fitOnDrawArea(), GENERAL_COLLECTORS_GUIDE::GENERAL_COLLECTORS_GUIDE(), KIGFX::WX_VIEW_CONTROLS::GetMousePosition(), 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(), Redraw(), KIGFX::WX_VIEW_CONTROLS::refreshMouse(), PL_SELECTION_TOOL::selectionContains(), EE_SELECTION_TOOL::selectionContains(), ZOOM_TOOL::selectRegion(), SetCenter(), SetScale(), SetViewport(), KIGFX::ORIGIN_VIEWITEM::ViewDraw(), EDIT_POINTS::ViewDraw(), PANEL_PCBNEW_COLOR_SETTINGS::zoomFitPreview(), and PCB_SELECTION_TOOL::zoomFitSelection().

◆ ToWorld() [2/2]

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

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 462 of file view.cpp.

463 {
464  const MATRIX3x3D& matrix = m_gal->GetScreenWorldMatrix();
465 
466  return fabs( matrix.GetScale().x * aSize );
467 }
const MATRIX3x3D & GetScreenWorldMatrix() const
Get the screen <-> world transformation matrix.
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
VECTOR2< T > GetScale() const
Get the scale components of the matrix.
Definition: matrix3x3.h:269

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

◆ Update() [1/2]

void KIGFX::VIEW::Update ( const VIEW_ITEM aItem,
int  aUpdateFlags 
) const
virtual

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 in KIGFX::PCB_VIEW.

Definition at line 1503 of file view.cpp.

1504 {
1505  VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1506 
1507  if( !viewData )
1508  return;
1509 
1510  assert( aUpdateFlags != NONE );
1511 
1512  viewData->m_requiredUpdate |= aUpdateFlags;
1513 }
No updates are required.
Definition: view_item.h:51

References KIGFX::VIEW_ITEM_DATA::m_requiredUpdate, KIGFX::NONE, and KIGFX::VIEW_ITEM::viewPrivData().

Referenced by Add(), PNS_PCBNEW_DEBUG_DECORATOR::AddLine(), AddToPreview(), EE_GRID_HELPER::BestSnapAnchor(), PCB_GRID_HELPER::BestSnapAnchor(), SCH_EDIT_TOOL::ChangeTextType(), PNS_PCBNEW_DEBUG_DECORATOR::Clear(), ClearPreview(), PL_SELECTION_TOOL::ClearSelection(), EE_SELECTION_TOOL::ClearSelection(), PNS_KICAD_IFACE::DisplayItem(), PNS_KICAD_IFACE::DisplayRatline(), EDIT_TOOL::DragArcTrack(), draw(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::drawSegment(), PL_DRAWING_TOOLS::DrawShape(), PAD_TOOL::EnumeratePads(), PNS_KICAD_IFACE::EraseView(), DIALOG_ERC::ExcludeMarker(), EE_INSPECTION_TOOL::ExcludeMarker(), Hide(), PNS_KICAD_IFACE::HideItem(), PL_SELECTION_TOOL::highlight(), EE_SELECTION_TOOL::highlight(), EE_SELECTION_TOOL::Main(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), EDIT_TOOL::MoveExact(), PL_EDIT_TOOL::moveItem(), PROPERTIES_FRAME::OnAcceptPrms(), DIALOG_ERC::OnERCItemRClick(), ZONE_CREATE_HELPER::OnGeometryChange(), PCB_POINT_EDITOR::OnSelectionChange(), KIGFX::VIEW::RECACHE_ITEM_VISITOR::operator()(), BOARD_EDITOR_CONTROL::PlaceFootprint(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), DRAWING_TOOL::PlaceText(), BOARD_COMMIT::Push(), SCH_EDIT_FRAME::RecalculateConnections(), SCH_EDIT_FRAME::RecomputeIntersheetRefs(), DIALOG_PAD_PROPERTIES::redraw(), PCB_DRAW_PANEL_GAL::RedrawRatsnest(), SCH_BASE_FRAME::RefreshSelection(), SCH_EDIT_FRAME::SaveSymbolToSchematic(), PL_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), GERBVIEW_SELECTION_TOOL::selectVisually(), SetVisible(), SCH_EDIT_FRAME::TestDanglingEnds(), DIALOG_JUNCTION_PROPS::TransferDataFromWindow(), PL_SELECTION_TOOL::unhighlight(), EE_SELECTION_TOOL::unhighlight(), PCB_BASE_EDIT_FRAME::unitsChangeRefresh(), GERBVIEW_SELECTION_TOOL::unselectVisually(), KIGFX::PCB_VIEW::Update(), Update(), PL_POINT_EDITOR::updateItem(), PCB_POINT_EDITOR::updateItem(), EE_TOOL_BASE< SCH_BASE_FRAME >::updateItem(), SCH_BASE_FRAME::UpdateItem(), SCH_EDITOR_CONTROL::UpdateNetHighlighting(), EE_POINT_EDITOR::updateParentItem(), EE_POINT_EDITOR::updatePoints(), PL_POINT_EDITOR::updatePoints(), PCB_POINT_EDITOR::updatePoints(), and PCB_SELECTION_TOOL::updateSelection().

◆ Update() [2/2]

void KIGFX::VIEW::Update ( const VIEW_ITEM aItem) const
virtual

Reimplemented in KIGFX::PCB_VIEW.

Definition at line 1497 of file view.cpp.

1498 {
1499  Update( aItem, ALL );
1500 }
All except INITIAL_ADD.
Definition: view_item.h:58
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:1503

References KIGFX::ALL, and Update().

◆ UpdateAllItems()

void KIGFX::VIEW::UpdateAllItems ( int  aUpdateFlags)

◆ UpdateAllItemsConditionally()

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

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 1425 of file view.cpp.

1427 {
1428  for( VIEW_ITEM* item : *m_allItems )
1429  {
1430  if( aCondition( item ) )
1431  {
1432  if( item->viewPrivData() )
1433  item->viewPrivData()->m_requiredUpdate |= aUpdateFlags;
1434  }
1435  }
1436 }
friend class VIEW_ITEM
Definition: view.h:70
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
The set of layers that are displayed on the top.
Definition: view.h:815

References m_allItems.

Referenced by DIALOG_NET_INSPECTOR::onDeleteNet(), SCH_EDIT_FRAME::OnModify(), PCB_BASE_FRAME::SetDisplayOptions(), GERBVIEW_FRAME::SetElementVisibility(), PANEL_DISPLAY_OPTIONS::TransferDataFromWindow(), PANEL_EDIT_OPTIONS::TransferDataFromWindow(), and GERBVIEW_FRAME::UpdateDisplayOptions().

◆ UpdateAllLayersColor()

void KIGFX::VIEW::UpdateAllLayersColor ( )

Apply the new coloring scheme to all layers.

The used scheme is held by #RENDER_SETTINGS.

See also
RENDER_SETTINGS

Definition at line 773 of file view.cpp.

774 {
775  if( m_gal->IsVisible() )
776  {
777  GAL_UPDATE_CONTEXT ctx( m_gal );
778 
779  for( VIEW_ITEM* item : *m_allItems )
780  {
781  VIEW_ITEM_DATA* viewData = item->viewPrivData();
782 
783  if( !viewData )
784  continue;
785 
786  int layers[VIEW::VIEW_MAX_LAYERS], layers_count;
787  viewData->getLayers( layers, layers_count );
788 
789  for( int i = 0; i < layers_count; ++i )
790  {
791  const COLOR4D color = m_painter->GetSettings()->GetColor( item, layers[i] );
792  int group = viewData->getGroup( layers[i] );
793 
794  if( group >= 0 )
795  m_gal->ChangeGroupColor( group, color );
796  }
797  }
798  }
799 
800  MarkDirty();
801 }
friend class VIEW_ITEM
Definition: view.h:70
int color
Definition: DXF_plotter.cpp:60
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:700
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
The set of layers that are displayed on the top.
Definition: view.h:815
virtual void ChangeGroupColor(int aGroupNumber, const COLOR4D &aNewColor)
Change the color used to draw the group.
PAINTER * m_painter
Interface to #PAINTER that is used to draw items.
Definition: view.h:842
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...
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
virtual bool IsVisible() const
Return true if the GAL canvas is visible on the screen.
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:598
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:98

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(), m_allItems, m_gal, m_painter, MarkDirty(), and VIEW_MAX_LAYERS.

Referenced by DIALOG_NET_INSPECTOR::buildNetsList(), BOARD_INSPECTION_TOOL::ClearHighlight(), FOOTPRINT_EDIT_FRAME::CommonSettingsChanged(), 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::onNetColorModeChanged(), DIALOG_NET_INSPECTOR::onSelChanged(), DIALOG_NET_INSPECTOR::onSortingChanged(), GERBVIEW_DRAW_PANEL_GAL::SetHighContrastLayer(), PCB_DRAW_PANEL_GAL::SetHighContrastLayer(), EDA_DRAW_PANEL_GAL::SetHighContrastLayer(), and NET_GRID_TABLE::updateNetColor().

◆ UpdateAllLayersOrder()

void KIGFX::VIEW::UpdateAllLayersOrder ( )

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 904 of file view.cpp.

905 {
906  sortLayers();
907 
908  if( m_gal->IsVisible() )
909  {
910  GAL_UPDATE_CONTEXT ctx( m_gal );
911 
912  for( VIEW_ITEM* item : *m_allItems )
913  {
914  VIEW_ITEM_DATA* viewData = item->viewPrivData();
915 
916  if( !viewData )
917  continue;
918 
919  int layers[VIEW::VIEW_MAX_LAYERS], layers_count;
920  viewData->getLayers( layers, layers_count );
921 
922  for( int i = 0; i < layers_count; ++i )
923  {
924  int group = viewData->getGroup( layers[i] );
925 
926  if( group >= 0 )
927  m_gal->ChangeGroupDepth( group, m_layers[layers[i]].renderingOrder );
928  }
929  }
930  }
931 
932  MarkDirty();
933 }
void sortLayers()
Clear cached GAL group numbers (ONLY numbers stored in VIEW_ITEMs, not group objects used by GAL)
Definition: view.cpp:1239
friend class VIEW_ITEM
Definition: view.h:70
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:700
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
The set of layers that are displayed on the top.
Definition: view.h:815
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
virtual bool IsVisible() const
Return true if the GAL canvas is visible on the screen.
virtual void ChangeGroupDepth(int aGroupNumber, int aDepth)
Change the depth (Z-axis position) of the group.
void MarkDirty()
Force redraw of view on the next rendering.
Definition: view.h:598

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

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

◆ updateBbox()

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

Update set of layers that an item occupies.

Definition at line 1303 of file view.cpp.

1304 {
1305  int layers[VIEW_MAX_LAYERS], layers_count;
1306 
1307  aItem->ViewGetLayers( layers, layers_count );
1308 
1309  for( int i = 0; i < layers_count; ++i )
1310  {
1311  VIEW_LAYER& l = m_layers[layers[i]];
1312  l.items->Remove( aItem );
1313  l.items->Insert( aItem );
1314  MarkTargetDirty( l.target );
1315  }
1316 }
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:700
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:574
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809

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

Referenced by invalidateItem().

◆ updateItemColor()

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

Update all information needed to draw an item.

Definition at line 1254 of file view.cpp.

1255 {
1256  VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1257  wxCHECK( (unsigned) aLayer < m_layers.size(), /*void*/ );
1258  wxCHECK( IsCached( aLayer ), /*void*/ );
1259 
1260  if( !viewData )
1261  return;
1262 
1263  // Obtain the color that should be used for coloring the item on the specific layerId
1264  const COLOR4D color = m_painter->GetSettings()->GetColor( aItem, aLayer );
1265  int group = viewData->getGroup( aLayer );
1266 
1267  // Change the color, only if it has group assigned
1268  if( group >= 0 )
1269  m_gal->ChangeGroupColor( group, color );
1270 }
int color
Definition: DXF_plotter.cpp:60
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
virtual void ChangeGroupColor(int aGroupNumber, const COLOR4D &aNewColor)
Change the color used to draw the group.
PAINTER * m_painter
Interface to #PAINTER that is used to draw items.
Definition: view.h:842
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
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...
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
bool IsCached(int aLayer) const
Return true if the layer is cached.
Definition: view.h:581
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:98

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

Referenced by invalidateItem().

◆ updateItemGeometry()

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

Update bounding box of an item.

Definition at line 1273 of file view.cpp.

1274 {
1275  VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1276  wxCHECK( (unsigned) aLayer < m_layers.size(), /*void*/ );
1277  wxCHECK( IsCached( aLayer ), /*void*/ );
1278 
1279  if( !viewData )
1280  return;
1281 
1282  VIEW_LAYER& l = m_layers.at( aLayer );
1283 
1284  m_gal->SetTarget( l.target );
1285  m_gal->SetLayerDepth( l.renderingOrder );
1286 
1287  // Redraw the item from scratch
1288  int group = viewData->getGroup( aLayer );
1289 
1290  if( group >= 0 )
1291  m_gal->DeleteGroup( group );
1292 
1293  group = m_gal->BeginGroup();
1294  viewData->setGroup( aLayer, group );
1295 
1296  if( !m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), aLayer ) )
1297  aItem->ViewDraw( aLayer, this ); // Alternative drawing method
1298 
1299  m_gal->EndGroup();
1300 }
virtual void DeleteGroup(int aGroupNumber)
Delete the group from the memory.
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
virtual void SetLayerDepth(double aLayerDepth)
Set the depth of the layer (position on the z-axis)
virtual void EndGroup()
End the group.
virtual int BeginGroup()
Begin a group.
PAINTER * m_painter
Interface to #PAINTER that is used to draw items.
Definition: view.h:842
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
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.
bool IsCached(int aLayer) const
Return true if the layer is cached.
Definition: view.h:581
virtual void SetTarget(RENDER_TARGET aTarget)
Set the target for rendering.

References KIGFX::GAL::BeginGroup(), KIGFX::GAL::DeleteGroup(), KIGFX::PAINTER::Draw(), KIGFX::GAL::EndGroup(), KIGFX::VIEW_ITEM_DATA::getGroup(), group, IsCached(), m_gal, m_layers, 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 invalidateItem().

◆ UpdateItems()

void KIGFX::VIEW::UpdateItems ( )

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

Definition at line 1397 of file view.cpp.

1398 {
1399  if( m_gal->IsVisible() )
1400  {
1401  GAL_UPDATE_CONTEXT ctx( m_gal );
1402 
1403  for( VIEW_ITEM* item : *m_allItems )
1404  {
1405  if( item->viewPrivData() && item->viewPrivData()->m_requiredUpdate != NONE )
1406  {
1407  invalidateItem( item, item->viewPrivData()->m_requiredUpdate );
1408  item->viewPrivData()->m_requiredUpdate = NONE;
1409  }
1410  }
1411  }
1412 }
friend class VIEW_ITEM
Definition: view.h:70
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
std::shared_ptr< std::vector< VIEW_ITEM * > > m_allItems
The set of layers that are displayed on the top.
Definition: view.h:815
void invalidateItem(VIEW_ITEM *aItem, int aUpdateFlags)
Manage dirty flags & redraw queuing when updating an item.
Definition: view.cpp:1193
No updates are required.
Definition: view_item.h:51
virtual bool IsVisible() const
Return true if the GAL canvas is visible on the screen.

References invalidateItem(), KIGFX::GAL::IsVisible(), m_allItems, m_gal, and KIGFX::NONE.

Referenced by EDA_DRAW_PANEL_GAL::DoRePaint(), PL_SELECTION_TOOL::doSelectionMenu(), EE_SELECTION_TOOL::doSelectionMenu(), SCH_DRAW_PANEL::OnShow(), PCB_DRAW_PANEL_GAL::OnShow(), ReorderLayerData(), and SCH_EDITOR_CONTROL::UpdateFind().

◆ UpdateLayerColor()

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

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 752 of file view.cpp.

753 {
754  // There is no point in updating non-cached layers
755  if( !IsCached( aLayer ) )
756  return;
757 
758  BOX2I r;
759 
760  r.SetMaximum();
761 
762  if( m_gal->IsVisible() )
763  {
764  GAL_UPDATE_CONTEXT ctx( m_gal );
765 
766  UPDATE_COLOR_VISITOR visitor( aLayer, m_painter, m_gal );
767  m_layers[aLayer].items->Query( r, visitor );
768  MarkTargetDirty( m_layers[aLayer].target );
769  }
770 }
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:574
void SetMaximum()
Definition: box2.h:73
PAINTER * m_painter
Interface to #PAINTER that is used to draw items.
Definition: view.h:842
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
bool IsCached(int aLayer) const
Return true if the layer is cached.
Definition: view.h:581
virtual bool IsVisible() const
Return true if the GAL canvas is visible on the screen.

References IsCached(), KIGFX::GAL::IsVisible(), m_gal, m_layers, m_painter, MarkTargetDirty(), and BOX2< Vec >::SetMaximum().

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

◆ updateLayers()

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

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

Definition at line 1319 of file view.cpp.

1320 {
1321  VIEW_ITEM_DATA* viewData = aItem->viewPrivData();
1322  int layers[VIEW_MAX_LAYERS], layers_count;
1323 
1324  if( !viewData )
1325  return;
1326 
1327  // Remove the item from previous layer set
1328  viewData->getLayers( layers, layers_count );
1329 
1330  for( int i = 0; i < layers_count; ++i )
1331  {
1332  VIEW_LAYER& l = m_layers[layers[i]];
1333  l.items->Remove( aItem );
1334  MarkTargetDirty( l.target );
1335 
1336  if( IsCached( l.id ) )
1337  {
1338  // Redraw the item from scratch
1339  int prevGroup = viewData->getGroup( layers[i] );
1340 
1341  if( prevGroup >= 0 )
1342  {
1343  m_gal->DeleteGroup( prevGroup );
1344  viewData->setGroup( l.id, -1 );
1345  }
1346  }
1347  }
1348 
1349  // Add the item to new layer set
1350  aItem->ViewGetLayers( layers, layers_count );
1351  viewData->saveLayers( layers, layers_count );
1352 
1353  for( int i = 0; i < layers_count; i++ )
1354  {
1355  VIEW_LAYER& l = m_layers[layers[i]];
1356  l.items->Insert( aItem );
1357  MarkTargetDirty( l.target );
1358  }
1359 }
virtual void DeleteGroup(int aGroupNumber)
Delete the group from the memory.
GAL * m_gal
Dynamic VIEW (eg.
Definition: view.h:845
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:700
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
Definition: view.h:574
std::vector< VIEW_LAYER > m_layers
Sorted list of pointers to members of m_layers.
Definition: view.h:809
bool IsCached(int aLayer) const
Return true if the layer is cached.
Definition: view.h:581

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

Referenced by invalidateItem().

◆ UseDrawPriority()

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

Definition at line 643 of file view.h.

644  {
645  m_useDrawPriority = aFlag;
646  }
bool m_useDrawPriority
The next sequential drawing priority.
Definition: view.h:858

References m_useDrawPriority.

Friends And Related Function Documentation

◆ VIEW_ITEM

friend class VIEW_ITEM
friend

Definition at line 70 of file view.h.

Member Data Documentation

◆ m_allItems

std::shared_ptr<std::vector<VIEW_ITEM*> > KIGFX::VIEW::m_allItems
protected

◆ m_boundary

BOX2D KIGFX::VIEW::m_boundary
protected

◆ m_center

VECTOR2D KIGFX::VIEW::m_center
protected

Scale of displayed VIEW_ITEMs.

Definition at line 821 of file view.h.

Referenced by GetCenter(), SetCenter(), SetGAL(), and SetScale().

◆ m_dirtyTargets

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

Rendering order modifier for layers that are marked as top layers.

Definition at line 852 of file view.h.

Referenced by IsTargetDirty(), MarkDirty(), markTargetClean(), and MarkTargetDirty().

◆ m_dynamic

bool KIGFX::VIEW::m_dynamic
protected

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

Definition at line 849 of file view.h.

Referenced by IsDynamic().

◆ m_enableOrderModifier

bool KIGFX::VIEW::m_enableOrderModifier
protected

The set of possible displayed layers and its properties.

Definition at line 806 of file view.h.

Referenced by ClearTopLayers(), EnableTopLayer(), and SetTopLayer().

◆ m_gal

GAL* KIGFX::VIEW::m_gal
protected

◆ m_layers

◆ m_maxScale

double KIGFX::VIEW::m_maxScale
protected

Horizontal flip flag.

Definition at line 833 of file view.h.

Referenced by SetScale(), and SetScaleLimits().

◆ m_minScale

double KIGFX::VIEW::m_minScale
protected

Scale upper limit.

Definition at line 830 of file view.h.

Referenced by SetScale(), and SetScaleLimits().

◆ m_mirrorX

bool KIGFX::VIEW::m_mirrorX
protected

Vertical flip flag.

Definition at line 836 of file view.h.

Referenced by IsMirroredX(), SetGAL(), and SetMirror().

◆ m_mirrorY

bool KIGFX::VIEW::m_mirrorY
protected

PAINTER contains information how do draw items.

Definition at line 839 of file view.h.

Referenced by IsMirroredY(), SetGAL(), and SetMirror().

◆ m_nextDrawPriority

int KIGFX::VIEW::m_nextDrawPriority
protected

Flag to reverse the draw order when using draw priority.

Definition at line 861 of file view.h.

Referenced by Add(), and Clear().

◆ m_orderedLayers

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

Flat list of all items.

Definition at line 812 of file view.h.

Referenced by Query(), redrawRect(), and sortLayers().

◆ m_ownedItems

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

Whether to use rendering order modifier or not.

Definition at line 803 of file view.h.

Referenced by AddToPreview(), and ClearPreview().

◆ m_painter

PAINTER* KIGFX::VIEW::m_painter
protected

Interface to #PAINTER that is used to draw items.

Definition at line 842 of file view.h.

Referenced by draw(), GetPainter(), SetPainter(), UpdateAllLayersColor(), updateItemColor(), updateItemGeometry(), and UpdateLayerColor().

◆ m_preview

std::unique_ptr<KIGFX::VIEW_GROUP> KIGFX::VIEW::m_preview
protected

◆ m_printMode

int KIGFX::VIEW::m_printMode
protected

Definition at line 868 of file view.h.

Referenced by GetPrintMode(), and SetPrintMode().

◆ m_reverseDrawOrder

bool KIGFX::VIEW::m_reverseDrawOrder
protected

A control for printing: m_printMode <= 0 means no printing mode (normal draw mode m_printMode > 0 is a printing mode (currently means "we are in printing mode").

Definition at line 864 of file view.h.

Referenced by IsDrawOrderReversed(), redrawRect(), and ReverseDrawOrder().

◆ m_scale

double KIGFX::VIEW::m_scale
protected

View boundaries.

Definition at line 824 of file view.h.

Referenced by GetScale(), KIGFX::VIEW::DRAW_ITEM_VISITOR::operator()(), SetGAL(), and SetScale().

◆ m_topLayers

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

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

Definition at line 818 of file view.h.

Referenced by ClearTopLayers(), EnableTopLayer(), GetTopLayer(), and SetTopLayer().

◆ m_useDrawPriority

bool KIGFX::VIEW::m_useDrawPriority
protected

The next sequential drawing priority.

Definition at line 858 of file view.h.

Referenced by IsUsingDrawPriority(), redrawRect(), and UseDrawPriority().

◆ TOP_LAYER_MODIFIER

const int KIGFX::VIEW::TOP_LAYER_MODIFIER = -VIEW_MAX_LAYERS
staticprotected

Flag to respect draw priority when drawing items.

Definition at line 855 of file view.h.

Referenced by ClearTopLayers(), EnableTopLayer(), and SetTopLayer().

◆ VIEW_MAX_LAYERS


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