Cast() method to cast down classes from BOARD_ITEM to all childs

This commit is contained in:
Miguel Angel Ajo 2012-03-18 22:35:51 +01:00
parent c0be31aeda
commit b28dbd31c3
1 changed files with 70 additions and 0 deletions

View File

@ -36,6 +36,7 @@
%{
#include <wx_python_helpers.h>
#include <class_board_item.h>
#include <class_board_connected_item.h>
#include <class_board.h>
#include <class_module.h>
#include <class_track.h>
@ -43,6 +44,10 @@
#include <class_netinfo.h>
#include <class_pcb_text.h>
#include <class_dimension.h>
#include <class_drawsegment.h>
#include <class_marker_pcb.h>
#include <class_text_mod.h>
#include <class_edge_mod.h>
#include <dlist.h>
#include <class_zone_settings.h>
#include <class_netclass.h>
@ -50,6 +55,7 @@
#include <layers_id_colors_and_visibility.h>
#include <pcbnew_scripting_helpers.h>
BOARD *GetBoard(); /* get current editor board */
%}
@ -61,6 +67,7 @@
#endif
%include <class_board_item.h>
%include <class_board_connected_item.h>
%include <class_board.h>
%include <class_module.h>
%include <class_track.h>
@ -68,12 +75,17 @@
%include <class_netinfo.h>
%include <class_pcb_text.h>
%include <class_dimension.h>
%include <class_drawsegment.h>
%include <class_marker_pcb.h>
%include <class_text_mod.h>
%include <class_edge_mod.h>
%include <dlist.h>
%include <class_zone_settings.h>
%include <class_netclass.h>
%include <class_netinfo.h>
%include <layers_id_colors_and_visibility.h>
/* the IO_ERROR exception handler, not working yet... */
%exception
{
@ -86,6 +98,64 @@
}
}
/* Cast downs from EDA_ITEM/BOARD_ITEM to childs */
%inline
{
BOARD_ITEM* Cast_to_BOARD_ITEM(EDA_ITEM* base) { return dynamic_cast<BOARD_ITEM*>(base); }
}
%extend BOARD_ITEM
{
TEXTE_PCB* Cast_to_TEXTE_PCB() { return dynamic_cast<TEXTE_PCB*>(self); }
DIMENSION* Cast_to_DIMENSION() { return dynamic_cast<DIMENSION*>(self); }
MODULE* Cast_to_MODULE() { return dynamic_cast<MODULE*>(self); }
TEXTE_MODULE* Cast_to_TEXTE_MODULE(){ return dynamic_cast<TEXTE_MODULE*>(self); }
DRAWSEGMENT* Cast_to_DRAWSEGMENT() { return dynamic_cast<DRAWSEGMENT*>(self); }
MARKER_PCB* Cast_to_MARKER_PCB() { return dynamic_cast<MARKER_PCB*>(self); }
BOARD* Cast_to_BOARD() { return dynamic_cast<BOARD*>(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); }
TRACK* Cast_to_TRACK() { return dynamic_cast<TRACK*>(self); }
SEGZONE* Cast_to_SEGZONE() { return dynamic_cast<SEGZONE*>(self); }
SEGVIA* Cast_to_SEGVIA() { return dynamic_cast<SEGVIA*>(self); }
%pythoncode
{
def Cast(self):
ct = self.GetClass()
if ct=="PTEXT":
return self.Cast_to_TEXTE_PCB()
elif ct=="BOARD":
return self.Cast_to_BOARD()
elif ct=="DIMENSION":
return self.Cast_to_DIMENSION()
elif ct=="DRAWSEGMENT":
return self.Cast_to_DRAWSEGMENT()
elif ct=="MGRAPHIC":
return self.Cast_to_EDGE_MODULE()
elif ct=="MODULE":
return self.Cast_to_MODULE()
elif ct=="PAD":
return self.Cast_to_D_PAD()
elif ct=="MTEXT":
return self.Cast_to_TEXTE_MODULE()
elif ct=="ZONE":
return self.Cast_to_SEGZONE()
elif ct=="VIA":
return self.Cast_to_SEGVIA()
elif ct=="TRACK":
return self.Cast_to_TRACK()
else:
return None
}
}
%include <pcbnew_scripting_helpers.h>
#ifdef BUILD_WITH_PLUGIN