VS:NurbsSurfaceEvalPt

From Vectorworks Developer
Jump to navigation Jump to search

.VectorScript|VectorScript ..VS:Function Reference|Function Reference ..VS:Function_Reference_Appendix|Appendix

Description

This procedure determines the point on the nurbs surface at the given u,v values.

The u and v values can range from 0 to the value of the last knot in each direction.

PROCEDURE NurbsSurfaceEvalPt(
objectHd :HANDLE;
u :REAL;
v :REAL;
VAR pX,pY,pZ :REAL);
def vs.NurbsSurfaceEvalPt(objectHd, u, v):
    return p

Parameters

objectHd HANDLE Handle to a NURBS surface.
u REAL Parameter between the minimum and maximum knot value in U direction.
v REAL Parameter between the minimum and maximum knot value in V direction.
p REAL Location of the u,v point on the surface.

Example

VectorScript

PROCEDURE LocusSurface;
{ Create a surface, then put loci on it }
CONST
uMaxIndex   = 16;   { 17 points, 0 - 16 }
vMaxIndex   = 16;   { 17 points, 0 - 16 }
uDegree     = 3;    
vDegree     = 4;
xMin        = -3;
xMax        = 3;
yMin        = -3;
yMax        = 3;
zMax        = 3;
numLoci     = 17;
VAR
surfaceH                : HANDLE;
x,y,z,u,v               : REAL;
i,j                     : INTEGER;
numKnotsU, numKnotsV    : INTEGER;
maxFoundU, maxFoundV    : REAL;
uStep, vStep            : REAL;
BEGIN
{ Create a Nurbs Surface }

surfaceH := CreateNurbsSurface(uMaxIndex + 1, vMaxIndex + 1, uDegree, vDegree);
IF surfaceH <> NIL THEN BEGIN
FOR i := 0 TO uMaxIndex  DO BEGIN
FOR j := 0 TO vMaxIndex DO BEGIN
x := xMin + (xMax - xMin) * (i / uMaxIndex);
y := yMin + (yMax - yMin) * (j / vMaxIndex);
z := Cos(i - uMaxIndex / 2) *
Cos(j - vMaxIndex / 2) * 
zMax / (1 + x*x + y*y);
NurbsSetPt3D(surfaceH, i, j, x,y,z);
END;
END;
ResetBBox(surfaceH);

{ Add Loci }

{ Find number of knots in each direction }
numKnotsU := NurbsNumKnots(surfaceH, 1);
numKnotsV := NurbsNumKnots(surfaceH, 0);

{ Find the u and v real values that correspond the knots with the 
maximum u and v indices. }
NurbsKnot(surfaceH, 1, numKnotsU - 1, maxFoundU);       
NurbsKnot(surfaceH, 0, numKnotsV - 1, maxFoundV);       

Message(numKnotsU, ' ', numKnotsV);

{ Create 3D loci along each direction }
uStep   := maxFoundU / (numLoci - 1);
vStep   := maxFoundV / (numLoci - 1);

u := 0;
WHILE u <= maxFoundU DO BEGIN
v := 0;
WHILE v <= maxFoundV DO BEGIN
NurbsSurfaceEvalPt(surfaceH, u, v, x,y,z);
Locus3D(x,y,z);
v := v + vStep;
END;
u := u + uStep;
END;

{ Set View }
Projection(0,0,9.76,-4.88,4.88,4.88,-4.88);
SetView(#-45.0d,#-35.26438968275d,#-30.0d,0,0,0);
RedrawAll;
END;
END;
Run(LocusSurface);

Python


Version

Availability: from VectorWorks 9.5

See Also

VS Functions:

VS:NurbsKnot | VS:NurbsNumKnots

VS Functions:

[[VS:NurbsKnot]]

| [[VS:NurbsNumKnots]]