The PageLayout Editor is a different beast entirely. Items have either one point (text, image) or two (line, rectangle). Each point can be anchored to one of the four margin corners (or the page top-left). Each point is interpreted as a vector *toward* the centre of the page.
So to draw a box around the printable area, you’d create a rectangle with Top-Left of (0,0) anchored to margin-top-left, and a Bottom-Right of (0,0) anchored to the margin-bottom-right. Similarly, to create the title box, you’d create a rectangle with Top-Left of (200, 80) anchored to margin-bottom-rigth, and a Bottom-Right of (0,0) anchored to margin-bottom-right. In addition, each item can have a repeat count and step. So if you step the printable area rectangle by (10, 10), the Top-Left corner will move down and to the right, while the Bottom-Right will move up and to the left. This is how we get the double-border on the default layout. Cheers, Jeff. > On 26 May 2019, at 16:01, Reece Pollack <re...@his.com> wrote: > > Hi Reece- > > I've had a chance to test this a bit. It works really nicely. Thanks > for the good idea here. > > Thanks! Just a classic case of "This annoys me so much that I'm going to fix > it". > I only noticed one spot where it wasn't transformed so far: the > Measurement tool. When used, it displays a sign with the distance, > which doesn't match the increasing/decreasing convention. > > Thanks. I'm not surprised that I've missed a couple of things. I'll put it on > my list of things to fix. > > I'm an electronics hobbyist and I've only done a limited amount with KiCad. > I've learned a lot about KiCad features just trying to chase down how to > activate code I've changed and I'm still finding stuff I didn't know about. > > The second part is mostly a question. Where do I set this in Eeschema > and page layout? The setting is in the panel under pcbnew, so I would > assume it is a per-application process. However, there is no other > application that has that panel for setting. > > Right now the answer is "you don't." > > I wanted to fix pcbnew because I needed to place components and features in > specific locations and having the coordinate origin at the corner of an > arbitrary paper drawing made this difficult. My initial patch for v4 changed > only the cursor position display in the status bar to be relative to the Grid > origin, and later the Aux origin when that became a problem. This was > hard-coded and didn't flip the sign of the Y axis. The patches I've submitted > are the logical outgrowth of that. > > Schematic entry, however, doesn't really depend on having symbols in specific > locations, as long as the representation is clear to the user. Having a > page-oriented coordinate display origin was acceptable to me, and the > negative Y axis didn't bother me enough to make me change it. From a code > perspective, while eeschema has Grid and Aux origins internally I'm not aware > of any means in the UI to set them. > > I don't have a strong opinion on whether this should be a KiCad-wide > preference or not. I can't imagine someone wanting to set it one way in > Eeschema and another in pcbnew. If that was your intention, the panel > should be at the top level rather than under pcbnew. If it wasn't, can > you give some more insight into why it would be good to split between > the applications? > > I have pondered what extending origin transforms to eeschema would look like. > I'm not sure I see the value in allowing the setting of arbitrary origins on > a schematic. One thought I had was to give the user the option of setting the > display origin to one of the four page corners. Selecting upper-left would > give the current behavior. Selecting either lower corner would invert the Y > axis, and selecting either right corner would invert the X axis. While this > could be easily implemented using the framework my current patch set > provides, it's quite different from the options needed in pcbnew. > > Just this week I discovered the Page Layout editor has a selection box for > page corners. I haven't had time to look at what this does yet. > > Lastly, and this is a bit fundamental, I have reservations about passing > this parameter around when it is not needed. This is more of a C-style > convention. Where functions inherit the frame with the preference, that > should be used by a Get() method rather than passing down in a parameter > chain. > > Trust me, I'm not excited about passing the ORIGIN_TRANSFORMS reference as a > parameter. The patch files that do nothing except add this parameter to the > GetMsgPanelInfo() and GetSelectMenuText() methods are the two biggest in the > set, at 1673 and 1488 lines respectively. The patch files that contain code > to actually use this parameter are far smaller, at 96 and 214 lines, and I > kept these patches separated intentionally. I was hoping to maintain the same > separation for DRC-related changes but that just got too messy. > > The problem is that the classes that perform the display formatting are part > of the hierarchy that implement the board or schematic, which is separate > from the class hierarchy that implements the board and schematic editors. The > board editor has a pointer to the board but there's no link the other way, > and the ORIGIN_TRANSFORMS classes are instantiated in the editor. > > There used to be a global variable called "g_UserUnit" that indicated the > user's preferred display units, but about this time last year Jeff Young > replaced it with a parameter passed into the formatting methods. After > spending several evenings trying to figure out a better way I decided he > might know something I didn't about the structure of KiCad and decided to > follow suit. If you want to suggest a better way to do it, I'm all ears. > > In some cases (UNIT_HELPER), this should either be incorporated into > UNIT_HELPER or written as a class that inherits UNIT_HELPER. The class > then gets the current setting (as Unit helper does with the units) and > applies it in one place only. > > The specific problem with UNIT_BINDER is that it doesn't know what sort of > data it's handling. It could be a value like a track width which shouldn't be > altered, a relative coordinate delta which may need a sign flip, or an > absolute coordinate which needs both translation and sign flip. Nor does it > know whether relative or absolute coordinate is an X or a Y axis. Thus it > must either have a parameter identifying the type of data it's handling or a > different set of methods to transfer that data in or out based on the type. I > chose a constructor parameter, and I chose to pass an object implemented to > handle that type of data. > > Additionally, the code sometimes treats a particular field as if it's just > arbitrary data, rather than an object. A specific case is in > DIALOG_GRAPHIC_ITEM_PROPERTIES where the "endX" object usually is an X > coordinate requiring full transform, but sometimes is a radius that shouldn't > be transformed. At least I think it shouldn't be transformed. > > -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