More SWIG improvements.
SWIG support for BOARD_ITEM_CONTAINER. Split board.i into smaller included *.i files. Add depencies on these smaller *.i files to CMakeLists.txt
This commit is contained in:
parent
c57fd7ccbf
commit
1718ac1083
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
|
|
||||||
%include kiway_player.h
|
%include kiway_player.h
|
||||||
|
|
||||||
%{
|
%{
|
||||||
#include <kiway_player.h>
|
#include <kiway_player.h>
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -371,9 +371,23 @@ if( KICAD_SCRIPTING )
|
||||||
DEPENDS swig/pcbnew.i
|
DEPENDS swig/pcbnew.i
|
||||||
DEPENDS swig/board.i
|
DEPENDS swig/board.i
|
||||||
DEPENDS swig/board_item.i
|
DEPENDS swig/board_item.i
|
||||||
|
DEPENDS swig/board_item_container.i
|
||||||
|
DEPENDS swig/dimension.i
|
||||||
|
DEPENDS swig/drawsegment.i
|
||||||
|
DEPENDS swig/edge_mod.i
|
||||||
|
DEPENDS swig/marker_pcb.i
|
||||||
|
DEPENDS swig/mire.i
|
||||||
DEPENDS swig/module.i
|
DEPENDS swig/module.i
|
||||||
|
DEPENDS swig/netclass.i
|
||||||
|
DEPENDS swig/netinfo.i
|
||||||
|
DEPENDS swig/pad.i
|
||||||
|
DEPENDS swig/pcb_text.i
|
||||||
DEPENDS swig/plugins.i
|
DEPENDS swig/plugins.i
|
||||||
|
DEPENDS swig/text_mod.i
|
||||||
|
DEPENDS swig/track.i
|
||||||
DEPENDS swig/units.i
|
DEPENDS swig/units.i
|
||||||
|
DEPENDS swig/zone.i
|
||||||
|
|
||||||
DEPENDS ../common/swig/dlist.i
|
DEPENDS ../common/swig/dlist.i
|
||||||
DEPENDS ../common/swig/kicad.i
|
DEPENDS ../common/swig/kicad.i
|
||||||
DEPENDS ../common/swig/wx.i
|
DEPENDS ../common/swig/wx.i
|
||||||
|
@ -412,10 +426,28 @@ if( KICAD_SCRIPTING_MODULES )
|
||||||
set( SWIG_MODULE_pcbnew_EXTRA_DEPS
|
set( SWIG_MODULE_pcbnew_EXTRA_DEPS
|
||||||
swig/board.i
|
swig/board.i
|
||||||
swig/board_item.i
|
swig/board_item.i
|
||||||
|
swig/board_item_container.i
|
||||||
|
swig/dimension.i
|
||||||
|
swig/drawsegment.i
|
||||||
|
swig/edge_mod.i
|
||||||
|
swig/marker_pcb.i
|
||||||
|
swig/mire.i
|
||||||
|
swig/module.i
|
||||||
|
swig/netclass.i
|
||||||
|
swig/netinfo.i
|
||||||
|
swig/pad.i
|
||||||
|
swig/pcb_text.i
|
||||||
swig/plugins.i
|
swig/plugins.i
|
||||||
|
swig/text_mod.i
|
||||||
|
swig/track.i
|
||||||
swig/units.i
|
swig/units.i
|
||||||
../common/swig/ki_exception.i
|
swig/zone.i
|
||||||
|
|
||||||
|
../common/swig/dlist.i
|
||||||
../common/swig/kicad.i
|
../common/swig/kicad.i
|
||||||
|
../common/swig/wx.i
|
||||||
|
../common/swig/ki_exception.i
|
||||||
|
../scripting/kicadplugins.i
|
||||||
)
|
)
|
||||||
|
|
||||||
swig_add_module( pcbnew
|
swig_add_module( pcbnew
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 NBEE Embedded Systems, Miguel Angel Ajo <miguelangel@nbee.es>
|
* Copyright (C) 2012 NBEE Embedded Systems, Miguel Angel Ajo <miguelangel@nbee.es>
|
||||||
|
* Copyright (C) 2016 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||||
* Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
|
@ -33,132 +34,82 @@
|
||||||
By default we do not translate exceptions for EVERY C++ function since not every
|
By default we do not translate exceptions for EVERY C++ function since not every
|
||||||
C++ function throws, and that would be unused and very bulky mapping code.
|
C++ function throws, and that would be unused and very bulky mapping code.
|
||||||
Therefore please help gather the subset of C++ functions for this class that do
|
Therefore please help gather the subset of C++ functions for this class that do
|
||||||
throw and add them here, before the class declarations.
|
throw and add them here, each before its respective class declaration.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
HANDLE_EXCEPTIONS(BOARD::TracksInNetBetweenPoints)
|
HANDLE_EXCEPTIONS(BOARD::TracksInNetBetweenPoints)
|
||||||
|
|
||||||
|
|
||||||
%include <class_board_design_settings.h>
|
|
||||||
%{
|
|
||||||
#include <class_board_design_settings.h>
|
|
||||||
%}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%{
|
%{
|
||||||
#include <class_board.h>
|
#include <class_board.h>
|
||||||
#include <layers_id_colors_and_visibility.h>
|
#include <class_board_design_settings.h>
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
||||||
%import dlist.h
|
%import dlist.h
|
||||||
|
|
||||||
|
|
||||||
// Organize the two forms of include side by side so that it is easier to
|
// Organize the two forms of include side by side so that it is easier to
|
||||||
// migrate each grouping into a separate *.i file later.
|
// migrate each grouping into a separate *.i file later.
|
||||||
|
|
||||||
|
|
||||||
%include class_board_item.h
|
%include board_item.i
|
||||||
%{
|
|
||||||
#include <class_board_item.h>
|
%include board_item_container.i
|
||||||
%}
|
|
||||||
|
|
||||||
%include class_board_connected_item.h
|
%include class_board_connected_item.h
|
||||||
%{
|
|
||||||
#include <class_board_connected_item.h>
|
|
||||||
%}
|
|
||||||
|
|
||||||
%include pad_shapes.h
|
|
||||||
|
|
||||||
%include class_pad.h
|
%include pad.i
|
||||||
%{
|
%include track.i
|
||||||
#include <class_pad.h>
|
%include zone.i
|
||||||
%}
|
|
||||||
|
|
||||||
%include class_module.h
|
|
||||||
%{
|
|
||||||
#include <class_module.h>
|
|
||||||
%}
|
|
||||||
|
|
||||||
%include class_track.h
|
|
||||||
%{
|
|
||||||
#include <class_track.h>
|
|
||||||
%}
|
|
||||||
|
|
||||||
%include class_zone.h
|
|
||||||
%include zones.h
|
|
||||||
%{
|
|
||||||
#include <class_zone.h>
|
|
||||||
#include <zones.h>
|
|
||||||
%}
|
|
||||||
|
|
||||||
|
|
||||||
%include layers_id_colors_and_visibility.h
|
%include layers_id_colors_and_visibility.h
|
||||||
|
// Extend LSET by 2 methods to add or remove layers from the layer list
|
||||||
|
// Mainly used to add or remove layers of a pad layer list
|
||||||
|
%extend LSET
|
||||||
|
{
|
||||||
|
LSET addLayer( LAYER_ID aLayer) { return self->set(aLayer); }
|
||||||
|
LSET removeLayer( LAYER_ID aLayer) { return self->reset(aLayer); }
|
||||||
|
LSET addLayerSet( LSET aLayerSet) { return *self |= aLayerSet; }
|
||||||
|
LSET removeLayerSet( LSET aLayerSet) { return *self &= ~aLayerSet; }
|
||||||
|
|
||||||
%include class_pcb_text.h
|
%pythoncode
|
||||||
%{
|
%{
|
||||||
#include <class_pcb_text.h>
|
def AddLayer(self, layer):
|
||||||
%}
|
return self.addLayer( layer )
|
||||||
|
|
||||||
%include class_dimension.h
|
def AddLayerSet(self, layers):
|
||||||
|
return self.addLayerSet( layers )
|
||||||
|
|
||||||
|
def RemoveLayer(self, layer):
|
||||||
|
return self.removeLayer( layer )
|
||||||
|
|
||||||
|
def RemoveLayerSet(self, layers):
|
||||||
|
return self.removeLayerSet( layers )
|
||||||
|
%}
|
||||||
|
}
|
||||||
%{
|
%{
|
||||||
#include <class_dimension.h>
|
#include <layers_id_colors_and_visibility.h>
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
||||||
%include class_drawsegment.h
|
%include pcb_text.i
|
||||||
%{
|
%include dimension.i
|
||||||
#include <class_drawsegment.h>
|
%include drawsegment.i
|
||||||
%}
|
%include marker_pcb.i
|
||||||
|
%include mire.i
|
||||||
|
%include text_mod.i
|
||||||
|
%include edge_mod.i
|
||||||
|
|
||||||
%include class_marker_pcb.h
|
|
||||||
%{
|
|
||||||
#include <class_marker_pcb.h>
|
|
||||||
%}
|
|
||||||
|
|
||||||
|
|
||||||
%include class_mire.h
|
|
||||||
%{
|
|
||||||
#include <class_mire.h>
|
|
||||||
%}
|
|
||||||
|
|
||||||
|
|
||||||
%include class_text_mod.h
|
|
||||||
%{
|
|
||||||
#include <class_text_mod.h>
|
|
||||||
%}
|
|
||||||
|
|
||||||
%include class_edge_mod.h
|
|
||||||
%{
|
|
||||||
#include <class_edge_mod.h>
|
|
||||||
%}
|
|
||||||
|
|
||||||
%include class_zone_settings.h
|
%include class_zone_settings.h
|
||||||
%{
|
|
||||||
#include <class_zone_settings.h>
|
|
||||||
%}
|
|
||||||
|
|
||||||
%include class_netinfo.h
|
%include netinfo.i
|
||||||
%include class_netclass.h
|
%include netclass.i
|
||||||
%{
|
|
||||||
#include <class_netinfo.h>
|
|
||||||
#include <class_netclass.h>
|
|
||||||
%}
|
|
||||||
|
|
||||||
|
|
||||||
// this is to help python with the * accessor of DLIST templates
|
|
||||||
%rename(Get) operator BOARD_ITEM*;
|
|
||||||
%rename(Get) operator TRACK*;
|
|
||||||
%rename(Get) operator D_PAD*;
|
|
||||||
%rename(Get) operator MODULE*;
|
|
||||||
|
|
||||||
// we must translate C++ templates to scripting languages
|
|
||||||
|
|
||||||
%template(BOARD_ITEM_List) DLIST<BOARD_ITEM>;
|
|
||||||
%template(MODULE_List) DLIST<MODULE>;
|
|
||||||
%template(TRACK_List) DLIST<TRACK>;
|
|
||||||
%template(PAD_List) DLIST<D_PAD>;
|
|
||||||
|
|
||||||
// std::vector templates
|
// std::vector templates
|
||||||
|
|
||||||
%template(VIA_DIMENSION_Vector) std::vector<VIA_DIMENSION>;
|
%template(VIA_DIMENSION_Vector) std::vector<VIA_DIMENSION>;
|
||||||
|
@ -166,8 +117,6 @@ HANDLE_EXCEPTIONS(BOARD::TracksInNetBetweenPoints)
|
||||||
|
|
||||||
|
|
||||||
%include class_board.h
|
%include class_board.h
|
||||||
|
|
||||||
|
|
||||||
%extend BOARD
|
%extend BOARD
|
||||||
{
|
{
|
||||||
%pythoncode
|
%pythoncode
|
||||||
|
@ -181,14 +130,6 @@ HANDLE_EXCEPTIONS(BOARD::TracksInNetBetweenPoints)
|
||||||
def Save(self,filename):
|
def Save(self,filename):
|
||||||
return SaveBoard(filename,self,IO_MGR.KICAD)
|
return SaveBoard(filename,self,IO_MGR.KICAD)
|
||||||
|
|
||||||
#
|
|
||||||
# add function, clears the thisown to avoid python from deleting
|
|
||||||
# the object in the garbage collector
|
|
||||||
#
|
|
||||||
def Add(self,item):
|
|
||||||
item.thisown=0
|
|
||||||
self.AddNative(item)
|
|
||||||
|
|
||||||
def GetNetClasses(self):
|
def GetNetClasses(self):
|
||||||
return self.GetDesignSettings().m_NetClasses
|
return self.GetDesignSettings().m_NetClasses
|
||||||
|
|
||||||
|
@ -234,32 +175,6 @@ HANDLE_EXCEPTIONS(BOARD::TracksInNetBetweenPoints)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
%extend DRAWSEGMENT
|
|
||||||
{
|
|
||||||
%pythoncode
|
|
||||||
%{
|
|
||||||
def GetShapeStr(self):
|
|
||||||
return self.ShowShape(self.GetShape())
|
|
||||||
%}
|
|
||||||
}
|
|
||||||
|
|
||||||
%extend BOARD_ITEM
|
|
||||||
{
|
|
||||||
%pythoncode
|
|
||||||
%{
|
|
||||||
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)
|
|
||||||
%}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
%feature("notabstract") NETINFO_ITEM;
|
%feature("notabstract") NETINFO_ITEM;
|
||||||
|
|
||||||
// http://swig.10945.n7.nabble.com/std-containers-and-pointers-td3728.html
|
// http://swig.10945.n7.nabble.com/std-containers-and-pointers-td3728.html
|
||||||
|
|
|
@ -24,75 +24,157 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file board_item.i
|
* @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
|
%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); }
|
BOARD_ITEM* Cast_to_BOARD_ITEM(EDA_ITEM* base) { return dynamic_cast<BOARD_ITEM*>(base); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
%{
|
||||||
|
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
|
%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); }
|
|
||||||
|
|
||||||
|
|
||||||
%pythoncode
|
%pythoncode
|
||||||
{
|
%{
|
||||||
def Cast(self):
|
def Cast(self):
|
||||||
|
|
||||||
ct = self.GetClass()
|
ct = self.GetClass()
|
||||||
|
|
||||||
if ct=="PTEXT":
|
if ct=="PTEXT":
|
||||||
return self.Cast_to_TEXTE_PCB()
|
return Cast_to_TEXTE_PCB(self)
|
||||||
elif ct=="BOARD":
|
elif ct=="BOARD":
|
||||||
return self.Cast_to_BOARD()
|
return Cast_to_BOARD(self)
|
||||||
elif ct=="DIMENSION":
|
elif ct=="DIMENSION":
|
||||||
return self.Cast_to_DIMENSION()
|
return Cast_to_DIMENSION(self)
|
||||||
elif ct=="DRAWSEGMENT":
|
elif ct=="DRAWSEGMENT":
|
||||||
return self.Cast_to_DRAWSEGMENT()
|
return Cast_to_DRAWSEGMENT(self)
|
||||||
elif ct=="MGRAPHIC":
|
elif ct=="MGRAPHIC":
|
||||||
return self.Cast_to_EDGE_MODULE()
|
return Cast_to_EDGE_MODULE(self)
|
||||||
elif ct=="MODULE":
|
elif ct=="MODULE":
|
||||||
return self.Cast_to_MODULE()
|
return Cast_to_MODULE(self)
|
||||||
elif ct=="PAD":
|
elif ct=="PAD":
|
||||||
return self.Cast_to_D_PAD()
|
return Cast_to_D_PAD(self)
|
||||||
elif ct=="MTEXT":
|
elif ct=="MTEXT":
|
||||||
return self.Cast_to_TEXTE_MODULE()
|
return Cast_to_TEXTE_MODULE(self)
|
||||||
elif ct=="VIA":
|
elif ct=="VIA":
|
||||||
return self.Cast_to_VIA()
|
return Cast_to_VIA(self)
|
||||||
elif ct=="TRACK":
|
elif ct=="TRACK":
|
||||||
return self.Cast_to_TRACK()
|
return Cast_to_TRACK(self)
|
||||||
elif ct=="PCB_TARGET":
|
elif ct=="PCB_TARGET":
|
||||||
return self.Cast_to_PCB_TARGET()
|
return Cast_to_PCB_TARGET(self)
|
||||||
elif ct=="ZONE_CONTAINER":
|
elif ct=="ZONE_CONTAINER":
|
||||||
return self.Cast_to_ZONE_CONTAINER()
|
return Cast_to_ZONE_CONTAINER(self)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def Duplicate(self):
|
def Duplicate(self):
|
||||||
|
|
||||||
ct = self.GetClass()
|
ct = self.GetClass()
|
||||||
|
|
||||||
if ct=="BOARD":
|
if ct=="BOARD":
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
return Cast_to_BOARD_ITEM(self.Clone()).Cast()
|
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); }
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
|
||||||
|
// Rename Add(), Remove() and Delete() to {Add,Remove,Delete}Native() and
|
||||||
|
// then implement Add() Remove() and Delete() in python so we can manage
|
||||||
|
// the ownership flag: thisown.
|
||||||
|
%rename(AddNative) BOARD_ITEM_CONTAINER::Add;
|
||||||
|
%rename(RemoveNative) BOARD_ITEM_CONTAINER::Remove;
|
||||||
|
%rename(DeleteNative) BOARD_ITEM_CONTAINER::Delete;
|
||||||
|
|
||||||
|
%include board_item_container.h
|
||||||
|
%{
|
||||||
|
#include <board_item_container.h>
|
||||||
|
%}
|
||||||
|
|
||||||
|
%extend BOARD_ITEM_CONTAINER
|
||||||
|
{
|
||||||
|
%pythoncode
|
||||||
|
%{
|
||||||
|
def Add(self,item):
|
||||||
|
"""
|
||||||
|
Add a BOARD_ITEM to this BOARD_ITEM_CONTAINER, clear the thisown to prevent
|
||||||
|
python from deleting the object in the garbage collector
|
||||||
|
Add(BOARD_ITEM_CONTAINER self, BOARD_ITEM aItem, ADD_MODE aMode=ADD_INSERT)
|
||||||
|
Add(BOARD_ITEM_CONTAINER self, BOARD_ITEM aItem)
|
||||||
|
"""
|
||||||
|
item.thisown=0
|
||||||
|
self.AddNative(item)
|
||||||
|
|
||||||
|
def Remove(self,item):
|
||||||
|
"""
|
||||||
|
Remove a BOARD_ITEM from this BOARD_ITEM_CONTAINER, set the thisdown flag so that
|
||||||
|
the python wrapper owns the C++ BOARD_ITEM
|
||||||
|
Remove(self, BOARD_ITEM)
|
||||||
|
"""
|
||||||
|
self.RemoveNative(item)
|
||||||
|
item.thisown=1
|
||||||
|
|
||||||
|
def Delete(self,item):
|
||||||
|
"""
|
||||||
|
Remove a BOARD_ITEM from this BOARD_ITEM_CONTAINER, set the thisdown flag so that
|
||||||
|
the python wrapper does not owns the C++ BOARD_ITEM
|
||||||
|
Delete(self, BOARD_ITEM)
|
||||||
|
"""
|
||||||
|
item.thisown=0 # C++'s BOARD_ITEM_CONTAINER::Delete() will delete
|
||||||
|
self.DeleteNative(item)
|
||||||
|
item.this = None
|
||||||
|
%}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
%include class_dimension.h
|
||||||
|
%{
|
||||||
|
#include <class_dimension.h>
|
||||||
|
%}
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
%include class_drawsegment.h
|
||||||
|
%extend DRAWSEGMENT
|
||||||
|
{
|
||||||
|
%pythoncode
|
||||||
|
%{
|
||||||
|
def GetShapeStr(self):
|
||||||
|
return self.ShowShape(self.GetShape())
|
||||||
|
%}
|
||||||
|
}
|
||||||
|
%{
|
||||||
|
#include <class_drawsegment.h>
|
||||||
|
%}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
%include class_edge_mod.h
|
||||||
|
%{
|
||||||
|
#include <class_edge_mod.h>
|
||||||
|
%}
|
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
%include class_marker_pcb.h
|
||||||
|
%{
|
||||||
|
#include <class_marker_pcb.h>
|
||||||
|
%}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
%include class_mire.h
|
||||||
|
%{
|
||||||
|
#include <class_mire.h>
|
||||||
|
%}
|
||||||
|
|
|
@ -27,11 +27,23 @@
|
||||||
* @brief Specific BOARD extensions and templates
|
* @brief Specific BOARD extensions and templates
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
%import dlist.i
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%include class_module.h
|
||||||
|
|
||||||
|
%rename(Get) operator MODULE*;
|
||||||
|
%template(MODULE_List) DLIST<MODULE>;
|
||||||
|
%{
|
||||||
|
#include <class_module.h>
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
||||||
%extend MODULE
|
%extend MODULE
|
||||||
{
|
{
|
||||||
%pythoncode
|
%pythoncode
|
||||||
%{
|
%{
|
||||||
|
|
||||||
#def SaveToLibrary(self,filename):
|
#def SaveToLibrary(self,filename):
|
||||||
# return SaveModuleToLibrary(filename,self)
|
# return SaveModuleToLibrary(filename,self)
|
||||||
|
@ -51,13 +63,12 @@
|
||||||
elif type(itemC) in [ TEXTE_PCB, DIMENSION, TEXTE_MODULE, DRAWSEGMENT,EDGE_MODULE]:
|
elif type(itemC) in [ TEXTE_PCB, DIMENSION, TEXTE_MODULE, DRAWSEGMENT,EDGE_MODULE]:
|
||||||
item.thisown = 0
|
item.thisown = 0
|
||||||
self.GraphicalItems().PushBack(item)
|
self.GraphicalItems().PushBack(item)
|
||||||
%}
|
%}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
%pythoncode
|
|
||||||
{
|
|
||||||
|
|
||||||
|
%pythoncode
|
||||||
|
%{
|
||||||
def GetPluginForPath(lpath):
|
def GetPluginForPath(lpath):
|
||||||
return IO_MGR.PluginFind(IO_MGR.LEGACY)
|
return IO_MGR.PluginFind(IO_MGR.LEGACY)
|
||||||
|
|
||||||
|
@ -88,7 +99,7 @@
|
||||||
def FootprintIsWritable(lpath):
|
def FootprintIsWritable(lpath):
|
||||||
plug = GetPluginForPath(lpath)
|
plug = GetPluginForPath(lpath)
|
||||||
plug.FootprintLibIsWritable(lpath)
|
plug.FootprintLibIsWritable(lpath)
|
||||||
}
|
%}
|
||||||
|
|
||||||
%{
|
%{
|
||||||
MODULE *PyModule_to_MODULE(PyObject *obj0)
|
MODULE *PyModule_to_MODULE(PyObject *obj0)
|
||||||
|
@ -106,5 +117,4 @@
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
%include class_netclass.h
|
||||||
|
%{
|
||||||
|
#include <class_netclass.h>
|
||||||
|
%}
|
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
%include class_netinfo.h
|
||||||
|
%{
|
||||||
|
#include <class_netinfo.h>
|
||||||
|
%}
|
|
@ -0,0 +1,10 @@
|
||||||
|
|
||||||
|
%include pad_shapes.h
|
||||||
|
%include class_pad.h
|
||||||
|
|
||||||
|
%rename(Get) operator D_PAD*;
|
||||||
|
%template(PAD_List) DLIST<D_PAD>;
|
||||||
|
%{
|
||||||
|
#include <class_pad.h>
|
||||||
|
%}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
%include class_pcb_text.h
|
||||||
|
%{
|
||||||
|
#include <class_pcb_text.h>
|
||||||
|
%}
|
||||||
|
|
|
@ -54,15 +54,6 @@ class BASE_SET {};
|
||||||
%ignore BASE_SET;
|
%ignore BASE_SET;
|
||||||
|
|
||||||
|
|
||||||
// rename the Add method of classes to Add native, so we will handle
|
|
||||||
// the Add method in python
|
|
||||||
%rename(AddNative) *::Add;
|
|
||||||
|
|
||||||
// fix method names conflicts
|
|
||||||
%rename(AddChild) MODULE::Add;
|
|
||||||
%rename(RemoveChild) MODULE::Remove;
|
|
||||||
%rename(DeleteChild) MODULE::Delete;
|
|
||||||
|
|
||||||
|
|
||||||
// this is what it must be included in the wrapper .cxx code to compile
|
// this is what it must be included in the wrapper .cxx code to compile
|
||||||
|
|
||||||
|
@ -124,29 +115,3 @@ HANDLE_EXCEPTIONS(PLUGIN::FootprintDelete)
|
||||||
%include units.i
|
%include units.i
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Extend LSET by 2 methods to add or remove layers from the layer list
|
|
||||||
// Mainly used to add or remove layers of a pad layer list
|
|
||||||
%extend LSET
|
|
||||||
{
|
|
||||||
LSET addLayer( LAYER_ID aLayer) { return self->set(aLayer); }
|
|
||||||
LSET removeLayer( LAYER_ID aLayer) { return self->reset(aLayer); }
|
|
||||||
LSET addLayerSet( LSET aLayerSet) { return *self |= aLayerSet; }
|
|
||||||
LSET removeLayerSet( LSET aLayerSet) { return *self &= ~aLayerSet; }
|
|
||||||
|
|
||||||
%pythoncode
|
|
||||||
%{
|
|
||||||
def AddLayer(self, layer):
|
|
||||||
return self.addLayer( layer )
|
|
||||||
|
|
||||||
def AddLayerSet(self, layers):
|
|
||||||
return self.addLayerSet( layers )
|
|
||||||
|
|
||||||
def RemoveLayer(self, layer):
|
|
||||||
return self.removeLayer( layer )
|
|
||||||
|
|
||||||
def RemoveLayerSet(self, layers):
|
|
||||||
return self.removeLayerSet( layers )
|
|
||||||
%}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
%include class_text_mod.h
|
||||||
|
%{
|
||||||
|
#include <class_text_mod.h>
|
||||||
|
%}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
|
||||||
|
%include class_track.h
|
||||||
|
%rename(Get) operator TRACK*;
|
||||||
|
%template(TRACK_List) DLIST<TRACK>;
|
||||||
|
%{
|
||||||
|
#include <class_track.h>
|
||||||
|
%}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
|
||||||
|
%include class_zone.h
|
||||||
|
%include zones.h
|
||||||
|
%{
|
||||||
|
#include <class_zone.h>
|
||||||
|
#include <zones.h>
|
||||||
|
%}
|
||||||
|
|
Loading…
Reference in New Issue