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

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

471 {
472  m_ruleResolver = nullptr;
473  m_board = nullptr;
474  m_tool = nullptr;
475  m_view = nullptr;
476  m_previewItems = nullptr;
477  m_router = nullptr;
478  m_debugDecorator = nullptr;
479  m_dispOptions = nullptr;
480 }
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 483 of file pns_kicad_iface.cpp.

484 {
485  delete m_ruleResolver;
486  delete m_debugDecorator;
487 
488  if( m_previewItems )
489  {
491  delete m_previewItems;
492  }
493 }
PNS_PCBNEW_DEBUG_DECORATOR * m_debugDecorator
void FreeItems()
Function FreeItems() Frees all the items that were added to the group.
Definition: view_group.cpp:141
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 1070 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.

1071 {
1072  BOARD_CONNECTED_ITEM* newBI = NULL;
1073 
1074  switch( aItem->Kind() )
1075  {
1076  case PNS::ITEM::SEGMENT_T:
1077  {
1078  PNS::SEGMENT* seg = static_cast<PNS::SEGMENT*>( aItem );
1079  TRACK* track = new TRACK( m_board );
1080  const SEG& s = seg->Seg();
1081  track->SetStart( wxPoint( s.A.x, s.A.y ) );
1082  track->SetEnd( wxPoint( s.B.x, s.B.y ) );
1083  track->SetWidth( seg->Width() );
1084  track->SetLayer( ToLAYER_ID( seg->Layers().Start() ) );
1085  track->SetNetCode( seg->Net() > 0 ? seg->Net() : 0 );
1086  newBI = track;
1087  break;
1088  }
1089 
1090  case PNS::ITEM::VIA_T:
1091  {
1092  VIA* via_board = new VIA( m_board );
1093  PNS::VIA* via = static_cast<PNS::VIA*>( aItem );
1094  via_board->SetPosition( wxPoint( via->Pos().x, via->Pos().y ) );
1095  via_board->SetWidth( via->Diameter() );
1096  via_board->SetDrill( via->Drill() );
1097  via_board->SetNetCode( via->Net() > 0 ? via->Net() : 0 );
1098  via_board->SetViaType( via->ViaType() ); // MUST be before SetLayerPair()
1099  via_board->SetLayerPair( ToLAYER_ID( via->Layers().Start() ),
1100  ToLAYER_ID( via->Layers().End() ) );
1101  newBI = via_board;
1102  break;
1103  }
1104 
1105  default:
1106  break;
1107  }
1108 
1109  if( newBI )
1110  {
1111  aItem->SetParent( newBI );
1112  newBI->ClearFlags();
1113 
1114  m_commit->Add( newBI );
1115  }
1116 }
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:283
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 1119 of file pns_kicad_iface.cpp.

1120 {
1121  EraseView();
1122  m_commit->Push( wxT( "Added a track" ) );
1123  m_commit.reset( new BOARD_COMMIT( m_tool ) );
1124 }
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 1016 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().

1017 {
1018  wxLogTrace( "PNS", "DisplayItem %p", aItem );
1019 
1020  ROUTER_PREVIEW_ITEM* pitem = new ROUTER_PREVIEW_ITEM( aItem, m_view );
1021 
1022  if( aColor >= 0 )
1023  pitem->SetColor( KIGFX::COLOR4D( aColor ) );
1024 
1025  if( aClearance >= 0 )
1026  {
1027  pitem->SetClearance( aClearance );
1028 
1029  if( m_dispOptions )
1030  {
1031  auto clearanceDisp = m_dispOptions->m_ShowTrackClearanceMode;
1034  && clearanceDisp != PCB_DISPLAY_OPTIONS::SHOW_CLEARANCE_NEW_TRACKS );
1035  }
1036  }
1037 
1038 
1039  m_previewItems->Add( pitem );
1041 }
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:1382
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 998 of file pns_kicad_iface.cpp.

999 {
1000  for( auto item : m_hiddenItems )
1001  m_view->SetVisible( item, true );
1002 
1003  m_hiddenItems.clear();
1004 
1005  if( m_previewItems )
1006  {
1009  }
1010 
1011  if( m_debugDecorator )
1013 }
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:141
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:1382
KIGFX::VIEW * m_view
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Sets the item visibility.
Definition: view.cpp:1328
PNS::DEBUG_DECORATOR * PNS_KICAD_IFACE::GetDebugDecorator ( )
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 464 of file pns_kicad_iface.cpp.

465 {
466  return m_debugDecorator;
467 }
PNS_PCBNEW_DEBUG_DECORATOR * m_debugDecorator
PNS::RULE_RESOLVER * PNS_KICAD_IFACE::GetRuleResolver ( )
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1154 of file pns_kicad_iface.cpp.

1155 {
1156  return m_ruleResolver;
1157 }
PNS_PCBNEW_RULE_RESOLVER * m_ruleResolver
void PNS_KICAD_IFACE::HideItem ( PNS::ITEM aItem)
overridevirtual

Implements PNS::ROUTER_IFACE.

Definition at line 1044 of file pns_kicad_iface.cpp.

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

1045 {
1046  BOARD_CONNECTED_ITEM* parent = aItem->Parent();
1047 
1048  if( parent )
1049  {
1050  if( m_view->IsVisible( parent ) )
1051  m_hiddenItems.insert( parent );
1052 
1053  m_view->SetVisible( parent, false );
1054  m_view->Update( parent, KIGFX::APPEARANCE );
1055  }
1056 }
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:1382
KIGFX::VIEW * m_view
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Sets the item visibility.
Definition: view.cpp:1328
bool IsVisible(const VIEW_ITEM *aItem) const
Returns information if the item is visible (or not).
Definition: view.cpp:1368
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 1059 of file pns_kicad_iface.cpp.

References PNS::ITEM::Parent().

1060 {
1061  BOARD_CONNECTED_ITEM* parent = aItem->Parent();
1062 
1063  if( parent )
1064  {
1065  m_commit->Remove( parent );
1066  }
1067 }
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 927 of file pns_kicad_iface.cpp.

References PNS_PCBNEW_RULE_RESOLVER::m_board.

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

928 {
929  m_board = aBoard;
930  wxLogTrace( "PNS", "m_board = %p", m_board );
931 }
void PNS_KICAD_IFACE::SetDisplayOptions ( PCB_DISPLAY_OPTIONS aDispOptions)

Definition at line 1172 of file pns_kicad_iface.cpp.

1173 {
1174  m_dispOptions = aDispOptions;
1175 }
PCB_DISPLAY_OPTIONS * m_dispOptions
void PNS_KICAD_IFACE::SetHostTool ( PCB_TOOL aTool)

Definition at line 1166 of file pns_kicad_iface.cpp.

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

1167 {
1168  m_tool = aTool;
1169  m_commit.reset( new BOARD_COMMIT( m_tool ) );
1170 }
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 1160 of file pns_kicad_iface.cpp.

References PNS_PCBNEW_RULE_RESOLVER::m_router.

1161 {
1162  m_router = aRouter;
1163 }
PNS::ROUTER * m_router
void PNS_KICAD_IFACE::SetView ( KIGFX::VIEW aView)

Definition at line 1127 of file pns_kicad_iface.cpp.

References LAYER_GP_OVERLAY.

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

1128 {
1129  wxLogTrace( "PNS", "SetView %p", aView );
1130 
1131  if( m_previewItems )
1132  {
1134  delete m_previewItems;
1135  }
1136 
1137  m_view = aView;
1141 
1142  delete m_debugDecorator;
1145 }
PNS_PCBNEW_DEBUG_DECORATOR * m_debugDecorator
void FreeItems()
Function FreeItems() Frees all the items that were added to the group.
Definition: view_group.cpp:141
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:309
bool PNS_KICAD_IFACE::syncGraphicalItem ( PNS::NODE aWorld,
DRAWSEGMENT aItem 
)
private

Definition at line 854 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(), S_ARC, S_CIRCLE, and S_SEGMENT.

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

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

754 {
755  std::unique_ptr< PNS::SEGMENT > segment(
756  new PNS::SEGMENT( SEG( aTrack->GetStart(), aTrack->GetEnd() ), aTrack->GetNetCode() )
757  );
758 
759  segment->SetWidth( aTrack->GetWidth() );
760  segment->SetLayers( LAYER_RANGE( aTrack->GetLayer() ) );
761  segment->SetParent( aTrack );
762 
763  if( aTrack->IsLocked() )
764  segment->Mark( PNS::MK_LOCKED );
765 
766  return segment;
767 }
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 770 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.

771 {
772  PCB_LAYER_ID top, bottom;
773  aVia->LayerPair( &top, &bottom );
774  std::unique_ptr<PNS::VIA> via( new PNS::VIA(
775  aVia->GetPosition(),
776  LAYER_RANGE( top, bottom ),
777  aVia->GetWidth(),
778  aVia->GetDrillValue(),
779  aVia->GetNetCode(),
780  aVia->GetViaType() )
781  );
782 
783  via->SetParent( aVia );
784 
785  if( aVia->IsLocked() )
786  via->Mark( PNS::MK_LOCKED );
787 
788  return via;
789 }
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 934 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().

935 {
936  int worstPadClearance = 0;
937 
938  if( !m_board )
939  {
940  wxLogTrace( "PNS", "No board attached, aborting sync." );
941  return;
942  }
943 
944  for( auto gitem : m_board->Drawings() )
945  {
946  if ( gitem->Type() == PCB_LINE_T )
947  {
948  syncGraphicalItem( aWorld, static_cast<DRAWSEGMENT*>( gitem ) );
949  }
950  }
951 
952  for( auto zone : m_board->Zones() )
953  {
954  syncZone( aWorld, zone );
955  }
956 
957  for( auto module : m_board->Modules() )
958  {
959  for( auto pad : module->Pads() )
960  {
961  std::unique_ptr< PNS::SOLID > solid = syncPad( pad );
962 
963  if( solid )
964  aWorld->Add( std::move( solid ) );
965 
966 
967  worstPadClearance = std::max( worstPadClearance, pad->GetLocalClearance() );
968  }
969  }
970 
971  for( auto t : m_board->Tracks() )
972  {
973  KICAD_T type = t->Type();
974 
975  if( type == PCB_TRACE_T ) {
976  std::unique_ptr< PNS::SEGMENT > segment = syncTrack( t );
977  if( segment ) {
978  aWorld->Add( std::move( segment ) );
979  }
980  } else if( type == PCB_VIA_T ) {
981  std::unique_ptr< PNS::VIA > via = syncVia( static_cast<VIA*>( t ) );
982  if( via ) {
983  aWorld->Add( std::move( via ) );
984  }
985  }
986  }
987 
988  int worstRuleClearance = m_board->GetDesignSettings().GetBiggestClearanceValue();
989 
990  delete m_ruleResolver;
992 
993  aWorld->SetRuleResolver( m_ruleResolver );
994  aWorld->SetMaxClearance( 4 * std::max(worstPadClearance, worstRuleClearance ) );
995 }
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 792 of file pns_kicad_iface.cpp.

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

793 {
794  SHAPE_POLY_SET poly;
795 
796  // TODO handle no-via restriction
797  if( !aZone->GetIsKeepout() || !aZone->GetDoNotAllowTracks() )
798  return false;
799 
800  aZone->BuildSmoothedPoly( poly );
801  poly.CacheTriangulation();
802 
803  if( !poly.IsTriangulationUpToDate() )
804  {
805  wxString msg = wxString::Format( _( "Malformed keep-out zone at (%d, %d) "
806  "cannot be handled by the track layout tool.\n%s\n"
807  "Please verify it is not a self-intersecting polygon." ),
808  aZone->GetPosition().x, aZone->GetPosition().y, aZone->GetSelectMenuText() );
809 
810  KI_DIALOG dlg( nullptr, msg );
811  dlg.Type( KI_DIALOG::KD_WARNING ).Title( _( "Malformed keep-out zone" ) ).DoNotShowCheckbox();
812  dlg.ShowModal();
813 
814  return false;
815  }
816 
817  LSET layers = aZone->GetLayerSet();
818 
819  for( int layer = F_Cu; layer <= B_Cu; layer++ )
820  {
821  if ( ! layers[layer] )
822  continue;
823 
824  for( int outline = 0; outline < poly.OutlineCount(); outline++ )
825  {
826  auto tri = poly.TriangulatedPolygon( outline );
827 
828  for( int i = 0; i < tri->GetTriangleCount(); i++)
829  {
830  VECTOR2I a, b, c;
831  tri->GetTriangle( i, a, b, c );
832  auto triShape = new SHAPE_CONVEX;
833 
834  triShape->Append( a );
835  triShape->Append( b );
836  triShape->Append( c );
837 
838  std::unique_ptr< PNS::SOLID > solid( new PNS::SOLID );
839 
840  solid->SetLayer( layer );
841  solid->SetNet( 0 );
842  solid->SetParent( aZone );
843  solid->SetShape( triShape );
844  solid->SetRoutable( false );
845 
846  aWorld->Add( std::move( solid ) );
847  }
848  }
849  }
850 
851  return true;
852 }
wxString GetSelectMenuText() const override
Function GetSelectMenuText returns the text to display to be used in the selection clarification cont...
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:165
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:226
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
Helper class to create more flexible dialogs, e.g:
Definition: confirm.h:47
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
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 1148 of file pns_kicad_iface.cpp.

1149 {
1150  wxLogTrace( "PNS", "Update-net %d", aNetCode );
1151 }

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: