The Surface.PointAtParameter node os worth playing around with.

To simplify the use, each surface has a U Axis and a V axis, these follow the surface in perpendicular directions. With these in place you can select a point by defining how far along each axis you want to progress.

Assuming a rectangle with standard orientation, a U and V value of 0 you would be the lower left corner, and a UV value of 1,1 would be the upper right. Think of it as walking a percentage of the overall surface in one direction, than turning 90 degrees and walking a percentage of the overall surface in that direction.

So if you walk 0% along the U and 50% along the V of our rectangle, you would be at the mid point of the left edge. 25% along the U and 25% along the V would be the about 1/4 of the way between the lower left corner and the upper right. And 50% on the U and V would be the center of the surface. To finish speaking in terms of simplified parameterization, we use a decimal value rather than a percentage to make the math easier. So Surface.PointAtParameter(0.5,0.5) would be a point in the middle of the surface.

There are two more ‘big things’ to know. The first is that parameters of a surface are not clipped to your surface, so you might get a point that isn’t on your surface (imagine a donut shaped surface - parameter 0.5,0.5 is in the opening). This can be annoying, but also helpful when you really start doing computational design work - after all there are other ways to ensure the point is on the surface, such as Geometry.ClosestPointTo.

The last key bit of info is that the parameters need not be constrained between 0 and 1 - you can actually use a value of 2 to find a point that is one length of the surface along the axis beyond the surface… using this to your advantage might be the easiest way to find a point ‘outside of your design area’. Surface.PointAtParameter( -0.5,0) will return a point outside the lower left corner of the surface, exactly 1/2 of the surface’s U axis away from the surface itself.