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 479 of file pns_kicad_iface.cpp.

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

480 {
481  m_ruleResolver = nullptr;
482  m_board = nullptr;
483  m_tool = nullptr;
484  m_view = nullptr;
485  m_previewItems = nullptr;
486  m_router = nullptr;
487  m_debugDecorator = nullptr;
488  m_dispOptions = nullptr;
489 }
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 492 of file pns_kicad_iface.cpp.

493 {
494  delete m_ruleResolver;
495  delete m_debugDecorator;
496 
497  if( m_previewItems )
498  {
500  delete m_previewItems;
501  }
502 }
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 1078 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.

1079 {
1080  BOARD_CONNECTED_ITEM* newBI = NULL;
1081 
1082  switch( aItem->Kind() )
1083  {
1084  case PNS::ITEM::SEGMENT_T:
1085  {
1086  PNS::SEGMENT* seg = static_cast<PNS::SEGMENT*>( aItem );
1087  TRACK* track = new TRACK( m_board );
1088  const SEG& s = seg->Seg();
1089  track->SetStart( wxPoint( s.A.x, s.A.y ) );
1090  track->SetEnd( wxPoint( s.B.x, s.B.y ) );
1091  track->SetWidth( seg->Width() );
1092  track->SetLayer( ToLAYER_ID( seg->Layers().Start() ) );
1093  track->SetNetCode( seg->Net() > 0 ? seg->Net() : 0 );
1094  newBI = track;
1095  break;
1096  }
1097 
1098  case PNS::ITEM::VIA_T:
1099  {
1100  VIA* via_board = new VIA( m_board );
1101  PNS::VIA* via = static_cast<PNS::VIA*>( aItem );
1102  via_board->SetPosition( wxPoint( via->Pos().x, via->Pos().y ) );
1103  via_board->SetWidth( via->Diameter() );
1104  via_board->SetDrill( via->Drill() );
1105  via_board->SetNetCode( via->Net() > 0 ? via->Net() : 0 );
1106  via_board->SetViaType( via->ViaType() ); // MUST be before SetLayerPair()
1107  via_board->SetLayerPair( ToLAYER_ID( via->Layers().Start() ),
1108  ToLAYER_ID( via->Layers().End() ) );
1109  newBI = via_board;
1110  break;
1111  }
1112 
1113  default:
1114  break;
1115  }
1116 
1117  if( newBI )
1118  {
1119  aItem->SetParent( newBI );
1120  newBI->ClearFlags();
1121 
1122  m_commit->Add( newBI );
1123  }
1124 }
void SetViaType(VIATYPE_T aViaType)
Definition: class_track.h:456
const LAYER_RANGE & Layers() const
Function Layers()
Definition: pns_item.h:209
void SetPosition(const wxPoint &aPoint) override
Definition: class_track.h:428
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:463
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 1127 of file pns_kicad_iface.cpp.

1128 {
1129  EraseView();
1130  m_commit->Push( wxT( "Added a track" ) );
1131  m_commit.reset( new BOARD_COMMIT( m_tool ) );
1132 }
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 1024 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().

1025 {
1026  wxLogTrace( "PNS", "DisplayItem %p", aItem );
1027 
1028  ROUTER_PREVIEW_ITEM* pitem = new ROUTER_PREVIEW_ITEM( aItem, m_view );
1029 
1030  if( aColor >= 0 )
1031  pitem->SetColor( KIGFX::COLOR4D( aColor ) );
1032 
1033  if( aClearance >= 0 )
1034  {
1035  pitem->SetClearance( aClearance );
1036 
1037  if( m_dispOptions )
1038  {
1039  auto clearanceDisp = m_dispOptions->m_ShowTrackClearanceMode;
1042  && clearanceDisp != PCB_DISPLAY_OPTIONS::SHOW_CLEARANCE_NEW_TRACKS );
1043  }
1044  }
1045 
1046 
1047  m_previewItems->Add( pitem );
1049 }
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 1006 of file pns_kicad_iface.cpp.

1007 {
1008  for( auto item : m_hiddenItems )
1009  m_view->SetVisible( item, true );
1010 
1011  m_hiddenItems.clear();
1012 
1013  if( m_previewItems )
1014  {
1017  }
1018 
1019  if( m_debugDecorator )
1021 }
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 473 of file pns_kicad_iface.cpp.

474 {
475  return m_debugDecorator;
476 }
PNS_PCBNEW_DEBUG_DECORATOR * m_debugDecorator
PNS::RULE_RESOLVER * PNS_KICAD_IFACE::GetRuleResolver ( )
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1162 of file pns_kicad_iface.cpp.

1163 {
1164  return m_ruleResolver;
1165 }
PNS_PCBNEW_RULE_RESOLVER * m_ruleResolver
void PNS_KICAD_IFACE::HideItem ( PNS::ITEM aItem)
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1052 of file pns_kicad_iface.cpp.

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

1053 {
1054  BOARD_CONNECTED_ITEM* parent = aItem->Parent();
1055 
1056  if( parent )
1057  {
1058  if( m_view->IsVisible( parent ) )
1059  m_hiddenItems.insert( parent );
1060 
1061  m_view->SetVisible( parent, false );
1062  m_view->Update( parent, KIGFX::APPEARANCE );
1063  }
1064 }
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 1067 of file pns_kicad_iface.cpp.

References PNS::ITEM::Parent().

1068 {
1069  BOARD_CONNECTED_ITEM* parent = aItem->Parent();
1070 
1071  if( parent )
1072  {
1073  m_commit->Remove( parent );
1074  }
1075 }
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 935 of file pns_kicad_iface.cpp.

References PNS_PCBNEW_RULE_RESOLVER::m_board.

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

936 {
937  m_board = aBoard;
938  wxLogTrace( "PNS", "m_board = %p", m_board );
939 }
void PNS_KICAD_IFACE::SetDisplayOptions ( PCB_DISPLAY_OPTIONS aDispOptions)

Definition at line 1180 of file pns_kicad_iface.cpp.

1181 {
1182  m_dispOptions = aDispOptions;
1183 }
PCB_DISPLAY_OPTIONS * m_dispOptions
void PNS_KICAD_IFACE::SetHostTool ( PCB_TOOL aTool)

Definition at line 1174 of file pns_kicad_iface.cpp.

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

1175 {
1176  m_tool = aTool;
1177  m_commit.reset( new BOARD_COMMIT( m_tool ) );
1178 }
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 1168 of file pns_kicad_iface.cpp.

References PNS_PCBNEW_RULE_RESOLVER::m_router.

1169 {
1170  m_router = aRouter;
1171 }
PNS::ROUTER * m_router
void PNS_KICAD_IFACE::SetView ( KIGFX::VIEW aView)

Definition at line 1135 of file pns_kicad_iface.cpp.

References LAYER_GP_OVERLAY.

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

1136 {
1137  wxLogTrace( "PNS", "SetView %p", aView );
1138 
1139  if( m_previewItems )
1140  {
1142  delete m_previewItems;
1143  }
1144 
1145  m_view = aView;
1149 
1150  delete m_debugDecorator;
1153 }
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 862 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.

863 {
864  std::vector<SHAPE_SEGMENT*> segs;
865 
866  if( aItem->GetLayer() != Edge_Cuts )
867  return false;
868 
869  switch( aItem->GetShape() )
870  {
871  case S_ARC:
872  {
873  SHAPE_ARC arc( aItem->GetCenter(), aItem->GetArcStart(), (double) aItem->GetAngle() / 10.0 );
874 
875  auto l = arc.ConvertToPolyline();
876 
877  for( int i = 0; i < l.SegmentCount(); i++ )
878  {
879  SHAPE_SEGMENT *seg = new SHAPE_SEGMENT( l.CSegment(i), aItem->GetWidth() );
880  segs.push_back( seg );
881  }
882 
883  break;
884  }
885 
886  case S_SEGMENT:
887  {
888  SHAPE_SEGMENT *seg = new SHAPE_SEGMENT( aItem->GetStart(), aItem->GetEnd(), aItem->GetWidth() );
889  segs.push_back( seg );
890 
891  break;
892  }
893 
894  case S_CIRCLE:
895  {
896  // SHAPE_CIRCLE has no ConvertToPolyline() method, so use a 360.0 SHAPE_ARC
897  SHAPE_ARC circle( aItem->GetCenter(), aItem->GetEnd(), 360.0 );
898 
899  auto l = circle.ConvertToPolyline();
900 
901  for( int i = 0; i < l.SegmentCount(); i++ )
902  {
903  SHAPE_SEGMENT *seg = new SHAPE_SEGMENT( l.CSegment(i), aItem->GetWidth() );
904  segs.push_back( seg );
905  }
906 
907  break;
908  }
909 
910  default:
911  break;
912  }
913 
914  for( auto seg : segs )
915  {
916  for( int layer = F_Cu; layer <= B_Cu; layer++ )
917  {
918  std::unique_ptr< PNS::SOLID > solid( new PNS::SOLID );
919 
920  solid->SetLayer( layer );
921  solid->SetNet( -1 );
922  solid->SetParent( nullptr );
923  solid->SetShape( seg->Clone() );
924  solid->SetRoutable( false );
925 
926  aWorld->Add( std::move( solid ) );
927  }
928 
929  delete seg;
930  }
931 
932  return true;
933 }
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:207
double GetAngle() const
SHAPE * Clone() const override
Function Clone()
Definition: shape_segment.h:45
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
std::unique_ptr< PNS::SOLID > PNS_KICAD_IFACE::syncPad ( D_PAD aPad)
private

Definition at line 505 of file pns_kicad_iface.cpp.

References LSET::AllCuMask(), SHAPE_CONVEX::Append(), SHAPE_POLY_SET::Append(), BuildConvexHull(), D_PAD::BuildPadPolygon(), D_PAD::BuildPadShapePolygon(), D_PAD::BuildSegmentFromOvalShape(), 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.

506 {
507  LAYER_RANGE layers( 0, MAX_CU_LAYERS - 1 );
508 
509  // ignore non-copper pads
510  if( ( aPad->GetLayerSet() & LSET::AllCuMask()).none() )
511  return NULL;
512 
513  switch( aPad->GetAttribute() )
514  {
515  case PAD_ATTRIB_STANDARD:
516  break;
517 
518  case PAD_ATTRIB_SMD:
520  case PAD_ATTRIB_CONN:
521  {
522  LSET lmsk = aPad->GetLayerSet();
523  bool is_copper = false;
524 
525  for( int i = 0; i < MAX_CU_LAYERS; i++ )
526  {
527  if( lmsk[i] )
528  {
529  is_copper = true;
530 
532  layers = LAYER_RANGE( i );
533 
534  break;
535  }
536  }
537 
538  if( !is_copper )
539  return NULL;
540  }
541  break;
542 
543  default:
544  wxLogTrace( "PNS", "unsupported pad type 0x%x", aPad->GetAttribute() );
545  return NULL;
546  }
547 
548  std::unique_ptr< PNS::SOLID > solid( new PNS::SOLID );
549 
550  solid->SetLayers( layers );
551  solid->SetNet( aPad->GetNetCode() );
552  solid->SetParent( aPad );
553 
554  wxPoint wx_c = aPad->ShapePos();
555  wxSize wx_sz = aPad->GetSize();
556  wxPoint offset = aPad->GetOffset();
557 
558  VECTOR2I c( wx_c.x, wx_c.y );
559  VECTOR2I sz( wx_sz.x, wx_sz.y );
560 
561  RotatePoint( &offset, aPad->GetOrientation() );
562 
563  solid->SetPos( VECTOR2I( c.x - offset.x, c.y - offset.y ) );
564  solid->SetOffset( VECTOR2I( offset.x, offset.y ) );
565 
566  double orient = aPad->GetOrientation() / 10.0;
567 
568  if( aPad->GetShape() == PAD_SHAPE_CIRCLE )
569  {
570  solid->SetShape( new SHAPE_CIRCLE( c, sz.x / 2 ) );
571  }
572  else if( aPad->GetShape() == PAD_SHAPE_CUSTOM )
573  {
574  SHAPE_POLY_SET outline;
575  outline.Append( aPad->GetCustomShapeAsPolygon() );
576  aPad->CustomShapeAsPolygonToBoardPosition( &outline, wx_c, aPad->GetOrientation() );
577 
578  SHAPE_CONVEX* shape = new SHAPE_CONVEX();
579 
580  // We use the convex hull of the pad shape, because PnS knows
581  // only convex shapes.
582  std::vector<wxPoint> convex_hull;
583  BuildConvexHull( convex_hull, outline );
584 
585  for( unsigned ii = 0; ii < convex_hull.size(); ii++ )
586  shape->Append( convex_hull[ii] );
587 
588  solid->SetShape( shape );
589  }
590  else
591  {
592  if( orient == 0.0 || orient == 90.0 || orient == 180.0 || orient == 270.0 )
593  {
594  if( orient == 90.0 || orient == 270.0 )
595  sz = VECTOR2I( sz.y, sz.x );
596 
597  switch( aPad->GetShape() )
598  {
599  case PAD_SHAPE_OVAL:
600  if( sz.x == sz.y )
601  solid->SetShape( new SHAPE_CIRCLE( c, sz.x / 2 ) );
602  else
603  {
604  VECTOR2I delta;
605 
606  if( sz.x > sz.y )
607  delta = VECTOR2I( ( sz.x - sz.y ) / 2, 0 );
608  else
609  delta = VECTOR2I( 0, ( sz.y - sz.x ) / 2 );
610 
611  SHAPE_SEGMENT* shape = new SHAPE_SEGMENT( c - delta, c + delta,
612  std::min( sz.x, sz.y ) );
613  solid->SetShape( shape );
614  }
615  break;
616 
617  case PAD_SHAPE_RECT:
618  solid->SetShape( new SHAPE_RECT( c - sz / 2, sz.x, sz.y ) );
619  break;
620 
621  case PAD_SHAPE_TRAPEZOID:
622  {
623  wxPoint coords[4];
624  aPad->BuildPadPolygon( coords, wxSize( 0, 0 ), aPad->GetOrientation() );
625  SHAPE_CONVEX* shape = new SHAPE_CONVEX();
626 
627  for( int ii = 0; ii < 4; ii++ )
628  {
629  shape->Append( wx_c + coords[ii] );
630  }
631 
632  solid->SetShape( shape );
633  break;
634  }
635 
636  case PAD_SHAPE_ROUNDRECT:
637  {
638  SHAPE_POLY_SET outline;
639  const int segmentToCircleCount = 64;
640 
641  aPad->BuildPadShapePolygon( outline, wxSize( 0, 0 ), segmentToCircleCount, 1.0 );
642 
643  // TransformRoundRectToPolygon creates only one convex polygon
644  SHAPE_LINE_CHAIN& poly = outline.Outline( 0 );
645  SHAPE_CONVEX* shape = new SHAPE_CONVEX();
646 
647  for( int ii = 0; ii < poly.PointCount(); ++ii )
648  {
649  shape->Append( wxPoint( poly.Point( ii ).x, poly.Point( ii ).y ) );
650  }
651 
652  solid->SetShape( shape );
653  }
654  break;
655 
656  default:
657  wxLogTrace( "PNS", "unsupported pad shape" );
658  return nullptr;
659  }
660  }
661  else
662  {
663  switch( aPad->GetShape() )
664  {
665  // PAD_SHAPE_CIRCLE and PAD_SHAPE_CUSTOM already handled above
666 
667  case PAD_SHAPE_OVAL:
668  if( sz.x == sz.y )
669  solid->SetShape( new SHAPE_CIRCLE( c, sz.x / 2 ) );
670  else
671  {
672  wxPoint start;
673  wxPoint end;
674  wxPoint corner;
675 
676  SHAPE_CONVEX* shape = new SHAPE_CONVEX();
677 
678  int w = aPad->BuildSegmentFromOvalShape( start, end, 0.0, wxSize( 0, 0 ) );
679 
680  if( start.y == 0 )
681  corner = wxPoint( start.x, -( w / 2 ) );
682  else
683  corner = wxPoint( w / 2, start.y );
684 
685  RotatePoint( &start, aPad->GetOrientation() );
686  RotatePoint( &corner, aPad->GetOrientation() );
687  shape->Append( wx_c + corner );
688 
689  for( int rot = 100; rot <= 1800; rot += 100 )
690  {
691  wxPoint p( corner );
692  RotatePoint( &p, start, rot );
693  shape->Append( wx_c + p );
694  }
695 
696  if( end.y == 0 )
697  corner = wxPoint( end.x, w / 2 );
698  else
699  corner = wxPoint( -( w / 2 ), end.y );
700 
701  RotatePoint( &end, aPad->GetOrientation() );
702  RotatePoint( &corner, aPad->GetOrientation() );
703  shape->Append( wx_c + corner );
704 
705  for( int rot = 100; rot <= 1800; rot += 100 )
706  {
707  wxPoint p( corner );
708  RotatePoint( &p, end, rot );
709  shape->Append( wx_c + p );
710  }
711 
712  solid->SetShape( shape );
713  }
714  break;
715 
716  case PAD_SHAPE_RECT:
717  case PAD_SHAPE_TRAPEZOID:
718  {
719  wxPoint coords[4];
720  aPad->BuildPadPolygon( coords, wxSize( 0, 0 ), aPad->GetOrientation() );
721 
722  SHAPE_CONVEX* shape = new SHAPE_CONVEX();
723  for( int ii = 0; ii < 4; ii++ )
724  {
725  shape->Append( wx_c + coords[ii] );
726  }
727 
728  solid->SetShape( shape );
729  break;
730  }
731 
732  case PAD_SHAPE_ROUNDRECT:
733  {
734  SHAPE_POLY_SET outline;
735  const int segmentToCircleCount = 32;
736  aPad->BuildPadShapePolygon( outline, wxSize( 0, 0 ),
737  segmentToCircleCount, 1.0 );
738 
739  // TransformRoundRectToPolygon creates only one convex polygon
740  SHAPE_LINE_CHAIN& poly = outline.Outline( 0 );
741  SHAPE_CONVEX* shape = new SHAPE_CONVEX();
742 
743  for( int ii = 0; ii < poly.PointCount(); ++ii )
744  {
745  shape->Append( wxPoint( poly.Point( ii ).x, poly.Point( ii ).y ) );
746  }
747 
748  solid->SetShape( shape );
749  break;
750  }
751 
752  default:
753  wxLogTrace( "PNS", "unsupported pad shape" );
754  return nullptr;
755  }
756  }
757  }
758  return solid;
759 }
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
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
Class SHAPE_CONVEX.
Definition: shape_convex.h:42
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:216
VECTOR2< int > VECTOR2I
Definition: vector2d.h:589
void BuildConvexHull(std::vector< wxPoint > &aResult, const std::vector< wxPoint > &aPoly)
Calculate the convex hull of a list of points in counter-clockwise order.
Definition: convex_hull.cpp:87
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
static const int delta[8][2]
Definition: solve.cpp:112
void Append(int aX, int aY)
Function Append()
Definition: shape_convex.h:151
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()
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 762 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.

763 {
764  std::unique_ptr< PNS::SEGMENT > segment(
765  new PNS::SEGMENT( SEG( aTrack->GetStart(), aTrack->GetEnd() ), aTrack->GetNetCode() )
766  );
767 
768  segment->SetWidth( aTrack->GetWidth() );
769  segment->SetLayers( LAYER_RANGE( aTrack->GetLayer() ) );
770  segment->SetParent( aTrack );
771 
772  if( aTrack->IsLocked() )
773  segment->Mark( PNS::MK_LOCKED );
774 
775  return segment;
776 }
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 779 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.

780 {
781  PCB_LAYER_ID top, bottom;
782  aVia->LayerPair( &top, &bottom );
783  std::unique_ptr<PNS::VIA> via( new PNS::VIA(
784  aVia->GetPosition(),
785  LAYER_RANGE( top, bottom ),
786  aVia->GetWidth(),
787  aVia->GetDrillValue(),
788  aVia->GetNetCode(),
789  aVia->GetViaType() )
790  );
791 
792  via->SetParent( aVia );
793 
794  if( aVia->IsLocked() )
795  via->Mark( PNS::MK_LOCKED );
796 
797  return via;
798 }
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:455
const wxPoint GetPosition() const override
Definition: class_track.h:427
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 942 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().

943 {
944  int worstPadClearance = 0;
945 
946  if( !m_board )
947  {
948  wxLogTrace( "PNS", "No board attached, aborting sync." );
949  return;
950  }
951 
952  for( auto gitem : m_board->Drawings() )
953  {
954  if ( gitem->Type() == PCB_LINE_T )
955  {
956  syncGraphicalItem( aWorld, static_cast<DRAWSEGMENT*>( gitem ) );
957  }
958  }
959 
960  for( auto zone : m_board->Zones() )
961  {
962  syncZone( aWorld, zone );
963  }
964 
965  for( auto module : m_board->Modules() )
966  {
967  for( auto pad : module->Pads() )
968  {
969  std::unique_ptr< PNS::SOLID > solid = syncPad( pad );
970 
971  if( solid )
972  aWorld->Add( std::move( solid ) );
973 
974 
975  worstPadClearance = std::max( worstPadClearance, pad->GetLocalClearance() );
976  }
977  }
978 
979  for( auto t : m_board->Tracks() )
980  {
981  KICAD_T type = t->Type();
982 
983  if( type == PCB_TRACE_T ) {
984  std::unique_ptr< PNS::SEGMENT > segment = syncTrack( t );
985  if( segment ) {
986  aWorld->Add( std::move( segment ) );
987  }
988  } else if( type == PCB_VIA_T ) {
989  std::unique_ptr< PNS::VIA > via = syncVia( static_cast<VIA*>( t ) );
990  if( via ) {
991  aWorld->Add( std::move( via ) );
992  }
993  }
994  }
995 
996  int worstRuleClearance = m_board->GetDesignSettings().GetBiggestClearanceValue();
997 
998  delete m_ruleResolver;
1000 
1001  aWorld->SetRuleResolver( m_ruleResolver );
1002  aWorld->SetMaxClearance( 4 * std::max(worstPadClearance, worstRuleClearance ) );
1003 }
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:163
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:157
bool syncGraphicalItem(PNS::NODE *aWorld, DRAWSEGMENT *aItem)
DLIST_ITERATOR_WRAPPER< MODULE > Modules()
Definition: class_board.h:250
PNS_PCBNEW_RULE_RESOLVER * m_ruleResolver
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:532
PNS::ROUTER * m_router
ZONE_CONTAINERS & Zones()
Definition: class_board.h:252
#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:249
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:251
bool PNS_KICAD_IFACE::syncZone ( PNS::NODE aWorld,
ZONE_CONTAINER aZone 
)
private

Definition at line 801 of file pns_kicad_iface.cpp.

References PNS::NODE::Add(), SHAPE_CONVEX::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.

802 {
803  SHAPE_POLY_SET poly;
804 
805  // TODO handle no-via restriction
806  if( !aZone->GetIsKeepout() || !aZone->GetDoNotAllowTracks() )
807  return false;
808 
809  aZone->BuildSmoothedPoly( poly );
810  poly.CacheTriangulation();
811 
812  if( !poly.IsTriangulationUpToDate() )
813  {
814  KIDIALOG dlg( nullptr, wxString::Format( _( "Malformed keep-out zone at (%d, %d)" ),
815  aZone->GetPosition().x, aZone->GetPosition().y ), KIDIALOG::KD_WARNING );
816  dlg.ShowDetailedText(
817  wxString::Format( _( "%s\nThis zone cannot be handled by the track layout tool.\n"
818  "Please verify it is not a self-intersecting polygon." ), aZone->GetSelectMenuText() ) );
819  dlg.DoNotShowCheckbox();
820  dlg.ShowModal();
821 
822  return false;
823  }
824 
825  LSET layers = aZone->GetLayerSet();
826 
827  for( int layer = F_Cu; layer <= B_Cu; layer++ )
828  {
829  if ( ! layers[layer] )
830  continue;
831 
832  for( int outline = 0; outline < poly.OutlineCount(); outline++ )
833  {
834  auto tri = poly.TriangulatedPolygon( outline );
835 
836  for( int i = 0; i < tri->GetTriangleCount(); i++)
837  {
838  VECTOR2I a, b, c;
839  tri->GetTriangle( i, a, b, c );
840  auto triShape = new SHAPE_CONVEX;
841 
842  triShape->Append( a );
843  triShape->Append( b );
844  triShape->Append( c );
845 
846  std::unique_ptr< PNS::SOLID > solid( new PNS::SOLID );
847 
848  solid->SetLayer( layer );
849  solid->SetNet( 0 );
850  solid->SetParent( aZone );
851  solid->SetShape( triShape );
852  solid->SetRoutable( false );
853 
854  aWorld->Add( std::move( solid ) );
855  }
856  }
857  }
858 
859  return true;
860 }
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...
Class SHAPE_CONVEX.
Definition: shape_convex.h:42
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
void Append(int aX, int aY)
Function Append()
Definition: shape_convex.h:151
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 PNS_KICAD_IFACE::UpdateNet ( int  aNetCode)
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1156 of file pns_kicad_iface.cpp.

1157 {
1158  wxLogTrace( "PNS", "Update-net %d", aNetCode );
1159 }

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: