Pcbnew: fix some issues when using python scripting (remove outdated SEG_ZONE item, fix broken access to netclass, track width and via size lists, add missing access to zones)

Update listPcb.py to show how to access zones.
This commit is contained in:
jean-pierre charras 2014-09-30 20:23:27 +02:00
parent 45a8e4da74
commit e617c5e6b1
6 changed files with 70 additions and 59 deletions

View File

@ -35,22 +35,11 @@
def GetModules(self): return self.m_Modules def GetModules(self): return self.m_Modules
def GetDrawings(self): return self.m_Drawings def GetDrawings(self): return self.m_Drawings
def GetTracks(self): return self.m_Track def GetTracks(self): return self.m_Track
def GetSegZones(self): return self.m_Zone
def GetFullRatsnest(self): return self.m_FullRatsnest def GetFullRatsnest(self): return self.m_FullRatsnest
def GetLocalRatsnest(self): return self.m_LocalRatsnest def GetZones(self): return self.m_ZoneDescriptorList
def GetNetClasses(self): return self.m_NetClasses
def GetCurrentNetClassName(self): return self.m_CurrentNetClassName
def GetViasDimensionsList(self): return self.m_ViasDimensionsList
def GetTrackWidthList(self): return self.m_TrackWidthList
def Save(self,filename,format = None): def Save(self,filename):
if format is None: return SaveBoard(filename,self,IO_MGR.KICAD)
str_filename = str(filename)
if str_filename.endswith(".brd"):
format = IO_MGR.LEGACY
if str_filename.endswith(".kicad_pcb"):
format = IO_MGR.KICAD
return SaveBoard(filename,self,format)
# #
# add function, clears the thisown to avoid python from deleting # add function, clears the thisown to avoid python from deleting
@ -70,14 +59,12 @@
%rename(Get) operator TRACK*; %rename(Get) operator TRACK*;
%rename(Get) operator D_PAD*; %rename(Get) operator D_PAD*;
%rename(Get) operator MODULE*; %rename(Get) operator MODULE*;
%rename(Get) operator SEGZONE*;
// we must translate C++ templates to scripting languages // we must translate C++ templates to scripting languages
%template(BOARD_ITEM_List) DLIST<BOARD_ITEM>; %template(BOARD_ITEM_List) DLIST<BOARD_ITEM>;
%template(MODULE_List) DLIST<MODULE>; %template(MODULE_List) DLIST<MODULE>;
%template(SEGZONE_List) DLIST<SEGZONE>;
%template(TRACK_List) DLIST<TRACK>; %template(TRACK_List) DLIST<TRACK>;
%template(PAD_List) DLIST<D_PAD>; %template(PAD_List) DLIST<D_PAD>;
@ -86,6 +73,25 @@
%template(VIA_DIMENSION_Vector) std::vector<VIA_DIMENSION>; %template(VIA_DIMENSION_Vector) std::vector<VIA_DIMENSION>;
%template (RASTNET_Vector) std::vector<RATSNEST_ITEM>; %template (RASTNET_Vector) std::vector<RATSNEST_ITEM>;
%extend BOARD
{
%pythoncode
{
def GetNetClasses(self):
return self.GetDesignSettings().m_NetClasses
def GetCurrentNetClassName(self):
return self.GetDesignSettings().m_CurrentNetClassName
def GetViasDimensionsList(self):
return self.GetDesignSettings().m_ViasDimensionsList
def GetTrackWidthList(self):
return self.GetDesignSettings().m_TrackWidthList
}
}
%extend DRAWSEGMENT %extend DRAWSEGMENT
{ {
%pythoncode %pythoncode

View File

@ -47,7 +47,7 @@
EDGE_MODULE* Cast_to_EDGE_MODULE() { return dynamic_cast<EDGE_MODULE*>(self); } EDGE_MODULE* Cast_to_EDGE_MODULE() { return dynamic_cast<EDGE_MODULE*>(self); }
D_PAD* Cast_to_D_PAD() { return dynamic_cast<D_PAD*>(self); } D_PAD* Cast_to_D_PAD() { return dynamic_cast<D_PAD*>(self); }
TRACK* Cast_to_TRACK() { return dynamic_cast<TRACK*>(self); } TRACK* Cast_to_TRACK() { return dynamic_cast<TRACK*>(self); }
SEGZONE* Cast_to_SEGZONE() { return dynamic_cast<SEGZONE*>(self); } ZONE_CONTAINER* Cast_to_ZONE_CONTAINER() { return dynamic_cast<ZONE_CONTAINER*>(self);}
VIA* Cast_to_VIA() { return dynamic_cast<VIA*>(self); } VIA* Cast_to_VIA() { return dynamic_cast<VIA*>(self); }
@ -73,12 +73,12 @@
return self.Cast_to_D_PAD() return self.Cast_to_D_PAD()
elif ct=="MTEXT": elif ct=="MTEXT":
return self.Cast_to_TEXTE_MODULE() return self.Cast_to_TEXTE_MODULE()
elif ct=="ZONE":
return self.Cast_to_SEGZONE()
elif ct=="VIA": elif ct=="VIA":
return self.Cast_to_VIA() return self.Cast_to_VIA()
elif ct=="TRACK": elif ct=="TRACK":
return self.Cast_to_TRACK() return self.Cast_to_TRACK()
elif ct=="ZONE_CONTAINER":
return self.Cast_to_ZONE_CONTAINER()
else: else:
return None return None
} }

View File

@ -6,15 +6,15 @@ filename=sys.argv[1]
pcb = LoadBoard(filename) pcb = LoadBoard(filename)
#ToUnits = ToMM ToUnits = ToMM
#FromUnits = FromMM FromUnits = FromMM
ToUnits=ToMils #ToUnits=ToMils
FromUnits=FromMils #FromUnits=FromMils
print "LISTING VIAS:" print "LISTING VIAS:"
for item in pcb.GetTracks(): for item in pcb.GetTracks():
if type(item) is SEGVIA: if type(item) is VIA:
pos = item.GetPosition() pos = item.GetPosition()
drill = item.GetDrillValue() drill = item.GetDrillValue()
@ -33,7 +33,7 @@ for item in pcb.GetTracks():
print "Unknown type %s" % type(item) print "Unknown type %s" % type(item)
print "" print ""
print "LISTING DRAWINGS:" print "LIST DRAWINGS:"
for item in pcb.GetDrawings(): for item in pcb.GetDrawings():
if type(item) is TEXTE_PCB: if type(item) is TEXTE_PCB:
@ -50,14 +50,17 @@ for module in pcb.GetModules():
print "* Module: %s at %s"%(module.GetReference(),ToUnits(module.GetPosition())) print "* Module: %s at %s"%(module.GetReference(),ToUnits(module.GetPosition()))
print "" print ""
print "LIST ZONES:" print "Ratsnest cnt:",len(pcb.GetFullRatsnest())
print "track w cnt:",len(pcb.GetTrackWidthList())
for zone in pcb.GetSegZones(): print "via s cnt:",len(pcb.GetViasDimensionsList())
print zone
print "" print ""
print "RATSNEST:",len(pcb.GetFullRatsnest()) print "LIST ZONES:"
print dir(pcb.GetNetClasses()) for idx in range(0, pcb.GetAreaCount()):
zone=pcb.GetArea(idx)
print "zone:", idx, "priority:", zone.GetPriority(), "netname", zone.GetNetname()
print ""
print "NetClasses:", pcb.GetNetClasses().GetCount()

View File

@ -88,6 +88,7 @@
#include <class_board.h> #include <class_board.h>
#include <class_module.h> #include <class_module.h>
#include <class_track.h> #include <class_track.h>
#include <class_zone.h>
#include <layers_id_colors_and_visibility.h> #include <layers_id_colors_and_visibility.h>
#include <class_pad.h> #include <class_pad.h>
#include <pad_shapes.h> #include <pad_shapes.h>
@ -123,6 +124,7 @@
%include <class_board.h> %include <class_board.h>
%include <class_module.h> %include <class_module.h>
%include <class_track.h> %include <class_track.h>
%include <class_zone.h>
%include <layers_id_colors_and_visibility.h> %include <layers_id_colors_and_visibility.h>
%include <class_pad.h> %include <class_pad.h>
%include <pad_shapes.h> %include <pad_shapes.h>

View File

@ -27,7 +27,7 @@
* @brief unit conversion code * @brief unit conversion code
*/ */
// Unit conversion, between internal // Unit conversion, between internal units and mm or mils
%pythoncode %pythoncode
{ {

View File

@ -255,14 +255,14 @@ void BOARD::DrawHighLight( EDA_DRAW_PANEL* am_canvas, wxDC* DC, int aNetCode )
else else
draw_mode = GR_AND | GR_HIGHLIGHT; draw_mode = GR_AND | GR_HIGHLIGHT;
// Redraw ZONE_CONTAINERS // Redraw zones
BOARD::ZONE_CONTAINERS& zones = m_ZoneDescriptorList; for( int ii = 0; ii < GetAreaCount(); ii++ )
{
ZONE_CONTAINER* zone = GetArea( ii );
for( BOARD::ZONE_CONTAINERS::iterator zc = zones.begin(); zc!=zones.end(); ++zc ) if( zone->GetNetCode() == aNetCode )
{ {
if( (*zc)->GetNetCode() == aNetCode ) zone->Draw( am_canvas, DC, draw_mode );
{
(*zc)->Draw( am_canvas, DC, draw_mode );
} }
} }