On 06/30/2012 11:05 AM, Dick Hollenbeck wrote: > On 06/30/2012 06:04 AM, Alexander Lunev wrote: >> Thank you for the comprehensive reply. >> >> On 06/27/2012 02:13 AM, Dick Hollenbeck wrote: >>> The library table allows concurrent use of PLUGIN::Footprint*() functions >>> from multiple >>> alternative technologies. It means you in theory would not need to convert >>> PCAD, *.mod, >>> *.kicad_mod, or eagle footprints, >>> but rather you could use and edit them in situ, as if they were >>> equivalently valid >>> footprints for Pcbnew. >> As I understand it actually works in theory only. If I ultimately convert >> some >> heterogeneous library to KiCad and somehow save it into >> new representation, say SWEET, then in most cases I will need to manually >> correct the >> new saved library components in order to fit their >> drawings in appropriate or better positions because of distortion caused by >> the >> conversion (positioning errors, shape approximation etc.) >> Moreover I can not imagine how to edit components in heterogeneous library >> in situ by >> means of KiCad not spoiling them because of >> distortion caused by import/export on-the-fly. Even though you edit >> the heterogeneous components in situ and manually edit/adapt them to >> KiCad, these components will no longer be well representable in the original >> (heterogeneous) CAD. >> >> Do I understand you right concerning 'in situ'? > > Can we talk about one program at a time? Let's focus on Pcbnew, for which > the PLUGIN > interface exists. > Eeschema is for another day, and I don't think it is pertinent yet. > > What you are saying will be fractionally true, with different magnitudes of > truth > depending on the foreign EDA tool, and to the extent that each foreign tool > has features > that Pcbnew footprints do not support in its footprints. > > I don't see where rounding of numbers enters into it, since we now go to > nanometer resolution. > > The greater the compatibility in footprint features, the greater the ability > to round trip > footprints. > > In the case of Eagle, I did not see anything preventing us from writing > FootprintSave() > and FootprintLoad() and actually using Eagle footprints almost as well as > they do, > including editing them. In situ means "in place". This means just use > eagle footprints > where they live, say under the Eagle directory elsewhere on your hard drive, > no need to > convert them to a different file format. Also keep in mind that: > > a) because the PLUGIN::Footprint*() functions position the MODULE as the go > between > entity, the design encourages the enhancement of MODULE to accomadate > features from other > EDA tools that we currently do not support. > > b) most of the time footprints are read only entities, for if they were not, > why in the > world would the default install of footprint libraries on linux do so into a > read only > directory? > > c) If you can read a footprint well enough to convert it, you can read it > well enough to > certainly use it without writing back to disk other than in a BOARD via > instantiation. > > d) If you can read a footprint well enough to convert it, often you can > figure out how to > write it back out in the foreign format. Two reasons why you might WANT to > do this are: > 1) you intend to inter-operate with a community of designers using that > foreign tool, > 2) you would like them to eventually feel comfortable enough with KiCad to > convert. This > is not particularly different than what Open Office has done. They have > supported both > read and write capability in many different file formats. > > e) There is Pcbnew code to load a geda footprint now, if it was put into a > PLUGIN, then > you'd have read only capability to use those libraries in situ, i.e. without > converting > them first. > > >> Even though you edit the heterogeneous components in situ and manually >> edit/adapt them to >> KiCad, these components will no longer be well representable in the original >> (heterogeneous) CAD. > > I don't know how you get to that above supposition. If you write > PLUGIN::FootprintSave() > then you preserve the ability of the original EDA tool to use your footprint > edits. This > is somewhat like when I send a *.doc file to a MS Word using
oops, user > that I created using Open Office. > > > The last thing I would say about the value of the PLUGIN API is that it is an > organizing > mechanism for future evolution. Just by putting code into the slots provided > in the > plublic PLUGIN API, you are making somebody else's goals more achievable > later in time. > Organized, longer term enhancements become easier. The Most Elaborate Plan > becomes > easier, incrementally. > > The cheapest plan of all is one I did not mention, and that is to inject > PCAD_PLUGIN into > your conversion program, and simply implement as many of the functions in > that separate > executable as you can. This then becomes a building block for someone more > ambitious > later on. > > > Dick > > >> Best regards, >> Alexander Lunev >> >> ------------------------------------------------------------------------------------------ >> *From:* Dick Hollenbeck <d...@softplc.com> >> *To:* kicad-developers@lists.launchpad.net >> *Sent:* Wednesday, June 27, 2012 2:13 AM >> *Subject:* Re: [Kicad-developers] P-Cad plug-in >> >> On 06/26/2012 02:23 PM, Alexander Lunev wrote: >>> It was suggested to implement pcad2kicad converter as pcbnew plug-in. It is >>> clear how >> to do this in the case of pcbnew. Even it is clear >>> how to do this in the case of eeschema. But it is not clear what to do with >> translation of P-Cad libraries (pcb and schematic libraries). >>> Now there are 4 different modes in pcad2kicad converter: converting pcb >>> design files, >> converting pcb library files, converting sch design >>> files and converting sch library files. Considering the user interface how >>> the >> converting libraries could be implemented applied to KiCad? >>> Any considerations? >> >> Here are a couple of alternative plans for the *Pcbnew* portion of the >> problem/opportunity. The degree of thoroughness can vary because Pcbnew >> PLUGIN >> can be implemented to varying degrees. If you do not implement a function >> this is not a >> fatal problem. >> >> >> Elaborate Plan: >> ============== >> a) Implement *all* the functions in PCAD_PLUGIN, especially all >> PCAD_PLUGIN::Footprint*(). >> >> b) Also implement a library table for Pcbnew, see new/sch_lib_table.h and >> new/sch_lib_table.cpp as the basis of >> some new similar class, but you replace LIB_TABLE::ROW::lib with a PLUGIN* >> pointer. This >> architecture >> replaces the Pcbnew library search path design with a library table design. >> An initial >> library table could >> simply be an s-expression text file, like is being parsed for SWEET already. >> Could use >> that parser as as starting point, its done, it works. >> >> The library table allows concurrent use of PLUGIN::Footprint*() functions >> from multiple >> alternative technologies. It means you in theory would not need to convert >> PCAD, *.mod, >> *.kicad_mod, or eagle footprints, >> but rather you could use and edit them in situ, as if they were equivalently >> valid >> footprints for Pcbnew. >> >> >> Mid-level Plan: >> ================ >> a) Implement just the Load() & Footprint{Load,Enumerate}() read only type >> functions. >> >> b) Also implement the library table as above. But hard code any writing of >> footprints >> back through the new KICAD_PLUGIN. >> This basically gives you a read only or edge triggered conversion of >> footprints, but lets >> you access them natively in situ. >> >> >> Lazy Plan: >> ========== >> a) Implement just the Load() & Footprint{Load,Enumerate}() read only type >> functions. >> >> b) Use Miguels scripting to convert from PCAD to s-expression both boards >> and footprints >> on the assumption that the scripting housing could simaltaneously manage two >> plugins. >> Read a footprint, write a footprint. Read a board, write a board. You >> bother with >> scripting because its going to happen again on the next PLUGIN. >> >> >> One of the most frequently reported bug reports that has been seen over the >> last five >> years is the library search path. I don't like that design and never have. >> Obviously I have thought that the library table concept is better, since >> that is what I >> had coded for SWEET. You can actually see it in operation if you single step >> through the SWEET test program. The key to it is the "logical library >> name". In Pcbnew >> you have something like a shortened library name in the UI already, and it >> is currently >> the last part of the library path. With the library table, it becomes more >> meaningful, it >> is an index into the library table. >> >> So if you can see the value in the library table concept, it needs to come >> in even on its >> own merits, aside from this discussion. Once there is buy in for that, >> then the Mid-level Plan starts looking pretty doable for footprint access. >> >> In all cases, just having PLUGIN::Load() gives you the BOARD. So selecting >> a plan from >> above is tantamount to deciding how you plan on handling footprints. >> >> >> ================================================ >> >> EESCHEMA >> >> My concept for SWEET does not encompass any full schematic treatment like >> PLUGIN::Save() >> or Load(). I only intended to support part retrieval, and since the major >> driver was to >> get these parts over the Internet, the representation of the part is SWEET >> text. This >> means that if you were going to convert from a foreign format, you would do >> it way down >> low, and are actually required to return a SWEET string, not actually load >> it into a C++ >> structure. So the design is completely different in the following ways: >> >> a) API requires that SWEET *textual* representation be the returned results. >> b) API intends to be REMOTED. >> c) Inheritance is supported, we can and want to do small changes to someone >> else's work, >> and this requires text to do it. >> >> It does not contemplate nor address anything to do with full schematic >> loading. In fact, >> this library could be used by any other schematic tool, perhaps geda. >> >> Since SWEET is not part of EESCHEMA, and SWEET is not a schematic plugin, >> but rather a >> part plugin for a schematic tool, you do have the option of simply creating >> a new >> PLUGIN design for EESCHEMA which only encompasses the full schematic, i.e. >> Load() and >> Save(). Leave the part plugin portion out of it and plan on incorporating >> SWEET down the >> line. >> >> >> Dick >> >> >> >> >>> Best regards, >>> Alexander Lunev >>> >>> _______________________________________________ >>> Mailing list: https://launchpad.net/~kicad-developers >> <https://launchpad.net/%7Ekicad-developers> >>> Post to : kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >>> Unsubscribe : https://launchpad.net/~kicad-developers >> <https://launchpad.net/%7Ekicad-developers> >>> More help : https://help.launchpad.net/ListHelp >>> . >>> >> >> >> _______________________________________________ >> Mailing list: https://launchpad.net/~kicad-developers >> <https://launchpad.net/%7Ekicad-developers> >> Post to : kicad-developers@lists.launchpad.net >> <mailto:kicad-developers@lists.launchpad.net> >> Unsubscribe : https://launchpad.net/~kicad-developers >> <https://launchpad.net/%7Ekicad-developers> >> More help : https://help.launchpad.net/ListHelp >> >> > _______________________________________________ Mailing list: https://launchpad.net/~kicad-developers Post to : kicad-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~kicad-developers More help : https://help.launchpad.net/ListHelp