Hi Ben,
UI: User drags a track or via in the appropriate tool-mode, and all
tracks or vias connected to it move in accordance. If the center 80%
of a track is hit, then the whole thing moves, otherwise one end or
the other moves. Tracks and vias have rollover highlighting. Tracks
are also moved if a component is moved.
The push algorithim at this point is not really the way it should be
(should have some optimality goals and directed search), but anyway.
Algorithm/Idea: given a set of tracks and movements, try the
movements, and check to see if this causes any DRC violations. DRC
violations return both a boolean as well as a two points indicating
where the tracks are closest ('hit'). From these two points, compute
the amount & direction the hit track must be moved to resolve the DRC
error. Move the tracks/vias connected to that one, too. Pass this
movement back to the algorithm, recursively, and negate the move if
the recursive call fails. Failure occurs when you try to move a pad
(though I could allow component movement too), or when the movement
causes tracks to intersect, whence pushing no longer makes sense.
Tracks are allowed to be moved twice or many times, so sometimes the
track the user dragged is reactively pushed back; in this case, the
user just has to push harder / push again, and things will
incrementally go as (hopefully) desired. The entire screen is
re-rendered whenever the user moves the mouse. The effective
call-stack for moved tracks is indicated by cyan highlighting. The
algorithm can not make one track into two, though it may in the
future.
The problem is that this system allows for, effectively, infinite
leverage. Perhaps it would be best to use a physical model of
pushing? (with springs & telescoping rods?)
hope that helps -- and do tell me what you think!
Tim
ps. I've fiddled around with liquidPCB, and the algorithm there seems
good (better?)
On Mon, Jun 16, 2008 at 5:51 PM, Ben Jackson <[EMAIL PROTECTED]> wrote:
> On Mon, Jun 16, 2008 at 05:48:34PM -0400, Tim Hanson wrote:
>> Has push routing, continuity testing, cross-probing, gridless design,
>> BOM creation, DRC & rat's nest, but none of this is toally reliable
>> yet (esp. the push routing).
>
> Can you explain the basics of push routing from the UI and algorithm
> persepctive?
>
> --
> Ben Jackson AD7GD
> <[EMAIL PROTECTED]>
> http://www.ben.com/
>
>
> _______________________________________________
> geda-dev mailing list
> [email protected]
> http://www.seul.org/cgi-bin/mailman/listinfo/geda-dev
>
_______________________________________________
geda-dev mailing list
[email protected]
http://www.seul.org/cgi-bin/mailman/listinfo/geda-dev