Get uv vector with Rhino python

Hello,

is there a way to get the uv vector of a surface with python?

Regards,

samid

    import rhinoscriptsyntax as rs
    p = rs.EvaluateSurface(srf, uv.X, uv.Y)
    n = rs.SurfaceNormal(srf, uv)


samid.gh (16.5 KB)

Hi @samid,

If you’re interested in a solution using rhinocommon, you could try the following:

import Rhino.Geometry as rg

# Get the UV-values
test, u, v = surface.ClosestPoint(point)

if test: # if successful...
    srf_pt = surface.PointAt(u, v) # get surface point
    srf_normal = surface.NormalAt(u, v) # get surface normal

normal.gh (6.5 KB)

Have a nice week-end!

2 Likes

Mahdiyar and P1r4t3b0y thank you for the answers. I know how to get surface normals but it is not what I need. I need the u and v as vector. Or maybe I understand here something wrong?

You mean something like this?

import rhinoscriptsyntax as rs
plane = rs.SurfaceFrame(srf, uv)
uVector = plane.XAxis
vVector = plane.YAxis


samid.gh (17.3 KB)

Hi Mahdiyar,

your way was also my way :slight_smile: but then I noticed that it’s not the same. When you create a rectangular surface, copy it and change at one of them the normal. The you have two surfaces with same u and v direction but different normal direction. If you now try to evaluate a point on both surfaces then you will get same u and v directions but different planes. That’s the reason why I need the u and v directions and not the plane itself.

import Rhino.Geometry as rg
success, pt, vectors = srf.Evaluate(uv.X, uv.Y, 1)
if(success):
	uVector, vVector = vectors
	uVector.Unitize()
	vVector.Unitize()

samid.gh (23.6 KB)

Thank you, I will try it out on monday and give an answer. Have a nice weekend.

Hi Mahdiyar,

perfect it works. Thank you.

Regards,
samid