# Routing rectangles within an avoidable one

Greetings, all

This problem is probably more mathematics than GO-related, however I am hoping developers and users may be able to point me in the direction towards the solution. Any links to discussions, libraries, theory are appreciated and thanks for reading!
Basically this is it:
given a large rectangle and a set of smaller rectangles located within the boundaries of the large rectangle, the task is to make the area covered by the smaller rectangles capable of routing Go links and the rest of the large rectangle avoidable. Surfaces of smaller rectangles may intersect, or may be sitting out there completely surrounded by the avoidable large rectangle matter. I can make the links reach into passable areas, however I really do not have the theoretical foundation to attack the problem of avoidable rectangle synthesis. Or may be I am missing some ready functionaly in GO,
Any feedback is appreciated,
Thanks!

I don’t understand what it is you want. Are you saying that you have a large rectangle that is “avoidable” for Orthogonal AvoidsNodes link routing, but that you want to specify “channels” inside that rectangle where you permit avoidable links to be routed?

If so, can you get that effect by defining avoidable rectangular areas that form the inverse of those channels within the rectangle? And then the large rectangle would not itself be avoidable, of course.

Yes, if you could please elaborate if possible on finding the inverses of the channels within. Arbitrary number of channels, with intersections and without, the result is a set of avoidable rectangles. I understand this is outside GO, but I’d love find out your opinion on how involved this taks is before giving up,

thanks.

Imagine that your large rectangle was represented by an array of cells, where each cell covers an area perhaps 10x10 document units. Each cell value could be a boolean, initially false. For each small “channel” rectangle, set to true the corresponding cell’s value in the array. (I’m assuming you don’t care about channel rectangles that are outside or extend beyond the bounds of the large rectangle.) Afterwards, the array cells whose values are still false represent avoidable rectangles.

This doesn't help you easily customize the behavior of the node-avoiding routing algorithm in GoDiagram. If you do need that, maybe we can add some functionality in a future release.

Thanks for the method, I kept on thinking about crazy geometry, very inflexible…

Assuming I am working with document pixels, false coordinates become avoidable rectangular nodes, I think I need this precision - I am wondering how will the current node-avoiding algorithm behave?
If my source and destination ports are not on the 'false' coordinates/nodes and a 'true' path exists between the two, will a GoLink reach the destination via the path, even if it is very complex?
If source and/or destination happen to be on the 'true'/avoidable coordinates, will the best 'true' path be taken by the algorithm even if it is not quite adjacent to the port locations?
Sometimes I really do need to drive the algorithm telling it where to go instead of where not to go... Is this the functionality planned?
Thanks!

Yes, if a path exists that permits the link to avoid all avoidable areas, GoLink.CalculateStroke will find it.

If there is no such path, it gives up and uses the standard routing, ignoring "avoidability". But there are special cases to handle common exceptions, including the one you mention.
It might be easiest to play with this interactively.
We certainly intend to provide more options for smarter routing in the future. But I can't make any promises at this time.

Thanks, Walter. I will play with this on modified demos, or maybe go for the alternative way by forcing a given path of ports… Will report results here.