|
|
@ -24,75 +24,157 @@ |
|
|
|
|
|
|
|
/** |
|
|
|
* @file board_item.i |
|
|
|
* @brief board_item helpers, mainly for casting down to all child classes |
|
|
|
* @brief board_item helpers, mainly for casting down to all derived classes |
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
/* Cast downs from EDA_ITEM/BOARD_ITEM to childs */ |
|
|
|
|
|
|
|
|
|
|
|
%include class_board_item.h // generate code for this interface |
|
|
|
|
|
|
|
// this is to help python with the * accessor of DLIST templates |
|
|
|
%rename(Get) operator BOARD_ITEM*; |
|
|
|
%template(BOARD_ITEM_List) DLIST<BOARD_ITEM>; |
|
|
|
|
|
|
|
|
|
|
|
%{ |
|
|
|
#include <class_board_item.h> |
|
|
|
%} |
|
|
|
|
|
|
|
|
|
|
|
%inline |
|
|
|
{ |
|
|
|
/// Cast down from EDA_ITEM/BOARD_ITEM to child |
|
|
|
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); } |
|
|
|
VIA* Cast_to_VIA() { return dynamic_cast<VIA*>(self); } |
|
|
|
ZONE_CONTAINER* Cast_to_ZONE_CONTAINER() { return dynamic_cast<ZONE_CONTAINER*>(self);} |
|
|
|
PCB_TARGET* Cast_to_PCB_TARGET() { return dynamic_cast<PCB_TARGET*>(self); } |
|
|
|
|
|
|
|
%{ |
|
|
|
class TEXTE_PCB; |
|
|
|
class DIMENSION; |
|
|
|
class MODULE; |
|
|
|
class TEXTE_MODULE; |
|
|
|
class DRAWSEGMENT; |
|
|
|
class MARKER_PCB; |
|
|
|
class BOARD; |
|
|
|
class EDGE_MODULE; |
|
|
|
class D_PAD; |
|
|
|
class TRACK; |
|
|
|
class VIA; |
|
|
|
class ZONE_CONTAINER; |
|
|
|
class PCB_TARGET; |
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
extern "C" { |
|
|
|
#endif |
|
|
|
|
|
|
|
static TEXTE_PCB* Cast_to_TEXTE_PCB( BOARD_ITEM* ); |
|
|
|
static DIMENSION* Cast_to_DIMENSION( BOARD_ITEM* ); |
|
|
|
static MODULE* Cast_to_MODULE( BOARD_ITEM* ); |
|
|
|
static TEXTE_MODULE* Cast_to_TEXTE_MODULE( BOARD_ITEM* ); |
|
|
|
static DRAWSEGMENT* Cast_to_DRAWSEGMENT( BOARD_ITEM* ); |
|
|
|
static MARKER_PCB* Cast_to_MARKER_PCB( BOARD_ITEM* ); |
|
|
|
static BOARD* Cast_to_BOARD( BOARD_ITEM* ); |
|
|
|
static EDGE_MODULE* Cast_to_EDGE_MODULE( BOARD_ITEM* ); |
|
|
|
static D_PAD* Cast_to_D_PAD( BOARD_ITEM* ); |
|
|
|
static TRACK* Cast_to_TRACK( BOARD_ITEM* ); |
|
|
|
static VIA* Cast_to_VIA( BOARD_ITEM* ); |
|
|
|
static ZONE_CONTAINER* Cast_to_ZONE_CONTAINER( BOARD_ITEM* ); |
|
|
|
static PCB_TARGET* Cast_to_PCB_TARGET( BOARD_ITEM* ); |
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
} // extern "C" |
|
|
|
#endif |
|
|
|
%} |
|
|
|
|
|
|
|
|
|
|
|
static TEXTE_PCB* Cast_to_TEXTE_PCB( BOARD_ITEM* ); |
|
|
|
static DIMENSION* Cast_to_DIMENSION( BOARD_ITEM* ); |
|
|
|
static MODULE* Cast_to_MODULE( BOARD_ITEM* ); |
|
|
|
static TEXTE_MODULE* Cast_to_TEXTE_MODULE( BOARD_ITEM* ); |
|
|
|
static DRAWSEGMENT* Cast_to_DRAWSEGMENT( BOARD_ITEM* ); |
|
|
|
static MARKER_PCB* Cast_to_MARKER_PCB( BOARD_ITEM* ); |
|
|
|
static BOARD* Cast_to_BOARD( BOARD_ITEM* ); |
|
|
|
static EDGE_MODULE* Cast_to_EDGE_MODULE( BOARD_ITEM* ); |
|
|
|
static D_PAD* Cast_to_D_PAD( BOARD_ITEM* ); |
|
|
|
static TRACK* Cast_to_TRACK( BOARD_ITEM* ); |
|
|
|
static VIA* Cast_to_VIA( BOARD_ITEM* ); |
|
|
|
static ZONE_CONTAINER* Cast_to_ZONE_CONTAINER( BOARD_ITEM* ); |
|
|
|
static PCB_TARGET* Cast_to_PCB_TARGET( BOARD_ITEM* ); |
|
|
|
|
|
|
|
|
|
|
|
%extend BOARD_ITEM |
|
|
|
{ |
|
|
|
%pythoncode |
|
|
|
{ |
|
|
|
%{ |
|
|
|
def Cast(self): |
|
|
|
|
|
|
|
ct = self.GetClass() |
|
|
|
|
|
|
|
if ct=="PTEXT": |
|
|
|
return self.Cast_to_TEXTE_PCB() |
|
|
|
return Cast_to_TEXTE_PCB(self) |
|
|
|
elif ct=="BOARD": |
|
|
|
return self.Cast_to_BOARD() |
|
|
|
return Cast_to_BOARD(self) |
|
|
|
elif ct=="DIMENSION": |
|
|
|
return self.Cast_to_DIMENSION() |
|
|
|
return Cast_to_DIMENSION(self) |
|
|
|
elif ct=="DRAWSEGMENT": |
|
|
|
return self.Cast_to_DRAWSEGMENT() |
|
|
|
return Cast_to_DRAWSEGMENT(self) |
|
|
|
elif ct=="MGRAPHIC": |
|
|
|
return self.Cast_to_EDGE_MODULE() |
|
|
|
return Cast_to_EDGE_MODULE(self) |
|
|
|
elif ct=="MODULE": |
|
|
|
return self.Cast_to_MODULE() |
|
|
|
return Cast_to_MODULE(self) |
|
|
|
elif ct=="PAD": |
|
|
|
return self.Cast_to_D_PAD() |
|
|
|
return Cast_to_D_PAD(self) |
|
|
|
elif ct=="MTEXT": |
|
|
|
return self.Cast_to_TEXTE_MODULE() |
|
|
|
return Cast_to_TEXTE_MODULE(self) |
|
|
|
elif ct=="VIA": |
|
|
|
return self.Cast_to_VIA() |
|
|
|
return Cast_to_VIA(self) |
|
|
|
elif ct=="TRACK": |
|
|
|
return self.Cast_to_TRACK() |
|
|
|
return Cast_to_TRACK(self) |
|
|
|
elif ct=="PCB_TARGET": |
|
|
|
return self.Cast_to_PCB_TARGET() |
|
|
|
return Cast_to_PCB_TARGET(self) |
|
|
|
elif ct=="ZONE_CONTAINER": |
|
|
|
return self.Cast_to_ZONE_CONTAINER() |
|
|
|
return Cast_to_ZONE_CONTAINER(self) |
|
|
|
else: |
|
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
def Duplicate(self): |
|
|
|
|
|
|
|
ct = self.GetClass() |
|
|
|
|
|
|
|
if ct=="BOARD": |
|
|
|
return None |
|
|
|
else: |
|
|
|
return Cast_to_BOARD_ITEM(self.Clone()).Cast() |
|
|
|
} |
|
|
|
|
|
|
|
def SetPos(self,p): |
|
|
|
self.SetPosition(p) |
|
|
|
self.SetPos0(p) |
|
|
|
|
|
|
|
def SetStartEnd(self,start,end): |
|
|
|
self.SetStart(start) |
|
|
|
self.SetStart0(start) |
|
|
|
self.SetEnd(end) |
|
|
|
self.SetEnd0(end) |
|
|
|
%} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Use %wrapper code generation section so that this block of C++ comes after all referenced |
|
|
|
// classes and therefore will C++ compile due to the respective headers which will go into |
|
|
|
// the %header section. See section 5.6.2 of SWIG 3.0 documentation. |
|
|
|
%wrapper %{ |
|
|
|
static TEXTE_PCB* Cast_to_TEXTE_PCB( BOARD_ITEM* self ) { return dynamic_cast<TEXTE_PCB*>(self); } |
|
|
|
static DIMENSION* Cast_to_DIMENSION( BOARD_ITEM* self ) { return dynamic_cast<DIMENSION*>(self); } |
|
|
|
static MODULE* Cast_to_MODULE( BOARD_ITEM* self ) { return dynamic_cast<MODULE*>(self); } |
|
|
|
static TEXTE_MODULE* Cast_to_TEXTE_MODULE( BOARD_ITEM* self ) { return dynamic_cast<TEXTE_MODULE*>(self); } |
|
|
|
static DRAWSEGMENT* Cast_to_DRAWSEGMENT( BOARD_ITEM* self ) { return dynamic_cast<DRAWSEGMENT*>(self); } |
|
|
|
static MARKER_PCB* Cast_to_MARKER_PCB( BOARD_ITEM* self ) { return dynamic_cast<MARKER_PCB*>(self); } |
|
|
|
static BOARD* Cast_to_BOARD( BOARD_ITEM* self ) { return dynamic_cast<BOARD*>(self); } |
|
|
|
static EDGE_MODULE* Cast_to_EDGE_MODULE( BOARD_ITEM* self ) { return dynamic_cast<EDGE_MODULE*>(self); } |
|
|
|
static D_PAD* Cast_to_D_PAD( BOARD_ITEM* self ) { return dynamic_cast<D_PAD*>(self); } |
|
|
|
static TRACK* Cast_to_TRACK( BOARD_ITEM* self ) { return dynamic_cast<TRACK*>(self); } |
|
|
|
static VIA* Cast_to_VIA( BOARD_ITEM* self ) { return dynamic_cast<VIA*>(self); } |
|
|
|
static ZONE_CONTAINER* Cast_to_ZONE_CONTAINER( BOARD_ITEM* self ) { return dynamic_cast<ZONE_CONTAINER*>(self); } |
|
|
|
static PCB_TARGET* Cast_to_PCB_TARGET( BOARD_ITEM* self ) { return dynamic_cast<PCB_TARGET*>(self); } |
|
|
|
%} |
|
|
|
|