← Back to team overview

kicad-developers team mailing list archive

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

 

Just to be clear, these patches are not critical for the feature freeze.
If I manage to get them merged before the freeze is announced - cool,
otherwise we will have a reward for our dedicated nightly build testers
in v6.

Regards,
Orson

On 11/23/2017 04:28 PM, Maciej Sumiński wrote:
> Ok, that is good news. Would you share the files licensed under GPLv3? I
> think I can handle the rest of potential problems.
> 
> Regards,
> Orson
> 
> On 11/23/2017 04:03 PM, Michael Geselbracht wrote:
>> Hi,
>> these files were written by me. The comment blocks at the top are generated
>> by Eclipse ("let" is my login name).
>> I am afraid that the coding style is about the opposite of the rules for
>> Kicad. But if you can use the code feel free to do so.
>>
>> The current implementation has some issues:
>> 1. The "%g" format in sprintf() does some rounding  which is probably
>> undesired (15.12356 -> 15.1236).
>> 2. The decimal separator is set to '.' the input language settings by the
>> user are not taken into account.
>> 3. I did not check for memory leaks or buffer overflows.
>>
>>  - Michael
>>
>>
>> On Thu, Nov 23, 2017 at 2:36 PM, Maciej Sumiński <maciej.suminski@xxxxxxx>
>> wrote:
>>
>>> 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
>>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> 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


References