Hi Miguel- This sounds pretty awesome! But for some reason I can't build it (revno 3453):
... ... [ 67%] Building CXX object pcbnew/CMakeFiles/_pcbnew.dir/scripting/pcbnewPYTHON_wrap.cxx.o /Projects/linux/kicad/build.scripting.bzr/Release/pcbnew/scripting/pcbnewPYTHON_wrap.cxx: In function 'PyObject* _wrap_DHEAD_VerifyListIntegrity(PyObject*, PyObject*)': /Projects/linux/kicad/build.scripting.bzr/Release/pcbnew/scripting/pcbnewPYTHON_wrap.cxx:3985:11: error: 'class DHEAD' has no member named 'VerifyListIntegrity' /Projects/linux/kicad/build.scripting.bzr/Release/pcbnew/scripting/pcbnewPYTHON_wrap.cxx: In function 'PyObject* _wrap_EDA_ITEM_Show(PyObject*, PyObject*)': /Projects/linux/kicad/build.scripting.bzr/Release/pcbnew/scripting/pcbnewPYTHON_wrap.cxx:7210:29: error: 'const class EDA_ITEM' has no member named 'Show' /Projects/linux/kicad/build.scripting.bzr/Release/pcbnew/scripting/pcbnewPYTHON_wrap.cxx: In function 'PyObject* _wrap_EDA_ITEM_ShowDummy(PyObject*, PyObject*)': /Projects/linux/kicad/build.scripting.bzr/Release/pcbnew/scripting/pcbnewPYTHON_wrap.cxx:7243:29: error: 'const class EDA_ITEM' has no member named 'ShowDummy' .... .... (and lots more) My cmake: cmake ../../scripting -DKICAD_SCRIPTING=ON -DKICAD_SCRIPTING_MODULES=ON -DUSE_NEW_PCBNEW_LOAD=ON -DUSE_NEW_PCBNEW_SAVE=ON -DKICAD_STABLE_VERSION=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr I have swig 2.0.4 and python 3.2.2. Do I need anything else? Thanks- -lajos On Sun, Mar 18, 2012 at 12:19 PM, Miguel Angel Ajo Pelayo <[email protected]> wrote: > > Hi All, > > I wanted to share our progress on this, and ask a few questions. > > At this moment, we're already able to: > > 1) run scripts (python) from inside pcbnew, > pcbnew.GetBoard() must return our current BOARD* in the editor. > > A little example: > > from pcbnew import * > > m = GetBoard().m_Modules > > x,y=54000,54000 > i=1 > > while m: > m.SetPosition(wxPoint(x+i*2000,y)) > m.SetReference("C%d"%i) > i+=1 > m = m.Next() > > > 2) run pcbnew classes and objects from inside a standalone python script. > > #!/bin/env python > from pcbnew import * > > pcb = LoadBoard("/tmp/my.brd") > m = pcb.m_Modules > > x,y=54000,54000 > i=1 > > while m: > m.SetPosition(wxPoint(x+i*2000,y+i*1000)) > m.SetReference("C%d"%i) > i+=1 > m = m.Next() > > SaveBoard("/tmp/my.brd",pcb) > > Same example from commandline: > > For which I added some functions to easily load or save a PCB file via > IO_MGR // KICAD_PLUGIN (as Dick asked, it > was the best way) > > I added typemaps for strings<->wxString, and also wrappers for wxPoint > and wxRect, which let > us to talk to methods depending on this types. > > We have wrappers for most objects (BOARD, COMPONENT, PAD, segments , > tracks, text, etc... ) and lists (DLIST based), > but we still miss access to std::vector and std::list objects yet. > > > We already have something quite useful, but testing is very welcome. > > https://code.launchpad.net/~miguelangel-r/kicad/scripting > > I only tested it on Linux/x86, and will test on Linux/x64, but testing in > other systems is welcome. > To build the branch you should compile with: > > KICAD_SCRIPTING (for embedded scripting support in pcbnew) > KICAD_SCRIPTING_MODULES (for module scripting support from python) > USE_NEW_PCBNEW_LOAD > USE_NEW_PCBNEW_SAVE > > > The problems I facing now are: > > a) Some pcbnew functionalities are highly coupled with UI, so dependencies > from objects to UI > are in many places (making the .SO/.DLL module approach very hard), I tried > to split in ui and > non ui .cpp files, but I ended always with linking problems, so the > currently built _pcbnew.so links > all the UI items inside, it works prefectly, but most code won't be ever > called. > > b) From a), for example, I'm not able to load a MODULE object from library, > without having a > PCB_BASE_FRAME object: > > from loadcmp.cpp: > > MODULE* PCB_BASE_FRAME::GetModuleLibrary( const wxString& > aLibraryFullFilename, > const wxString& aModuleName, > bool > aDisplayMessageError ) > > This could be fixed by splitting the library functionality in a different > class, and then using it > from those functions (and from scripting). > > c) same for DRC, I thought it could be very helpful to run DRC checkings > (automated commandline > scripts for DRC checking) , but it also was highly coupled to the UI. > > d) this is minor, but it's there... if you run pcbnew from the same > directory _pcbnew.so is (this is normal > when building), then pcbnew will load _pcbnew.so from it's local directory > (this is some swig feature...), > then GetBoard() won't work (return None) because it's a separeted instance > from our running pcbnew..., > so if you want to test ./pcbnew from your build directory, then move > _pcbnew.so somewhere else ;) > > > e) other minor, if you make install to /usr/local, then the _pcbnew.so and > pcbnew.py will go to > /usr/local/share/python, which is out of the normal python path, so you will > need to do: > > export PYTHONPATH=$PYTHONPATH:/usr/local/share/python > > and then run your script. > > > > I will keep working on it, and keep you updated, but any tests/feedback are > really welcome :-) > > > -- > > Miguel Angel Ajo Pelayo > http://www.nbee.es > +34 636 52 25 69 > skype: ajoajoajo > > _______________________________________________ > Mailing list: https://launchpad.net/~kicad-developers > Post to : [email protected] > Unsubscribe : https://launchpad.net/~kicad-developers > More help : https://help.launchpad.net/ListHelp > _______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : [email protected] Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp

