This function will create a NURBS surface from a network of selected intersecting curves in the document
FUNCTION CreateSurfacefromCurvesNetwork : BOOLEAN;def vs.CreateSurfacefromCurvesNetwork():
return BOOLEAN([[User:Orso.b.schmid|Orso]], 2011 Jan. 01) The rountine fails:
- upon invalid objects in the active selection. Before creating the curves through [[VS:CreateNurbsCurve| CreateNurbsCurve]] you need then to deselect all using [[VS:DSelectAll| DSelectAll]]. If used in PIO deselecting only affects the objects created during the PIO code. After creating the needed curve network through repeated calls of [[VS:CreateNurbsCurve| CreateNurbsCurve]] you can launch ''CreateSurfacefromCurvesNetwork''.
- on open curve networks. Be careful that your network is perfectly closed.
- often (but not always) on curves whose vertexes don't reside on a plane. It is advisable to set all vertex of the curves forming the network to z-values on a common plane, otherwise the surface even if generated is faulty and displays an excessive amount of vertexes (BTW, this happens also using the command ''Create Surface from Curves'' on drawing). A curve network whose z-values reside on a plane will generate the simplest surface, which can be then refined in the z-values as needed.
([[User:Orso.b.schmid|Orso]], 2010 Dec. 29) This is one of those routines that doesn't respond to [[VS:LNewObj| LNewObj]]. You can access the generated surface through [[VS:PrevObj| PrevObj]] setting a temporary object after the call.
{ draws a triangle as NURBS curve, converts it to NURBS Surface and tests LNewObj on this last obj }
PROCEDURE CreateNurbsSurf;
VAR
h : HANDLE;
pStart : VECTOR;
BEGIN
GetPt(pStart.x, pStart.y); { fetch starting pt from user }
{ draw edgy NURBS curve }
h := CreateNurbsCurve(pStart.x -1m, pStart.y, pStart.z, TRUE, 1);
AddVertex3D(h, pStart.x +1m, pStart.y, pStart.z);
AddVertex3D(h, pStart.x, pStart.y +1m, pStart.z);
AddVertex3D(h, pStart.x -1m, pStart.y, pStart.z);
IF CreateSurfacefromCurvesNetwork THEN BEGIN
IF YNDialog('try getting a handle to the new NURBS surface using "LNewObj"?') THEN
h := LNewObj { I expect LNewObj to be the Surface }
ELSE BEGIN
Locus(pStart.x, pStart.y); { temporary obj, you might want to delete it }
h := PrevObj(LNewObj); { this fetches the Surface }
END;
AlrtDialog(Concat( 'Handle "h" should be of type 113 (NURBS surface), now check what I get:', chr(13), GetType(h) ))
END;
END;
Run(CreateNurbsSurf);
Availability: from VectorWorks 10.0
- Objects - NURBS