StefanSalewski / Ruby-PCB-Router

Topological Rubberband Autorouter for Printed Circuit Boards
17 stars 3 forks source link

License? #3

Open tmcw opened 5 years ago

tmcw commented 5 years ago

Hi! I'm so glad this project exists, and I've started porting it to JavaScript. I noticed that this repository doesn't have a license, and I'd like to make sure that my work is both legal and that I can properly credit the original author.

StefanSalewski commented 5 years ago

Interesting.

One problem with this router is, that it does not work well as a stand-alone tool. Integration into a interactive PCB tool would make a lot of sense, so that the human user can move components when there is not enough room for the traces. Initially integration into gEDA/PCB was considered, but as you know gEDA is very death.

Another problem is, that this autorouter does not work well together with human routing. Generally it assumes a virgin board with no traces. This point was critizized by some gEDA users.

For the license, I generally use GPL or MIT for my projects. so both is fine. Most younger people seems to prefer MIT now, considering GPL as to restrictive.

Do you really think JavaScript is a good choice for such a project?

My feeling is that a compiled, statically typed language has advantages for larger projects, and now we have many new modern languages. My current favorit is Nim, but there are many other candidates including Rust and Go. Nim is easy and powerful like Python, and at the same time fast and low level like C. But its community is still small.

Notice that you will need libs like Dynamic Constrained Delaunay Triangulation and some others, maybe RTree for object locate. I used CGAL APOLLONIUS Graph for convex hull of a set of discs, because I had some trouble coding that myself that time.

I am interested in PCB tools myself still, but have been busy with Nim basic tools in last years. Wrote the gintro GTK3 bindings, RTree module, started Delaunay project, and partly ported my Ruby schematics editor to Nim. The ultimate goal may be an complete EDA tool.

Maybe you will have some great ideas for the router, would be nice.

I assume you have already carefully studied the PhD thesis of Tal Dayan from 1997. Unfortunately I have not fully understood how his suggested ripup and retry could work. I would be very interested if you could explain that in detail or even implement that in your programming language. Moving components is also an interesting addition.

StefanSalewski commented 3 years ago

Have you made some progress with your JavaScript port, or have you at least studied the PhD thesis of Tal Dayan carefully?

I just ported the rubberband part to Nim language:

https://github.com/StefanSalewski/RBR

https://forum.nim-lang.org/t/7833

Not sure what to do next, maybe writing a tiny EDA tool around it. GUI with GTK4, as we have good GTK support for Nim. Well not that good as for Rust, but it is OK.