← Back to team overview

kicad-developers team mailing list archive

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

 

Hi,
I have replaced the useless file info comments by a GPLv3 header  in order
to make my "libeval" code license-wise compatible to the Kicad project.

 - Michael


On Thu, Nov 23, 2017 at 7:59 PM, Maciej Suminski <maciej.suminski@xxxxxxx>
wrote:

> Hi Michael,
>
> I apologize for being stubborn, but would you send this message to the
> mailing list? I was the only recipient of the message, so noone else
> knows you published your files under the GPL license. It could look
> suspicious if I committed your files with changed license without your
> prior permission.
>
> Regards,
> Orson
>
> On 11/23/2017 06:15 PM, Michael Geselbracht wrote:
> > I have simply added a GPLv3 header to the relevant files. Hope it's ok.
> >
> >  - Michael
> >
> >
> > On Thu, Nov 23, 2017 at 5:46 PM, Maciej Sumiński <
> maciej.suminski@xxxxxxx>
> > wrote:
> >
> >> 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
> >>>
> >>
> >>
> >>
> >> _______________________________________________
> >> 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: libeval.zip
Description: Zip archive


Follow ups

References