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