Callers of the form:

        GetSelectMenuText( EDA_UNITS::MILLIMETRES );

are most likely test cases.

Dialogs also know what the user units are, so you can get it from there too if 
you don’t have a frame.

But yes, I spent a lot of time divorcing GetSelectMenuText() from global 
variables and the frame; I’d hate to see it lost.

On the topic Jon and Ian were discussing (one parameter or two) I don’t have 
strong feelings.

Cheers,
Jeff.


> On 10 Jul 2020, at 21:30, Jon Evans <j...@craftyjon.com> wrote:
> 
> The way I see it, there is one package of information that we should
> be delivering: how to turn internal units into real text for display.
> That information includes both a units selection and whatever
> transform to apply in case there are coordinates involved.
> 
> I see no benefit into splitting that into two arguments.
> 
> On Fri, Jul 10, 2020 at 4:27 PM Ian McInerney <ian.s.mciner...@ieee.org> 
> wrote:
>> 
>> Doesn't the origin transform operate on the IU and not use the units 
>> directly (so the units are only needed by the actual menu text generation 
>> function)? If they are separate, then we should pass them as two individual 
>> arguments to the GetSelectMenuText function.
>> 
>> -Ian
>> 
>> On Fri, Jul 10, 2020 at 8:40 PM Jon Evans <j...@craftyjon.com> wrote:
>>> 
>>> It would be preferable to make it possible to call GetSelectMenuText
>>> (or really, any facility that needs access to the current units and
>>> coordinate transform) without a frame.
>>> 
>>> We have recently been putting a lot of effort into separating the
>>> logic code from the UI / frame code in KiCad, and it would be a shame
>>> to introduce something that ties them together.
>>> 
>>> What about bundling together the units selection and the origin
>>> transforms into a single object that can be passed into
>>> GetSelectMenuText instead of the EDA_DRAW_FRAME?
>>> 
>>> That would make it easier to write testcases and other standalone
>>> chunks of code that can pass in arbitrary units and transforms without
>>> having to construct a frame.
>>> 
>>> -Jon
>>> 
>>> On Fri, Jul 10, 2020 at 3:33 PM Reece R. Pollack <re...@his.com> wrote:
>>>> 
>>>> The units selection and the origin transforms are both available through
>>>> the EDA_DRAW_FRAME. I haven't looked at every call in detail (there are
>>>> a combined 118 calls and function declarations), but it appears that
>>>> when the caller has access to an EDA_DRAW_FRAME then the call is some
>>>> variant of:
>>>> 
>>>>      GetSelectMenuText( m_editFrame->GetUserUnits() );
>>>> 
>>>> Where there isn't access to an EDA_DRAW_FRAME, it's coded as:
>>>> 
>>>>      GetSelectMenuText( EDA_UNITS::MILLIMETRES );
>>>> 
>>>> It seems to me that if we're going to change the parameters to this
>>>> function, we should pass a pointer to an EDA_DRAW_FRAME as a single
>>>> parameter. If this parameter is nullptr, then we assume
>>>> EDA_UNITS::MILLIMETRES and null transforms, otherwise we use the getter
>>>> functions in EDA_DRAW_FRAME to get the correct object or data.
>>>> 
>>>> I'd need to see more than a few nodding heads before I made either of
>>>> these changes.
>>>> 
>>>> -Reece
>>>> 
>>>> On 7/10/20 3:00 PM, Jeff Young wrote:
>>>>> I agree on both points: units and transform should be saved in the 
>>>>> project file, and they should be passed to GetSelectMenuText as 
>>>>> parameters.
>>>>> 
>>>>> Cheers,
>>>>> Jeff.
>>>>> 
>>>>> 
>>>>>> On 10 Jul 2020, at 19:35, Jon Evans <j...@craftyjon.com> wrote:
>>>>>> 
>>>>>> OK, I see.
>>>>>> 
>>>>>> I have mostly stayed out of this conversation before so I will
>>>>>> probably step back, but I would suggest that I think that display
>>>>>> units and origin choice should be a project-level setting, not
>>>>>> system-level.
>>>>>> 
>>>>>> Probably it makes sense to change GetSelectMenuText so that it has
>>>>>> this context available somehow (whether by passing in an
>>>>>> EDA_DRAW_FRAME or by just passing in the ORIGIN_TRANSFORMS or
>>>>>> whatever)
>>>>>> 
>>>>>> -Jon
>>>>>> 
>>>>>> On Fri, Jul 10, 2020 at 2:29 PM Reece R. Pollack <re...@his.com> wrote:
>>>>>>> Jon,
>>>>>>> 
>>>>>>> The alternate origins themselves (Place & Drill / Aux origin, and Grid
>>>>>>> origin) in Pcbnew are stored in the BOARD_DESIGN_SETTINGS class and
>>>>>>> saved in the board file. Of course, the Page origin location doesn't
>>>>>>> need to be stored; it's always (0,0).
>>>>>>> 
>>>>>>> My initial thought last year was to store the user's choice of display
>>>>>>> origin in the board file, but after some discussion we reached consensus
>>>>>>> that the choice of display origin was more like millimeters/inches and
>>>>>>> thus should be a user option rather than a board property. In the
>>>>>>> proposed implementation, the user's preference for which origin is used
>>>>>>> for display is stored in the PCB_DISPLAY_OPTIONS class and saved in the
>>>>>>> pcbnew.json file. I think a case could be made that this should be saved
>>>>>>> per-project, but no one has made a good argument for that.
>>>>>>> 
>>>>>>> 
>>>>>>> The primary user of the display origin transforms is the UNIT_BINDER
>>>>>>> class. This class has a pointer to the EDA_DRAW_FRAME object.  Since
>>>>>>> UNIT_BINDER is common, I added a virtual function
>>>>>>> "GetOriginTransforms()" to the EDA_DRAW_FRAME class. This function
>>>>>>> returns a reference to an ORIGIN_TRANSFORMS class. The base
>>>>>>> implementation of the ORIGIN_TRANSFORMS class contains functions that
>>>>>>> return their coordinate arguments unchanged. This way none of the KiCad
>>>>>>> applications see a change in behavior unless they override the
>>>>>>> GetOriginTransforms() function.
>>>>>>> 
>>>>>>> In the case of Pcbnew, the EDA_DRAW_FRAME parameter is actually a
>>>>>>> pointer to a PCB_BASE_FRAME object. In this class, the
>>>>>>> GetOriginTransforms() function is overridden and returns a reference to
>>>>>>> a PCB_ORIGIN_TRANSFORMS object. This object's functions know how to
>>>>>>> access the BOARD_DESIGN_SETTINGS and PCB_DISPLAY_OPTIONS objects through
>>>>>>> the PCB_BASE_FRAME object and perform the needed transformations.
>>>>>>> 
>>>>>>> This works for everything that can find the EDA_DRAW_FRAME object, like
>>>>>>> UNIT_BINDER. The GetMsgPanelInfo functions take an EDA_DRAW_FRAME
>>>>>>> pointer as a parameter, so this isn't a problem. However, the
>>>>>>> GetSelectMenuText() functions take only an EDA_UNITS parameter. Thus my
>>>>>>> problem.
>>>>>>> 
>>>>>>> -Reece
>>>>>>> 
>>>>>>> On 7/10/20 1:25 PM, Jon Evans wrote:
>>>>>>>> Shouldn't the origin be stored in the design data (BOARD / SCHEMATIC)
>>>>>>>> rather than the base frame?
>>>>>>>> 
>>>>>>>> It seems like all data about objects, including their coordinates in
>>>>>>>> the coordinate space defined by the user, should be available just by
>>>>>>>> parsing a board or schematic file (which should be independent of the
>>>>>>>> EDA_BASE_FRAME)
>>>>>>>> 
>>>>>>>> -Jon
>>>>>>>> 
>>>>>>>> On Fri, Jul 10, 2020 at 1:18 PM Reece R. Pollack <re...@his.com> wrote:
>>>>>>>>> Jeff,
>>>>>>>>> 
>>>>>>>>> Thanks for the follow-up.
>>>>>>>>> 
>>>>>>>>> I'm finding some of the GetSelectMenuText() implementations format
>>>>>>>>> coordinate addresses for display. That means they need to use display
>>>>>>>>> origin transforms so the displayed coordinate matches what the user 
>>>>>>>>> sees
>>>>>>>>> on the status line and elsewhere. However, there does not appear to 
>>>>>>>>> be a
>>>>>>>>> path from these functions to the EDA_BASE_FRAME class where these
>>>>>>>>> transforms are currently available.
>>>>>>>>> 
>>>>>>>>> Might someone more familiar with the data structures and calling
>>>>>>>>> sequences could suggest how this can best be accomplished?
>>>>>>>>> 
>>>>>>>>> Seth, I'd appreciate it if you could bring your knowledge and 
>>>>>>>>> expertise
>>>>>>>>> to bear.
>>>>>>>>> 
>>>>>>>>> -Reece
>>>>>>>>> 
>>>>>>>>> On 7/10/20 6:35 AM, Jeff Young wrote:
>>>>>>>>>> No, the DRC re-write won’t affect GetSelectMenuText().  It 
>>>>>>>>>> originated for describing items in the Clarify Selection menu, but 
>>>>>>>>>> it’s now used whenever we want to describe an item to the user.
>>>>>>>>>> 
>>>>>>>>>>> On 10 Jul 2020, at 00:51, Reece R. Pollack <re...@his.com> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> On 7/9/20 7:09 PM, Tomasz Wlostowski wrote:
>>>>>>>>>>>> On 10/07/2020 00:58, Reece R. Pollack wrote:
>>>>>>>>>>>>> I'm looking at display origin transformations for DRC reports.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> With the 5.1.x branch Pcbnew, the DRC report dialog box message 
>>>>>>>>>>>>> texts
>>>>>>>>>>>>> contained the Cartesian coordinates of each flagged item. It 
>>>>>>>>>>>>> appears
>>>>>>>>>>>>> that the 5.99 branch no longer displays the coordinates of DRC 
>>>>>>>>>>>>> items.
>>>>>>>>>>>>> However, the Cartesian coordinates are still listed in the report 
>>>>>>>>>>>>> file.
>>>>>>>>>>>>> Unlike the display in a dialog box, this report is persistent and 
>>>>>>>>>>>>> could
>>>>>>>>>>>>> be passed to someone using different display origin settings.
>>>>>>>>>>>>> 
>>>>>>>>>>>>>   1. Should these coordinates be reported relative to the page 
>>>>>>>>>>>>> origin, or
>>>>>>>>>>>>>      transformed per the user-selected origin and axis directions?
>>>>>>>>>>>>>   2. If the coordinates are transformed, should the report 
>>>>>>>>>>>>> include the
>>>>>>>>>>>>>      user settings?
>>>>>>>>>>>>> 
>>>>>>>>>>>>> -Reece
>>>>>>>>>>>>> 
>>>>>>>>>>>> Reece,
>>>>>>>>>>>> 
>>>>>>>>>>>> I wouldn't introduce any changes to the current DRC code, we're
>>>>>>>>>>>> designing a new DRC engine for KiCad V6 and many things in DRC 
>>>>>>>>>>>> interface
>>>>>>>>>>>> will likely change.
>>>>>>>>>>>> 
>>>>>>>>>>>> IMHO the DRC coordinate transform belongs to the UI, not the DRC 
>>>>>>>>>>>> itself:
>>>>>>>>>>>> - the DRC engine generates an internal report with coordinates in 
>>>>>>>>>>>> board
>>>>>>>>>>>> coordinate space
>>>>>>>>>>>> - whatever displays the report to the user (i.e. the DRC dialog)
>>>>>>>>>>>> converts the board coordinates to UI coordinates.
>>>>>>>>>>>> 
>>>>>>>>>>>> - my 5 cents
>>>>>>>>>>>> Tom
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> Tom,
>>>>>>>>>>> 
>>>>>>>>>>> I'm not hard to convince, especially when it means doing less work.
>>>>>>>>>>> 
>>>>>>>>>>> This sounds like the RC_ITEM::ShowCoord function will be removed or 
>>>>>>>>>>> replaced. It's one of the two troublesome function groups.
>>>>>>>>>>> 
>>>>>>>>>>> The other troublesome function group is the GetSelectMenuText 
>>>>>>>>>>> function. Last year I knew what they did but I've forgotten in the 
>>>>>>>>>>> interim. Will this DRC rewrite replace these?
>>>>>>>>>>> 
>>>>>>>>>>> -Reece
>>>>>>>>>>> 
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> 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
>>>>>>>>> _______________________________________________
>>>>>>>>> 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
>>>> 
>>> 
>>> _______________________________________________
>>> 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
> 
> _______________________________________________
> 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


_______________________________________________
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

Reply via email to