KiCad PCB EDA Suite
PNS_KICAD_IFACE Class Reference

#include <pns_kicad_iface.h>

Inheritance diagram for PNS_KICAD_IFACE:
PNS::ROUTER_IFACE

Public Member Functions

 PNS_KICAD_IFACE ()
 
 ~PNS_KICAD_IFACE ()
 
void SetRouter (PNS::ROUTER *aRouter) override
 
void SetHostTool (PCB_TOOL *aTool)
 
void SetDisplayOptions (PCB_DISPLAY_OPTIONS *aDispOptions)
 
void SetBoard (BOARD *aBoard)
 
void SetView (KIGFX::VIEW *aView)
 
void SyncWorld (PNS::NODE *aWorld) override
 
void EraseView () override
 
void HideItem (PNS::ITEM *aItem) override
 
void DisplayItem (const PNS::ITEM *aItem, int aColor=0, int aClearance=0) override
 
void AddItem (PNS::ITEM *aItem) override
 
void RemoveItem (PNS::ITEM *aItem) override
 
void Commit () override
 
void UpdateNet (int aNetCode) override
 
PNS::RULE_RESOLVERGetRuleResolver () override
 
PNS::DEBUG_DECORATORGetDebugDecorator () override
 

Private Member Functions

std::unique_ptr< PNS::SOLIDsyncPad (D_PAD *aPad)
 
std::unique_ptr< PNS::SEGMENTsyncTrack (TRACK *aTrack)
 
std::unique_ptr< PNS::VIAsyncVia (VIA *aVia)
 
bool syncGraphicalItem (PNS::NODE *aWorld, DRAWSEGMENT *aItem)
 
bool syncZone (PNS::NODE *aWorld, ZONE_CONTAINER *aZone)
 

Private Attributes

PNS_PCBNEW_RULE_RESOLVERm_ruleResolver
 
PNS_PCBNEW_DEBUG_DECORATORm_debugDecorator
 
KIGFX::VIEWm_view
 
KIGFX::VIEW_GROUPm_previewItems
 
std::unordered_set< BOARD_CONNECTED_ITEM * > m_hiddenItems
 
PNS::ROUTERm_router
 
BOARDm_board
 
PCB_TOOLm_tool
 
std::unique_ptr< BOARD_COMMITm_commit
 
PCB_DISPLAY_OPTIONSm_dispOptions
 

Detailed Description

Definition at line 42 of file pns_kicad_iface.h.

Constructor & Destructor Documentation

PNS_KICAD_IFACE::PNS_KICAD_IFACE ( )

Definition at line 467 of file pns_kicad_iface.cpp.

References PNS_PCBNEW_RULE_RESOLVER::m_board, and PNS_PCBNEW_RULE_RESOLVER::m_router.

468 {
469  m_ruleResolver = nullptr;
470  m_board = nullptr;
471  m_tool = nullptr;
472  m_view = nullptr;
473  m_previewItems = nullptr;
474  m_router = nullptr;
475  m_debugDecorator = nullptr;
476  m_dispOptions = nullptr;
477 }
PNS_PCBNEW_DEBUG_DECORATOR * m_debugDecorator
PCB_DISPLAY_OPTIONS * m_dispOptions
PNS_PCBNEW_RULE_RESOLVER * m_ruleResolver
KIGFX::VIEW_GROUP * m_previewItems
PNS::ROUTER * m_router
KIGFX::VIEW * m_view
PCB_TOOL * m_tool
PNS_KICAD_IFACE::~PNS_KICAD_IFACE ( )

Definition at line 480 of file pns_kicad_iface.cpp.

481 {
482  delete m_ruleResolver;
483  delete m_debugDecorator;
484 
485  if( m_previewItems )
486  {
488  delete m_previewItems;
489  }
490 }
PNS_PCBNEW_DEBUG_DECORATOR * m_debugDecorator
void FreeItems()
Function FreeItems() Frees all the items that were added to the group.
Definition: view_group.cpp:167
PNS_PCBNEW_RULE_RESOLVER * m_ruleResolver
KIGFX::VIEW_GROUP * m_previewItems

Member Function Documentation

void PNS_KICAD_IFACE::AddItem ( PNS::ITEM aItem)
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1056 of file pns_kicad_iface.cpp.

References SEG::A, SEG::B, EDA_ITEM::ClearFlags(), PNS::VIA::Diameter(), PNS::VIA::Drill(), LAYER_RANGE::End(), PNS::ITEM::Kind(), PNS::ITEM::Layers(), PNS_PCBNEW_RULE_RESOLVER::m_board, PNS::ITEM::Net(), PNS::VIA::Pos(), PNS::SEGMENT::Seg(), PNS::ITEM::SEGMENT_T, VIA::SetDrill(), TRACK::SetEnd(), BOARD_ITEM::SetLayer(), VIA::SetLayerPair(), BOARD_CONNECTED_ITEM::SetNetCode(), PNS::ITEM::SetParent(), VIA::SetPosition(), TRACK::SetStart(), VIA::SetViaType(), TRACK::SetWidth(), LAYER_RANGE::Start(), ToLAYER_ID(), VIA, PNS::ITEM::VIA_T, PNS::VIA::ViaType(), PNS::SEGMENT::Width(), VECTOR2< T >::x, and VECTOR2< T >::y.

1057 {
1058  BOARD_CONNECTED_ITEM* newBI = NULL;
1059 
1060  switch( aItem->Kind() )
1061  {
1062  case PNS::ITEM::SEGMENT_T:
1063  {
1064  PNS::SEGMENT* seg = static_cast<PNS::SEGMENT*>( aItem );
1065  TRACK* track = new TRACK( m_board );
1066  const SEG& s = seg->Seg();
1067  track->SetStart( wxPoint( s.A.x, s.A.y ) );
1068  track->SetEnd( wxPoint( s.B.x, s.B.y ) );
1069  track->SetWidth( seg->Width() );
1070  track->SetLayer( ToLAYER_ID( seg->Layers().Start() ) );
1071  track->SetNetCode( seg->Net() > 0 ? seg->Net() : 0 );
1072  newBI = track;
1073  break;
1074  }
1075 
1076  case PNS::ITEM::VIA_T:
1077  {
1078  VIA* via_board = new VIA( m_board );
1079  PNS::VIA* via = static_cast<PNS::VIA*>( aItem );
1080  via_board->SetPosition( wxPoint( via->Pos().x, via->Pos().y ) );
1081  via_board->SetWidth( via->Diameter() );
1082  via_board->SetDrill( via->Drill() );
1083  via_board->SetNetCode( via->Net() > 0 ? via->Net() : 0 );
1084  via_board->SetViaType( via->ViaType() ); // MUST be before SetLayerPair()
1085  via_board->SetLayerPair( ToLAYER_ID( via->Layers().Start() ),
1086  ToLAYER_ID( via->Layers().End() ) );
1087  newBI = via_board;
1088  break;
1089  }
1090 
1091  default:
1092  break;
1093  }
1094 
1095  if( newBI )
1096  {
1097  aItem->SetParent( newBI );
1098  newBI->ClearFlags();
1099 
1100  m_commit->Add( newBI );
1101  }
1102 }
void SetViaType(VIATYPE_T aViaType)
Definition: class_track.h:461
const LAYER_RANGE & Layers() const
Function Layers()
Definition: pns_item.h:209
void SetPosition(const wxPoint &aPoint) override
Definition: class_track.h:433
virtual void SetLayer(PCB_LAYER_ID aLayer)
Function SetLayer sets the layer this item is on.
void SetEnd(const wxPoint &aEnd)
Definition: class_track.h:118
int Drill() const
Definition: pns_via.h:120
int Diameter() const
Definition: pns_via.h:109
const VECTOR2I & Pos() const
Definition: pns_via.h:88
Class BOARD_CONNECTED_ITEM is a base class derived from BOARD_ITEM for items that can be connected an...
void SetWidth(int aWidth)
Definition: class_track.h:115
VIATYPE_T ViaType() const
Definition: pns_via.h:99
int End() const
Definition: pns_layerset.h:88
void SetParent(BOARD_CONNECTED_ITEM *aParent)
Function SetParent()
Definition: pns_item.h:149
std::unique_ptr< BOARD_COMMIT > m_commit
bool SetNetCode(int aNetCode, bool aNoAssert=false)
Function SetNetCode sets net using a net code.
void SetLayerPair(PCB_LAYER_ID aTopLayer, PCB_LAYER_ID aBottomLayer)
Function SetLayerPair For a via m_Layer contains the top layer, the other layer is in m_BottomLayer...
int Width() const
Definition: pns_segment.h:88
int Start() const
Definition: pns_layerset.h:83
PnsKind Kind() const
Function Kind()
Definition: pns_item.h:122
Definition: seg.h:36
VECTOR2I A
Definition: seg.h:46
void SetDrill(int aDrill)
Function SetDrill sets the drill value for vias.
Definition: class_track.h:468
int Net() const
Function Net()
Definition: pns_item.h:179
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:265
void SetStart(const wxPoint &aStart)
Definition: class_track.h:121
const SEG & Seg() const
Definition: pns_segment.h:93
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition: lset.cpp:796
VECTOR2I B
Definition: seg.h:47
void PNS_KICAD_IFACE::Commit ( )
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1105 of file pns_kicad_iface.cpp.

1106 {
1107  EraseView();
1108  m_commit->Push( _( "Added a track" ) );
1109  m_commit.reset( new BOARD_COMMIT( m_tool ) );
1110 }
std::unique_ptr< BOARD_COMMIT > m_commit
void EraseView() override
PCB_TOOL * m_tool
void PNS_KICAD_IFACE::DisplayItem ( const PNS::ITEM aItem,
int  aColor = 0,
int  aClearance = 0 
)
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1002 of file pns_kicad_iface.cpp.

References PCB_DISPLAY_OPTIONS::DO_NOT_SHOW_CLEARANCE, ROUTER_PREVIEW_ITEM::SetClearance(), ROUTER_PREVIEW_ITEM::SetColor(), PCB_DISPLAY_OPTIONS::SHOW_CLEARANCE_NEW_TRACKS, ROUTER_PREVIEW_ITEM::ShowTrackClearance(), and ROUTER_PREVIEW_ITEM::ShowViaClearance().

1003 {
1004  wxLogTrace( "PNS", "DisplayItem %p", aItem );
1005 
1006  ROUTER_PREVIEW_ITEM* pitem = new ROUTER_PREVIEW_ITEM( aItem, m_view );
1007 
1008  if( aColor >= 0 )
1009  pitem->SetColor( KIGFX::COLOR4D( aColor ) );
1010 
1011  if( aClearance >= 0 )
1012  {
1013  pitem->SetClearance( aClearance );
1014 
1015  if( m_dispOptions )
1016  {
1017  auto clearanceDisp = m_dispOptions->m_ShowTrackClearanceMode;
1020  && clearanceDisp != PCB_DISPLAY_OPTIONS::SHOW_CLEARANCE_NEW_TRACKS );
1021  }
1022  }
1023 
1024 
1025  m_previewItems->Add( pitem );
1027 }
void SetClearance(int aClearance)
void ShowTrackClearance(bool aEnabled)
PCB_DISPLAY_OPTIONS * m_dispOptions
TRACE_CLEARANCE_DISPLAY_MODE_T m_ShowTrackClearanceMode
How trace clearances are displayed.
void ShowViaClearance(bool aEnabled)
KIGFX::VIEW_GROUP * m_previewItems
virtual void Add(VIEW_ITEM *aItem)
Function Add() Adds an item to the group.
Definition: view_group.cpp:55
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1499
void SetColor(const KIGFX::COLOR4D &aColor)
KIGFX::VIEW * m_view
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
void PNS_KICAD_IFACE::EraseView ( )
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 984 of file pns_kicad_iface.cpp.

985 {
986  for( auto item : m_hiddenItems )
987  m_view->SetVisible( item, true );
988 
989  m_hiddenItems.clear();
990 
991  if( m_previewItems )
992  {
995  }
996 
997  if( m_debugDecorator )
999 }
PNS_PCBNEW_DEBUG_DECORATOR * m_debugDecorator
std::unordered_set< BOARD_CONNECTED_ITEM * > m_hiddenItems
void FreeItems()
Function FreeItems() Frees all the items that were added to the group.
Definition: view_group.cpp:167
KIGFX::VIEW_GROUP * m_previewItems
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1499
KIGFX::VIEW * m_view
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Sets the item visibility.
Definition: view.cpp:1445
PNS::DEBUG_DECORATOR * PNS_KICAD_IFACE::GetDebugDecorator ( )
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 461 of file pns_kicad_iface.cpp.

462 {
463  return m_debugDecorator;
464 }
PNS_PCBNEW_DEBUG_DECORATOR * m_debugDecorator
PNS::RULE_RESOLVER * PNS_KICAD_IFACE::GetRuleResolver ( )
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1140 of file pns_kicad_iface.cpp.

1141 {
1142  return m_ruleResolver;
1143 }
PNS_PCBNEW_RULE_RESOLVER * m_ruleResolver
void PNS_KICAD_IFACE::HideItem ( PNS::ITEM aItem)
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1030 of file pns_kicad_iface.cpp.

References KIGFX::APPEARANCE, and PNS::ITEM::Parent().

1031 {
1032  BOARD_CONNECTED_ITEM* parent = aItem->Parent();
1033 
1034  if( parent )
1035  {
1036  if( m_view->IsVisible( parent ) )
1037  m_hiddenItems.insert( parent );
1038 
1039  m_view->SetVisible( parent, false );
1040  m_view->Update( parent, KIGFX::APPEARANCE );
1041  }
1042 }
std::unordered_set< BOARD_CONNECTED_ITEM * > m_hiddenItems
No updates are required.
Definition: view_item.h:55
Class BOARD_CONNECTED_ITEM is a base class derived from BOARD_ITEM for items that can be connected an...
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1499
KIGFX::VIEW * m_view
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Sets the item visibility.
Definition: view.cpp:1445
bool IsVisible(const VIEW_ITEM *aItem) const
Returns information if the item is visible (or not).
Definition: view.cpp:1485
BOARD_CONNECTED_ITEM * Parent() const
Function Parent()
Definition: pns_item.h:159
void PNS_KICAD_IFACE::RemoveItem ( PNS::ITEM aItem)
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1045 of file pns_kicad_iface.cpp.

References PNS::ITEM::Parent().

1046 {
1047  BOARD_CONNECTED_ITEM* parent = aItem->Parent();
1048 
1049  if( parent )
1050  {
1051  m_commit->Remove( parent );
1052  }
1053 }
Class BOARD_CONNECTED_ITEM is a base class derived from BOARD_ITEM for items that can be connected an...
std::unique_ptr< BOARD_COMMIT > m_commit
BOARD_CONNECTED_ITEM * Parent() const
Function Parent()
Definition: pns_item.h:159
void PNS_KICAD_IFACE::SetBoard ( BOARD aBoard)

Definition at line 913 of file pns_kicad_iface.cpp.

References PNS_PCBNEW_RULE_RESOLVER::m_board.

Referenced by PNS::TOOL_BASE::Reset().

914 {
915  m_board = aBoard;
916  wxLogTrace( "PNS", "m_board = %p", m_board );
917 }
void PNS_KICAD_IFACE::SetDisplayOptions ( PCB_DISPLAY_OPTIONS aDispOptions)

Definition at line 1158 of file pns_kicad_iface.cpp.

Referenced by PNS::TOOL_BASE::Reset().

1159 {
1160  m_dispOptions = aDispOptions;
1161 }
PCB_DISPLAY_OPTIONS * m_dispOptions
void PNS_KICAD_IFACE::SetHostTool ( PCB_TOOL aTool)

Definition at line 1152 of file pns_kicad_iface.cpp.

Referenced by PNS::TOOL_BASE::Reset().

1153 {
1154  m_tool = aTool;
1155  m_commit.reset( new BOARD_COMMIT( m_tool ) );
1156 }
std::unique_ptr< BOARD_COMMIT > m_commit
PCB_TOOL * m_tool
void PNS_KICAD_IFACE::SetRouter ( PNS::ROUTER aRouter)
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1146 of file pns_kicad_iface.cpp.

References PNS_PCBNEW_RULE_RESOLVER::m_router.

1147 {
1148  m_router = aRouter;
1149 }
PNS::ROUTER * m_router
void PNS_KICAD_IFACE::SetView ( KIGFX::VIEW aView)

Definition at line 1113 of file pns_kicad_iface.cpp.

References LAYER_GP_OVERLAY.

Referenced by PNS::TOOL_BASE::Reset().

1114 {
1115  wxLogTrace( "PNS", "SetView %p", aView );
1116 
1117  if( m_previewItems )
1118  {
1120  delete m_previewItems;
1121  }
1122 
1123  m_view = aView;
1127 
1128  delete m_debugDecorator;
1131 }
PNS_PCBNEW_DEBUG_DECORATOR * m_debugDecorator
void FreeItems()
Function FreeItems() Frees all the items that were added to the group.
Definition: view_group.cpp:167
general purpose overlay
KIGFX::VIEW_GROUP * m_previewItems
virtual void SetLayer(int aLayer)
Function SetLayer() Sets layer used to draw the group.
Definition: view_group.h:115
KIGFX::VIEW * m_view
void SetView(KIGFX::VIEW *aView)
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:334
bool PNS_KICAD_IFACE::syncGraphicalItem ( PNS::NODE aWorld,
DRAWSEGMENT aItem 
)
private

Definition at line 845 of file pns_kicad_iface.cpp.

References PNS::NODE::Add(), B_Cu, SHAPE_ARC::ConvertToPolyline(), Edge_Cuts, F_Cu, DRAWSEGMENT::GetAngle(), DRAWSEGMENT::GetArcStart(), DRAWSEGMENT::GetCenter(), DRAWSEGMENT::GetEnd(), BOARD_ITEM::GetLayer(), DRAWSEGMENT::GetShape(), DRAWSEGMENT::GetStart(), DRAWSEGMENT::GetWidth(), i, S_ARC, S_CIRCLE, and S_SEGMENT.

846 {
847  std::vector<SHAPE_SEGMENT*> segs;
848 
849  if( aItem->GetLayer() != Edge_Cuts )
850  return false;
851 
852  switch( aItem->GetShape() )
853  {
854  case S_ARC:
855  {
856  SHAPE_ARC arc( aItem->GetCenter(), aItem->GetArcStart(), (double) aItem->GetAngle() / 10.0 );
857 
858  auto l = arc.ConvertToPolyline();
859 
860  for( int i = 0; i < l.SegmentCount(); i++ )
861  {
862  SHAPE_SEGMENT *seg = new SHAPE_SEGMENT( l.CSegment(i), aItem->GetWidth() );
863  segs.push_back( seg );
864  }
865 
866  break;
867  }
868 
869  case S_SEGMENT:
870  {
871  SHAPE_SEGMENT *seg = new SHAPE_SEGMENT( aItem->GetStart(), aItem->GetEnd(), aItem->GetWidth() );
872  segs.push_back( seg );
873 
874  break;
875  }
876 
877  case S_CIRCLE:
878  {
879  // SHAPE_CIRCLE has no ConvertToPolyline() method, so use a 360.0 SHAPE_ARC
880  SHAPE_ARC circle( aItem->GetCenter(), aItem->GetEnd(), 360.0 );
881 
882  auto l = circle.ConvertToPolyline();
883 
884  for( int i = 0; i < l.SegmentCount(); i++ )
885  {
886  SHAPE_SEGMENT *seg = new SHAPE_SEGMENT( l.CSegment(i), aItem->GetWidth() );
887  segs.push_back( seg );
888  }
889 
890  break;
891  }
892 
893  default:
894  break;
895  }
896 
897  for( auto seg : segs )
898  {
899  std::unique_ptr< PNS::SOLID > solid( new PNS::SOLID );
900 
901  solid->SetLayers( LAYER_RANGE( F_Cu, B_Cu ) );
902  solid->SetNet( -1 );
903  solid->SetParent( nullptr );
904  solid->SetShape( seg );
905  solid->SetRoutable( false );
906 
907  aWorld->Add( std::move( solid ) );
908  }
909 
910  return true;
911 }
const wxPoint GetCenter() const override
Function GetCenter()
virtual PCB_LAYER_ID GetLayer() const
Function GetLayer returns the primary layer this item is on.
usual segment : line with rounded ends
const wxPoint & GetArcStart() const
STROKE_T GetShape() const
const wxPoint & GetEnd() const
Function GetEnd returns the ending point of the graphic.
Arcs (with rounded ends)
const SHAPE_LINE_CHAIN ConvertToPolyline(double aAccuracy=0.02f) const
Definition: shape_arc.cpp:209
double GetAngle() const
size_t i
Definition: json11.cpp:597
int GetWidth() const
const wxPoint & GetStart() const
Function GetStart returns the starting point of the graphic.
bool Add(std::unique_ptr< SEGMENT > aSegment, bool aAllowRedundant=false)
Function Add()
Definition: pns_node.cpp:594
Class LAYER_RANGE.
Definition: pns_layerset.h:32
std::unique_ptr< PNS::SOLID > PNS_KICAD_IFACE::syncPad ( D_PAD aPad)
private

Definition at line 493 of file pns_kicad_iface.cpp.

References LSET::AllCuMask(), SHAPE_SIMPLE::Append(), SHAPE_POLY_SET::Append(), D_PAD::BuildPadPolygon(), D_PAD::BuildPadShapePolygon(), D_PAD::BuildSegmentFromOvalShape(), SHAPE_POLY_SET::CIterate(), D_PAD::CustomShapeAsPolygonToBoardPosition(), delta, D_PAD::GetAttribute(), D_PAD::GetCustomShapeAsPolygon(), D_PAD::GetLayerSet(), BOARD_CONNECTED_ITEM::GetNetCode(), D_PAD::GetOffset(), D_PAD::GetOrientation(), D_PAD::GetShape(), D_PAD::GetSize(), i, MAX_CU_LAYERS, min, SHAPE_POLY_SET::Outline(), PAD_ATTRIB_CONN, PAD_ATTRIB_HOLE_NOT_PLATED, PAD_ATTRIB_SMD, PAD_ATTRIB_STANDARD, PAD_SHAPE_CIRCLE, PAD_SHAPE_CUSTOM, PAD_SHAPE_OVAL, PAD_SHAPE_RECT, PAD_SHAPE_ROUNDRECT, PAD_SHAPE_TRAPEZOID, SHAPE_LINE_CHAIN::Point(), SHAPE_LINE_CHAIN::PointCount(), RotatePoint(), D_PAD::ShapePos(), wxPoint::x, VECTOR2< T >::x, wxPoint::y, and VECTOR2< T >::y.

494 {
495  LAYER_RANGE layers( 0, MAX_CU_LAYERS - 1 );
496 
497  // ignore non-copper pads
498  if( ( aPad->GetLayerSet() & LSET::AllCuMask()).none() )
499  return NULL;
500 
501  switch( aPad->GetAttribute() )
502  {
503  case PAD_ATTRIB_STANDARD:
504  break;
505 
506  case PAD_ATTRIB_SMD:
508  case PAD_ATTRIB_CONN:
509  {
510  LSET lmsk = aPad->GetLayerSet();
511  bool is_copper = false;
512 
513  for( int i = 0; i < MAX_CU_LAYERS; i++ )
514  {
515  if( lmsk[i] )
516  {
517  is_copper = true;
518 
520  layers = LAYER_RANGE( i );
521 
522  break;
523  }
524  }
525 
526  if( !is_copper )
527  return NULL;
528  }
529  break;
530 
531  default:
532  wxLogTrace( "PNS", "unsupported pad type 0x%x", aPad->GetAttribute() );
533  return NULL;
534  }
535 
536  std::unique_ptr< PNS::SOLID > solid( new PNS::SOLID );
537 
538  solid->SetLayers( layers );
539  solid->SetNet( aPad->GetNetCode() );
540  solid->SetParent( aPad );
541 
542  wxPoint wx_c = aPad->ShapePos();
543  wxSize wx_sz = aPad->GetSize();
544  wxPoint offset = aPad->GetOffset();
545 
546  VECTOR2I c( wx_c.x, wx_c.y );
547  VECTOR2I sz( wx_sz.x, wx_sz.y );
548 
549  RotatePoint( &offset, aPad->GetOrientation() );
550 
551  solid->SetPos( VECTOR2I( c.x - offset.x, c.y - offset.y ) );
552  solid->SetOffset( VECTOR2I( offset.x, offset.y ) );
553 
554  double orient = aPad->GetOrientation() / 10.0;
555 
556  if( aPad->GetShape() == PAD_SHAPE_CIRCLE )
557  {
558  solid->SetShape( new SHAPE_CIRCLE( c, sz.x / 2 ) );
559  }
560  else if( aPad->GetShape() == PAD_SHAPE_CUSTOM )
561  {
562  SHAPE_POLY_SET outline;
563  outline.Append( aPad->GetCustomShapeAsPolygon() );
564  aPad->CustomShapeAsPolygonToBoardPosition( &outline, wx_c, aPad->GetOrientation() );
565 
566  SHAPE_SIMPLE* shape = new SHAPE_SIMPLE();
567 
568  for( auto iter = outline.CIterate( 0 ); iter; iter++ )
569  shape->Append( *iter );
570 
571  solid->SetShape( shape );
572  }
573  else
574  {
575  if( orient == 0.0 || orient == 90.0 || orient == 180.0 || orient == 270.0 )
576  {
577  if( orient == 90.0 || orient == 270.0 )
578  sz = VECTOR2I( sz.y, sz.x );
579 
580  switch( aPad->GetShape() )
581  {
582  case PAD_SHAPE_OVAL:
583  if( sz.x == sz.y )
584  solid->SetShape( new SHAPE_CIRCLE( c, sz.x / 2 ) );
585  else
586  {
587  VECTOR2I delta;
588 
589  if( sz.x > sz.y )
590  delta = VECTOR2I( ( sz.x - sz.y ) / 2, 0 );
591  else
592  delta = VECTOR2I( 0, ( sz.y - sz.x ) / 2 );
593 
594  SHAPE_SEGMENT* shape = new SHAPE_SEGMENT( c - delta, c + delta,
595  std::min( sz.x, sz.y ) );
596  solid->SetShape( shape );
597  }
598  break;
599 
600  case PAD_SHAPE_RECT:
601  solid->SetShape( new SHAPE_RECT( c - sz / 2, sz.x, sz.y ) );
602  break;
603 
604  case PAD_SHAPE_TRAPEZOID:
605  {
606  wxPoint coords[4];
607  aPad->BuildPadPolygon( coords, wxSize( 0, 0 ), aPad->GetOrientation() );
608  SHAPE_SIMPLE* shape = new SHAPE_SIMPLE();
609 
610  for( int ii = 0; ii < 4; ii++ )
611  {
612  shape->Append( wx_c + coords[ii] );
613  }
614 
615  solid->SetShape( shape );
616  break;
617  }
618 
619  case PAD_SHAPE_ROUNDRECT:
620  {
621  SHAPE_POLY_SET outline;
622  const int segmentToCircleCount = 64;
623 
624  aPad->BuildPadShapePolygon( outline, wxSize( 0, 0 ), segmentToCircleCount, 1.0 );
625 
626  // TransformRoundRectToPolygon creates only one convex polygon
627  SHAPE_LINE_CHAIN& poly = outline.Outline( 0 );
628  SHAPE_SIMPLE* shape = new SHAPE_SIMPLE();
629 
630  for( int ii = 0; ii < poly.PointCount(); ++ii )
631  {
632  shape->Append( wxPoint( poly.Point( ii ).x, poly.Point( ii ).y ) );
633  }
634 
635  solid->SetShape( shape );
636  }
637  break;
638 
639  default:
640  wxLogTrace( "PNS", "unsupported pad shape" );
641  return nullptr;
642  }
643  }
644  else
645  {
646  switch( aPad->GetShape() )
647  {
648  // PAD_SHAPE_CIRCLE and PAD_SHAPE_CUSTOM already handled above
649 
650  case PAD_SHAPE_OVAL:
651  if( sz.x == sz.y )
652  solid->SetShape( new SHAPE_CIRCLE( c, sz.x / 2 ) );
653  else
654  {
655  wxPoint start;
656  wxPoint end;
657  wxPoint corner;
658 
659  SHAPE_SIMPLE* shape = new SHAPE_SIMPLE();
660 
661  int w = aPad->BuildSegmentFromOvalShape( start, end, 0.0, wxSize( 0, 0 ) );
662 
663  if( start.y == 0 )
664  corner = wxPoint( start.x, -( w / 2 ) );
665  else
666  corner = wxPoint( w / 2, start.y );
667 
668  RotatePoint( &start, aPad->GetOrientation() );
669  RotatePoint( &corner, aPad->GetOrientation() );
670  shape->Append( wx_c + corner );
671 
672  for( int rot = 100; rot <= 1800; rot += 100 )
673  {
674  wxPoint p( corner );
675  RotatePoint( &p, start, rot );
676  shape->Append( wx_c + p );
677  }
678 
679  if( end.y == 0 )
680  corner = wxPoint( end.x, w / 2 );
681  else
682  corner = wxPoint( -( w / 2 ), end.y );
683 
684  RotatePoint( &end, aPad->GetOrientation() );
685  RotatePoint( &corner, aPad->GetOrientation() );
686  shape->Append( wx_c + corner );
687 
688  for( int rot = 100; rot <= 1800; rot += 100 )
689  {
690  wxPoint p( corner );
691  RotatePoint( &p, end, rot );
692  shape->Append( wx_c + p );
693  }
694 
695  solid->SetShape( shape );
696  }
697  break;
698 
699  case PAD_SHAPE_RECT:
700  case PAD_SHAPE_TRAPEZOID:
701  {
702  wxPoint coords[4];
703  aPad->BuildPadPolygon( coords, wxSize( 0, 0 ), aPad->GetOrientation() );
704 
705  SHAPE_SIMPLE* shape = new SHAPE_SIMPLE();
706  for( int ii = 0; ii < 4; ii++ )
707  {
708  shape->Append( wx_c + coords[ii] );
709  }
710 
711  solid->SetShape( shape );
712  break;
713  }
714 
715  case PAD_SHAPE_ROUNDRECT:
716  {
717  SHAPE_POLY_SET outline;
718  const int segmentToCircleCount = 32;
719  aPad->BuildPadShapePolygon( outline, wxSize( 0, 0 ),
720  segmentToCircleCount, 1.0 );
721 
722  // TransformRoundRectToPolygon creates only one convex polygon
723  SHAPE_LINE_CHAIN& poly = outline.Outline( 0 );
724  SHAPE_SIMPLE* shape = new SHAPE_SIMPLE();
725 
726  for( int ii = 0; ii < poly.PointCount(); ++ii )
727  {
728  shape->Append( wxPoint( poly.Point( ii ).x, poly.Point( ii ).y ) );
729  }
730 
731  solid->SetShape( shape );
732  break;
733  }
734 
735  default:
736  wxLogTrace( "PNS", "unsupported pad shape" );
737  return nullptr;
738  }
739  }
740  }
741  return solid;
742 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:673
Class SHAPE_SIMPLE.
Definition: shape_simple.h:42
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:405
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:65
const SHAPE_POLY_SET & GetCustomShapeAsPolygon() const
Accessor to the custom shape as one polygon.
Definition: class_pad.h:341
void BuildPadPolygon(wxPoint aCoord[4], wxSize aInflateValue, double aRotation) const
Function BuildPadPolygon Has meaning only for polygonal pads (trapezoid and rectangular) Build the Co...
int PointCount() const
Function PointCount()
Smd pad, appears on the solder paste layer (default)
Definition: pad_shapes.h:61
CONST_ITERATOR CIterate(int aFirst, int aLast, bool aIterateHoles=false) const
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:216
VECTOR2< int > VECTOR2I
Definition: vector2d.h:589
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
static const int delta[8][2]
Definition: solve.cpp:112
Class LSET is a set of PCB_LAYER_IDs.
void CustomShapeAsPolygonToBoardPosition(SHAPE_POLY_SET *aMergedPolygon, wxPoint aPosition, double aRotation) const
When created, the corners coordinates are relative to the pad position, orientation 0...
Class SHAPE_POLY_SET.
SHAPE_LINE_CHAIN & Outline(int aIndex)
Returns the reference to aIndex-th outline in the set
LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_pad.h:402
const wxSize & GetSize() const
Definition: class_pad.h:269
Like smd, does not appear on the solder paste layer (default) note also has a special attribute in Ge...
Definition: pad_shapes.h:62
int GetNetCode() const
Function GetNetCode.
int BuildSegmentFromOvalShape(wxPoint &aSegStart, wxPoint &aSegEnd, double aRotation, const wxSize &aMargin) const
Function BuildSegmentFromOvalShape Has meaning only for OVAL (and ROUND) pads Build an equivalent seg...
Class SHAPE_LINE_CHAIN.
size_t i
Definition: json11.cpp:597
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees, but soon degrees.
Definition: class_pad.h:382
Usual pad.
Definition: pad_shapes.h:60
void BuildPadShapePolygon(SHAPE_POLY_SET &aCornerBuffer, wxSize aInflateValue, int aSegmentsPerCircle, double aCorrectionFactor) const
Function BuildPadShapePolygon Build the Corner list of the polygonal shape, depending on shape...
wxPoint ShapePos() const
Definition: class_pad.cpp:500
VECTOR2I & Point(int aIndex)
Function Point()
void Append(int aX, int aY)
Function Append()
Definition: shape_simple.h:151
const wxPoint & GetOffset() const
Definition: class_pad.h:278
Class LAYER_RANGE.
Definition: pns_layerset.h:32
#define min(a, b)
Definition: auxiliary.h:85
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline) ...
std::unique_ptr< PNS::SEGMENT > PNS_KICAD_IFACE::syncTrack ( TRACK aTrack)
private

Definition at line 745 of file pns_kicad_iface.cpp.

References TRACK::GetEnd(), BOARD_ITEM::GetLayer(), BOARD_CONNECTED_ITEM::GetNetCode(), TRACK::GetStart(), TRACK::GetWidth(), TRACK::IsLocked(), and PNS::MK_LOCKED.

746 {
747  std::unique_ptr< PNS::SEGMENT > segment(
748  new PNS::SEGMENT( SEG( aTrack->GetStart(), aTrack->GetEnd() ), aTrack->GetNetCode() )
749  );
750 
751  segment->SetWidth( aTrack->GetWidth() );
752  segment->SetLayers( LAYER_RANGE( aTrack->GetLayer() ) );
753  segment->SetParent( aTrack );
754 
755  if( aTrack->IsLocked() )
756  segment->Mark( PNS::MK_LOCKED );
757 
758  return segment;
759 }
bool IsLocked() const override
Function IsLocked.
Definition: class_track.h:137
virtual PCB_LAYER_ID GetLayer() const
Function GetLayer returns the primary layer this item is on.
const wxPoint & GetEnd() const
Definition: class_track.h:119
const wxPoint & GetStart() const
Definition: class_track.h:122
int GetNetCode() const
Function GetNetCode.
Definition: seg.h:36
int GetWidth() const
Definition: class_track.h:116
Class LAYER_RANGE.
Definition: pns_layerset.h:32
std::unique_ptr< PNS::VIA > PNS_KICAD_IFACE::syncVia ( VIA aVia)
private

Definition at line 762 of file pns_kicad_iface.cpp.

References VIA::GetDrillValue(), BOARD_CONNECTED_ITEM::GetNetCode(), VIA::GetPosition(), VIA::GetViaType(), TRACK::GetWidth(), TRACK::IsLocked(), VIA::LayerPair(), and PNS::MK_LOCKED.

763 {
764  PCB_LAYER_ID top, bottom;
765  aVia->LayerPair( &top, &bottom );
766  std::unique_ptr<PNS::VIA> via( new PNS::VIA(
767  aVia->GetPosition(),
768  LAYER_RANGE( top, bottom ),
769  aVia->GetWidth(),
770  aVia->GetDrillValue(),
771  aVia->GetNetCode(),
772  aVia->GetViaType() )
773  );
774 
775  via->SetParent( aVia );
776 
777  if( aVia->IsLocked() )
778  via->Mark( PNS::MK_LOCKED );
779 
780  return via;
781 }
bool IsLocked() const override
Function IsLocked.
Definition: class_track.h:137
PCB_LAYER_ID
A quick note on layer IDs:
VIATYPE_T GetViaType() const
Definition: class_track.h:460
const wxPoint GetPosition() const override
Definition: class_track.h:432
void LayerPair(PCB_LAYER_ID *top_layer, PCB_LAYER_ID *bottom_layer) const
Function LayerPair Return the 2 layers used by the via (the via actually uses all layers between thes...
int GetNetCode() const
Function GetNetCode.
int GetDrillValue() const
Function GetDrillValue "calculates" the drill value for vias (m-Drill if > 0, or default drill value ...
int GetWidth() const
Definition: class_track.h:116
Class LAYER_RANGE.
Definition: pns_layerset.h:32
void PNS_KICAD_IFACE::SyncWorld ( PNS::NODE aWorld)
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 920 of file pns_kicad_iface.cpp.

References PNS::NODE::Add(), BOARD::Drawings(), BOARD_DESIGN_SETTINGS::GetBiggestClearanceValue(), BOARD::GetDesignSettings(), PNS_PCBNEW_RULE_RESOLVER::m_board, PNS_PCBNEW_RULE_RESOLVER::m_router, max, BOARD::Modules(), PCB_LINE_T, PCB_TRACE_T, PCB_VIA_T, PNS_PCBNEW_RULE_RESOLVER::PNS_PCBNEW_RULE_RESOLVER(), PNS::NODE::SetMaxClearance(), PNS::NODE::SetRuleResolver(), BOARD::Tracks(), and BOARD::Zones().

921 {
922  int worstPadClearance = 0;
923 
924  if( !m_board )
925  {
926  wxLogTrace( "PNS", "No board attached, aborting sync." );
927  return;
928  }
929 
930  for( auto gitem : m_board->Drawings() )
931  {
932  if ( gitem->Type() == PCB_LINE_T )
933  {
934  syncGraphicalItem( aWorld, static_cast<DRAWSEGMENT*>( gitem ) );
935  }
936  }
937 
938  for( auto zone : m_board->Zones() )
939  {
940  syncZone( aWorld, zone );
941  }
942 
943  for( auto module : m_board->Modules() )
944  {
945  for( auto pad : module->Pads() )
946  {
947  std::unique_ptr< PNS::SOLID > solid = syncPad( pad );
948 
949  if( solid )
950  aWorld->Add( std::move( solid ) );
951 
952 
953  worstPadClearance = std::max( worstPadClearance, pad->GetLocalClearance() );
954  }
955  }
956 
957  for( auto t : m_board->Tracks() )
958  {
959  KICAD_T type = t->Type();
960 
961  if( type == PCB_TRACE_T ) {
962  std::unique_ptr< PNS::SEGMENT > segment = syncTrack( t );
963  if( segment ) {
964  aWorld->Add( std::move( segment ) );
965  }
966  } else if( type == PCB_VIA_T ) {
967  std::unique_ptr< PNS::VIA > via = syncVia( static_cast<VIA*>( t ) );
968  if( via ) {
969  aWorld->Add( std::move( via ) );
970  }
971  }
972  }
973 
974  int worstRuleClearance = m_board->GetDesignSettings().GetBiggestClearanceValue();
975 
976  delete m_ruleResolver;
978 
979  aWorld->SetRuleResolver( m_ruleResolver );
980  aWorld->SetMaxClearance( 4 * std::max(worstPadClearance, worstRuleClearance ) );
981 }
int GetBiggestClearanceValue()
Function GetBiggestClearanceValue.
std::unique_ptr< PNS::SOLID > syncPad(D_PAD *aPad)
std::unique_ptr< PNS::SEGMENT > syncTrack(TRACK *aTrack)
void SetRuleResolver(RULE_RESOLVER *aFunc)
Assigns a clerance resolution function object
Definition: pns_node.h:162
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
void SetMaxClearance(int aClearance)
Sets the worst-case clerance between any pair of items
Definition: pns_node.h:156
bool syncGraphicalItem(PNS::NODE *aWorld, DRAWSEGMENT *aItem)
DLIST_ITERATOR_WRAPPER< MODULE > Modules()
Definition: class_board.h:253
PNS_PCBNEW_RULE_RESOLVER * m_ruleResolver
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:535
PNS::ROUTER * m_router
ZONE_CONTAINERS & Zones()
Definition: class_board.h:255
#define max(a, b)
Definition: auxiliary.h:86
bool syncZone(PNS::NODE *aWorld, ZONE_CONTAINER *aZone)
std::unique_ptr< PNS::VIA > syncVia(VIA *aVia)
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
DLIST_ITERATOR_WRAPPER< TRACK > Tracks()
Definition: class_board.h:252
class DRAWSEGMENT, a segment not on copper layers
Definition: typeinfo.h:91
bool Add(std::unique_ptr< SEGMENT > aSegment, bool aAllowRedundant=false)
Function Add()
Definition: pns_node.cpp:594
DLIST_ITERATOR_WRAPPER< BOARD_ITEM > Drawings()
Definition: class_board.h:254
bool PNS_KICAD_IFACE::syncZone ( PNS::NODE aWorld,
ZONE_CONTAINER aZone 
)
private

Definition at line 784 of file pns_kicad_iface.cpp.

References PNS::NODE::Add(), SHAPE_SIMPLE::Append(), B_Cu, ZONE_CONTAINER::BuildSmoothedPoly(), SHAPE_POLY_SET::CacheTriangulation(), KIDIALOG::DoNotShowCheckbox(), F_Cu, Format(), ZONE_CONTAINER::GetDoNotAllowTracks(), ZONE_CONTAINER::GetIsKeepout(), ZONE_CONTAINER::GetLayerSet(), ZONE_CONTAINER::GetPosition(), ZONE_CONTAINER::GetSelectMenuText(), i, SHAPE_POLY_SET::IsTriangulationUpToDate(), KIDIALOG::KD_WARNING, SHAPE_POLY_SET::OutlineCount(), KIDIALOG::ShowModal(), SHAPE_POLY_SET::TriangulatedPolygon(), wxPoint::x, and wxPoint::y.

785 {
786  SHAPE_POLY_SET poly;
787 
788  // TODO handle no-via restriction
789  if( !aZone->GetIsKeepout() || !aZone->GetDoNotAllowTracks() )
790  return false;
791 
792  aZone->BuildSmoothedPoly( poly );
793  poly.CacheTriangulation();
794 
795  if( !poly.IsTriangulationUpToDate() )
796  {
797  KIDIALOG dlg( nullptr, wxString::Format( _( "Malformed keep-out zone at (%d, %d)" ),
798  aZone->GetPosition().x, aZone->GetPosition().y ), KIDIALOG::KD_WARNING );
799  dlg.ShowDetailedText(
800  wxString::Format( _( "%s\nThis zone cannot be handled by the track layout tool.\n"
801  "Please verify it is not a self-intersecting polygon." ), aZone->GetSelectMenuText() ) );
802  dlg.DoNotShowCheckbox();
803  dlg.ShowModal();
804 
805  return false;
806  }
807 
808  LSET layers = aZone->GetLayerSet();
809 
810  for( int layer = F_Cu; layer <= B_Cu; layer++ )
811  {
812  if ( ! layers[layer] )
813  continue;
814 
815  for( int outline = 0; outline < poly.OutlineCount(); outline++ )
816  {
817  auto tri = poly.TriangulatedPolygon( outline );
818 
819  for( int i = 0; i < tri->GetTriangleCount(); i++)
820  {
821  VECTOR2I a, b, c;
822  tri->GetTriangle( i, a, b, c );
823  auto triShape = new SHAPE_SIMPLE;
824 
825  triShape->Append( a );
826  triShape->Append( b );
827  triShape->Append( c );
828 
829  std::unique_ptr< PNS::SOLID > solid( new PNS::SOLID );
830 
831  solid->SetLayer( layer );
832  solid->SetNet( 0 );
833  solid->SetParent( aZone );
834  solid->SetShape( triShape );
835  solid->SetRoutable( false );
836 
837  aWorld->Add( std::move( solid ) );
838  }
839  }
840  }
841 
842  return true;
843 }
Class SHAPE_SIMPLE.
Definition: shape_simple.h:42
wxString GetSelectMenuText() const override
Function GetSelectMenuText returns the text to display to be used in the selection clarification cont...
Helper class to create more flexible dialogs, including &#39;do not show again&#39; checkbox handling...
Definition: confirm.h:43
bool BuildSmoothedPoly(SHAPE_POLY_SET &aSmoothedPoly) const
Function GetSmoothedPoly returns a pointer to the corner-smoothed version of m_Poly if it exists...
bool IsTriangulationUpToDate() const
int OutlineCount() const
Returns the number of outlines in the set
const wxPoint GetPosition() const override
Function GetPosition.
Definition: class_zone.cpp:169
bool GetIsKeepout() const
Accessors to parameters used in Keepout zones:
Definition: class_zone.h:602
virtual LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_zone.cpp:230
Class LSET is a set of PCB_LAYER_IDs.
Class SHAPE_POLY_SET.
const TRIANGULATED_POLYGON * TriangulatedPolygon(int aIndex) const
bool GetDoNotAllowTracks() const
Definition: class_zone.h:605
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
size_t i
Definition: json11.cpp:597
bool Add(std::unique_ptr< SEGMENT > aSegment, bool aAllowRedundant=false)
Function Add()
Definition: pns_node.cpp:594
void Append(int aX, int aY)
Function Append()
Definition: shape_simple.h:151
void PNS_KICAD_IFACE::UpdateNet ( int  aNetCode)
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1134 of file pns_kicad_iface.cpp.

1135 {
1136  wxLogTrace( "PNS", "Update-net %d", aNetCode );
1137 }

Member Data Documentation

BOARD* PNS_KICAD_IFACE::m_board
private

Definition at line 81 of file pns_kicad_iface.h.

std::unique_ptr<BOARD_COMMIT> PNS_KICAD_IFACE::m_commit
private

Definition at line 83 of file pns_kicad_iface.h.

PNS_PCBNEW_DEBUG_DECORATOR* PNS_KICAD_IFACE::m_debugDecorator
private

Definition at line 68 of file pns_kicad_iface.h.

PCB_DISPLAY_OPTIONS* PNS_KICAD_IFACE::m_dispOptions
private

Definition at line 84 of file pns_kicad_iface.h.

std::unordered_set<BOARD_CONNECTED_ITEM*> PNS_KICAD_IFACE::m_hiddenItems
private

Definition at line 78 of file pns_kicad_iface.h.

KIGFX::VIEW_GROUP* PNS_KICAD_IFACE::m_previewItems
private

Definition at line 77 of file pns_kicad_iface.h.

PNS::ROUTER* PNS_KICAD_IFACE::m_router
private

Definition at line 80 of file pns_kicad_iface.h.

PNS_PCBNEW_RULE_RESOLVER* PNS_KICAD_IFACE::m_ruleResolver
private

Definition at line 67 of file pns_kicad_iface.h.

PCB_TOOL* PNS_KICAD_IFACE::m_tool
private

Definition at line 82 of file pns_kicad_iface.h.

KIGFX::VIEW* PNS_KICAD_IFACE::m_view
private

Definition at line 76 of file pns_kicad_iface.h.


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