The Domain of a curve is a mathematical term. It comes from the fact that a NURBS curve is defined by a mathematical function. The domain of a function is simply defined as "The set of all possible input values which will make the function ‘work’… "
In the case of NURBS curves they are defined by “parameters” , the domain start is generally the smallest parameter in the range of the curve, and the domain end is the largest. (although curves can have reversed “negative direction” domains as well). The domain of a curve can be seen in Properties>Details, and is is also accessible via scripting.
A NURBS surface is defined by curves in two directions, U and V, thus a surface has both a U and V domain, each of which has a start and end parameter.
It is possible to ‘remap’ a curve or surface domain so that instead of going from some arbitrary number to some other arbitrary number, it goes from 0 to 1. This is practical for some purposes, as then a parameter of 0 represents the domain start, 0.5 the “mid-domain”, and 1.0 the domain end. This is called the “Normalized Parameter” in Rhino. Check the Rhinoscript help for the methods CurveNormalizedParameter and SurfaceNormalizedParameter.
So in your case, if you know the surface is planar, since a SurfacePlane method does not exist in Rhinoscript (only CurvePlane does), what you can do is get the surface’s plane or normal at “mid-domain”…
plane = Rhino.SurfaceFrame(srf, Rhino.SurfaceNormalizedParameter(srf, Array(0.5, 0.5)))
normal = Rhino.SurfaceNormal(srf, Rhino.SurfaceNormalizedParameter(srf, Array(0.5, 0.5)))
Using Python, one can go into RhinoCommon, where one has a TryGetPlane() method, which will return a plane if the surface or curve is planar.