KiCad PCB EDA Suite
class_track.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
5  * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
30 #ifndef CLASS_TRACK_H
31 #define CLASS_TRACK_H
32 
33 
34 #include <pcbnew.h>
35 #include <class_board_item.h>
37 #include <PolyLine.h>
38 #include <trigo.h>
39 
40 
41 class TRACK;
42 class VIA;
43 class D_PAD;
44 class MSG_PANEL_ITEM;
45 
46 
47 // Via types
49 {
50  VIA_THROUGH = 3, /* Always a through hole via */
51  VIA_BLIND_BURIED = 2, /* this via can be on internal layers */
52  VIA_MICROVIA = 1, /* this via which connect from an external layer
53  * to the near neighbor internal layer */
54  VIA_NOT_DEFINED = 0 /* not yet used */
55 };
56 
57 #define UNDEFINED_DRILL_DIAMETER -1 //< Undefined via drill diameter.
58 
59 #define MIN_VIA_DRAW_SIZE 4
60 
61 
77 TRACK* GetTrack( TRACK* aStartTrace, const TRACK* aEndTrace,
78  const wxPoint& aPosition, LSET aLayerMask );
79 
81 {
82 public:
83  static inline bool ClassOf( const EDA_ITEM* aItem )
84  {
85  return aItem && PCB_TRACE_T == aItem->Type();
86  }
87 
88  BOARD_CONNECTED_ITEM* start; // pointers to a connected item (pad or track)
90 
91  double m_Param; // Auxiliary variable ( used in some computations )
92 
93  TRACK( BOARD_ITEM* aParent, KICAD_T idtype = PCB_TRACE_T );
94 
95  // Do not create a copy constructor. The one generated by the compiler is adequate.
96 
97  TRACK* Next() const { return static_cast<TRACK*>( Pnext ); }
98  TRACK* Back() const { return static_cast<TRACK*>( Pback ); }
99 
100  virtual void Move( const wxPoint& aMoveVector ) override
101  {
102  m_Start += aMoveVector;
103  m_End += aMoveVector;
104  }
105 
106  virtual void Rotate( const wxPoint& aRotCentre, double aAngle ) override;
107 
108  virtual void Flip( const wxPoint& aCentre ) override;
109 
110  void SetPosition( const wxPoint& aPos ) override { m_Start = aPos; }
111  const wxPoint& GetPosition() const override { return m_Start; }
112 
113  void SetWidth( int aWidth ) { m_Width = aWidth; }
114  int GetWidth() const { return m_Width; }
115 
116  void SetEnd( const wxPoint& aEnd ) { m_End = aEnd; }
117  const wxPoint& GetEnd() const { return m_End; }
118 
119  void SetStart( const wxPoint& aStart ) { m_Start = aStart; }
120  const wxPoint& GetStart() const { return m_Start; }
121 
122 
124  const wxPoint& GetEndPoint( ENDPOINT_T aEndPoint ) const
125  {
126  if( aEndPoint == ENDPOINT_START )
127  return m_Start;
128  else
129  return m_End;
130  }
131 
132  // Virtual function
133  const EDA_RECT GetBoundingBox() const override;
134 
135  bool IsLocked() const override
136  {
137  return GetState( TRACK_LOCKED );
138  }
139 
140  void SetLocked( bool aLocked ) override
141  {
142  return SetState( TRACK_LOCKED, aLocked );
143  }
144 
153  TRACK* GetBestInsertPoint( BOARD* aPcb );
154 
155  /* Search (within the track linked list) the first segment matching the netcode
156  * ( the linked list is always sorted by net codes )
157  */
158  TRACK* GetStartNetCode( int NetCode );
159 
160  /* Search (within the track linked list) the last segment matching the netcode
161  * ( the linked list is always sorted by net codes )
162  */
163  TRACK* GetEndNetCode( int NetCode );
164 
170  double GetLength() const
171  {
172  return GetLineLength( m_Start, m_End );
173  }
174 
175  /* Display on screen: */
176  void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
177  GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset ) override;
178 
192  int aClearanceValue,
193  int aCircleToSegmentsCount,
194  double aCorrectionFactor ) const;
202  STATUS_FLAGS IsPointOnEnds( const wxPoint& point, int min_dist = 0 );
203 
208  bool IsNull();
209 
210  void GetMsgPanelInfo( std::vector< MSG_PANEL_ITEM >& aList ) override;
211 
216  wxString ShowWidth() const;
217 
218  SEARCH_RESULT Visit( INSPECTOR inspector, void* testData, const KICAD_T scanTypes[] ) override;
219 
220  virtual bool HitTest( const wxPoint& aPosition ) const override;
221 
225  virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const override;
226 
235  VIA* GetVia( const wxPoint& aPosition, LAYER_ID aLayer = UNDEFINED_LAYER );
236 
247  VIA* GetVia( TRACK* aEndTrace, const wxPoint& aPosition, LSET aLayerMask );
248 
264  TRACK* GetTrack( TRACK* aStartTrace, TRACK* aEndTrace, ENDPOINT_T aEndPoint,
265  bool aSameNetOnly, bool aSequential );
266 
277  int GetEndSegments( int NbSegm, TRACK** StartTrack, TRACK** EndTrack );
278 
279  wxString GetClass() const override
280  {
281  return wxT( "TRACK" );
282  }
283 
293  virtual int GetClearance( BOARD_CONNECTED_ITEM* aItem = NULL ) const override;
294 
295  virtual wxString GetSelectMenuText() const override;
296 
297  BITMAP_DEF GetMenuImage() const override;
298 
299  virtual EDA_ITEM* Clone() const override;
300 
302  virtual void ViewGetLayers( int aLayers[], int& aCount ) const override;
303 
305  virtual unsigned int ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
306 
307 #if defined (DEBUG)
308  virtual void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
309 
315  static wxString ShowState( int stateBits );
316 
317 #endif
318 
319 protected:
325  virtual void GetMsgPanelInfoBase( std::vector< MSG_PANEL_ITEM >& aList );
326 
327 
330  void GetMsgPanelInfoBase_Common( std::vector< MSG_PANEL_ITEM >& aList );
331 
334  void DrawShortNetname( EDA_DRAW_PANEL* panel, wxDC* aDC, GR_DRAWMODE aDrawMode,
335  COLOR4D aBgColor );
336 
337  int m_Width;
340 
341 private:
342  // make SetNext() and SetBack() private so that they may not be called from anywhere.
343  // list management is done on TRACKs using DLIST<TRACK> only.
344  void SetNext( EDA_ITEM* aNext ) { Pnext = aNext; }
345  void SetBack( EDA_ITEM* aBack ) { Pback = aBack; }
346 };
347 
348 
349 class SEGZONE : public TRACK
350 {
351 public:
352  SEGZONE( BOARD_ITEM* aParent );
353 
354  // Do not create a copy constructor. The one generated by the compiler is adequate.
355 
356  wxString GetClass() const override
357  {
358  return wxT( "ZONE" );
359  }
360 
361 
362  SEGZONE* Next() const { return static_cast<SEGZONE*>( Pnext ); }
363 
364  wxString GetSelectMenuText() const override;
365 
366  void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
367  GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset ) override;
368 
369  BITMAP_DEF GetMenuImage() const override;
370 
371  EDA_ITEM* Clone() const override;
372 
373 protected:
374  virtual void GetMsgPanelInfoBase( std::vector< MSG_PANEL_ITEM >& aList ) override;
375 };
376 
377 
378 class VIA : public TRACK
379 {
380 public:
381  VIA( BOARD_ITEM* aParent );
382 
383  static inline bool ClassOf( const EDA_ITEM *aItem )
384  {
385  return aItem && PCB_VIA_T == aItem->Type();
386  }
387 
388  // Do not create a copy constructor. The one generated by the compiler is adequate.
389 
390  void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
391  GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset ) override;
392 
393  bool IsOnLayer( LAYER_ID aLayer ) const override;
394 
395  virtual LSET GetLayerSet() const override;
396 
404  void SetLayerPair( LAYER_ID aTopLayer, LAYER_ID aBottomLayer );
405 
413  void LayerPair( LAYER_ID* top_layer, LAYER_ID* bottom_layer ) const;
414 
415  const wxPoint& GetPosition() const override { return m_Start; }
416  void SetPosition( const wxPoint& aPoint ) override { m_Start = aPoint; m_End = aPoint; }
417 
418  virtual bool HitTest( const wxPoint& aPosition ) const override;
419 
420  virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const override;
421 
422  wxString GetClass() const override
423  {
424  return wxT( "VIA" );
425  }
426 
427  wxString GetSelectMenuText() const override;
428 
429  BITMAP_DEF GetMenuImage() const override;
430 
431  EDA_ITEM* Clone() const override;
432 
434  virtual void ViewGetLayers( int aLayers[], int& aCount ) const override;
435 
436  virtual void Flip( const wxPoint& aCentre ) override;
437 
438 #if defined (DEBUG)
439  virtual void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
440 #endif
441 
442  VIATYPE_T GetViaType() const { return m_ViaType; }
443  void SetViaType( VIATYPE_T aViaType ) { m_ViaType = aViaType; }
444 
450  void SetDrill( int aDrill ) { m_Drill = aDrill; }
451 
457  int GetDrill() const { return m_Drill; }
458 
465  int GetDrillValue() const;
466 
472 
477  bool IsDrillDefault() const { return m_Drill <= 0; }
478 
479 protected:
480  virtual void GetMsgPanelInfoBase( std::vector< MSG_PANEL_ITEM >& aList ) override;
481 
482 private:
485 
486  VIATYPE_T m_ViaType; // Type of via
487 
488  int m_Drill; // for vias: via drill (- 1 for default value)
489 };
490 
491 
493 inline VIA* GetFirstVia( TRACK* aTrk, const TRACK* aStopPoint = NULL )
494 {
495  while( aTrk && (aTrk != aStopPoint) && (aTrk->Type() != PCB_VIA_T) )
496  aTrk = aTrk->Next();
497 
498  // It could stop because of the stop point, not on a via
499  if( aTrk && (aTrk->Type() == PCB_VIA_T) )
500  return static_cast<VIA*>( aTrk );
501  else
502  return NULL;
503 }
504 
505 #endif // CLASS_TRACK_H
bool IsLocked() const override
Function IsLocked.
Definition: class_track.h:135
KICAD_T Type() const
Function Type()
Definition: base_struct.h:198
Class BOARD_CONNECTED_ITEM.
TRACK * GetTrack(TRACK *aStartTrace, TRACK *aEndTrace, ENDPOINT_T aEndPoint, bool aSameNetOnly, bool aSequential)
Function GetTrack returns the trace segment connected to the segment at aEndPoint from aStartTrace to...
EDA_ITEM * Pback
previous in linked list
Definition: base_struct.h:165
bool IsOnLayer(LAYER_ID aLayer) const override
Function IsOnLayer tests to see if this object is on the given layer.
bool IsNull()
Function IsNull returns true if segment length is zero.
wxPoint m_Start
Line start point.
Definition: class_track.h:338
double GetLineLength(const wxPoint &aPointA, const wxPoint &aPointB)
Function GetLineLength returns the length of a line segment defined by aPointA and aPointB...
Definition: trigo.h:183
VIATYPE_T m_ViaType
Definition: class_track.h:486
PNG memory record (file in memory).
Definition: bitmap_types.h:38
static bool ClassOf(const EDA_ITEM *aItem)
Definition: class_track.h:83
virtual LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
void SetViaType(VIATYPE_T aViaType)
Definition: class_track.h:443
wxString GetSelectMenuText() const override
Function GetSelectMenuText returns the text to display to be used in the selection clarification cont...
void SetPosition(const wxPoint &aPoint) override
Definition: class_track.h:416
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
void SetEnd(const wxPoint &aEnd)
Definition: class_track.h:116
VIA * GetVia(const wxPoint &aPosition, LAYER_ID aLayer=UNDEFINED_LAYER)
Function GetVia finds the first VIA object at aPosition on aLayer starting at the trace...
Classes BOARD_ITEM and BOARD_CONNECTED_ITEM.
virtual void Flip(const wxPoint &aCentre) override
Function Flip Flip this object, i.e.
STATUS_FLAGS IsPointOnEnds(const wxPoint &point, int min_dist=0)
Function IsPointOnEnds returns STARTPOINT if point if near (dist = min_dist) start point...
TRACK * GetTrack(TRACK *aStartTrace, const TRACK *aEndTrace, const wxPoint &aPosition, LSET aLayerMask)
Function GetTrack is a helper function to locate a trace segment having an end point at aPosition on ...
Definition: class_track.cpp:68
const EDA_RECT GetBoundingBox() const override
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes...
virtual void ViewGetLayers(int aLayers[], int &aCount) const override
wxString GetClass() const override
Function GetClass returns the class name.
Definition: class_track.h:356
virtual EDA_ITEM * Clone() const override
Function Clone creates a duplicate of this item with linked list members set to NULL.
int GetEndSegments(int NbSegm, TRACK **StartTrack, TRACK **EndTrack)
Function GetEndSegments get the segments connected to the end point of the track. ...
void GetMsgPanelInfo(std::vector< MSG_PANEL_ITEM > &aList) override
Function GetMsgPanelInfo populates aList of MSG_PANEL_ITEM objects with it's internal state for displ...
VIATYPE_T
Definition: class_track.h:48
VIA(BOARD_ITEM *aParent)
virtual void Rotate(const wxPoint &aRotCentre, double aAngle) override
Function Rotate Rotate this object.
int GetState(int type) const
Definition: base_struct.h:237
Class BOARD_CONNECTED_ITEM is a base class derived from BOARD_ITEM for items that can be connected an...
TRACK * Back() const
Definition: class_track.h:98
int GetDrill() const
Function GetDrill returns the local drill setting for this VIA.
Definition: class_track.h:457
const wxPoint & GetEnd() const
Definition: class_track.h:117
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:90
static wxPoint ZeroOffset
A value of wxPoint(0,0) which can be passed to the Draw() functions.
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:107
double m_Param
Definition: class_track.h:91
int m_Width
Thickness of track, or via diameter.
Definition: class_track.h:337
void SetWidth(int aWidth)
Definition: class_track.h:113
ENDPOINT_T
Flag used in locate routines (from which endpoint work)
Definition: pcbnew.h:54
SEGZONE * Next() const
Definition: class_track.h:362
virtual void GetMsgPanelInfoBase(std::vector< MSG_PANEL_ITEM > &aList) override
Function GetMsgPanelInfoBase Display info about the track segment only, and does not calculate the fu...
virtual unsigned int ViewGetLOD(int aLayer, KIGFX::VIEW *aView) const override
const wxPoint & GetPosition() const override
Definition: class_track.h:111
const INSPECTOR_FUNC & INSPECTOR
Definition: base_struct.h:104
void SetLocked(bool aLocked) override
Function SetLocked modifies 'lock' status for of the item.
Definition: class_track.h:140
static bool ClassOf(const EDA_ITEM *aItem)
Definition: class_track.h:383
virtual bool HitTest(const wxPoint &aPosition) const override
Function HitTest tests if aPosition is contained within or on the bounding area of an item...
void SetLayerPair(LAYER_ID aTopLayer, LAYER_ID aBottomLayer)
Function SetLayerPair For a via m_Layer contains the top layer, the other layer is in m_BottomLayer...
BITMAP_DEF GetMenuImage() const override
Function GetMenuImage returns a pointer to an image to be used in menus.
Class LSET is a set of LAYER_IDs.
VIATYPE_T GetViaType() const
Definition: class_track.h:442
BITMAP_DEF GetMenuImage() const override
Function GetMenuImage returns a pointer to an image to be used in menus.
GR_DRAWMODE
Drawmode. Compositing mode plus a flag or two.
Definition: gr_basic.h:41
Class SHAPE_POLY_SET.
virtual bool HitTest(const wxPoint &aPosition) const override
Function HitTest tests if aPosition is contained within or on the bounding area of an item...
const wxPoint & GetStart() const
Definition: class_track.h:120
virtual void Flip(const wxPoint &aCentre) override
Function Flip Flip this object, i.e.
wxPoint m_End
Line end point.
Definition: class_track.h:339
int m_Drill
Definition: class_track.h:488
void DrawShortNetname(EDA_DRAW_PANEL *panel, wxDC *aDC, GR_DRAWMODE aDrawMode, COLOR4D aBgColor)
Helper for drawing the short netname in tracks.
const wxPoint & GetEndPoint(ENDPOINT_T aEndPoint) const
Return the selected endpoint (start or end)
Definition: class_track.h:124
unsigned STATUS_FLAGS
Definition: base_struct.h:144
SEARCH_RESULT Visit(INSPECTOR inspector, void *testData, const KICAD_T scanTypes[]) override
Function Visit may be re-implemented for each derived class in order to handle all the types given by...
TRACK * GetEndNetCode(int NetCode)
#define TRACK_LOCKED
Pcbnew: track locked: protected from global deletion.
Definition: base_struct.h:128
virtual void Move(const wxPoint &aMoveVector) override
Function Move move this object.
Definition: class_track.h:100
#define UNDEFINED_DRILL_DIAMETER
Definition: class_track.h:57
virtual int GetClearance(BOARD_CONNECTED_ITEM *aItem=NULL) const override
Function GetClearance returns the clearance in internal units.
void TransformShapeWithClearanceToPolygon(SHAPE_POLY_SET &aCornerBuffer, int aClearanceValue, int aCircleToSegmentsCount, double aCorrectionFactor) const
Function TransformShapeWithClearanceToPolygon Convert the track shape to a closed polygon Used in fil...
virtual wxString GetSelectMenuText() const override
Function GetSelectMenuText returns the text to display to be used in the selection clarification cont...
SEGZONE(BOARD_ITEM *aParent)
void Draw(EDA_DRAW_PANEL *panel, wxDC *DC, GR_DRAWMODE aDrawMode, const wxPoint &aOffset=ZeroOffset) override
Function Draw BOARD_ITEMs have their own color information.
void SetDrillDefault()
Function SetDrillDefault sets the drill value for vias to the default value UNDEFINED_DRILL_DIAMETER...
Definition: class_track.h:471
LAYER_ID m_BottomLayer
The bottom layer of the via (the top layer is in m_Layer)
Definition: class_track.h:484
void Draw(EDA_DRAW_PANEL *panel, wxDC *DC, GR_DRAWMODE aDrawMode, const wxPoint &aOffset=ZeroOffset) override
Function Draw BOARD_ITEMs have their own color information.
wxString GetSelectMenuText() const override
Function GetSelectMenuText returns the text to display to be used in the selection clarification cont...
void Draw(EDA_DRAW_PANEL *panel, wxDC *DC, GR_DRAWMODE aDrawMode, const wxPoint &aOffset=ZeroOffset) override
Function Draw BOARD_ITEMs have their own color information.
void LayerPair(LAYER_ID *top_layer, LAYER_ID *bottom_layer) const
Function LayerPair Return the 2 layers used by the via (the via actually uses all layers between thes...
virtual void ViewGetLayers(int aLayers[], int &aCount) const override
wxString ShowWidth() const
Function ShowWidth returns the width of the track in displayable user units.
TRACK * GetBestInsertPoint(BOARD *aPcb)
Function GetBestInsertPoint searches the "best" insertion point within the track linked list...
BITMAP_DEF GetMenuImage() const override
Function GetMenuImage returns a pointer to an image to be used in menus.
wxString GetClass() const override
Function GetClass returns the class name.
Definition: class_track.h:422
TRACK * Next() const
Definition: class_track.h:97
void SetState(int type, int state)
Definition: base_struct.h:242
EDA_ITEM * Clone() const override
Function Clone creates a duplicate of this item with linked list members set to NULL.
TRACK * GetStartNetCode(int NetCode)
void SetBack(EDA_ITEM *aBack)
Definition: class_track.h:345
int GetDrillValue() const
Function GetDrillValue "calculates" the drill value for vias (m-Drill if > 0, or default drill value ...
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:166
void GetMsgPanelInfoBase_Common(std::vector< MSG_PANEL_ITEM > &aList)
Helper function for the common panel info.
LAYER_ID
Enum LAYER_ID is the set of PCB layers.
int GetWidth() const
Definition: class_track.h:114
void SetPosition(const wxPoint &aPos) override
Definition: class_track.h:110
Class EDA_RECT handles the component boundary box.
void SetDrill(int aDrill)
Function SetDrill sets the drill value for vias.
Definition: class_track.h:450
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:151
const wxPoint & GetPosition() const override
Definition: class_track.h:415
virtual void GetMsgPanelInfoBase(std::vector< MSG_PANEL_ITEM > &aList)
Function GetMsgPanelInfoBase Display info about the track segment only, and does not calculate the fu...
double GetLength() const
Function GetLength returns the length of the track using the hypotenuse calculation.
Definition: class_track.h:170
void SetStart(const wxPoint &aStart)
Definition: class_track.h:119
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:108
TRACK(BOARD_ITEM *aParent, KICAD_T idtype=PCB_TRACE_T)
Definition: class_track.cpp:96
Class EDA_MSG_ITEM is used EDA_MSG_PANEL as the item type for displaying messages.
Definition: msgpanel.h:53
Class VIEW.
Definition: view.h:58
void SetNext(EDA_ITEM *aNext)
Definition: class_track.h:344
SEARCH_RESULT
Definition: base_struct.h:68
BOARD_CONNECTED_ITEM * end
Definition: class_track.h:89
virtual void GetMsgPanelInfoBase(std::vector< MSG_PANEL_ITEM > &aList) override
Function GetMsgPanelInfoBase Display info about the track segment only, and does not calculate the fu...
BOARD_CONNECTED_ITEM * start
Definition: class_track.h:88
EDA_ITEM * Pnext
next in linked list
Definition: base_struct.h:164
bool IsDrillDefault() const
Function IsDrillDefault.
Definition: class_track.h:477
EDA_ITEM * Clone() const override
Function Clone creates a duplicate of this item with linked list members set to NULL.
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
wxString GetClass() const override
Function GetClass returns the class name.
Definition: class_track.h:279
VIA * GetFirstVia(TRACK *aTrk, const TRACK *aStopPoint=NULL)
Scan a track list for the first VIA o NULL if not found (or NULL passed)
Definition: class_track.h:493