r3curve
real/code/r3curve.h
r3code
Curve Class.
r3Model
R3CLID_MODEL
r3Curve
R3CLID_CURVE - 49
TRANSFORM_I, TRANSFORM_F, TRANSFORM_V, TRANSFORM_C, TRANSFORM_FN, FLATLINES, ADDPOINTIFNOTONLINE, ADDPOINTIFONLINE, ADDPOINT, EVALXYPOINTS, DERIVE, SETDERIVATIVE, TRANSFORM_V4, TRANSFORM_C4, SCALEPOINTSX, ADDFIRSTTOEND, ADDLASTTOBEGINNING, SIMPLIFY, SETACTIVE, TRANSFORMPOINTSX, UNSELECTALL, SELECTBYX, TRANSLATESELECTEDX, DELETESELECTEDPOINTS, SETSELECTEDX, DELETEALLPOINTS, SETMINMAX, DUPLICATESELECTEDPOI, TRANSLATESELECTEDXFR, SHAPECHANGED, ISACTIVE, SETSELECTEDY, SELECTBYLIST, TRANSLATESELECTED, ADDPOINTGENERAL, ALIGNSELECTEDPOINTS, SETPOINTGEOMETRY, SELECTBYINDEX, GETNEXTPOINTBYX, GETPREVPOINTBYX, SELECTRANGE, SHIFTTOORIGINY, SETSELECTEDTYPE, GETSELECTEDTYPE, DISTRIBUTE, MIRRORY,
Points, Points1, Points2, Points3, NCurves, NumPoints, MaxX, MinX, MaxY, MinY, Type, PointCount0, PointCount1, PointCount2, PointCount3, IsQuaternion, AlsoChangesObj, AlsoChangesMth, NewKeyTolerance, PrepareChangesMth, AngleType, AdvancedEditing,
int R3RegisterCurveClass(R3APP *app);
R3CURVM_TRANSFORM_I
TRANSFORM_I
R3CURVM_TRANSFORM_I
R3INT*, value to be transformed.
obj.TRANSFORM_I(p3);
Transform given integer value. If the curve consist of more than one curve, the first curve is used for transforming. The second and third curves has no effect.
R3CURVM_TRANSFORM_F
TRANSFORM_F
R3CURVM_TRANSFORM_F
R3FLOAT, float value to be transformed
obj.TRANSFORM_F(p3);
Transform given R3FLOAT
R3CURVM_TRANSFORM_V
TRANSFORM_V
R3CURVM_TRANSFORM_V
R3VECTOR, vector to be transformed
obj.TRANSFORM_V(p3);
Transform vector value.
R3CURVM_TRANSFORM_C
TRANSFORM_C
R3CURVM_TRANSFORM_C
R3FLOATCOLOR3, color to be transformed
obj.TRANSFORM_C(p3);
Transform R3FLOATCOLOR3 value
R3CURVM_TRANSFORM_FN
TRANSFORM_FN
R3CURVM_TRANSFORM_FN
R3FLOAT, float to be transformed
R3INT, ordnum of the curve 0, 1, 2.
obj.TRANSFORM_FN(p1, p3);
Transform float value using ordnum defining the curve to be used.
R3CURVM_FLATLINES
FLATLINES
R3CURVM_FLATLINES
R3INT, sub curve disable bits (e.g. 3 = two first sub curves won't change)
obj.FLATLINES(p3);
Make all curves 'flat' - all points will get y coordinate of the first point.
R3CURVM_ADDPOINTIFNOTONLINE
ADDPOINTIFNOTONLINE
R3CURVM_ADDPOINTIFNOTONLINE
R3BOOL, returns true if point was added, false if not
R3INT, type id R3TID_FLOAT, R3TID_VECTOR, R3TID_VECTOR4, R3TID_INTEGER, R3TID_BOOLEAN, R3TID_ENUM
void*, x value, parameter type must correspond to type id specified in p1
void*, y value, parameter type must correspond to type id specified in p1
rc = obj.ADDPOINTIFNOTONLINE(p1, p2, p3);
Adds new point into the curve provided the curve doesn't already pass through the given point.
R3CURVM_ADDPOINTIFONLINE
ADDPOINTIFONLINE
R3CURVM_ADDPOINTIFONLINE
R3BOOL, returns true if point was added, false if not.
R3INT, type id R3TID_FLOAT, R3TID_VECTOR, R3TID_VECTOR4, R3TID_INTEGER, R3TID_BOOLEAN, R3TID_ENUM
void*, x value, parameter type must correspond to type id specified in p1
void*, y value, parameter type must correspond to type id specified in p1
rc = obj.ADDPOINTIFONLINE(p1, p2, p3);
Adds new point into the curve provided the curve passes through the point.
R3CURVM_ADDPOINT
ADDPOINT
R3CURVM_ADDPOINT
obj.ADDPOINT();
R3CURVM_EVALXYPOINTS
EVALXYPOINTS
R3CURVM_EVALXYPOINTS
R3INT, number of evaluated points
R3INT, curve index (0, 1, 2)
R3VECTOR, result points
R3INT, buffer size, maximum number of points to be evaluated
rc = obj.EVALXYPOINTS(p1, p2, p3);
Evaluate curve to drawable polygon in XY points.
R3CURVM_DERIVE
DERIVE
R3CURVM_DERIVE
R3VECTOR, parameter value
R3VECTOR, result
obj.DERIVE(p1, p3);
Derive curve.
R3CURVM_SETDERIVATIVE
SETDERIVATIVE
R3CURVM_SETDERIVATIVE
R3VECTOR, parameter value
R3INT, sub curve disable bits
R3VECTOR, derivative correspondin the parameter value.
obj.SETDERIVATIVE(p1, p2, p3);
Set derivative of the curve. The curve points will be modified so that the given derivative achieved.
R3CURVM_TRANSFORM_V4
TRANSFORM_V4
R3CURVM_TRANSFORM_V4
R3VECTOR4, vector to be transformed
obj.TRANSFORM_V4(p3);
Transform vector value.
R3CURVM_TRANSFORM_C4
TRANSFORM_C4
R3CURVM_TRANSFORM_C4
R3FLOATCOLOR, color to be transformed
obj.TRANSFORM_C4(p3);
Transform R3FLOATCOLOR value
R3CURVM_SCALEPOINTSX
SCALEPOINTSX
R3CURVM_SCALEPOINTSX
R3FLOAT, center of scaling
R3INT, sub curve disable bits (0=scale all)
R3FLOAT, scaling factor
obj.SCALEPOINTSX(p1, p2, p3);
Scale all X values of points with given factor
R3CURVM_ADDFIRSTTOEND
ADDFIRSTTOEND
R3CURVM_ADDFIRSTTOEND
R3INT, sub curve disable bits (0=scale all)
R3FLOAT, parameter (=x) value where to add the point
obj.ADDFIRSTTOEND(p1, p3);
Adds a new point to given x value by copying the y value of first point
R3CURVM_ADDLASTTOBEGINNING
ADDLASTTOBEGINNING
R3CURVM_ADDLASTTOBEGINNING
R3INT, sub curve disable bits (0=scale all)
R3FLOAT, parameter (=x) value where to add the point
obj.ADDLASTTOBEGINNING(p1, p3);
Adds a new point to given x value by copying the y value of the last point
R3CURVM_SIMPLIFY
SIMPLIFY
R3CURVM_SIMPLIFY
R3INT, mask bits defining which sub curves should be skipped (0=simplify all)
obj.SIMPLIFY(p3);
Remove unnecessary points.
R3CURVM_SETACTIVE
SETACTIVE
R3CURVM_SETACTIVE
R3INT, curve index
R3INT, point index
R3BOOL, TRUE sets FALSE resets
obj.SETACTIVE(p1, p2, p3);
Set currently active point
R3CURVM_TRANSFORMPOINTSX
TRANSFORMPOINTSX
R3CURVM_TRANSFORMPOINTSX
R3FLOAT, translate
R3INT, disable bits
R3FLOAT, scale
obj.TRANSFORMPOINTSX(p1, p2, p3);
Scale and translate all X values of points: new_x = old_x*scale + translate
R3CURVM_UNSELECTALL
UNSELECTALL
R3CURVM_UNSELECTALL
R3INT, disable bits - if 0 all points of all sub curves become unselected
obj.UNSELECTALL(p3);
Unselect all points of given sub curves
R3CURVM_SELECTBYX
SELECTBYX
R3CURVM_SELECTBYX
R3BOOL, TRUE if points became selected
R3INT, disable bits. If 0 all sub curves checked
R3FLOAT, x coordinate
rc = obj.SELECTBYX(p1, p3);
Select points 'very near' the given x coordinate
R3CURVM_TRANSLATESELECTEDX
TRANSLATESELECTEDX
R3CURVM_TRANSLATESELECTEDX
R3INT, disable bits,
R3FLOAT, delta
obj.TRANSLATESELECTEDX(p1, p3);
Translate curve points in x direction.
R3CURVM_DELETESELECTEDPOINTS
DELETESELECTEDPOINTS
R3CURVM_DELETESELECTEDPOINTS
R3INT, sub curve disable bits: 0=delete from all curves
obj.DELETESELECTEDPOINTS(p3);
Delete select points
R3CURVM_SETSELECTEDX
SETSELECTEDX
R3CURVM_SETSELECTEDX
R3INT, disable bits
R3FLOAT, new x value
obj.SETSELECTEDX(p1, p3);
Set x coordinate for the selected points.
R3CURVM_DELETEALLPOINTS
DELETEALLPOINTS
R3CURVM_DELETEALLPOINTS
obj.DELETEALLPOINTS();
Delete all curve points
R3CURVM_SETMINMAX
SETMINMAX
R3CURVM_SETMINMAX
R3TAG*, tag list specifying the following tags: R3CURVA_MaxX, R3CURVA_MinX, R3CURVA_MaxY, R3CURVA_MinY, R3CURVA_Rescale.
obj.SETMINMAX(p3);
Set new min / max limits for the curve. If R3CURVA_Rescale is TRUE, * curve points are scaled accordingly.
R3CURVM_DUPLICATESELECTEDPOI
DUPLICATESELECTEDPOI
R3CURVM_DUPLICATESELECTEDPOI
R3INT, disable bits
R3BOOL, if true, newly created points are selected
obj.DUPLICATESELECTEDPOI(p1, p3);
Duplicate selected points
R3CURVM_TRANSLATESELECTEDXFR
TRANSLATESELECTEDXFR
R3CURVM_TRANSLATESELECTEDXFR
R3INT, disable bits
R3FLOAT, delta
obj.TRANSLATESELECTEDXFR(p1, p3);
R3CURVM_SHAPECHANGED
SHAPECHANGED
R3CURVM_SHAPECHANGED
obj.SHAPECHANGED();
private
R3CURVM_ISACTIVE
ISACTIVE
R3CURVM_ISACTIVE
R3BOOL, TRUE if selected
R3INT, curve index
R3INT, point index
rc = obj.ISACTIVE(p1, p3);
Checks if point is active
R3CURVM_SETSELECTEDY
SETSELECTEDY
R3CURVM_SETSELECTEDY
R3INT, disable bits
R3FLOAT, new y value
obj.SETSELECTEDY(p1, p3);
Set y coordinate for the selected points
R3CURVM_SELECTBYLIST
SELECTBYLIST
R3CURVM_SELECTBYLIST
R3INT, sub curve index
R3LIST, see R3CURVEPOINT nodes below
obj.SELECTBYLIST(p1, p3);
Copies selection states from a given list to a sub curve
R3CURVM_TRANSLATESELECTED
TRANSLATESELECTED
R3CURVM_TRANSLATESELECTED
R3INT, disable bits
R3BOOL, if TRUE points are not moved outside R3CURVA_MinX... limits
R3FLOAT, array of two floats deltax & deltay
obj.TRANSLATESELECTED(p1, p2, p3);
Translate selected points
R3CURVM_ADDPOINTGENERAL
ADDPOINTGENERAL
R3CURVM_ADDPOINTGENERAL
R3BOOL, TRUE if point was added
R3FLOAT, array of x values (must match current R3CURVA_NCurves count)
R3FLOAT, array of y values
rc = obj.ADDPOINTGENERAL(p1, p2, 0);
Insert new point to a curve.
R3CURVM_ALIGNSELECTEDPOINTS
ALIGNSELECTEDPOINTS
R3CURVM_ALIGNSELECTEDPOINTS
R3INT, disable bits
obj.ALIGNSELECTEDPOINTS(p3);
align selected points into a line from first selected to last selected point
R3CURVM_SETPOINTGEOMETRY
SETPOINTGEOMETRY
R3CURVM_SETPOINTGEOMETRY
R3TAG*, tag list containing R3CURVA_Points, R3CURVA_Points1, R3CURVA_Points2, R3CURVA_Points3.
obj.SETPOINTGEOMETRY(p3);
Sets the point geometry, does not change selection.
R3CURVM_SELECTBYINDEX
SELECTBYINDEX
R3CURVM_SELECTBYINDEX
R3INT, sub curve index
R3INT, knot index
obj.SELECTBYINDEX(p1, p3);
selects a point by sub curve and knot index
R3CURVM_GETNEXTPOINTBYX
GETNEXTPOINTBYX
R3CURVM_GETNEXTPOINTBYX
R3BOOL, true if found, false if not.
R3FLOAT, x value
rc = obj.GETNEXTPOINTBYX(p3);
Find next point closest to the given x value. The passed x value * will be replaced by the x coord. of the next key.
R3CURVM_GETPREVPOINTBYX
GETPREVPOINTBYX
R3CURVM_GETPREVPOINTBYX
R3BOOL, true if found, false if not.
R3FLOAT, x value
rc = obj.GETPREVPOINTBYX(p3);
Find previous point closest to the given x value. The passed x value * will be replaced by the x coord. of the next key.
R3CURVM_SELECTRANGE
SELECTRANGE
R3CURVM_SELECTRANGE
R3INT, number of points selected
R3INT, mask specifying disabled curves
R3FLOAT, end value
rc = obj.SELECTRANGE(p1, p3);
Select curves within the given X range
R3CURVM_SHIFTTOORIGINY
SHIFTTOORIGINY
R3CURVM_SHIFTTOORIGINY
R3INT, disabled mask
obj.SHIFTTOORIGINY(p3);
Shift curves to start from origin in y dimension
R3CURVM_SETSELECTEDTYPE
SETSELECTEDTYPE
R3CURVM_SETSELECTEDTYPE
R3INT, disabled mask
R3INT, R3CPTYPE_SMOOTH or R3CPTYPE_SHARP
obj.SETSELECTEDTYPE(p1, p3);
Set point types for the selected points.
R3CURVM_GETSELECTEDTYPE
GETSELECTEDTYPE
R3CURVM_GETSELECTEDTYPE
R3BOOL, true if succeeded (points selected)
R3INT, disabled mask
R3BOOL*, conflict
R3INT*, returns R3CPTYPE_SMOOTH or R3CPTYPE_SHARP
rc = obj.GETSELECTEDTYPE(p1, p2, p3);
Get point types for the selected points.
R3CURVM_DISTRIBUTE
DISTRIBUTE
R3CURVM_DISTRIBUTE
R3INT, mask bits defining which sub curves should be skipped (0=all)
obj.DISTRIBUTE(p3);
Distribute the selected points evenly
R3CURVM_MIRRORY
MIRRORY
R3CURVM_MIRRORY
R3INT, mask bits defining which sub curves should be skipped (0=all)
obj.MIRRORY(p3);
Mirror the points in y direction.
Points
Points
R3CURVA_Points
r3List
R3LIST*
list consisting of R3CURVEPOINT nodes
jsobj.SetPoints(value);
value = jsobj.GetPoints();
R3LIST* value = ...;
R3SetAttrs(r3obj, R3CURVA_Points, value, R3TAG_END);
R3LIST* value;
R3GetAttrs(r3obj, R3CURVA_Points, &value, R3TAG_END);
Points1
Points1
R3CURVA_Points1
r3List
R3LIST*
list consisting of R3CURVEPOINT nodes
jsobj.SetPoints1(value);
value = jsobj.GetPoints1();
R3LIST* value = ...;
R3SetAttrs(r3obj, R3CURVA_Points1, value, R3TAG_END);
R3LIST* value;
R3GetAttrs(r3obj, R3CURVA_Points1, &value, R3TAG_END);
Points2
Points2
R3CURVA_Points2
r3List
R3LIST*
list consisting of R3CURVEPOINT nodes
jsobj.SetPoints2(value);
value = jsobj.GetPoints2();
R3LIST* value = ...;
R3SetAttrs(r3obj, R3CURVA_Points2, value, R3TAG_END);
R3LIST* value;
R3GetAttrs(r3obj, R3CURVA_Points2, &value, R3TAG_END);
Points3
Points3
R3CURVA_Points3
r3List
R3LIST*
list consisting of R3CURVEPOINT nodes
jsobj.SetPoints3(value);
value = jsobj.GetPoints3();
R3LIST* value = ...;
R3SetAttrs(r3obj, R3CURVA_Points3, value, R3TAG_END);
R3LIST* value;
R3GetAttrs(r3obj, R3CURVA_Points3, &value, R3TAG_END);
NCurves
NCurves
R3CURVA_NCurves
Integer
R3INT
number of curves: max 4
jsobj.SetNCurves(value);
value = jsobj.GetNCurves();
R3INT value = ...;
R3SetAttrs(r3obj, R3CURVA_NCurves, value, R3TAG_END);
R3INT value;
R3GetAttrs(r3obj, R3CURVA_NCurves, &value, R3TAG_END);
NumPoints
NumPoints
R3CURVA_NumPoints
Integer
R3INT
initial number of points per curve
jsobj.SetNumPoints(value);
R3INT value = ...;
R3SetAttrs(r3obj, R3CURVA_NumPoints, value, R3TAG_END);
MaxX
MaxX
R3CURVA_MaxX
Number
R3FLOAT
min/max limits
jsobj.SetMaxX(value);
value = jsobj.GetMaxX();
R3FLOAT value = ...;
R3SetAttrs(r3obj, R3CURVA_MaxX, value, R3TAG_END);
R3FLOAT value;
R3GetAttrs(r3obj, R3CURVA_MaxX, &value, R3TAG_END);
MinX
MinX
R3CURVA_MinX
Number
R3FLOAT
min/max limits
jsobj.SetMinX(value);
value = jsobj.GetMinX();
R3FLOAT value = ...;
R3SetAttrs(r3obj, R3CURVA_MinX, value, R3TAG_END);
R3FLOAT value;
R3GetAttrs(r3obj, R3CURVA_MinX, &value, R3TAG_END);
MaxY
MaxY
R3CURVA_MaxY
Number
R3FLOAT
min/max limits
jsobj.SetMaxY(value);
value = jsobj.GetMaxY();
R3FLOAT value = ...;
R3SetAttrs(r3obj, R3CURVA_MaxY, value, R3TAG_END);
R3FLOAT value;
R3GetAttrs(r3obj, R3CURVA_MaxY, &value, R3TAG_END);
MinY
MinY
R3CURVA_MinY
Number
R3FLOAT
min/max limits
jsobj.SetMinY(value);
value = jsobj.GetMinY();
R3FLOAT value = ...;
R3SetAttrs(r3obj, R3CURVA_MinY, value, R3TAG_END);
R3FLOAT value;
R3GetAttrs(r3obj, R3CURVA_MinY, &value, R3TAG_END);
Type
Type
R3CURVA_Type
Integer
R3INT
R3CUTY_* below
jsobj.SetType(value);
value = jsobj.GetType();
R3INT value = ...;
R3SetAttrs(r3obj, R3CURVA_Type, value, R3TAG_END);
R3INT value;
R3GetAttrs(r3obj, R3CURVA_Type, &value, R3TAG_END);
PointCount0
PointCount0
R3CURVA_PointCount0
Integer
R3INT
number of points in 1st curve (read-only))
value = jsobj.GetPointCount0();
R3INT value;
R3GetAttrs(r3obj, R3CURVA_PointCount0, &value, R3TAG_END);
PointCount1
PointCount1
R3CURVA_PointCount1
Integer
R3INT
number of points in 2. curve
value = jsobj.GetPointCount1();
R3INT value;
R3GetAttrs(r3obj, R3CURVA_PointCount1, &value, R3TAG_END);
PointCount2
PointCount2
R3CURVA_PointCount2
Integer
R3INT
number of points in 3. curve
value = jsobj.GetPointCount2();
R3INT value;
R3GetAttrs(r3obj, R3CURVA_PointCount2, &value, R3TAG_END);
PointCount3
PointCount3
R3CURVA_PointCount3
Integer
R3INT
number of points in 4. curve
value = jsobj.GetPointCount3();
R3INT value;
R3GetAttrs(r3obj, R3CURVA_PointCount3, &value, R3TAG_END);
IsQuaternion
IsQuaternion
R3CURVA_IsQuaternion
Boolean
R3BOOL
if true and if 3 curves, quaternion interpolation used
jsobj.SetIsQuaternion(value);
value = jsobj.GetIsQuaternion();
R3BOOL value = ...;
R3SetAttrs(r3obj, R3CURVA_IsQuaternion, value, R3TAG_END);
R3BOOL value;
R3GetAttrs(r3obj, R3CURVA_IsQuaternion, &value, R3TAG_END);
AlsoChangesObj
AlsoChangesObj
R3CURVA_AlsoChangesObj
Object
R3OBJ*
object to be informed when curve is changed
jsobj.SetAlsoChangesObj(value);
R3OBJ* value = ...;
R3SetAttrs(r3obj, R3CURVA_AlsoChangesObj, value, R3TAG_END);
AlsoChangesMth
AlsoChangesMth
R3CURVA_AlsoChangesMth
Integer
R3INT
mth used for calling _AlsoChangesObj
jsobj.SetAlsoChangesMth(value);
R3INT value = ...;
R3SetAttrs(r3obj, R3CURVA_AlsoChangesMth, value, R3TAG_END);
NewKeyTolerance
NewKeyTolerance
R3CURVA_NewKeyTolerance
Number
R3FLOAT
modify existing/create new key tolerance
jsobj.SetNewKeyTolerance(value);
value = jsobj.GetNewKeyTolerance();
R3FLOAT value = ...;
R3SetAttrs(r3obj, R3CURVA_NewKeyTolerance, value, R3TAG_END);
R3FLOAT value;
R3GetAttrs(r3obj, R3CURVA_NewKeyTolerance, &value, R3TAG_END);
PrepareChangesMth
PrepareChangesMth
R3CURVA_PrepareChangesMth
Integer
R3INT
called before curves are about to chage
jsobj.SetPrepareChangesMth(value);
R3INT value = ...;
R3SetAttrs(r3obj, R3CURVA_PrepareChangesMth, value, R3TAG_END);
AngleType
AngleType
R3CURVA_AngleType
Integer
R3INT
for R3CURVM_ADDPOINTGENERAL, see angle types below
jsobj.SetAngleType(value);
value = jsobj.GetAngleType();
R3INT value = ...;
R3SetAttrs(r3obj, R3CURVA_AngleType, value, R3TAG_END);
R3INT value;
R3GetAttrs(r3obj, R3CURVA_AngleType, &value, R3TAG_END);
AdvancedEditing
AdvancedEditing
R3CURVA_AdvancedEditing
Boolean
R3BOOL
jsobj.SetAdvancedEditing(value);
value = jsobj.GetAdvancedEditing();
R3BOOL value = ...;
R3SetAttrs(r3obj, R3CURVA_AdvancedEditing, value, R3TAG_END);
R3BOOL value;
R3GetAttrs(r3obj, R3CURVA_AdvancedEditing, &value, R3TAG_END);
Angle types
R3CURVA_Type
Point types (r3curvepoint->n.type)
R3CURVA_AddPointCondition