KiCad PCB EDA Suite
PNS::DRAGGER Class Reference

Class DRAGGER. More...

#include <pns_dragger.h>

Inheritance diagram for PNS::DRAGGER:
PNS::ALGO_BASE

Public Member Functions

 DRAGGER (ROUTER *aRouter)
 
 ~DRAGGER ()
 
void SetWorld (NODE *aWorld)
 Function SetWorld() More...
 
bool Start (const VECTOR2I &aP, ITEM *aStartItem)
 Function Start() More...
 
bool Drag (const VECTOR2I &aP)
 Function Drag() More...
 
bool FixRoute ()
 Function FixRoute() More...
 
NODECurrentNode () const
 Function CurrentNode() More...
 
const ITEM_SET Traces ()
 Function Traces() More...
 
virtual LOGGERLogger () override
 

Returns the logger object, allowing to dump geometry to a file.

More...
 
void SetMode (int aDragMode)
 
ROUTERRouter () const
 

Returns the instance of our router

More...
 
ROUTING_SETTINGSSettings () const
 

Returns current router settings

More...
 
void SetDebugDecorator (DEBUG_DECORATOR *aDecorator)
 Function SetDebugDecorator. More...
 
DEBUG_DECORATORDbg () const
 

Private Member Functions

bool dragMarkObstacles (const VECTOR2I &aP)
 
bool dragShove (const VECTOR2I &aP)
 
bool startDragSegment (const VECTOR2D &aP, SEGMENT *aSeg)
 
bool startDragVia (const VECTOR2D &aP, VIA *aVia)
 
void dumbDragVia (VIA *aVia, NODE *aNode, const VECTOR2I &aP)
 

Private Attributes

NODEm_world
 
NODEm_lastNode
 
int m_mode
 
LINE m_draggedLine
 
VIAm_draggedVia
 
LINE m_lastValidDraggedLine
 
SHOVEm_shove
 
int m_draggedSegmentIndex
 
bool m_dragStatus
 
PNS_MODE m_currentMode
 
ITEM_SET m_origViaConnections
 
VIAm_initialVia
 
ITEM_SET m_draggedItems
 
bool m_freeAngleMode
 

Detailed Description

Class DRAGGER.

Via, segment and corner dragging algorithm.

Definition at line 44 of file pns_dragger.h.

Constructor & Destructor Documentation

PNS::DRAGGER::DRAGGER ( ROUTER aRouter)

Definition at line 28 of file pns_dragger.cpp.

References PNS::DM_SEGMENT, m_currentMode, m_draggedSegmentIndex, m_draggedVia, m_dragStatus, m_freeAngleMode, m_initialVia, m_lastNode, m_mode, m_shove, m_world, and PNS::RM_MarkObstacles.

28  :
29  ALGO_BASE( aRouter )
30 {
31  m_world = NULL;
32  m_lastNode = NULL;
34  m_draggedVia = NULL;
35  m_shove = NULL;
37  m_dragStatus = false;
39  m_initialVia = NULL;
40  m_freeAngleMode = false;
41 }
VIA * m_initialVia
Definition: pns_dragger.h:122
NODE * m_world
Definition: pns_dragger.h:111
bool m_dragStatus
Definition: pns_dragger.h:119
VIA * m_draggedVia
Definition: pns_dragger.h:115
SHOVE * m_shove
Definition: pns_dragger.h:117
ALGO_BASE(ROUTER *aRouter)
Definition: pns_algo_base.h:42
int m_draggedSegmentIndex
Definition: pns_dragger.h:118
NODE * m_lastNode
Definition: pns_dragger.h:112
PNS_MODE m_currentMode
Definition: pns_dragger.h:120
bool m_freeAngleMode
Definition: pns_dragger.h:124
PNS::DRAGGER::~DRAGGER ( )

Definition at line 44 of file pns_dragger.cpp.

References m_shove.

45 {
46  if( m_shove )
47  delete m_shove;
48 }
SHOVE * m_shove
Definition: pns_dragger.h:117

Member Function Documentation

NODE * PNS::DRAGGER::CurrentNode ( ) const

Function CurrentNode()

Returns the most recent world state, including all items changed due to dragging operation.

Definition at line 359 of file pns_dragger.cpp.

References m_lastNode.

Referenced by FixRoute().

360 {
361  return m_lastNode;
362 }
NODE * m_lastNode
Definition: pns_dragger.h:112
bool PNS::DRAGGER::Drag ( const VECTOR2I aP)

Function Drag()

Drags the current segment/corner/via to the point aP.

Returns
true, if dragging finished with success.

Definition at line 338 of file pns_dragger.cpp.

References dragMarkObstacles(), dragShove(), m_currentMode, m_freeAngleMode, PNS::RM_MarkObstacles, PNS::RM_Shove, PNS::RM_Smart, and PNS::RM_Walkaround.

339 {
340  if( m_freeAngleMode )
341  return dragMarkObstacles( aP );
342 
343  switch( m_currentMode )
344  {
345  case RM_MarkObstacles:
346  return dragMarkObstacles( aP );
347 
348  case RM_Shove:
349  case RM_Walkaround:
350  case RM_Smart:
351  return dragShove( aP );
352 
353  default:
354  return false;
355  }
356 }
Ignore collisions, mark obstacles
Only walkaround
bool dragShove(const VECTOR2I &aP)
PNS_MODE m_currentMode
Definition: pns_dragger.h:120
bool dragMarkObstacles(const VECTOR2I &aP)
bool m_freeAngleMode
Definition: pns_dragger.h:124
bool PNS::DRAGGER::dragMarkObstacles ( const VECTOR2I aP)
private

Definition at line 159 of file pns_dragger.cpp.

References PNS::ITEM_SET::Add(), PNS::NODE::Add(), PNS::NODE::Branch(), PNS::NODE::CheckColliding(), PNS::ITEM_SET::Clear(), PNS::LINE::ClearSegmentLinks(), PNS::SHOVE::CurrentNode(), PNS::DM_CORNER, PNS::DM_SEGMENT, PNS::DM_VIA, PNS::LINE::DragCorner(), PNS::LINE::DragSegment(), dumbDragVia(), m_draggedItems, m_draggedLine, m_draggedSegmentIndex, m_dragStatus, m_freeAngleMode, m_initialVia, m_lastNode, m_lastValidDraggedLine, m_mode, m_shove, m_world, PNS::ALGO_BASE::Settings(), PNS::ROUTING_SETTINGS::SmoothDraggedSegments(), PNS::LINE::Unmark(), and PNS::LINE::Width().

Referenced by Drag().

160 {
161  if( m_lastNode )
162  {
163  delete m_lastNode;
164  m_lastNode = NULL;
165  }
166 
167  switch( m_mode )
168  {
169  case DM_SEGMENT:
170  case DM_CORNER:
171  {
172  int thresh = Settings().SmoothDraggedSegments() ? m_draggedLine.Width() / 4 : 0;
173  LINE dragged( m_draggedLine );
174 
175  if( m_mode == DM_SEGMENT )
176  dragged.DragSegment( aP, m_draggedSegmentIndex, thresh );
177  else
178  dragged.DragCorner( aP, m_draggedSegmentIndex, thresh, m_freeAngleMode );
179 
181 
182  m_lastValidDraggedLine = dragged;
185 
189 
190  break;
191  }
192 
193  case DM_VIA: // fixme...
194  {
197 
198  break;
199  }
200  }
201 
202  if( Settings().CanViolateDRC() )
203  m_dragStatus = true;
204  else
206 
207  return true;
208 }
ITEM_SET m_draggedItems
Definition: pns_dragger.h:123
bool SmoothDraggedSegments() const
Returns true if smoothing segments durign dragging is enabled.
VIA * m_initialVia
Definition: pns_dragger.h:122
NODE * m_world
Definition: pns_dragger.h:111
bool m_dragStatus
Definition: pns_dragger.h:119
LINE m_draggedLine
Definition: pns_dragger.h:114
ROUTING_SETTINGS & Settings() const
Returns current router settings
LINE m_lastValidDraggedLine
Definition: pns_dragger.h:116
void dumbDragVia(VIA *aVia, NODE *aNode, const VECTOR2I &aP)
int Width() const
Returns line width
Definition: pns_line.h:159
void Add(const LINE &aLine)
Definition: pns_itemset.cpp:32
NODE * Branch()
Function Branch()
Definition: pns_node.cpp:107
SHOVE * m_shove
Definition: pns_dragger.h:117
int m_draggedSegmentIndex
Definition: pns_dragger.h:118
NODE * m_lastNode
Definition: pns_dragger.h:112
void ClearSegmentLinks()
Erases the linking information. Used to detach the line from the owning node.
Definition: pns_line.cpp:827
OPT_OBSTACLE CheckColliding(const ITEM *aItem, int aKindMask=ITEM::ANY_T)
Function CheckColliding()
Definition: pns_node.cpp:425
bool m_freeAngleMode
Definition: pns_dragger.h:124
bool Add(std::unique_ptr< SEGMENT > aSegment, bool aAllowRedundant=false)
Function Add()
Definition: pns_node.cpp:594
virtual void Unmark(int aMarker=-1) override
Definition: pns_line.cpp:94
NODE * CurrentNode()
Definition: pns_shove.cpp:1402
bool PNS::DRAGGER::dragShove ( const VECTOR2I aP)
private

Definition at line 245 of file pns_dragger.cpp.

References PNS::ITEM_SET::Add(), PNS::NODE::Add(), PNS::NODE::Branch(), PNS::ITEM_SET::Clear(), PNS::LINE::ClearSegmentLinks(), PNS::SHOVE::CurrentNode(), PNS::DM_CORNER, PNS::DM_SEGMENT, PNS::DM_VIA, PNS::LINE::DragCorner(), PNS::LINE::DragSegment(), m_draggedItems, m_draggedLine, m_draggedSegmentIndex, m_draggedVia, m_dragStatus, m_lastNode, m_lastValidDraggedLine, m_mode, m_shove, PNS::SHOVE::NewHead(), PNS::ALGO_BASE::Settings(), PNS::SHOVE::SH_HEAD_MODIFIED, PNS::SHOVE::SH_OK, PNS::SHOVE::ShoveDraggingVia(), PNS::SHOVE::ShoveLines(), PNS::ROUTING_SETTINGS::SmoothDraggedSegments(), PNS::LINE::Unmark(), and PNS::LINE::Width().

Referenced by Drag().

246 {
247  bool ok = false;
248 
249  if( m_lastNode )
250  {
251  delete m_lastNode;
252  m_lastNode = NULL;
253  }
254 
255  switch( m_mode )
256  {
257  case DM_SEGMENT:
258  case DM_CORNER:
259  {
260  int thresh = Settings().SmoothDraggedSegments() ? m_draggedLine.Width() / 4 : 0;
261  LINE dragged( m_draggedLine );
262 
263  if( m_mode == DM_SEGMENT )
264  dragged.DragSegment( aP, m_draggedSegmentIndex, thresh );
265  else
266  dragged.DragCorner( aP, m_draggedSegmentIndex, thresh );
267 
268  SHOVE::SHOVE_STATUS st = m_shove->ShoveLines( dragged );
269 
270  if( st == SHOVE::SH_OK )
271  ok = true;
272  else if( st == SHOVE::SH_HEAD_MODIFIED )
273  {
274  dragged = m_shove->NewHead();
275  ok = true;
276  }
277 
279 
280  if( ok )
281  m_lastValidDraggedLine = dragged;
282 
288 
289  break;
290  }
291 
292  case DM_VIA:
293  {
294  VIA* newVia;
296 
297  if( st == SHOVE::SH_OK || st == SHOVE::SH_HEAD_MODIFIED )
298  ok = true;
299 
301 
302  if( ok )
303  {
304  if( newVia )
305  m_draggedVia = newVia;
306 
308  }
309 
310  break;
311  }
312  }
313 
314  m_dragStatus = ok;
315 
316  return ok;
317 }
ITEM_SET m_draggedItems
Definition: pns_dragger.h:123
bool SmoothDraggedSegments() const
Returns true if smoothing segments durign dragging is enabled.
bool m_dragStatus
Definition: pns_dragger.h:119
LINE m_draggedLine
Definition: pns_dragger.h:114
ROUTING_SETTINGS & Settings() const
Returns current router settings
LINE m_lastValidDraggedLine
Definition: pns_dragger.h:116
int Width() const
Returns line width
Definition: pns_line.h:159
void Add(const LINE &aLine)
Definition: pns_itemset.cpp:32
NODE * Branch()
Function Branch()
Definition: pns_node.cpp:107
VIA * m_draggedVia
Definition: pns_dragger.h:115
SHOVE_STATUS ShoveLines(const LINE &aCurrentHead)
Definition: pns_shove.cpp:1087
SHOVE * m_shove
Definition: pns_dragger.h:117
int m_draggedSegmentIndex
Definition: pns_dragger.h:118
SHOVE_STATUS ShoveDraggingVia(VIA *aVia, const VECTOR2I &aWhere, VIA **aNewVia)
Definition: pns_shove.cpp:1271
NODE * m_lastNode
Definition: pns_dragger.h:112
const LINE NewHead() const
Definition: pns_shove.cpp:1408
void ClearSegmentLinks()
Erases the linking information. Used to detach the line from the owning node.
Definition: pns_line.cpp:827
bool Add(std::unique_ptr< SEGMENT > aSegment, bool aAllowRedundant=false)
Function Add()
Definition: pns_node.cpp:594
virtual void Unmark(int aMarker=-1) override
Definition: pns_line.cpp:94
NODE * CurrentNode()
Definition: pns_shove.cpp:1402
void PNS::DRAGGER::dumbDragVia ( VIA aVia,
NODE aNode,
const VECTOR2I aP 
)
private

Definition at line 211 of file pns_dragger.cpp.

References PNS::ITEM_SET::Add(), PNS::NODE::Add(), PNS::ITEM_SET::Clear(), PNS::LINE::ClearSegmentLinks(), PNS::LINE::CLine(), PNS::Clone(), PNS::LINE::DragCorner(), SHAPE_LINE_CHAIN::Find(), PNS::ITEM_SET::Items(), m_draggedItems, m_draggedVia, m_freeAngleMode, m_lastNode, m_origViaConnections, PNS::VIA::Pos(), PNS::NODE::Remove(), and PNS::VIA::SetPos().

Referenced by dragMarkObstacles().

212 {
214 
215  // fixme: this is awful.
216  auto via_clone = Clone( *aVia );
217 
218  m_draggedVia = via_clone.get();
219  m_draggedVia->SetPos( aP );
220 
222 
223  m_lastNode->Remove( aVia );
224  m_lastNode->Add( std::move( via_clone ) );
225 
226  for( ITEM* item : m_origViaConnections.Items() )
227  {
228  if( const LINE* l = dyn_cast<const LINE*>( item ) )
229  {
230  LINE origLine( *l );
231  LINE draggedLine( *l );
232 
233  draggedLine.DragCorner( aP, origLine.CLine().Find( aVia->Pos() ), 0, m_freeAngleMode );
234  draggedLine.ClearSegmentLinks();
235 
236  m_draggedItems.Add( draggedLine );
237 
238  m_lastNode->Remove( origLine );
239  m_lastNode->Add( draggedLine );
240  }
241  }
242 }
ITEM_SET m_draggedItems
Definition: pns_dragger.h:123
ENTRIES & Items()
Definition: pns_itemset.h:140
void Add(const LINE &aLine)
Definition: pns_itemset.cpp:32
VIA * m_draggedVia
Definition: pns_dragger.h:115
ITEM_SET m_origViaConnections
Definition: pns_dragger.h:121
void Remove(SOLID *aSolid)
Function Remove()
Definition: pns_node.cpp:729
NODE * m_lastNode
Definition: pns_dragger.h:112
void SetPos(const VECTOR2I &aPos)
Definition: pns_via.h:93
std::unique_ptr< typename std::remove_const< T >::type > Clone(const T &aItem)
Definition: pns_item.h:380
bool m_freeAngleMode
Definition: pns_dragger.h:124
bool Add(std::unique_ptr< SEGMENT > aSegment, bool aAllowRedundant=false)
Function Add()
Definition: pns_node.cpp:594
bool PNS::DRAGGER::FixRoute ( )

Function FixRoute()

Checks if the result of current dragging operation is correct and eventually commits it to the world.

Returns
true, if dragging finished with success.

Definition at line 320 of file pns_dragger.cpp.

References PNS::ROUTER::CommitRouting(), CurrentNode(), m_dragStatus, and PNS::ALGO_BASE::Router().

321 {
322  NODE* node = CurrentNode();
323 
324  if( node )
325  {
326  // Collisions still prevent fixing unless "Allow DRC violations" is checked
327  if( !m_dragStatus )
328  return false;
329 
330  Router()->CommitRouting( node );
331  return true;
332  }
333 
334  return false;
335 }
bool m_dragStatus
Definition: pns_dragger.h:119
ROUTER * Router() const
Returns the instance of our router
Definition: pns_algo_base.h:49
NODE * CurrentNode() const
Function CurrentNode()
void CommitRouting(NODE *aNode)
Definition: pns_router.cpp:350
LOGGER * PNS::DRAGGER::Logger ( )
overridevirtual

Returns the logger object, allowing to dump geometry to a file.

Reimplemented from PNS::ALGO_BASE.

Definition at line 371 of file pns_dragger.cpp.

References PNS::SHOVE::Logger(), and m_shove.

372 {
373  if( m_shove )
374  return m_shove->Logger();
375 
376  return NULL;
377 }
SHOVE * m_shove
Definition: pns_dragger.h:117
virtual LOGGER * Logger() override
Returns the logger object, allowing to dump geometry to a file.
Definition: pns_shove.h:62
void PNS::ALGO_BASE::SetDebugDecorator ( DEBUG_DECORATOR aDecorator)
inlineinherited

Function SetDebugDecorator.

Assign a debug decorator allowing this algo to draw extra graphics for visual debugging

Definition at line 65 of file pns_algo_base.h.

References PNS::ALGO_BASE::m_debugDecorator.

66  {
67  m_debugDecorator = aDecorator;
68  }
DEBUG_DECORATOR * m_debugDecorator
Definition: pns_algo_base.h:76
void PNS::DRAGGER::SetMode ( int  aDragMode)

Definition at line 153 of file pns_dragger.cpp.

References m_mode.

154 {
155  m_mode = aMode;
156 }
void PNS::DRAGGER::SetWorld ( NODE aWorld)

Function SetWorld()

Sets the board to work on.

Definition at line 51 of file pns_dragger.cpp.

References m_world.

52 {
53  m_world = aWorld;
54 }
NODE * m_world
Definition: pns_dragger.h:111
bool PNS::DRAGGER::Start ( const VECTOR2I aP,
ITEM aStartItem 
)

Function Start()

Starts routing a single track at point aP, taking item aStartItem as anchor (unless NULL). Returns true if a dragging operation has started.

Definition at line 127 of file pns_dragger.cpp.

References PNS::ITEM_SET::Clear(), PNS::DM_FREE_ANGLE, PNS::ITEM::Kind(), m_currentMode, m_draggedItems, m_freeAngleMode, m_lastNode, m_mode, m_shove, m_world, PNS::MK_LOCKED, PNS::ROUTING_SETTINGS::Mode(), PNS::ALGO_BASE::Router(), PNS::ITEM::SEGMENT_T, PNS::ALGO_BASE::Settings(), startDragSegment(), startDragVia(), PNS::ITEM::Unmark(), and PNS::ITEM::VIA_T.

128 {
129  m_shove = new SHOVE( m_world, Router() );
130  m_lastNode = NULL;
134 
135  aStartItem->Unmark( MK_LOCKED );
136 
137  wxLogTrace( "PNS", "StartDragging: item %p [kind %d]", aStartItem, (int) aStartItem->Kind() );
138 
139  switch( aStartItem->Kind() )
140  {
141  case ITEM::SEGMENT_T:
142  return startDragSegment( aP, static_cast<SEGMENT*>( aStartItem ) );
143 
144  case ITEM::VIA_T:
145  return startDragVia( aP, static_cast<VIA*>( aStartItem ) );
146 
147  default:
148  return false;
149  }
150 }
PNS_MODE Mode() const
Returns the routing mode.
ITEM_SET m_draggedItems
Definition: pns_dragger.h:123
NODE * m_world
Definition: pns_dragger.h:111
bool startDragSegment(const VECTOR2D &aP, SEGMENT *aSeg)
Definition: pns_dragger.cpp:57
ROUTING_SETTINGS & Settings() const
Returns current router settings
SHOVE * m_shove
Definition: pns_dragger.h:117
bool startDragVia(const VECTOR2D &aP, VIA *aVia)
Definition: pns_dragger.cpp:96
ROUTER * Router() const
Returns the instance of our router
Definition: pns_algo_base.h:49
NODE * m_lastNode
Definition: pns_dragger.h:112
PNS_MODE m_currentMode
Definition: pns_dragger.h:120
bool m_freeAngleMode
Definition: pns_dragger.h:124
bool PNS::DRAGGER::startDragSegment ( const VECTOR2D aP,
SEGMENT aSeg 
)
private

Definition at line 57 of file pns_dragger.cpp.

References SEG::A, PNS::NODE::AssembleLine(), SEG::B, PNS::LINE::ClearSegmentLinks(), PNS::DM_CORNER, PNS::DM_SEGMENT, EuclideanNorm(), m_draggedLine, m_draggedSegmentIndex, m_freeAngleMode, m_lastValidDraggedLine, m_mode, m_shove, m_world, PNS::SEGMENT::Seg(), PNS::SHOVE::SetInitialLine(), and PNS::SEGMENT::Width().

Referenced by Start().

58 {
59  int w2 = aSeg->Width() / 2;
60 
65 
66  auto distA = ( aP - aSeg->Seg().A ).EuclideanNorm();
67  auto distB = ( aP - aSeg->Seg().B ).EuclideanNorm();
68 
69 
70  if( distA <= w2 )
71  {
72  m_mode = DM_CORNER;
73  }
74  else if( distB <= w2 )
75  {
77  m_mode = DM_CORNER;
78  }
79  else if ( m_freeAngleMode )
80  {
81  if( distB < distA )
82  {
84  }
85  m_mode = DM_CORNER;
86  }
87  else
88  {
90  }
91 
92  return true;
93 }
double EuclideanNorm(const wxPoint &vector)
Euclidean norm of a 2D vector.
Definition: trigo.h:112
NODE * m_world
Definition: pns_dragger.h:111
const LINE AssembleLine(SEGMENT *aSeg, int *aOriginSegmentIndex=NULL, bool aStopAtLockedJoints=false)
Function AssembleLine()
Definition: pns_node.cpp:834
LINE m_draggedLine
Definition: pns_dragger.h:114
LINE m_lastValidDraggedLine
Definition: pns_dragger.h:116
SHOVE * m_shove
Definition: pns_dragger.h:117
int m_draggedSegmentIndex
Definition: pns_dragger.h:118
void ClearSegmentLinks()
Erases the linking information. Used to detach the line from the owning node.
Definition: pns_line.cpp:827
void SetInitialLine(LINE &aInitial)
Definition: pns_shove.cpp:1416
bool m_freeAngleMode
Definition: pns_dragger.h:124
bool PNS::DRAGGER::startDragVia ( const VECTOR2D aP,
VIA aVia 
)
private

Definition at line 96 of file pns_dragger.cpp.

References PNS::ITEM_SET::Add(), PNS::NODE::AssembleLine(), PNS::DM_VIA, PNS::NODE::FindJoint(), PNS::ITEM::Layers(), m_draggedVia, m_initialVia, m_mode, m_origViaConnections, m_world, PNS::ITEM::Net(), PNS::VIA::Pos(), PNS::LINE::Reverse(), PNS::ITEM::SEGMENT_T, and LAYER_RANGE::Start().

Referenced by Start().

97 {
98  m_draggedVia = aVia;
99  m_initialVia = aVia;
100  m_mode = DM_VIA;
101 
102  VECTOR2I p0( aVia->Pos() );
103  JOINT* jt = m_world->FindJoint( p0, aVia->Layers().Start(), aVia->Net() );
104 
105  if( !jt )
106  return false;
107 
108  for( ITEM* item : jt->LinkList() )
109  {
110  if( item->OfKind( ITEM::SEGMENT_T ) )
111  {
112  int segIndex;
113  SEGMENT* seg = ( SEGMENT*) item;
114  LINE l = m_world->AssembleLine( seg, &segIndex );
115 
116  if( segIndex != 0 )
117  l.Reverse();
118 
120  }
121  }
122 
123  return true;
124 }
VIA * m_initialVia
Definition: pns_dragger.h:122
NODE * m_world
Definition: pns_dragger.h:111
const LINE AssembleLine(SEGMENT *aSeg, int *aOriginSegmentIndex=NULL, bool aStopAtLockedJoints=false)
Function AssembleLine()
Definition: pns_node.cpp:834
void Add(const LINE &aLine)
Definition: pns_itemset.cpp:32
VIA * m_draggedVia
Definition: pns_dragger.h:115
void Reverse()
Reverses the point/vertex order
Definition: pns_line.cpp:742
ITEM_SET m_origViaConnections
Definition: pns_dragger.h:121
JOINT * FindJoint(const VECTOR2I &aPos, int aLayer, int aNet)
Function FindJoint()
Definition: pns_node.cpp:968
const ITEM_SET PNS::DRAGGER::Traces ( )

Function Traces()

Returns the set of dragged items.

Definition at line 365 of file pns_dragger.cpp.

References m_draggedItems.

366 {
367  return m_draggedItems;
368 }
ITEM_SET m_draggedItems
Definition: pns_dragger.h:123

Member Data Documentation

PNS_MODE PNS::DRAGGER::m_currentMode
private

Definition at line 120 of file pns_dragger.h.

Referenced by Drag(), DRAGGER(), and Start().

ITEM_SET PNS::DRAGGER::m_draggedItems
private

Definition at line 123 of file pns_dragger.h.

Referenced by dragMarkObstacles(), dragShove(), dumbDragVia(), Start(), and Traces().

LINE PNS::DRAGGER::m_draggedLine
private

Definition at line 114 of file pns_dragger.h.

Referenced by dragMarkObstacles(), dragShove(), and startDragSegment().

int PNS::DRAGGER::m_draggedSegmentIndex
private

Definition at line 118 of file pns_dragger.h.

Referenced by DRAGGER(), dragMarkObstacles(), dragShove(), and startDragSegment().

VIA* PNS::DRAGGER::m_draggedVia
private

Definition at line 115 of file pns_dragger.h.

Referenced by DRAGGER(), dragShove(), dumbDragVia(), and startDragVia().

bool PNS::DRAGGER::m_dragStatus
private

Definition at line 119 of file pns_dragger.h.

Referenced by DRAGGER(), dragMarkObstacles(), dragShove(), and FixRoute().

bool PNS::DRAGGER::m_freeAngleMode
private

Definition at line 124 of file pns_dragger.h.

Referenced by Drag(), DRAGGER(), dragMarkObstacles(), dumbDragVia(), Start(), and startDragSegment().

VIA* PNS::DRAGGER::m_initialVia
private

Definition at line 122 of file pns_dragger.h.

Referenced by DRAGGER(), dragMarkObstacles(), and startDragVia().

NODE* PNS::DRAGGER::m_lastNode
private

Definition at line 112 of file pns_dragger.h.

Referenced by CurrentNode(), DRAGGER(), dragMarkObstacles(), dragShove(), dumbDragVia(), and Start().

LINE PNS::DRAGGER::m_lastValidDraggedLine
private

Definition at line 116 of file pns_dragger.h.

Referenced by dragMarkObstacles(), dragShove(), and startDragSegment().

int PNS::DRAGGER::m_mode
private
ITEM_SET PNS::DRAGGER::m_origViaConnections
private

Definition at line 121 of file pns_dragger.h.

Referenced by dumbDragVia(), and startDragVia().

SHOVE* PNS::DRAGGER::m_shove
private
NODE* PNS::DRAGGER::m_world
private

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