GoObject doesn’t have any Intersects predicate, which I believe is what you are asking for. However the next version of GoDiagram (2.2) will have a new predicate:
public bool GoDocument.IsUnoccupied(RectangleF r, GoObject skip)
I believe this will help solve your need. It basically uses the same information that links use for the “AvoidsNodes” functionality. It thus isn’t as precise as true intersection predicates would provide, because it summarizes the document into a grid of 10x10 unit areas.
You’ll still need to code up your own algorithm for how to find an unoccupied area, whether you want the closest spot in a particular direction, or whether you want the closest spot within a particular region, or whatever criteria you have.