[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
gEDA-user: Random thoughts on the future interface of PCB
Hi guys,
Just thought I'd write some of this down and put it out there. I've
spent some time recently thinking way into the future about the GUI /
usability for an advanced PCB editing program.
I started along the lines of... how would PCB design work if my input
device was a graphics tablet (something akin to the Wacom Cintiq would
be awesome).
PCB design is a real hybrid of art, precision engineering and black
magic. For laying tracks, some gestural actions, fluid drawing and
possibly even multi-touch interfaces might provide user interface
opportunities never before seen in this kind of CAD application.
Some randomly sorted ideas:
Scrap straight line rats in favour of using the topological auto-router?
This is not quite the same as auto-routing a single net. Each rat
would only avoid existing laid down geometry, and would be allowed to
cross other rat lines. Also, I'd imagine flattening any route
generated to be in the rats plane. (The rat would not jump between
layers as an auto-routed trace might, even if the route taken could
only be made effectively through multiple layers).
Obviously this is nice, as the user can pick rat-lines which have
routed well and request PCB turns the rats into solid tracking.
Manually placed, rubber-banded topological tracking?
How about guiding a track routing by drawing the topology you desire,
weaving in and out of other components?
The topology between obstacles could easily be extracted from a
hand-stroked line drawn with a pen, mouse, or perhaps some
high-resolution touch-screen interface.
Dynamic zooming about the current touch-point / mouse cursor when
drawing in amongst detailed objects, or the user is forced to slow
down would aid lower resolution input devices. Rendering would have to
be FAST and slick to pull this off without disorienting the user.
Following topological drawing, tracks could be allowed to evolve as if
they were sprung-loaded (Ã la liquid-pcb), or processed through some
routine to solidify them.
For "sprung loaded" tracking, I'd imagine having a virtual obstacle
object the user can place on the board to constrain the tracking.
Sprung loaded / pushed tracking would be updated if the user were to
place and drag an obstacle:
| | | | | -> | | | | | -> | | | | |
| | | | | | | | | | | | | \ \
| | | | | | | |.\ | | | |->.| |
| | | | | | | | / | | | | / /
| | | | | | | | | | | | | | |
I also imagined a stroked gesture where the user draws a ring around
a bunch of tracks, as if to tie a rubber-band around them. This action
would group them for operations such as re-routing.
I wonder if this requires the notion of treating individual
track-segments as a topology. This would be handy anyway, to aid
manual rubber-banding. Drawing could potentially be made quicker if we
had higher-level data than individual line-segments (it would reduce
the number of round capped sections requiring drawing).
Magnetic component placement
An augmentation to the grid really - make components resist being
pushed past favourable alignment points with other components?
This wouldn't STOP components being placed off these points, just
give some "resistance".
This feature would also be quite neat for component placement, where
some future addition of a courtyard / mechanical interference spec.
within the package definition would constrain placement to resist
motion closer to other packages than desirable.
This could be absolutely enforced when placing a component, or act to
PUSH the component being run into. (Obviously dependant on a good
algorithm to re-track the pushed part).
I was imagining this feature being useful for placing an array of
parts such as resistors / capacitors.
We would need the ability to semi-lock tracks I think...
Obviously some tracks won't be up for auto-pushing, and their geometry
will be set in copper (to adapt a metaphor). Obviously it should be
possible to edit such tracks, but we might want the to be un-pushable.
How about more novel ways to define planes?
Full "pours" support goes without saying ;)
I've looked at various commercial boards recently, and it would appear
that many use negative layers to draw tracking. High power stuff,
where practically everything is copper, just with some isolation
between regions. The complexity of the polygons which make up these
traces would be too prohibitive to use PCB's normal polygon tool.
They _look_ as if someone has drawn negagtive traces to split up a
plane. should we support that?
Alternatively, what about defining traces / topology for connected
copper, then having a "bloat until clearance hit" mode, which
fattens / fills everything?
I'm still tempted to think that negative lines gives greater editing
potential once the tracks are placed.
(Basically the negative lines stuff is just "pours" with the addition
of a negative object which subtracts from polygons and can be used to
divides up areas).
Simulation rendering....
Lets assume we can simulate our board, and have a snapshot of currents
flowing between, or voltages at nodes. We could render a current
density plot for traces?
(Yes, AC / RF / 2D / 3D effects might be difficult!).
I'm thinking of things like PSU design, where trace size needs to be
considered carefully. Nominal current density / heating etc..?
My ideas are pretty vague here, but some kind of FEA plot overlaid on
the tracking might be useful. I guess it depends on the solution
method / meshing used, whether or not it makes sense to render this
data within PCB, or some 2D / 3D FEA post-processing tool.
Electric fields might also be interesting for some applications.
Technical stuff...
Polygons give us performance headaches. Some usage requires a fully
distilled contour, such as connectivity checking. (*** Not sure this
is 100% true!)
For some operations (e.g. rendering), we couldn't care less whether
clearance holes overlap or not (if we are just masking them out).
Drawing simple shapes can often be faster, and when I once
accidentally broke PCB to avoid joining holes in polygons properly,
I was amazed to find it mostly still worked (but REALLY fast).
Only when holes pierce the outer contour / user specified holes, do
they stand a chance of affecting connectivity. (NB: this is also true
iteratively, so after processing one hole which touches the countor,
another hole which NOW touches the new contour ALSO needs processing.
Some interesting possibilities exist, such as making a graph of
contours touching within a polygon. (Rather than intersecting them).
Another idea which has crossed my mind, is storing a graph of the
primitives and operations which make up a polygon, e.g.
(subtract outer_contour (unite hole1 hole2 hole3 hole4))
I already put in a cheat which tracks perfectly circular holes in
polygons for rendering purposes. Tracking the genesis of shapes would
allow rendering operations which can perform these drawings as a
series of constructive solid^M^M... 2D geometry operations in the
raster plane. (Or postscript instructions etc..)
All in all, I think this would take us back further towards the way
PCB _used_ to work (IIRC), where polygon layers _could_ be negative,
with flashed clearances for pads etc., drawn clearances for lines.
Currently, I feel we loose too much information, and gain too muchhel
detail by "flattening" curves and boolean operations on geometry to
polygons at the stage we do.
--
Peter Clifton
Electrical Engineering Division,
Engineering Department,
University of Cambridge,
9, JJ Thomson Avenue,
Cambridge
CB3 0FA
Tel: +44 (0)7729 980173 - (No signal in the lab!)
Tel: +44 (0)1223 748328 - (Shared lab phone, ask for me)
_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user