r3nurbs
real/objects/r3nurbs.h
r3obj
NURBS (Non-Uniform Rational B-Spline) curve.
r3Primitive
R3CLID_PRIMITIVE
r3Nurbs
R3CLID_NURBS - 130
CONCATENATE, SHARPEN, BREAK, INSERTKNOT, TOBEZIER, ELEVATEDEGREE, CUTHEAD, CUTTAIL, SWAPDIRECTION, CHANGEWEIGHTS, CHANGEORDER, INSERTKNOTARRAY, INTERPOLATE, UNIFY, OPEN, SETSTART, PARALLELCURVE, ADDTOSHRINK, PREPARESHRINK, SHRINK, FREESHRINK, INSERTCTRLPOINT, SETPOINT4, GETPOINT4, SETKNOT, GETKNOT, SETPOINTLOCAL, GETPOINTLOCAL, SHRINKISINSIDE, MEASURELENGTH, DISTRIBUTEEVENLY, SIMPLIFY,
Count, Order, Knots, Points, KnotCount, Points3, Closed, InParentsParamSpace, DefaultTool, Parametrization, Diameter1, Diameter2, Ends, ScanLineQuality, Min, Max, DiameterChannel, RenderRaytrace, RenderScanline, MaxDisplacement, RenderPostProc, DrawKnots,
int R3RegisterNurbsClass(R3APP *app);
R3NUM_CONCATENATE
CONCATENATE
R3NUM_CONCATENATE
R3BOOL, TRUE if concatenation succeeded.
R3BOOL, TRUE to autoconcatenate, FALSE to fixed order
R3OBJ**, null terminated array of objects to be concatenated
rc = obj.CONCATENATE(p1, p3);
Concatenates given curves to itself. If the 'p1' is TRUE, fixed order concatenation is applied. if 'p1' is false, the order is is determined from the distances between the end points of the curves. Note: this method ignores all 'closed' curves.
R3NUM_SHARPEN
SHARPEN
R3NUM_SHARPEN
obj.SHARPEN();
Make the curve 'sharp' at given parameter value by increasing the multiplicity of the given knot value. The shape of the curve remains unchanged.
R3NUM_BREAK
BREAK
R3NUM_BREAK
obj.BREAK();
Break the curve selected point(s).
R3NUM_INSERTKNOT
INSERTKNOT
R3NUM_INSERTKNOT
R3BOOL, true if knot was succesfully inserted. FALSE if failed.
R3BOOL, if true, parameter value 'p3' is local, if FALSE, 'p3' is global
R3FLOAT, parameter value
rc = obj.INSERTKNOT(p1, p3);
Insert new knot to a curve. The shape of the curve is not changed.
R3NUM_TOBEZIER
TOBEZIER
R3NUM_TOBEZIER
obj.TOBEZIER();
Convert the nurbs to bezier curve without changing the shape.
R3NUM_ELEVATEDEGREE
ELEVATEDEGREE
R3NUM_ELEVATEDEGREE
R3BOOL, true if succeeded.
rc = obj.ELEVATEDEGREE();
Elevate the degree of the curve. The shape of the curve remains unchanged.
R3NUM_CUTHEAD
CUTHEAD
R3NUM_CUTHEAD
R3BOOL, true if succeeded.
rc = obj.CUTHEAD();
Cut off the head of the curve at the given parameter value.
R3NUM_CUTTAIL
CUTTAIL
R3NUM_CUTTAIL
R3BOOL, true if succeeded.
rc = obj.CUTTAIL();
Cut off the tail of the curve at the given parameter value.
R3NUM_SWAPDIRECTION
SWAPDIRECTION
R3NUM_SWAPDIRECTION
R3BOOL, true if succeeded
rc = obj.SWAPDIRECTION();
Changes the direction of the curve.
R3NUM_CHANGEWEIGHTS
CHANGEWEIGHTS
R3NUM_CHANGEWEIGHTS
R3BOOL, if true, p3 translates the current weight. Otherwise p3 is taken as new absolute weight for the selected points.
R3FLOAT, abs/rel weight
obj.CHANGEWEIGHTS(p1, p3);
Tranlate the weights of the selected control points.
R3NUM_CHANGEORDER
CHANGEORDER
R3NUM_CHANGEORDER
R3BOOL, true of succeeded. FALSE if the curve order cannot be changed
R3INT, defines how much the curve order is increased/decreased. Positive values increase the order. Negative decrease.
rc = obj.CHANGEORDER(p3);
Raise/drop the order of the curve. The shape of the curve doesn't remain the same.
R3NUM_INSERTKNOTARRAY
INSERTKNOTARRAY
R3NUM_INSERTKNOTARRAY
R3BOOL, true if succeeded.
R3INT, number of knots
R3FLOAT, knots to be inserted.
rc = obj.INSERTKNOTARRAY(p1, p3);
Inserts knots in the given array.
R3NUM_INTERPOLATE
INTERPOLATE
R3NUM_INTERPOLATE
obj.INTERPOLATE();
Add two extra points to the curve (if curve is open) and run inversion so that the curve passes through its all original control points.
R3NUCM_UNIFY
UNIFY
R3NUCM_UNIFY
R3BOOL, true if succeeded
R3OBJ**, null terminated array of curves
rc = obj.UNIFY(p3);
Make the order, knot sequence and point count of the give nurbs curves the same. The operation doesn't change the shape of the curves. If all curves are closed, resulting curve is closed, if one of the curves is open, all resulting curves are opened.
R3NUM_OPEN
OPEN
R3NUM_OPEN
R3BOOL, True if curve was succesfully opened.
R3BOOL, if true, resulting curve ends have multiplicity
rc = obj.OPEN(p3);
Open the given closed curve. The shape of the curve is not changed.
R3NUM_SETSTART
SETSTART
R3NUM_SETSTART
R3BOOL, true if succeeded.
rc = obj.SETSTART();
Set start point (u = 0) for closed curve (translate parameter space 'p3' -> 0.0). The shape of the curve is not changed.
R3NUM_PARALLELCURVE
PARALLELCURVE
R3NUM_PARALLELCURVE
R3OBJ*, parallel curve
R3VECTOR, normal
R3FLOAT, displacement. Positive value creates bigger parallel curve, negative shrunk curve.
rc = obj.PARALLELCURVE(p1, p3);
Create parallel curve
R3NUM_ADDTOSHRINK
ADDTOSHRINK
R3NUM_ADDTOSHRINK
R3BOOL, true if succeeded
R3VECTOR, normal
R3LIST, list for prepared curves
rc = obj.ADDTOSHRINK(0, p2, p3);
Prepare curve for shrink operation.
R3NUCM_PREPARESHRINK
PREPARESHRINK
R3NUCM_PREPARESHRINK
R3BOOL, true if succeeded
R3LIST, curves to be shrunk
R3BOOL, bevel out
rc = obj.PREPARESHRINK(p1, p3);
Class message: Prepare all curves for shrink operation
R3NUCM_SHRINK
SHRINK
R3NUCM_SHRINK
R3BOOL, true if succeeded
R3LIST, curves to be shrunk
R3FLOAT, radius
rc = obj.SHRINK(p1, p3);
Class message: Shrink curves
R3NUCM_FREESHRINK
FREESHRINK
R3NUCM_FREESHRINK
R3LIST, curve node list
obj.FREESHRINK(p3);
Free shrunk curves
R3NUM_INSERTCTRLPOINT
INSERTCTRLPOINT
R3NUM_INSERTCTRLPOINT
R3BOOL, true if succeeded
R3INT, index of the new point
R3VECTOR4, value for the new point
rc = obj.INSERTCTRLPOINT(p1, p3);
Insert control point to a curve
R3NUM_SETPOINT4
SETPOINT4
R3NUM_SETPOINT4
R3BOOL, true if succeeded
R3INT, index of the point to be set
R3VECTOR4, new value for the point
rc = obj.SETPOINT4(p1, p3);
Set control point
R3NUM_GETPOINT4
GETPOINT4
R3NUM_GETPOINT4
R3BOOL, true if succeeded
R3VECTOR4, value for the point
R3INT, index of the point to be fetched
rc = obj.GETPOINT4(p1, p3);
Fetch control point
R3NUM_SETKNOT
SETKNOT
R3NUM_SETKNOT
R3BOOL, true if succeeded
R3INT, index of the point to be fetched
R3FLOAT, buffer
rc = obj.SETKNOT(p1, p3);
Set knot value by index
R3NUM_GETKNOT
GETKNOT
R3NUM_GETKNOT
R3BOOL, true if succeeded
R3FLOAT, knot value
R3INT, index
rc = obj.GETKNOT(p1, p3);
Fetch knot value by index
R3NUM_SETPOINTLOCAL
SETPOINTLOCAL
R3NUM_SETPOINTLOCAL
R3BOOL, true if succeeded
R3INT, index
R3VECTOR4, point
rc = obj.SETPOINTLOCAL(p1, p3);
Low level set point method. The point is given in object space. * The method doesn't generate R3MM_CHANGED nor call R3TTM_CHANGENIMATEDTAG.
R3NUM_GETPOINTLOCAL
GETPOINTLOCAL
R3NUM_GETPOINTLOCAL
R3BOOL, true if succeeded
R3INT, index
R3VECTOR4, point
rc = obj.GETPOINTLOCAL(p1, p3);
Get point in object space
R3NUCM_SHRINKISINSIDE
SHRINKISINSIDE
R3NUCM_SHRINKISINSIDE
R3BOOL, true if is inside
rc = obj.SHRINKISINSIDE();
Class message: Test if R3CURVENODE *p1 is inside R3CURVENODE *p3. R3NUCM_PREPARESHRINK must be called prior this operation.
R3NUM_MEASURELENGTH
MEASURELENGTH
R3NUM_MEASURELENGTH
R3FLOAT, address of result value
obj.MEASURELENGTH(p3);
measure lenght of curve
R3NUM_DISTRIBUTEEVENLY
DISTRIBUTEEVENLY
R3NUM_DISTRIBUTEEVENLY
obj.DISTRIBUTEEVENLY();
Adjust points so that each curve segment is equally long. The operation sets parametrization to uniform and usually changes curve shape slightly.
R3NUM_SIMPLIFY
SIMPLIFY
R3NUM_SIMPLIFY
obj.SIMPLIFY();
Simplify the curve by removing points with minimal * impact to the curve shape.
Count
Count
R3NUA_Count
Integer
R3INT
number of control points
jsobj.SetCount(value);
value = jsobj.GetCount();
R3INT value = ...;
R3SetAttrs(r3obj, R3NUA_Count, value, R3TAG_END);
R3INT value;
R3GetAttrs(r3obj, R3NUA_Count, &value, R3TAG_END);
Order
Order
R3NUA_Order
Integer
R3INT
degree + 1, must be: order <= number of control points
jsobj.SetOrder(value);
value = jsobj.GetOrder();
R3INT value = ...;
R3SetAttrs(r3obj, R3NUA_Order, value, R3TAG_END);
R3INT value;
R3GetAttrs(r3obj, R3NUA_Order, &value, R3TAG_END);
Knots
Knots
R3NUA_Knots
Number
R3FLOAT*
array of knot values. If closed, number of knots == _Count, otherwise _Count+order
jsobj.SetKnots(value);
value = jsobj.GetKnots();
R3FLOAT* value = ...;
R3SetAttrs(r3obj, R3NUA_Knots, value, R3TAG_END);
R3FLOAT* value;
R3GetAttrs(r3obj, R3NUA_Knots, &value, R3TAG_END);
Points
Points
R3NUA_Points
array of control points
jsobj.SetPoints(value);
value = jsobj.GetPoints();
R3VECTOR4* value = ...;
R3SetAttrs(r3obj, R3NUA_Points, value, R3TAG_END);
R3VECTOR4* value;
R3GetAttrs(r3obj, R3NUA_Points, &value, R3TAG_END);
KnotCount
KnotCount
R3NUA_KnotCount
Integer
R3INT
NOTE: read only
value = jsobj.GetKnotCount();
R3INT value;
R3GetAttrs(r3obj, R3NUA_KnotCount, &value, R3TAG_END);
Points3
Points3
R3NUA_Points3
set 3d vectors
jsobj.SetPoints3(value);
value = jsobj.GetPoints3();
R3VECTOR* value = ...;
R3SetAttrs(r3obj, R3NUA_Points3, value, R3TAG_END);
R3VECTOR* value;
R3GetAttrs(r3obj, R3NUA_Points3, &value, R3TAG_END);
Closed
Closed
R3NUA_Closed
Boolean
R3BOOL
if true closed, otherwse open curve
jsobj.SetClosed(value);
value = jsobj.GetClosed();
R3BOOL value = ...;
R3SetAttrs(r3obj, R3NUA_Closed, value, R3TAG_END);
R3BOOL value;
R3GetAttrs(r3obj, R3NUA_Closed, &value, R3TAG_END);
InParentsParamSpace
InParentsParamSpace
R3NUA_InParentsParamSpace
Boolean
R3BOOL
points defined there, like in a trim curve
jsobj.SetInParentsParamSpace(value);
value = jsobj.GetInParentsParamSpace();
R3BOOL value = ...;
R3SetAttrs(r3obj, R3NUA_InParentsParamSpace, value, R3TAG_END);
R3BOOL value;
R3GetAttrs(r3obj, R3NUA_InParentsParamSpace, &value, R3TAG_END);
DefaultTool
DefaultTool
R3NUA_DefaultTool
Integer
R3INT
what happens when the user applies 'move point', see codes below
jsobj.SetDefaultTool(value);
value = jsobj.GetDefaultTool();
R3INT value = ...;
R3SetAttrs(r3obj, R3NUA_DefaultTool, value, R3TAG_END);
R3INT value;
R3GetAttrs(r3obj, R3NUA_DefaultTool, &value, R3TAG_END);
Parametrization
Parametrization
R3NUA_Parametrization
Integer
R3INT
see parametrization codes in r3nulib.h
jsobj.SetParametrization(value);
value = jsobj.GetParametrization();
R3INT value = ...;
R3SetAttrs(r3obj, R3NUA_Parametrization, value, R3TAG_END);
R3INT value;
R3GetAttrs(r3obj, R3NUA_Parametrization, &value, R3TAG_END);
Diameter1
Diameter1
R3NUA_Diameter1
Number
R3FLOAT
diameter for rendering
jsobj.SetDiameter1(value);
value = jsobj.GetDiameter1();
R3FLOAT value = ...;
R3SetAttrs(r3obj, R3NUA_Diameter1, value, R3TAG_END);
R3FLOAT value;
R3GetAttrs(r3obj, R3NUA_Diameter1, &value, R3TAG_END);
Diameter2
Diameter2
R3NUA_Diameter2
Number
R3FLOAT
diameter
jsobj.SetDiameter2(value);
value = jsobj.GetDiameter2();
R3FLOAT value = ...;
R3SetAttrs(r3obj, R3NUA_Diameter2, value, R3TAG_END);
R3FLOAT value;
R3GetAttrs(r3obj, R3NUA_Diameter2, &value, R3TAG_END);
Ends
Ends
R3NUA_Ends
Integer
R3INT
see end knot codes below
jsobj.SetEnds(value);
value = jsobj.GetEnds();
R3INT value = ...;
R3SetAttrs(r3obj, R3NUA_Ends, value, R3TAG_END);
R3INT value;
R3GetAttrs(r3obj, R3NUA_Ends, &value, R3TAG_END);
ScanLineQuality
ScanLineQuality
R3NUA_ScanLineQuality
Integer
R3INT
lines per interval
jsobj.SetScanLineQuality(value);
value = jsobj.GetScanLineQuality();
R3INT value = ...;
R3SetAttrs(r3obj, R3NUA_ScanLineQuality, value, R3TAG_END);
R3INT value;
R3GetAttrs(r3obj, R3NUA_ScanLineQuality, &value, R3TAG_END);
Min
Min
R3NUA_Min
Number
R3FLOAT
minimum evaluation parameter value
jsobj.SetMin(value);
value = jsobj.GetMin();
R3FLOAT value = ...;
R3SetAttrs(r3obj, R3NUA_Min, value, R3TAG_END);
R3FLOAT value;
R3GetAttrs(r3obj, R3NUA_Min, &value, R3TAG_END);
Max
Max
R3NUA_Max
Number
R3FLOAT
maximum evaluation parameter value
jsobj.SetMax(value);
value = jsobj.GetMax();
R3FLOAT value = ...;
R3SetAttrs(r3obj, R3NUA_Max, value, R3TAG_END);
R3FLOAT value;
R3GetAttrs(r3obj, R3NUA_Max, &value, R3TAG_END);
DiameterChannel
DiameterChannel
R3NUA_DiameterChannel
String
char*
name of channel that defines diameter in scanline rendering
jsobj.SetDiameterChannel(value);
value = jsobj.GetDiameterChannel();
char* value = ...;
R3SetAttrs(r3obj, R3NUA_DiameterChannel, value, R3TAG_END);
char* value;
R3GetAttrs(r3obj, R3NUA_DiameterChannel, &value, R3TAG_END);
RenderRaytrace
RenderRaytrace
R3NUA_RenderRaytrace
Boolean
R3BOOL
enables raytraced rendering
jsobj.SetRenderRaytrace(value);
value = jsobj.GetRenderRaytrace();
R3BOOL value = ...;
R3SetAttrs(r3obj, R3NUA_RenderRaytrace, value, R3TAG_END);
R3BOOL value;
R3GetAttrs(r3obj, R3NUA_RenderRaytrace, &value, R3TAG_END);
RenderScanline
RenderScanline
R3NUA_RenderScanline
Boolean
R3BOOL
enables scanline rendering
jsobj.SetRenderScanline(value);
value = jsobj.GetRenderScanline();
R3BOOL value = ...;
R3SetAttrs(r3obj, R3NUA_RenderScanline, value, R3TAG_END);
R3BOOL value;
R3GetAttrs(r3obj, R3NUA_RenderScanline, &value, R3TAG_END);
MaxDisplacement
MaxDisplacement
R3NUA_MaxDisplacement
Number
R3FLOAT
max. sum of ray tracing time radius + position displacement
jsobj.SetMaxDisplacement(value);
value = jsobj.GetMaxDisplacement();
R3FLOAT value = ...;
R3SetAttrs(r3obj, R3NUA_MaxDisplacement, value, R3TAG_END);
R3FLOAT value;
R3GetAttrs(r3obj, R3NUA_MaxDisplacement, &value, R3TAG_END);
RenderPostProc
RenderPostProc
R3NUA_RenderPostProc
Boolean
R3BOOL
enables postpr rendering
jsobj.SetRenderPostProc(value);
value = jsobj.GetRenderPostProc();
R3BOOL value = ...;
R3SetAttrs(r3obj, R3NUA_RenderPostProc, value, R3TAG_END);
R3BOOL value;
R3GetAttrs(r3obj, R3NUA_RenderPostProc, &value, R3TAG_END);
DrawKnots
DrawKnots
R3NUA_DrawKnots
Boolean
R3BOOL
draw knots
jsobj.SetDrawKnots(value);
value = jsobj.GetDrawKnots();
R3BOOL value = ...;
R3SetAttrs(r3obj, R3NUA_DrawKnots, value, R3TAG_END);
R3BOOL value;
R3GetAttrs(r3obj, R3NUA_DrawKnots, &value, R3TAG_END);
Handle Types
Default tools
end condition codes for the parametrization
currently rendering engine specific optimizations limit max order to 6
Local csys
The actual points
The shrinked/expanded curve
true if this curve defines a hole
Inside test handle
Registry function