<snip>
> Bottom line: if Altium have visions of providing an "inverting" feature in
> Phoenix, then this should be provided in a form which inverts the *entire*
> PCB; there should not be an additional option (or alternative
> implementation) of inverting *just* selected items.
>
> It is debatable as to what *should* happen when the L key is pressed, but
> attempting to implement an "inversion" of objects which are currently in a
> selected state (and *just* those objects) does have the potential to
produce
> nasty results. Does anyone else have any thoughts on this matter?
>
> Geoff Harland

To date, nobody else has commented on what *should* happen if the L key is
pressed in the middle of a command to move currently selected objects.
Perhaps this is because most users know that this is inadvisable, and/or
because some users use the L key just to move components from one side of
the PCB to the other (and just one at a time).

However, perhaps there is something to be said for an outcome in which some
(and just some) aspects of inversion occur. To the extent that a PCB could
still be scrambled, to some extent, by the use of this, the onus would be on
the user to exercise due care, but it would still be preferable for the
outcome to be of a more logical, and less scrambled, nature, than the status
quo.

Before I go further with what I am suggesting what should happen, a bit of
background on Inversion:

Ian Wilson and I envisaged that Inversion of a PCB could either be of a
Standard nature or of a Deep nature. With the former option, objects on
internal copper layers would remain on the *same* layer as previously, but
the *sequence* of copper layers would be changed so that the internal layer
previously closest to the top side would end up closest to the bottom side,
and vice versa, and similarly for the remaining internal layers. We
envisaged that Standard Inversion would be of a *temporary* nature, hence
the retention of the *same* Layer property for all objects on *all*
*internal* layers.

OTOH, the use of Deep Inversion was envisaged when the inversion was to be
of a *permanent* nature. As such, objects on internal copper layers
typically would be re-assigned to a *different* (internal) layer, so that
the sequence of layers within the inverted PCB would continue to be logical
in nature. For a PCB with a fully symmetrical sequence of layers, the layer
sequence would not change at all, but otherwise the layer sequence would
change to at least some extent (and as required).

Examples of layer sequences for Standard and Deep inversion, to illustrate:

Original sequence:
Top, Mid 1, Power Plane 1, Mid 2, Power Plane 2, Bottom

Updated sequence with Standard Inversion:
Top, Power Plane 2, Mid 2, Power Plane 1, Mid 1, Bottom
(Former Top side items to Bottom, and vice versa.)

Updated sequence with Deep Inversion:
Top, Power Plane 1, Mid 1, Power Plane 2, Mid 2, Bottom
(Former Top side items to Bottom, and vice versa.)
(Former Power Plane 2 items to Power Plane 1, and vice versa; former Mid 1
items to Mid 2, and vice versa.)
(That original sequence is not very likely (as it would be far more likely
for the Power Plane layers to be adjacent to one another), but it still
illustrates differences between the two Inversion options.)


Original sequence:
Top, Mid 1, Power Plane 1, Power Plane 2, Mid 2, Bottom

Updated sequence with Standard Inversion:
Top, Mid 2, Power Plane 2, Power Plane 1, Mid 1, Bottom
(Former Top side items to Bottom, and vice versa.)

Updated sequence with Deep Inversion:
Top, Mid 1, Power Plane 1, Power Plane 2, Mid 2, Bottom
(Former Top side items to Bottom, and vice versa.)
(Former Power Plane 2 items to Power Plane 1, and vice versa; former Mid 1
items to Mid 2, and vice versa.)
(A more likely scenario.)


Original sequence:
Top, Power Plane 1, Mid 1, Mid 2, Mid 3, Bottom

Updated sequence with Standard Inversion:
Top, Mid 3, Mid 2, Mid 1, Power Plane 1, Bottom
(Former Top side items to Bottom, and vice versa.)

Updated sequence with Deep Inversion:
Top, Mid 1, Mid 2, Mid 3, Power Plane 1, Bottom
(Former Top side items to Bottom, and vice versa.)
(Former Mid 1 items to Mid 3, and vice versa.)
(Another sometimes plausible scenario, which also illustrates differences
between each type of Inversion.)

Back to using the L key, which could be used to invert, in a fashion, *just*
currently selected items.

What I envisage with the use of the L key (while moving selected items) is
that *all* selected items *appear* to be mirrored (compared with before),
though in the case of (selected) *components*, each component is *really*
moved to the opposite side of the PCB (from where it was previously), so is
*not* really "mirrored" as such; OTOH, all String objects (for instance)
have their Mirrored status toggled, and regardless of whether each of these
is on a layer of a paired nature or otherwise. (***PROPOSITION #1***)

Because it is *not* an inversion of the *entire* PCB file though, Design
Rules, Layer Stackup definitions, and (Drill) Layer Pairs are not changed at
all. (The onus is on the user to avoid mucking up the PCB they are working
on.)  (***PROPOSITION #2***)

Objects on layers of a paired nature would always end up on the other layer
of the pair concerned. However, all other objects (i.e. those objects on
layers which are *not* of a paired nature) would remain on the same layer as
previously. (***PROPOSITION #3***)

Vias have a StartLayer property and an EndLayer property. A through hole
via's StartLayer is the Top layer, and its EndLayer is the Bottom layer.
These properties of such vias should (logically) remain unchanged. "Buried"
vias have internal layers for both StartLayer and EndLayer, and given that
no re-assignment of internal layers is occurring (because of PROPOSITION
#3), those properties for such vias should also remain unchanged. OTOH,
"blind" vias either have a StartLayer property of the Top layer and an
EndLayer property of an internal layer, or a StartLayer property of an
internal layer and an EndLayer property of the Bottom Layer. Given the
transposition of Top and Bottom layers, but no changes to internal layers, I
suggest that a via with a StartLayer property of the Top layer and an
EndLayer property of an internal layer should have its StartLayer changed to
what was previously its EndLayer property, while its EndLayer is changed to
the Bottom layer; similarly, a via with a StartLayer property of an internal
layer and an EndLayer property of the Bottom Layer should have its EndLayer
changed to what was previously its StartLayer property, while its StartLayer
is changed to the Top layer.  (***PROPOSITION #4***)

(Note to Protel programmers: in the *internal* representation of a Via
object, the StartLayer and EndLayer properties are referred to as the
LowLayer and HighLayer properties instead. In the case of "blind" vias
connecting one of the *Power Plane* layers to the Bottom layer, it seems as
though the LowLayer property is assigned to the Bottom layer, and the
HighLayer property to the Power Plane layer concerned; my inference is that
this is a consequence of Power Plane layers being assigned layer numbers
which are greater than the layer number assigned to the Bottom (copper)
layer (to wit, 39-54 and 32, respectively). Keep that aspect in mind when
updating properties of any vias undergoing any type of inversion.)

A possible consequence of PROPOSITION #4 is that some "blind" vias might
acquire a DRC status afterwards, as a consequence of gaining StartLayer and
EndLayer properties that do not match the layers specified by any existing
(Drill) Layer Pair that has been defined. The onus would be on the user to
take some action to clear that DRC status (such as defining new (Drill)
Layer Pairs, or changing the via's StartLayer and/or EndLayer properties).
(OTOH, when an *entire* PCB file is inverted, (Drill) Layer Pairs are
appropriately updated at the time, so that vias would *not* acquire a DRC
status as a consequence of (total) inversion.)

Pads and vias have Top side Testpoint and Bottom side Testpoint properties.
Those properties should change as follows: Neither property true before
remains neither property true after. Both properties true before remains
both properties true after. One property true before changes to the *other*
property true after.  (***PROPOSITION #5***)

Polygon objects are always "mirrored" in a fashion, and in the case that
these are on layers of a paired nature, their Layer property will also
change. In normal circumstances, such changes to a polygon's properties
would be grounds for it to be re-poured, or at least an interrogation of the
user as to whether re-pouring should occur. IMO, when the L key is used, the
user should be prompted for repouring of polygons in the event that any of
these are selected at the time. If so approved, repouring would occur on the
updated boundaries and layer; otherwise, the primitives of each polygon
would be *updated* instead (location-wise and layer-wise), so matching what
would happen if the polygon was moved *without* re-pouring occurring.
(***PROPOSITION #6***)

Another aspect. When selected items are *reflected*, the user can use the X
key to select reflection around a *vertical* axis, or use the Y key to
select reflection around a *horizontal* axis. Ideally, the user should have
a similar choice of options when partially inverting selected items as well.
Had the K key not been assigned (by default) in Protel 99 SE to invoke a
submenu for placing objects (Arcs, Fills, or Tracks) of a KeepOut nature
(i.e. such objects with KeepOut property set true), the K key could have
used to select partial inversion around a vertical axis, while the L key
could be used to select inversion around a horizontal axis.

That option could still be used; placement of KeepOut objects would then
become slightly less direct, i.e. PK instead of K. Alternatively, pressing
of the L key could then result in the user being prompted (by dialog box, or
popup menu, or ?) to select a vertical axis or horizontal axis (or perhaps
the space bar could toggle between a cursor that is *just* a vertical line
and a cursor that is *just* a horizontal line (or a cursor with a *long*
vertical line and *short* horizontal line, or vice versa, depending upon the
option currently selected), with the option first selected being the option
that was (finally) selected on the most recent previous usage of this
feature).

Or yet another option would be providing just one of those possibilities
(though perhaps *which* one is chosen could be pre-determined by invoking
the PCB:MoveObject Process with an appropriate (additional) parameter, such
as 'InvertAxis=Horizontal' or 'InvertAxis=Vertical').

I am inviting others to comment on each of the above propositions; whether
these are sound or otherwise (and why), and whether there is anything (else)
I have overlooked. It could well be too late in the piece for what we think
to be incorporated in Phoenix, but if not... And if Phoenix were instead to
provide no improvement at all, on the current status quo, then what we have
to say could then have a bearing on what is provided in the post-Phoenix
version of Protel (or in a following SP for Phoenix).

In all of the above, I am assuming that an inversion of the *entire* PCB
file would *not* be undertaken by selecting everything in the PCB file and
then using the PCB:MoveObject Process with a parameter of 'Object =
Selection'; a *distinct* (PCB:)StandardInvert or (PCB:)DeepInvert Process
would be used to accomplish that instead (which would also update Layer
Stackup definitions, (Drill) Layer Pairs, and Design Rules, as required).
While selecting everything in the PCB file and then using the L (or K?) key
while moving selected items afterwards would be *possible*, that would not
be the *correct* way to invert an *entire* PCB file. (Once again, the onus
would be on the user to not f*** up in this regard.)

Over to you... (Altium are not necessarily going to be bound by what we have
to say on the matter, but to the extent that they do listen to what we are
saying, we could end up with a package that would be better than otherwise.)

Regards,
Geoff Harland.
-----------------------------
E-Mail Disclaimer
The Information in this e-mail is confidential and may be legally
privileged. It is intended solely for the addressee. Access to this
e-mail by anyone else is unauthorised. If you are not the intended
recipient, any disclosure, copying, distribution or any action taken
or omitted to be taken in reliance on it, is prohibited and may be
unlawful. Any opinions or advice contained in this e-mail are
confidential and not for public display.



* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* To post a message: mailto:[EMAIL PROTECTED]
*
* To leave this list visit:
* http://www.techservinc.com/protelusers/leave.html
*
* Contact the list manager:
* mailto:[EMAIL PROTECTED]
*
* Forum Guidelines Rules:
* http://www.techservinc.com/protelusers/forumrules.html
*
* Browse or Search previous postings:
* http://www.mail-archive.com/proteledaforum@techservinc.com
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Reply via email to