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-2017 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>
36 #include <board_connected_item.h>
37 #include <pcb_display_options.h>
38 
39 #include <trigo.h>
40 
41 
42 class TRACK;
43 class VIA;
44 class D_PAD;
45 class MSG_PANEL_ITEM;
46 class SHAPE_POLY_SET;
47 
48 // Via types
49 // Note that this enum must be synchronized to GAL_LAYER_ID
51 {
52  VIA_THROUGH = 3, /* Always a through hole via */
53  VIA_BLIND_BURIED = 2, /* this via can be on internal layers */
54  VIA_MICROVIA = 1, /* this via which connect from an external layer
55  * to the near neighbor internal layer */
56  VIA_NOT_DEFINED = 0 /* not yet used */
57 };
58 
59 #define UNDEFINED_DRILL_DIAMETER -1 //< Undefined via drill diameter.
60 
61 #define MIN_VIA_DRAW_SIZE 4
62 
63 // Used for tracks and vias for algorithmic safety, not to enforce constraints
64 #define GEOMETRY_MIN_SIZE ( int )( 0.001 * IU_PER_MM )
65 
66 
83 TRACK* GetTrack( TRACK* aStartTrace, const TRACK* aEndTrace,
84  const wxPoint& aPosition, LSET aLayerMask );
85 
87 {
88 public:
89  static inline bool ClassOf( const EDA_ITEM* aItem )
90  {
91  return aItem && PCB_TRACE_T == aItem->Type();
92  }
93 
94  BOARD_CONNECTED_ITEM* start; // pointers to a connected item (pad or track)
96 
97  double m_Param; // Auxiliary variable ( used in some computations )
98 
99  TRACK( BOARD_ITEM* aParent, KICAD_T idtype = PCB_TRACE_T );
100 
101  // Do not create a copy constructor. The one generated by the compiler is adequate.
102 
103  TRACK* Next() const { return static_cast<TRACK*>( Pnext ); }
104  TRACK* Back() const { return static_cast<TRACK*>( Pback ); }
105 
106  virtual void Move( const wxPoint& aMoveVector ) override
107  {
108  m_Start += aMoveVector;
109  m_End += aMoveVector;
110  }
111 
112  virtual void Rotate( const wxPoint& aRotCentre, double aAngle ) override;
113 
114  virtual void Flip( const wxPoint& aCentre ) override;
115 
116  void SetPosition( const wxPoint& aPos ) override { m_Start = aPos; }
117  const wxPoint GetPosition() const override { return m_Start; }
118 
119  void SetWidth( int aWidth ) { m_Width = aWidth; }
120  int GetWidth() const { return m_Width; }
121 
122  void SetEnd( const wxPoint& aEnd ) { m_End = aEnd; }
123  const wxPoint& GetEnd() const { return m_End; }
124 
125  void SetStart( const wxPoint& aStart ) { m_Start = aStart; }
126  const wxPoint& GetStart() const { return m_Start; }
127 
128 
130  const wxPoint& GetEndPoint( ENDPOINT_T aEndPoint ) const
131  {
132  if( aEndPoint == ENDPOINT_START )
133  return m_Start;
134  else
135  return m_End;
136  }
137 
138  // Virtual function
139  const EDA_RECT GetBoundingBox() const override;
140 
141  bool IsLocked() const override
142  {
143  return GetState( TRACK_LOCKED );
144  }
145 
146  void SetLocked( bool aLocked ) override
147  {
148  return SetState( TRACK_LOCKED, aLocked );
149  }
150 
162  TRACK* GetBestInsertPoint( BOARD* aPcb );
163 
164  /* Search (within the track linked list) the first segment matching the netcode
165  * ( the linked list is always sorted by net codes )
166  */
167  TRACK* GetStartNetCode( int NetCode );
168 
169  /* Search (within the track linked list) the last segment matching the netcode
170  * ( the linked list is always sorted by net codes )
171  */
172  TRACK* GetEndNetCode( int NetCode );
173 
179  double GetLength() const
180  {
181  return GetLineLength( m_Start, m_End );
182  }
183 
184  /* Display on screen: */
185  void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
186  GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset ) override;
187 
203  int aClearanceValue,
204  int aCircleToSegmentsCount,
205  double aCorrectionFactor,
206  bool ignoreLineWidth = false ) const override;
214  STATUS_FLAGS IsPointOnEnds( const wxPoint& point, int min_dist = 0 );
215 
220  bool IsNull();
221 
222  void GetMsgPanelInfo( EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM >& aList ) override;
223 
224  SEARCH_RESULT Visit( INSPECTOR inspector, void* testData, const KICAD_T scanTypes[] ) override;
225 
226  virtual bool HitTest( const wxPoint& aPosition ) const override;
227 
228  virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const override;
229 
238  VIA* GetVia( const wxPoint& aPosition, PCB_LAYER_ID aLayer = UNDEFINED_LAYER );
239 
250  VIA* GetVia( TRACK* aEndTrace, const wxPoint& aPosition, LSET aLayerMask );
251 
267  TRACK* GetTrack( TRACK* aStartTrace, TRACK* aEndTrace, ENDPOINT_T aEndPoint,
268  bool aSameNetOnly, bool aSequential );
269 
280  int GetEndSegments( int NbSegm, TRACK** StartTrack, TRACK** EndTrack );
281 
282  wxString GetClass() const override
283  {
284  return wxT( "TRACK" );
285  }
286 
296  virtual int GetClearance( BOARD_CONNECTED_ITEM* aItem = NULL ) const override;
297 
298  virtual wxString GetSelectMenuText( EDA_UNITS_T aUnits ) const override;
299 
300  BITMAP_DEF GetMenuImage() const override;
301 
302  virtual EDA_ITEM* Clone() const override;
303 
304  virtual void ViewGetLayers( int aLayers[], int& aCount ) const override;
305 
306  virtual unsigned int ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
307 
308  const BOX2I ViewBBox() const override;
309 
310  virtual void SwapData( BOARD_ITEM* aImage ) override;
311 
312 #if defined (DEBUG)
313  virtual void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
314 
320  static wxString ShowState( int stateBits );
321 
322 #endif
323 
324 protected:
330  virtual void GetMsgPanelInfoBase( EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM >& aList );
331 
332 
335  void GetMsgPanelInfoBase_Common( EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM >& aList );
336 
339  void DrawShortNetname( EDA_DRAW_PANEL* panel, wxDC* aDC, GR_DRAWMODE aDrawMode,
340  COLOR4D aBgColor );
341 
342  int m_Width;
343  wxPoint m_Start;
344  wxPoint m_End;
345 
346 private:
347  // make SetNext() and SetBack() private so that they may not be called from anywhere.
348  // list management is done on TRACKs using DLIST<TRACK> only.
349  void SetNext( EDA_ITEM* aNext ) { Pnext = aNext; }
350  void SetBack( EDA_ITEM* aBack ) { Pback = aBack; }
351 };
352 
353 
354 class SEGZONE : public TRACK
355 {
356 public:
357  SEGZONE( BOARD_ITEM* aParent );
358 
359  // Do not create a copy constructor. The one generated by the compiler is adequate.
360 
361  wxString GetClass() const override
362  {
363  return wxT( "ZONE" );
364  }
365 
366 
367  SEGZONE* Next() const { return static_cast<SEGZONE*>( Pnext ); }
368 
369  wxString GetSelectMenuText( EDA_UNITS_T aUnits ) const override;
370 
371  void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
372  GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset ) override;
373 
374  BITMAP_DEF GetMenuImage() const override;
375 
376  EDA_ITEM* Clone() const override;
377 
378 protected:
379  void GetMsgPanelInfoBase( EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM >& aList ) override;
380 };
381 
382 
383 class VIA : public TRACK
384 {
385 public:
386  VIA( BOARD_ITEM* aParent );
387 
388  static inline bool ClassOf( const EDA_ITEM *aItem )
389  {
390  return aItem && PCB_VIA_T == aItem->Type();
391  }
392 
393  // Do not create a copy constructor. The one generated by the compiler is adequate.
394 
395  void Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
396  GR_DRAWMODE aDrawMode, const wxPoint& aOffset = ZeroOffset ) override;
397 
398  bool IsOnLayer( PCB_LAYER_ID aLayer ) const override;
399 
400  virtual LSET GetLayerSet() const override;
401 
409  void SetLayerPair( PCB_LAYER_ID aTopLayer, PCB_LAYER_ID aBottomLayer );
410 
411  void SetBottomLayer( PCB_LAYER_ID aLayer );
412  void SetTopLayer( PCB_LAYER_ID aLayer );
413 
421  void LayerPair( PCB_LAYER_ID* top_layer, PCB_LAYER_ID* bottom_layer ) const;
422 
423  PCB_LAYER_ID TopLayer() const;
424  PCB_LAYER_ID BottomLayer() const;
425 
431  void SanitizeLayers();
432 
433  const wxPoint GetPosition() const override { return m_Start; }
434  void SetPosition( const wxPoint& aPoint ) override { m_Start = aPoint; m_End = aPoint; }
435 
436  virtual bool HitTest( const wxPoint& aPosition ) const override;
437 
438  virtual bool HitTest( const EDA_RECT& aRect, bool aContained = true, int aAccuracy = 0 ) const override;
439 
440  wxString GetClass() const override
441  {
442  return wxT( "VIA" );
443  }
444 
445  wxString GetSelectMenuText( EDA_UNITS_T aUnits ) const override;
446 
447  BITMAP_DEF GetMenuImage() const override;
448 
449  EDA_ITEM* Clone() const override;
450 
451  virtual void ViewGetLayers( int aLayers[], int& aCount ) const override;
452 
453  virtual unsigned int ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
454 
455  virtual void Flip( const wxPoint& aCentre ) override;
456 
457 #if defined (DEBUG)
458  virtual void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
459 #endif
460 
461  VIATYPE_T GetViaType() const { return m_ViaType; }
462  void SetViaType( VIATYPE_T aViaType ) { m_ViaType = aViaType; }
463 
469  void SetDrill( int aDrill ) { m_Drill = aDrill; }
470 
476  int GetDrill() const { return m_Drill; }
477 
484  int GetDrillValue() const;
485 
491 
496  bool IsDrillDefault() const { return m_Drill <= 0; }
497 
498  virtual void SwapData( BOARD_ITEM* aImage ) override;
499 
500 protected:
501  void GetMsgPanelInfoBase( EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM >& aList ) override;
502 
503 private:
506 
507  VIATYPE_T m_ViaType; // Type of via
508 
509  int m_Drill; // for vias: via drill (- 1 for default value)
510 };
511 
512 
514 inline VIA* GetFirstVia( TRACK* aTrk, const TRACK* aStopPoint = NULL )
515 {
516  while( aTrk && (aTrk != aStopPoint) && (aTrk->Type() != PCB_VIA_T) )
517  aTrk = aTrk->Next();
518 
519  // It could stop because of the stop point, not on a via
520  if( aTrk && (aTrk->Type() == PCB_VIA_T) )
521  return static_cast<VIA*>( aTrk );
522  else
523  return NULL;
524 }
525 
526 
528 inline TRACK* GetFirstTrack( TRACK* aTrk, const TRACK* aStopPoint = NULL )
529 {
530  while( aTrk && ( aTrk != aStopPoint ) && ( aTrk->Type() != PCB_TRACE_T ) )
531  aTrk = aTrk->Next();
532 
533  // It could stop because of the stop point, not on a via
534  if( aTrk && ( aTrk->Type() == PCB_TRACE_T ) )
535  return static_cast<TRACK*>( aTrk );
536  else
537  return NULL;
538 }
539 
540 #endif // CLASS_TRACK_H
bool IsLocked() const override
Function IsLocked.
Definition: class_track.h:141
KICAD_T Type() const
Function Type()
Definition: base_struct.h:201
void GetMsgPanelInfoBase_Common(EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM > &aList)
Helper function for the common panel info.
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:168
bool IsNull()
Function IsNull returns true if segment length is zero.
wxPoint m_Start
Line start point.
Definition: class_track.h:343
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:191
VIATYPE_T m_ViaType
Definition: class_track.h:507
PNG memory record (file in memory).
Definition: bitmap_types.h:43
static bool ClassOf(const EDA_ITEM *aItem)
Definition: class_track.h:89
void SetViaType(VIATYPE_T aViaType)
Definition: class_track.h:462
void TransformShapeWithClearanceToPolygon(SHAPE_POLY_SET &aCornerBuffer, int aClearanceValue, int aCircleToSegmentsCount, double aCorrectionFactor, bool ignoreLineWidth=false) const override
Function TransformShapeWithClearanceToPolygon Convert the track shape to a closed polygon Used in fil...
void SetPosition(const wxPoint &aPoint) override
Definition: class_track.h:434
virtual bool IsOnLayer(PCB_LAYER_ID aLayer) const
Function IsOnLayer tests to see if this object is on the given layer.
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:122
Classes BOARD_ITEM and BOARD_CONNECTED_ITEM.
virtual void Flip(const wxPoint &aCentre) override
Function Flip Flip this object, i.e.
void GetMsgPanelInfo(EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM > &aList) override
Function GetMsgPanelInfo populates aList of MSG_PANEL_ITEM objects with it&#39;s internal state for displ...
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...
wxString GetClass() const override
Function GetClass returns the class name.
Definition: class_track.h:361
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. ...
VIATYPE_T
Definition: class_track.h:50
virtual void Rotate(const wxPoint &aRotCentre, double aAngle) override
Function Rotate Rotate this object.
int GetState(int type) const
Definition: base_struct.h:240
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:104
int GetDrill() const
Function GetDrill returns the local drill setting for this VIA.
Definition: class_track.h:476
const wxPoint & GetEnd() const
Definition: class_track.h:123
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
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:95
double m_Param
Definition: class_track.h:97
int m_Width
Thickness of track, or via diameter.
Definition: class_track.h:342
void SetWidth(int aWidth)
Definition: class_track.h:119
ENDPOINT_T
Flag used in locate routines (from which endpoint work)
Definition: pcbnew.h:58
SEGZONE * Next() const
Definition: class_track.h:367
virtual unsigned int ViewGetLOD(int aLayer, KIGFX::VIEW *aView) const override
Function ViewGetLOD() Returns the level of detail (LOD) of the item.
const INSPECTOR_FUNC & INSPECTOR
Definition: base_struct.h:102
VIA * GetVia(const wxPoint &aPosition, PCB_LAYER_ID aLayer=UNDEFINED_LAYER)
Function GetVia finds the first VIA object at aPosition on aLayer starting at the trace...
void SetLocked(bool aLocked) override
Function SetLocked modifies &#39;lock&#39; status for of the item.
Definition: class_track.h:146
static bool ClassOf(const EDA_ITEM *aItem)
Definition: class_track.h:388
PCB_LAYER_ID
A quick note on layer IDs:
virtual bool HitTest(const wxPoint &aPosition) const override
Function HitTest tests if aPosition is contained within or on the bounding area of an item...
BITMAP_DEF GetMenuImage() const override
Function GetMenuImage returns a pointer to an image to be used in menus.
Class LSET is a set of PCB_LAYER_IDs.
VIATYPE_T GetViaType() const
Definition: class_track.h:461
const wxPoint GetPosition() const override
Definition: class_track.h:117
GR_DRAWMODE
Drawmode. Compositing mode plus a flag or two.
Definition: gr_basic.h:37
Class SHAPE_POLY_SET.
const wxPoint & GetStart() const
Definition: class_track.h:126
wxPoint m_End
Line end point.
Definition: class_track.h:344
int m_Drill
Definition: class_track.h:509
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:130
virtual LSET GetLayerSet() const
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
unsigned STATUS_FLAGS
Definition: base_struct.h:147
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...
PCB_LAYER_ID m_BottomLayer
The bottom layer of the via (the top layer is in m_Layer)
Definition: class_track.h:505
TRACK * GetEndNetCode(int NetCode)
#define TRACK_LOCKED
Pcbnew: track locked: protected from global deletion.
Definition: base_struct.h:129
virtual void Move(const wxPoint &aMoveVector) override
Function Move move this object.
Definition: class_track.h:106
#define UNDEFINED_DRILL_DIAMETER
Definition: class_track.h:59
const BOX2I ViewBBox() const override
Function ViewBBox() returns the bounding box of the item covering all its layers. ...
virtual int GetClearance(BOARD_CONNECTED_ITEM *aItem=NULL) const override
Function GetClearance returns the clearance in internal units.
const wxPoint GetPosition() const override
Definition: class_track.h:433
virtual void SwapData(BOARD_ITEM *aImage) override
Swap data between aItem and aImage.
void SetDrillDefault()
Function SetDrillDefault sets the drill value for vias to the default value UNDEFINED_DRILL_DIAMETER...
Definition: class_track.h:490
virtual void GetMsgPanelInfoBase(EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM > &aList)
Function GetMsgPanelInfoBase Display info about the track segment only, and does not calculate the fu...
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.
virtual void ViewGetLayers(int aLayers[], int &aCount) const override
Function ViewGetLayers() Returns the all the layers within the VIEW the object is painted on...
TRACK * GetBestInsertPoint(BOARD *aPcb)
Function GetBestInsertPoint searches the "best" insertion point within the track linked list...
wxString GetClass() const override
Function GetClass returns the class name.
Definition: class_track.h:440
TRACK * Next() const
Definition: class_track.h:103
void SetState(int type, int state)
Definition: base_struct.h:245
TRACK * GetStartNetCode(int NetCode)
void SetBack(EDA_ITEM *aBack)
Definition: class_track.h:350
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:171
int GetWidth() const
Definition: class_track.h:120
void SetPosition(const wxPoint &aPos) override
Definition: class_track.h:116
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
void SetDrill(int aDrill)
Function SetDrill sets the drill value for vias.
Definition: class_track.h:469
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:154
double GetLength() const
Function GetLength returns the length of the track using the hypotenuse calculation.
Definition: class_track.h:179
virtual wxString GetSelectMenuText(EDA_UNITS_T aUnits) const override
Function GetSelectMenuText returns the text to display to be used in the selection clarification cont...
void SetStart(const wxPoint &aStart)
Definition: class_track.h:125
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
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:61
void SetNext(EDA_ITEM *aNext)
Definition: class_track.h:349
SEARCH_RESULT
Definition: base_struct.h:66
Class BOARD_CONNECTED_ITEM.
BOARD_CONNECTED_ITEM * end
Definition: class_track.h:95
Definition of PCB_DISPLAY_OPTIONS class.
BOARD_CONNECTED_ITEM * start
Definition: class_track.h:94
EDA_ITEM * Pnext
next in linked list
Definition: base_struct.h:167
EDA_UNITS_T
Definition: common.h:160
bool IsDrillDefault() const
Function IsDrillDefault.
Definition: class_track.h:496
TRACK * GetFirstTrack(TRACK *aTrk, const TRACK *aStopPoint=NULL)
Scan a track list for the first TRACK object. Returns NULL if not found (or NULL passed) ...
Definition: class_track.h:528
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:282
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:514