← Back to team overview

kicad-developers team mailing list archive

Re: [PATCH] Math expression support for pad editor.

 

We still do not have the feature freeze, so there is still a chance to
shove it to the master branch. I feel a bit uneasy about exprtk (over 1
MB header file), but Michael's parser approach seems like a good
solution to me. We can extend it later as the lemon format is not very
complex.

I took Michael's parser, but modified the way the expression evaluation
is done in dialog windows. Instead of adding the evaluator and focus
event handlers to each dialog, I wrote a wrapper around wxTextCtrl that
handles the process. I also converted most of pcbnew text input controls
to use the wrapper, so with the patch merged one should be able to
evaluate math in almost every text control that expects a numeric value.
If you are interested, the patches are in my branch [1].

My only concern is about two files (libeval/numeric.[h,cpp], [2]) that
have an author, but no license. Michael, where did you get these files?
We should contact the author to get permission to use the code.
Otherwise we will need to replace these files.

Regards,
Orson

1. https://code.launchpad.net/~orsonmmz/kicad/+git/kicad/+ref/expr_eval
2.
https://git.launchpad.net/~orsonmmz/kicad/tree/common/libeval/numeric_evaluator.cpp?h=expr_eval

On 09/02/2017 05:49 PM, Michael Geselbracht wrote:
> Creating a variable looks a bit complicated to me. And if I see it
> correctly it is not possible with exprtk to use constants with units
> (0.16").
> Maybe it would be possible to provide functions that do the math like
> fromInch(0.16).
> 
> That is the beauty of a parser generator. You can define the desired syntax
> yourself.
> 
> I have added support for variables to my parser approach. Now I can write
> things like this:
> 
> [Scratch Pad, global unit set to inch]
> e=0.4mm; L=0.8mm; E=2.5mm
> 
> PosX: -3.5*e
> PosY: E/2-L/2+0.1mm
> 
> I have attached a patch of my implementation. It adds the evaluator (object
> size ~120kB) and includes it to the pad- and footprint dialogs.
> The pad dialog contains a (misaligned and too small) scratch pad.
> 
> The code is a mess and wouldn't make it into Kicad. But it works for me and
> maybe you'll end up with your own parser solution.
> The interface is not too different from exprtk so you wouldn't have to
> throw away your work. If you want to play with the grammar
> file you'll need the lemon parser generator ($ lemon grammar.lemon).
> 
>  - Michael
> 
> 
> On Fri, Sep 1, 2017 at 3:23 AM, Russell Oliver <roliver8143@xxxxxxxxx>
> wrote:
> 
>> Scratch Pad:
>> I think this will be easily doable as an additional text box in the
>> dialog, which is then added to the beginning of the expression for each
>> text box. The format for the math library is as follows
>>
>>    (a) Initialise x to zero
>>        var x;
>>
>>    (b) Initialise y to three
>>        var y := 3;
>>
>>    (c) Initialise z to the expression
>>        var z := if (max(1,x + y) > 2,w,v);
>>
>> Global variable support:
>> I think this is possible but a simpler path might be to use a global
>> scratch pad, which would be added first to the beginning of the expression
>> used for the text box.
>>
>> Currently the expression text ie something like "posx + 1" isn't saved
>> within the dialog or for the component.
>>
>> Regards
>> Russell
>>
>>
>>
>>
>>
>> On Fri, Sep 1, 2017 at 7:46 AM Michael Geselbracht <
>> mgeselbracht3@xxxxxxxxx> wrote:
>>
>>> Hi,
>>>
>>> I have tested the patch and I really like this feature. This automatic
>>> variable assignment will sure come in handy.
>>> How about adding a kind of scratch pad (a single line should do) to the
>>> footprint editor so that one can add variables (measurements) given in
>>> datasheets?
>>> Like "c1=2.9; e=0.635" in the scratch pad and then in PosX field: "-c1/2
>>> " and PosY: "-1.5*e" in order to place the first pad.
>>>
>>>   - Michael
>>>
>>>
>>> On Thu, Aug 31, 2017 at 3:58 PM, Tomasz Wlostowski <
>>> tomasz.wlostowski@xxxxxxx> wrote:
>>>
>>>> On 31.08.2017 15:27, Russell Oliver wrote:
>>>>> Hi All.
>>>>>
>>>>> As a follow up to my earlier post, attached is a patch that implement
>>>>> math expressions in the pad editor as well.
>>>>>
>>>>> A nifty feature is that the fields can be referenced from each other.
>>>>> currently the fields are referenced by the following names.
>>>>> - posx, posy, sizex, sizey, offsetx, offsetx, drillx, drillx.
>>>>
>>>> Hi Russell,
>>>>
>>>> Didn't have the time to check your patch yet, but I came up with an
>>>> idea: add global variable support to the math parser, so that if you
>>>> place a text anywhere in the design assigning to a variable (e.g.
>>>> var=10), it will be updated in any of the expressions that reference it.
>>>>
>>>> Cheers,
>>>> Tom
>>>>
>>>> _______________________________________________
>>>> Mailing list: https://launchpad.net/~kicad-developers
>>>> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>> Unsubscribe : https://launchpad.net/~kicad-developers
>>>> More help   : https://help.launchpad.net/ListHelp
>>>>
>>>
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~kicad-developers
>>> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> Unsubscribe : https://launchpad.net/~kicad-developers
>>> More help   : https://help.launchpad.net/ListHelp
>>>
>>
> 
> 
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help   : https://help.launchpad.net/ListHelp
> 


Attachment: signature.asc
Description: OpenPGP digital signature


Follow ups

References