Thanks Alain, but that wouldn’t quite work for me. I actually have heaps of points on different parts of the polysurface and the script should move each point based on the normal vector at that location. So I can’t rely on user input for that.
from scriptcontext import doc
b = SomeBrep()
p = SomePoint()
for s in b.Surfaces:
b, u,v = s.ClosestPoint(p)
cp = s.PointAt(u,v)
if p.DistanceTo(cp) <= doc.ModelAbsoluteTolerance: # p is on srf
v = s.NormalAt(u,v)
print(v)