← Back to team overview

kicad-developers team mailing list archive

Re: [Bug 1069765] [NEW] Module scale is altered after export and reimport


On 10/24/2012 01:29 PM, Dick Hollenbeck wrote:
> On 10/24/2012 11:09 AM, Wayne Stambaugh wrote:
>> On 10/24/2012 10:28 AM, Dick Hollenbeck wrote:
>>> On 10/23/2012 03:53 PM, Wayne Stambaugh wrote:
>>>> On 10/23/2012 9:44 AM, Dick Hollenbeck wrote:
>>>>> On 10/22/2012 08:44 PM, Wayne Stambaugh wrote:
>>>>>> Dick,
>>>>>> I figured out what the problem is.  To be honest, I'm not sure how the
>>>>>> library cache loader didn't fail.  When a NULL BOARD item is passed to
>>>>>> the PCB_PARSER constructor, no layer look up table is created.  When you
>>>>>> attempt to parse the module input, the layer checking algorithm
>>>>>> complains that the layer is indeed not there.  The solution is to
>>>>>> populate the layer look up table with the default layer values using
>>>>>> BOARD::GetDefaultLayerName().
>>>>> That sounds exactly like what I had in mind.  Then after that constructor, if a board is
>>>>> present it could overwrite entries in that same hashtable I guess.
>>>> I was actually thinking about using a static member hash table to store
>>>> the default table.
>>> Why?
>>> It's the same amount of code, yet is requires more memory space and reduces program
>>> startup time.
>>> I don't see the advantage.  Plus this won't cover the case where there is a roque yet
>>> valid layername in a board.
>>> I'd go with the constructor approach, then only have to do straight line
>>> hashtable lookups.
>> The memory use should be fairly minimal as the hash table is nothing 
>> more than a wxString used to look up a LAYER object where the maximum 
>> number of layer objects is currently 32.  No start up penalty would be 
>> incurred.  The default layer look up table would be populated at run 
>> time the first time is needed.  Since the default layer table is fixed 
>> (unlike the board layer table which can have user defined names), it 
>> only needs to be populated once.  My thinking on this was not have to 
>> recreate the exact same layer look up table for every new instance of 
>> PCB_PARSER which when loading the new footprint library would occur for 
>> each footprint file in the library.  If you think the memory hit is more 
>> detrimental than the performance hit for recreating the table for every 
>> instance of PCB_PARSER, I'm wouldn't be opposed to populating the 
>> current look up table with the default layers in the constructor of 
> No mention was made of my concern for rogue layernames, but I think I understand your
> concerns fully now.
> Its going to be easier for me to just fix this.
> Thanks for your pointers.
> The conversation is taking longer than the coding would.
> Dick

Now moved to mailing list....

I've been keeping the door open to installing a hashtable into DSNLEXER for keyword lookup.

Instantiating PCB_PARSER for each footprint makes this worrisome, as loading a keyword
hashtable is even a larger task than what we've been talking about. 

So I put in a PCB_PARSER that lives as long as the PCB_IO does by making it a member.

PCB_PARSER::init() is now the logical place to load m_layerTable with default layer names.

You were correct about finding those laying around not already translated.   :)

Thanks again,


Follow ups