← Back to team overview

kicad-developers team mailing list archive

Re: Pcbnew Python Interface breakage?

 

Le 27/06/2017 à 17:03, Kaspar Emanuel a écrit :
> I am just looking at writing a fix at
> https://github.com/KiCad/kicad-source-mirror/blob/37f8c83c5bc5e8a61cc25d69de569dee7eea0e9f/pcbnew/swig/module.i#L69
> 
> If you can see a quick fix you could probably save me a lot of time as I am planning on getting my
> KiCad build set up again and submitting a patch.
> 

Hi Kasper,
Please, test this patch.


-- 
Jean-Pierre CHARRAS
 pcbnew/swig/module.i | 73 +++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 50 insertions(+), 23 deletions(-)

diff --git a/pcbnew/swig/module.i b/pcbnew/swig/module.i
index b03c73c..600011e 100644
--- a/pcbnew/swig/module.i
+++ b/pcbnew/swig/module.i
@@ -60,39 +60,66 @@
     %}
 }
 
+%extend PLUGIN
+{
+    // This version of FootprintEnumerate is for Python scripts, because the c++
+    // VERSION of FootprintEnumerate is not easy to handle in these Python scripts
+
+    wxArrayString footprintPyEnumerate( const wxString& aLibraryPath )
+    {
+        wxArrayString footprintNames;
+
+        try
+        {
+            self->FootprintEnumerate( footprintNames, aLibraryPath );
+        }
+        catch( const IO_ERROR& error )
+        {
+        }
+
+        return footprintNames;
+    }
+
+    %pythoncode
+    %{
+        def FootprintEnumerate(self, libname):
+            return self.footprintPyEnumerate( libname )
+    %}
+}
 
 %pythoncode
 %{
-    def GetPluginForPath(lpath):
-        return IO_MGR.PluginFind(IO_MGR.LEGACY)
+    def GetPluginForPath(libname):
+        plugin_type = IO_MGR.GuessPluginTypeFromLibPath( libname );
+        return IO_MGR.PluginFind(plugin_type)
 
-    def FootprintEnumerate(lpath):
-        plug = GetPluginForPath(lpath)
-        return plug.FootprintEnumerate(lpath)
+    def FootprintEnumerate(libname):
+        plug = GetPluginForPath(libname)
+        return plug.FootprintEnumerate(libname)
 
-    def FootprintLoad(lpath,name):
-        plug = GetPluginForPath(lpath)
-        return plug.FootprintLoad(lpath,name)
+    def FootprintLoad(libname,name):
+        plug = GetPluginForPath(libname)
+        return plug.FootprintLoad(libname,name)
 
-    def FootprintSave(lpath,module):
-        plug = GetPluginForPath(lpath)
-        return plug.FootprintSave(lpath,module)
+    def FootprintSave(libname,module):
+        plug = GetPluginForPath(libname)
+        return plug.FootprintSave(libname,module)
 
-    def FootprintDelete(lpath,name):
-        plug = GetPluginForPath(lpath)
-        plug.FootprintDelete(lpath,name)
+    def FootprintDelete(libname,name):
+        plug = GetPluginForPath(libname)
+        plug.FootprintDelete(libname,name)
 
-    def FootprintLibCreate(lpath):
-        plug = GetPluginForPath(lpath)
-        plug.FootprintLibCreate(lpath)
+    def FootprintLibCreate(libname):
+        plug = GetPluginForPath(libname)
+        plug.FootprintLibCreate(libname)
 
-    def FootprintLibDelete(lpath):
-        plug = GetPluginForPath(lpath)
-        plug.FootprintLibDelete(lpath)
+    def FootprintLibDelete(libname):
+        plug = GetPluginForPath(libname)
+        plug.FootprintLibDelete(libname)
 
-    def FootprintIsWritable(lpath):
-        plug = GetPluginForPath(lpath)
-        plug.FootprintLibIsWritable(lpath)
+    def FootprintIsWritable(libname):
+        plug = GetPluginForPath(libname)
+        plug.FootprintLibIsWritable(libname)
 %}
 
 

Follow ups

References