
Go to the source code of this file.
Data Structures | |
| struct | LinePath |
| 3D linear motion in a can More... | |
| struct | Animator |
| Canned animation. More... | |
Defines | |
| #define | OPC_foreach(PIXEL, opc, pixel) |
| Iterate each pixel of an opc; x is iterated left-to-right, y is iterated top-to-bottom. | |
| #define | OPC_foreach_mirror(PIXEL, opc, pixel) |
| Iterate each pixel of an opc; x is iterated right-to-left, y is iterated top-to-bottom. | |
| #define | OPC_foreach_flip(PIXEL, opc, pixel) |
| Iterate each pixel of an opc; x is iterated left-to-right y is iterated bottom-to-top. | |
| #define | OPC_foreach_mirror_flip(PIXEL, opc, pixel) |
| Iterate each pixel of an opc, x is iterated right-to-left, y is iterated bottom-to-top. | |
| #define | OPC_translate_foreach(PIXEL, opcdst, opcsrc, pixel_dst, pixel_src) |
| Iterate each pixel of two opcs (if differently sized, iterates smallest size); x is iterated left-to-right, y is iterated top-to-bottom. | |
| #define | IncLine(label) |
| Fixed point Bresenham-like line calculator. | |
| #define | IncLine_Init_Step(ilabel, x1, y1, x2, y2) |
| Initialize incremental line calculations to step point-by-point. | |
| #define | IncLine_Init_Span(ilabel, x1, y1, x2, y2) |
| Initialize incremental line calculations to step span-by-span (uses lesser difference to make span). | |
| #define | IncLine_Init_Count(ilabel, x1, y1, x2, y2, nSamples) |
| Initialize incremental line calculations to step over a count of steps. | |
| #define | IncLine_Step(ilabel) |
| Step to next coordinate. | |
| #define | IncLine_nStep(ilabel, count) |
| Step over next set of coordinates. | |
| #define | IncLine_Remains(ilabel) ( ppConcat(ilabel,_remain) > 0 ) |
| Tell us if there are remaining steps. | |
| #define | IncLine_XY(ilabel, x, y) |
| Get current X/Y from BresLine data. | |
| #define | IncLine_NextXY(ilabel, x, y) |
| Get next X/Y from BresLine data without incrementing it. | |
| #define | IncLine_foreach(ilabel, iteratorx, iteratory) |
| Iterate each point in IncLine. | |
| #define | IncLine_foreach_spans(ilabel, iteratorx, iteratory, iteratornx, iteratorny) |
| Iterate each point in IncLine. | |
| #define | IncLine3D(label) |
| Fixed point Bresenham-like line calculator. | |
| #define | IncLine3D_Init_Step(ilabel, x1, y1, x2, y2) |
| Initialize incremental line calculations to step point-by-point. | |
| #define | IncLine3D_Init_Span(ilabel, x1, y1, x2, y2) |
| Initialize incremental line calculations to step span-by-span (uses lesser difference to make span). | |
| #define | IncLine3D_Init_Count(ilabel, x1, y1, x2, y2, nSamples) |
| Initialize incremental line calculations to step over a count of steps. | |
| #define | IncLine3D_Step(ilabel) |
| Step to next coordinate. | |
| #define | IncLine3D_nStep(ilabel, count) |
| Step over next set of coordinates. | |
| #define | IncLine3D_Remains(ilabel) ( ppConcat(ilabel,_remain) > 0 ) |
| Tell us if there are remaining steps. | |
| #define | IncLine3D_XYZ(ilabel, x, y, z) |
| Get current X/Y from BresLine data. | |
| #define | IncLine3D_NextXYZ(ilabel, x, y, z) |
| Get next X/Y/Z from BresLine data without incrementing it. | |
| #define | IncLine3D_foreach(ilabel, iteratorx, iteratory, iteratorz) |
| Iterate each point in IncLine3D. | |
| #define | IncLine3D_foreach_spans(ilabel, iteratorx, iteratory, iteratorz, iteratornx, iteratorny, iteratornz) |
| Iterate each point in IncLine3D. | |
Enumerations | |
| enum | Animator_Dir |
| Simple animation types. | |
Functions | |
| void | LinePath_init (LinePath *self, int x1, int y1, int z1, unsigned msBegin, int x2, int y2, int z2, unsigned msFinish) |
| Initialize linear motion. | |
| void | LinePath_setpos (LinePath *self, int x, int y, int z, unsigned msCurrent) |
| Set current position in space, now. | |
| void | LinePath_moveto (LinePath *self, int x, int y, int z, unsigned msCurrent, unsigned msArrive) |
| Move from current position to target. | |
| bool | LinePath_curr (const LinePath *self, int *x, int *y, int *z, unsigned msCurrent) |
| Get current position in space, given time. | |
| int | Animator_init (Animator *self, int firstFrame, int lastFrame, Animator_Dir dir, unsigned msPerFrame) |
| Initialize an animation. | |
| int | Animator_set (Animator *self, int frame) |
| Set animation to single frame. | |
| bool | Animator_curr (Animator *self, int *frame, unsigned msCurrent) |
| Get current animation frame. | |
| bool | Animator_pending (const Animator *self) |
| Return true if we're pending a oneshot event. | |
Definition in file iterator.h.
| #define IncLine | ( | label | ) |
Value:
int ppConcat(label,_x1);\ int ppConcat(label,_y1);\ int ppConcat(label,_x2);\ int ppConcat(label,_y2);\ int ppConcat(label,_x);\ int ppConcat(label,_y);\ int ppConcat(label,_dx);\ int ppConcat(label,_dy);\ int ppConcat(label,_remain);\
| label | Label to prepend to allow for multiple instances |
Definition at line 113 of file iterator.h.
| #define IncLine3D | ( | label | ) |
Value:
int ppConcat(label,_x1);\ int ppConcat(label,_y1);\ int ppConcat(label,_z1);\ int ppConcat(label,_x2);\ int ppConcat(label,_y2);\ int ppConcat(label,_z2);\ int ppConcat(label,_x);\ int ppConcat(label,_y);\ int ppConcat(label,_z);\ int ppConcat(label,_dx);\ int ppConcat(label,_dy);\ int ppConcat(label,_dz);\ int ppConcat(label,_remain);\
| label | Label to prepend to allow for multiple instances |
Definition at line 307 of file iterator.h.
| #define IncLine3D_foreach | ( | ilabel, | |||
| iteratorx, | |||||
| iteratory, | |||||
| iteratorz | ) |
Value:
int iteratorx = ppConcat(ilabel,_x1);\ int iteratory = ppConcat(ilabel,_y1);\ int iteratorz = ppConcat(ilabel,_z1);\ for( ; ppConcat(ilabel,_remain)--; iteratorx = (ppConcat(ilabel,_x) += ppConcat(ilabel,_dx))>>16, iteratory = (ppConcat(ilabel,_y) += ppConcat(ilabel,_dy))>>16, iteratorz = (ppConcat(ilabel,_z) += ppConcat(ilabel,_dz))>>16 )
| ilabel | Describes label from IncLine3D with any instance indirection attached to it (i.e. 'mydata->label') | |
| iteratorx | What to call the x iterator | |
| iteratory | What to call the y iterator | |
| iteratorz | What to call the z iterator |
Definition at line 506 of file iterator.h.
| #define IncLine3D_foreach_spans | ( | ilabel, | |||
| iteratorx, | |||||
| iteratory, | |||||
| iteratorz, | |||||
| iteratornx, | |||||
| iteratorny, | |||||
| iteratornz | ) |
Value:
int iteratorx = ppConcat(ilabel,_x1);\ int iteratory = ppConcat(ilabel,_y1);\ int iteratorz = ppConcat(ilabel,_z1);\ int iteratornx, iteratorny, iteratornz;\ IncLine3D_Step(ilabel);\ IncLine3D_XYZ(ilabel, iteratornx, iteratorny, iteratornz );\ for( ; ppConcat(ilabel,_remain)--; iteratorx = iteratornx, iteratory = iteratorny, iteratorz = iteratornz, \ iteratornx = (ppConcat(ilabel,_x) += ppConcat(ilabel,_dx))>>16, \ iteratorny = (ppConcat(ilabel,_y) += ppConcat(ilabel,_dy))>>16, \ iteratornz = (ppConcat(ilabel,_z) += ppConcat(ilabel,_dz))>>16 )
| ilabel | Describes label from IncLine3D with any instance indirection attached to it (i.e. 'mydata->label') | |
| iteratorx | What to call the x iterator | |
| iteratory | What to call the y iterator | |
| iteratorz | What to call the z iterator | |
| iteratornx | What to call the iterator for the 'next' x coordinate | |
| iteratorny | What to call the iterator for the 'next' y coordinate | |
| iteratornz | What to call the iterator for the 'next' z coordinate |
Definition at line 522 of file iterator.h.
| #define IncLine3D_Init_Count | ( | ilabel, | |||
| x1, | |||||
| y1, | |||||
| x2, | |||||
| y2, | |||||
| nSamples | ) |
Value:
{\
ppConcat(ilabel,_x1) = (x1);\
ppConcat(ilabel,_y1) = (y1);\
ppConcat(ilabel,_z1) = (z1);\
ppConcat(ilabel,_x2) = (x2);\
ppConcat(ilabel,_y2) = (y2);\
ppConcat(ilabel,_z2) = (z2);\
ppConcat(ilabel,_x) = ppConcat(ilabel,_x1)<<16;\
ppConcat(ilabel,_y) = ppConcat(ilabel,_y1)<<16;\
ppConcat(ilabel,_z) = ppConcat(ilabel,_z1)<<16;\
ppConcat(ilabel,_dx) = ppConcat(ilabel,_x2) - ppConcat(ilabel,_x1);\
ppConcat(ilabel,_dy) = ppConcat(ilabel,_y2) - ppConcat(ilabel,_y1);\
ppConcat(ilabel,_dz) = ppConcat(ilabel,_z2) - ppConcat(ilabel,_z1);\
ppConcat(ilabel,_dx) = further(ppConcat(ilabel,_dx),1);\
ppConcat(ilabel,_dy) = further(ppConcat(ilabel,_dy),1);\
ppConcat(ilabel,_dz) = further(ppConcat(ilabel,_dz),1);\
ppConcat(ilabel,_remain) = (nSamples);\
ppConcat(ilabel,_dx) = (ppConcat(ilabel,_dx)<<16)/ppConcat(ilabel,_remain);\
ppConcat(ilabel,_dy) = (ppConcat(ilabel,_dy)<<16)/ppConcat(ilabel,_remain);\
ppConcat(ilabel,_dz) = (ppConcat(ilabel,_dz)<<16)/ppConcat(ilabel,_remain);\
}
| ilabel | Describes label from IncLine3D with any instance indirection attached to it (i.e. 'mydata->label') | |
| x1,y1 | First point in line | |
| x2,y2 | Last point in line (inclusive) | |
| nSamples | Number of steps we would prefer this to take, typically representing time samples for a path |
Definition at line 393 of file iterator.h.
| #define IncLine3D_Init_Span | ( | ilabel, | |||
| x1, | |||||
| y1, | |||||
| x2, | |||||
| y2 | ) |
Value:
{\
ppConcat(ilabel,_x1) = (x1);\
ppConcat(ilabel,_y1) = (y1);\
ppConcat(ilabel,_z1) = (z1);\
ppConcat(ilabel,_x2) = (x2);\
ppConcat(ilabel,_y2) = (y2);\
ppConcat(ilabel,_z2) = (z2);\
ppConcat(ilabel,_x) = ppConcat(ilabel,_x1)<<16;\
ppConcat(ilabel,_y) = ppConcat(ilabel,_y1)<<16;\
ppConcat(ilabel,_z) = ppConcat(ilabel,_z1)<<16;\
ppConcat(ilabel,_dx) = ppConcat(ilabel,_x2) - ppConcat(ilabel,_x1);\
ppConcat(ilabel,_dy) = ppConcat(ilabel,_y2) - ppConcat(ilabel,_y1);\
ppConcat(ilabel,_dz) = ppConcat(ilabel,_z2) - ppConcat(ilabel,_z1);\
ppConcat(ilabel,_dx) = further(ppConcat(ilabel,_dx),1);\
ppConcat(ilabel,_dy) = further(ppConcat(ilabel,_dy),1);\
ppConcat(ilabel,_dz) = further(ppConcat(ilabel,_dz),1);\
ppConcat(ilabel,_remain) = min(abs(ppConcat(ilabel,_dx)),abs(ppConcat(ilabel,_dy)));\
ppConcat(ilabel,_remain) = min(ppConcat(ilabel,_remain),abs(ppConcat(ilabel,_dz)));\
ppConcat(ilabel,_dx) = (ppConcat(ilabel,_dx)<<16)/ppConcat(ilabel,_remain);\
ppConcat(ilabel,_dy) = (ppConcat(ilabel,_dy)<<16)/ppConcat(ilabel,_remain);\
ppConcat(ilabel,_dz) = (ppConcat(ilabel,_dz)<<16)/ppConcat(ilabel,_remain);\
}
| ilabel | Describes label from IncLine3D with any instance indirection attached to it (i.e. 'mydata->label') | |
| x1,y1 | First point in line | |
| x2,y2 | Last point in line (inclusive) |
Definition at line 359 of file iterator.h.
| #define IncLine3D_Init_Step | ( | ilabel, | |||
| x1, | |||||
| y1, | |||||
| x2, | |||||
| y2 | ) |
Value:
{\
ppConcat(ilabel,_x1) = (x1);\
ppConcat(ilabel,_y1) = (y1);\
ppConcat(ilabel,_z1) = (z1);\
ppConcat(ilabel,_x2) = (x2);\
ppConcat(ilabel,_y2) = (y2);\
ppConcat(ilabel,_z2) = (z2);\
ppConcat(ilabel,_x) = ppConcat(ilabel,_x1)<<16;\
ppConcat(ilabel,_y) = ppConcat(ilabel,_y1)<<16;\
ppConcat(ilabel,_z) = ppConcat(ilabel,_z1)<<16;\
ppConcat(ilabel,_dx) = ppConcat(ilabel,_x2) - ppConcat(ilabel,_x1);\
ppConcat(ilabel,_dy) = ppConcat(ilabel,_y2) - ppConcat(ilabel,_y1);\
ppConcat(ilabel,_dz) = ppConcat(ilabel,_z2) - ppConcat(ilabel,_z1);\
ppConcat(ilabel,_dx) = further(ppConcat(ilabel,_dx),1);\
ppConcat(ilabel,_dy) = further(ppConcat(ilabel,_dy),1);\
ppConcat(ilabel,_dz) = further(ppConcat(ilabel,_dz),1);\
ppConcat(ilabel,_remain) = max(abs(ppConcat(ilabel,_dx)),abs(ppConcat(ilabel,_dy)));\
ppConcat(ilabel,_remain) = max(ppConcat(ilabel,_remain),abs(ppConcat(ilabel,_dz)));\
ppConcat(ilabel,_dx) = (ppConcat(ilabel,_dx)<<16)/ppConcat(ilabel,_remain);\
ppConcat(ilabel,_dy) = (ppConcat(ilabel,_dy)<<16)/ppConcat(ilabel,_remain);\
ppConcat(ilabel,_dz) = (ppConcat(ilabel,_dz)<<16)/ppConcat(ilabel,_remain);\
}
| ilabel | Describes label from IncLine3D with any instance indirection attached to it (i.e. 'mydata->label') | |
| x1,y1 | First point in line | |
| x2,y2 | Last point in line (inclusive) |
Definition at line 329 of file iterator.h.
| #define IncLine3D_NextXYZ | ( | ilabel, | |||
| x, | |||||
| y, | |||||
| z | ) |
Value:
{\
if( ppConcat(ilabel,_remain) )\
{\
(x) = (ppConcat(ilabel,_x)+ppConcat(ilabel,_dx))>>16;\
(y) = (ppConcat(ilabel,_y)+ppConcat(ilabel,_dy))>>16;\
(z) = (ppConcat(ilabel,_z)+ppConcat(ilabel,_dz))>>16;\
}\
else\
{\
(x) = ppConcat(ilabel,_x2);\
(y) = ppConcat(ilabel,_y2);\
(z) = ppConcat(ilabel,_z2);\
}\
}
| ilabel | Describes label from IncLine3D with any instance indirection attached to it (i.e. 'mydata->label') | |
| x | Int to receive X coordinate | |
| y | Int to receive Y coordinate | |
| z | Int to receive Z coordinate |
Definition at line 483 of file iterator.h.
| #define IncLine3D_nStep | ( | ilabel, | |||
| count | ) |
Value:
{\
int nSkip = (count);\
if( nSkip >= ppConcat(ilabel,_remain) )\
{\
ppConcat(ilabel,_x) = ppConcat(ilabel,_x2)<<16;\
ppConcat(ilabel,_y) = ppConcat(ilabel,_y2)<<16;\
ppConcat(ilabel,_z) = ppConcat(ilabel,_z2)<<16;\
} \
else \
{\
ppConcat(ilabel,_x) += ppConcat(ilabel,_dx) * nSkip;\
ppConcat(ilabel,_y) += ppConcat(ilabel,_dy) * nSkip;\
ppConcat(ilabel,_z) += ppConcat(ilabel,_dz) * nSkip;\
ppConcat(ilabel,_remain) -= nSkip;\
}\
}
| ilabel | Describes label from IncLine3D with any instance indirection attached to it (i.e. 'mydata->label') | |
| count | Count of steps to skip over Useful for situations such as line clipping, where we know a certain number of segments or pixels will not be rendered |
Definition at line 437 of file iterator.h.
| #define IncLine3D_Remains | ( | ilabel | ) | ( ppConcat(ilabel,_remain) > 0 ) |
Tell us if there are remaining steps.
| ilabel | Describes label from IncLine3D with any instance indirection attached to it (i.e. 'mydata->label') |
Definition at line 460 of file iterator.h.
| #define IncLine3D_Step | ( | ilabel | ) |
Value:
{\
if( ppConcat(ilabel,_remain) > 0 )\
{\
ppConcat(ilabel,_x) += ppConcat(ilabel,_dx);\
ppConcat(ilabel,_y) += ppConcat(ilabel,_dy);\
ppConcat(ilabel,_z) += ppConcat(ilabel,_dz);\
ppConcat(ilabel,_remain)--;\
}\
}
| ilabel | Describes label from IncLine3D with any instance indirection attached to it (i.e. 'mydata->label') |
Definition at line 420 of file iterator.h.
| #define IncLine3D_XYZ | ( | ilabel, | |||
| x, | |||||
| y, | |||||
| z | ) |
Value:
{\
(x) = ppConcat(ilabel,_x)>>16;\
(y) = ppConcat(ilabel,_y)>>16;\
(z) = ppConcat(ilabel,_z)>>16;\
}
| ilabel | Describes label from IncLine3D with any instance indirection attached to it (i.e. 'mydata->label') | |
| x | Int to receive X coordinate | |
| y | Int to receive Y coordinate | |
| z | Int to receive Z coordinate |
Definition at line 469 of file iterator.h.
| #define IncLine_foreach | ( | ilabel, | |||
| iteratorx, | |||||
| iteratory | ) |
Value:
int iteratorx = ppConcat(ilabel,_x1);\ int iteratory = ppConcat(ilabel,_y1);\ for( ; ppConcat(ilabel,_remain)--; iteratorx = (ppConcat(ilabel,_x) += ppConcat(ilabel,_dx))>>16, iteratory = (ppConcat(ilabel,_y) += ppConcat(ilabel,_dy))>>16 )
| ilabel | Describes label from IncLine with any instance indirection attached to it (i.e. 'mydata->label') | |
| iteratorx | What to call the x iterator | |
| iteratory | What to call the y iterator |
Definition at line 278 of file iterator.h.
| #define IncLine_foreach_spans | ( | ilabel, | |||
| iteratorx, | |||||
| iteratory, | |||||
| iteratornx, | |||||
| iteratorny | ) |
Value:
int iteratorx = ppConcat(ilabel,_x1);\ int iteratory = ppConcat(ilabel,_y1);\ int iteratornx, iteratorny;\ IncLine_Step(ilabel);\ IncLine_XY(ilabel, iteratornx, iteratorny);\ for( ; ppConcat(ilabel,_remain)--; iteratorx = iteratornx, iteratory = iteratorny, \ iteratornx = (ppConcat(ilabel,_x) += ppConcat(ilabel,_dx))>>16, \ iteratorny = (ppConcat(ilabel,_y) += ppConcat(ilabel,_dy))>>16 )
| ilabel | Describes label from IncLine with any instance indirection attached to it (i.e. 'mydata->label') | |
| iteratorx | What to call the x iterator | |
| iteratory | What to call the y iterator | |
| iteratornx | What to call the iterator for the 'next' x coordinate | |
| iteratorny | What to call the iterator for the 'next' y coordinate |
Definition at line 291 of file iterator.h.
| #define IncLine_Init_Count | ( | ilabel, | |||
| x1, | |||||
| y1, | |||||
| x2, | |||||
| y2, | |||||
| nSamples | ) |
Value:
{\
ppConcat(ilabel,_x1) = (x1);\
ppConcat(ilabel,_y1) = (y1);\
ppConcat(ilabel,_x2) = (x2);\
ppConcat(ilabel,_y2) = (y2);\
ppConcat(ilabel,_y) = ppConcat(ilabel,_y1)<<16;\
ppConcat(ilabel,_x) = ppConcat(ilabel,_x1)<<16;\
ppConcat(ilabel,_dx) = ppConcat(ilabel,_x2) - ppConcat(ilabel,_x1);\
ppConcat(ilabel,_dy) = ppConcat(ilabel,_y2) - ppConcat(ilabel,_y1);\
ppConcat(ilabel,_dx) = further(ppConcat(ilabel,_dx),1);\
ppConcat(ilabel,_dy) = further(ppConcat(ilabel,_dy),1);\
ppConcat(ilabel,_remain) = (nSamples);\
ppConcat(ilabel,_dx) = (ppConcat(ilabel,_dx)<<16)/ppConcat(ilabel,_remain);\
ppConcat(ilabel,_dy) = (ppConcat(ilabel,_dy)<<16)/ppConcat(ilabel,_remain);\
}
| ilabel | Describes label from IncLine with any instance indirection attached to it (i.e. 'mydata->label') | |
| x1,y1 | First point in line | |
| x2,y2 | Last point in line (inclusive) | |
| nSamples | Number of steps we would prefer this to take, typically representing time samples for a path |
Definition at line 180 of file iterator.h.
| #define IncLine_Init_Span | ( | ilabel, | |||
| x1, | |||||
| y1, | |||||
| x2, | |||||
| y2 | ) |
Value:
{\
ppConcat(ilabel,_x1) = (x1);\
ppConcat(ilabel,_y1) = (y1);\
ppConcat(ilabel,_x2) = (x2);\
ppConcat(ilabel,_y2) = (y2);\
ppConcat(ilabel,_y) = ppConcat(ilabel,_y1)<<16;\
ppConcat(ilabel,_x) = ppConcat(ilabel,_x1)<<16;\
ppConcat(ilabel,_dx) = ppConcat(ilabel,_x2) - ppConcat(ilabel,_x1);\
ppConcat(ilabel,_dy) = ppConcat(ilabel,_y2) - ppConcat(ilabel,_y1);\
ppConcat(ilabel,_dx) = further(ppConcat(ilabel,_dx),1);\
ppConcat(ilabel,_dy) = further(ppConcat(ilabel,_dy),1);\
ppConcat(ilabel,_remain) = min(abs(ppConcat(ilabel,_dx)),abs(ppConcat(ilabel,_dy)));\
ppConcat(ilabel,_dx) = (ppConcat(ilabel,_dx)<<16)/ppConcat(ilabel,_remain);\
ppConcat(ilabel,_dy) = (ppConcat(ilabel,_dy)<<16)/ppConcat(ilabel,_remain);\
}
| ilabel | Describes label from IncLine with any instance indirection attached to it (i.e. 'mydata->label') | |
| x1,y1 | First point in line | |
| x2,y2 | Last point in line (inclusive) |
Definition at line 154 of file iterator.h.
| #define IncLine_Init_Step | ( | ilabel, | |||
| x1, | |||||
| y1, | |||||
| x2, | |||||
| y2 | ) |
Value:
{\
ppConcat(ilabel,_x1) = (x1);\
ppConcat(ilabel,_y1) = (y1);\
ppConcat(ilabel,_x2) = (x2);\
ppConcat(ilabel,_y2) = (y2);\
ppConcat(ilabel,_y) = ppConcat(ilabel,_y1)<<16;\
ppConcat(ilabel,_x) = ppConcat(ilabel,_x1)<<16;\
ppConcat(ilabel,_dx) = ppConcat(ilabel,_x2) - ppConcat(ilabel,_x1);\
ppConcat(ilabel,_dy) = ppConcat(ilabel,_y2) - ppConcat(ilabel,_y1);\
ppConcat(ilabel,_dx) = further(ppConcat(ilabel,_dx),1);\
ppConcat(ilabel,_dy) = further(ppConcat(ilabel,_dy),1);\
ppConcat(ilabel,_remain) = max(abs(ppConcat(ilabel,_dx)),abs(ppConcat(ilabel,_dy)));\
ppConcat(ilabel,_dx) = (ppConcat(ilabel,_dx)<<16)/ppConcat(ilabel,_remain);\
ppConcat(ilabel,_dy) = (ppConcat(ilabel,_dy)<<16)/ppConcat(ilabel,_remain);\
}
| ilabel | Describes label from IncLine with any instance indirection attached to it (i.e. 'mydata->label') | |
| x1,y1 | First point in line | |
| x2,y2 | Last point in line (inclusive) |
Definition at line 131 of file iterator.h.
| #define IncLine_NextXY | ( | ilabel, | |||
| x, | |||||
| y | ) |
Value:
{\
if( ppConcat(ilabel,_remain) )\
{\
(x) = (ppConcat(ilabel,_x)+ppConcat(ilabel,_dx))>>16;\
(y) = (ppConcat(ilabel,_y)+ppConcat(ilabel,_dy))>>16;\
}\
else\
{\
(x) = ppConcat(ilabel,_x2);\
(y) = ppConcat(ilabel,_y2);\
}\
}
| ilabel | Describes label from IncLine with any instance indirection attached to it (i.e. 'mydata->label') | |
| x | Int to receive X coordinate | |
| y | Int to receive Y coordinate |
Definition at line 258 of file iterator.h.
| #define IncLine_nStep | ( | ilabel, | |||
| count | ) |
Value:
{\
int nSkip = (count);\
if( nSkip >= ppConcat(ilabel,_remain) )\
{\
ppConcat(ilabel,_x) = ppConcat(ilabel,_x2)<<16;\
ppConcat(ilabel,_y) = ppConcat(ilabel,_y2)<<16;\
} \
else \
{\
ppConcat(ilabel,_x) += ppConcat(ilabel,_dx) * nSkip;\
ppConcat(ilabel,_y) += ppConcat(ilabel,_dy) * nSkip;\
ppConcat(ilabel,_remain) -= nSkip;\
}\
}
| ilabel | Describes label from IncLine with any instance indirection attached to it (i.e. 'mydata->label') | |
| count | Count of steps to skip over Useful for situations such as line clipping, where we know a certain number of segments or pixels will not be rendered |
Definition at line 217 of file iterator.h.
| #define IncLine_Remains | ( | ilabel | ) | ( ppConcat(ilabel,_remain) > 0 ) |
Tell us if there are remaining steps.
| ilabel | Describes label from IncLine with any instance indirection attached to it (i.e. 'mydata->label') |
Definition at line 238 of file iterator.h.
| #define IncLine_Step | ( | ilabel | ) |
Value:
{\
if( ppConcat(ilabel,_remain) > 0 )\
{\
ppConcat(ilabel,_x) += ppConcat(ilabel,_dx);\
ppConcat(ilabel,_y) += ppConcat(ilabel,_dy);\
ppConcat(ilabel,_remain)--;\
}\
}
| ilabel | Describes label from IncLine with any instance indirection attached to it (i.e. 'mydata->label') |
Definition at line 201 of file iterator.h.
| #define IncLine_XY | ( | ilabel, | |||
| x, | |||||
| y | ) |
Value:
Get current X/Y from BresLine data.
| ilabel | Describes label from IncLine with any instance indirection attached to it (i.e. 'mydata->label') | |
| x | Int to receive X coordinate | |
| y | Int to receive Y coordinate |
Definition at line 246 of file iterator.h.
| #define OPC_foreach | ( | PIXEL, | |||
| opc, | |||||
| pixel | ) |
Value:
uint8* pixel##_edge = (uint8*)OPC_NAMING(Ptr)( (opc), (opc)->clip.left, (opc)->clip.top );\ int pixel##_wide = RectWide((opc)->clip);\ int pixel##_high = RectHigh((opc)->clip);\ int pixel##_y,pixel##_x;\ PIXEL* pixel;\ for( pixel##_y = 0; pixel##_y < pixel##_high; ++pixel##_y, pixel##_edge += (opc)->pitch )\ for( pixel##_x = 0, pixel = (PIXEL*)pixel##_edge; pixel##_x < pixel##_wide; ++pixel##_x, ++pixel )
| PIXEL | Type of pixels in OPC | |
| opc | OPC pointer to iterate pixels within | |
| pixel | What to name the pixel iterator You also get a 'pixel'_x and 'pixel'_y that mirror the coordinates being iterated, so if you named 'pixel' clyde, you'd have clyde_x and clyde_y |
Definition at line 24 of file iterator.h.
| #define OPC_foreach_flip | ( | PIXEL, | |||
| opc, | |||||
| pixel | ) |
Value:
uint8* pixel##_edge = (uint8*)OPC_NAMING(Ptr)( (opc), (opc)->clip.left, (opc)->clip.bottom-1 );\ int pixel##_wide = RectWide((opc)->clip);\ int pixel##_y,pixel##_x;\ PIXEL* pixel;\ for( pixel##_y = RectHigh((opc)->clip); pixel##_y--; pixel##_edge -= (opc)->pitch )\ for( pixel##_x = 0, pixel = (PIXEL*)pixel##_edge; pixel##_x < pixel##_wide; ++pixel##_x, ++pixel )
| PIXEL | Type of pixels in OPC | |
| opc | OPC pointer to iterate pixels within | |
| pixel | What to name the pixel iterator You also get a 'pixel'_x and 'pixel'_y that mirror the coordinates being iterated, so if you named 'pixel' clyde, you'd have clyde_x and clyde_y |
Definition at line 56 of file iterator.h.
| #define OPC_foreach_mirror | ( | PIXEL, | |||
| opc, | |||||
| pixel | ) |
Value:
uint8* pixel##_edge = (uint8*)OPC_NAMING(Ptr)( (opc), (opc)->clip.right-1, (opc)->clip.top );\ int pixel##_wide = RectWide((opc)->clip);\ int pixel##_high = RectHigh((opc)->clip);\ int pixel##_y,pixel##_x;\ PIXEL* pixel;\ for( pixel##_y = 0; pixel##_y < pixel##_high; ++pixel##_y, pixel##_edge += (opc)->pitch )\ for( pixel##_x = pixel##_wide, pixel = (PIXEL*)pixel##_edge; pixel##_x--; --pixel )
| PIXEL | Type of pixels in OPC | |
| opc | OPC pointer to iterate pixels within | |
| pixel | What to name the pixel iterator You also get a 'pixel'_x and 'pixel'_y that mirror the coordinates being iterated, so if you named 'pixel' clyde, you'd have clyde_x and clyde_y |
Definition at line 40 of file iterator.h.
| #define OPC_foreach_mirror_flip | ( | PIXEL, | |||
| opc, | |||||
| pixel | ) |
Value:
uint8* pixel##_edge = (uint8*)OPC_NAMING(Ptr)( (opc), (opc)->clip.right-1, (opc)->clip.bottom-1 );\ int pixel##_y,pixel##_x;\ PIXEL* pixel;\ for( pixel##_y = RectWide((opc)->clip); pixel##_y--; pixel##_edge -= (opc)->pitch )\ for( pixel##_x = RectHigh((opc)->clip), pixel = (PIXEL*)pixel##_edge; pixel##_x--; --pixel )
| PIXEL | Type of pixels in OPC | |
| opc | OPC pointer to iterate pixels within | |
| pixel | What to name the pixel iterator You also get a 'pixel'_x and 'pixel'_y that mirror the coordinates being iterated, so if you named 'pixel' clyde, you'd have clyde_x and clyde_y |
Definition at line 71 of file iterator.h.
| #define OPC_translate_foreach | ( | PIXEL, | |||
| opcdst, | |||||
| opcsrc, | |||||
| pixel_dst, | |||||
| pixel_src | ) |
Value:
const uint8* edge_src = (uint8*)OPC_NAMING(Ptr)( (opcsrc), (opcsrc)->clip.left, (opcsrc)->clip.top );\ uint8* edge_dst = (uint8*)OPC_NAMING(Ptr)( (opcdst), (opcdst)->clip.left, (opcdst)->clip.top );\ int pixel_wide = min( RectWide((opcsrc)->clip), RectWide((opcdst)->clip) );\ int pixel_high = min( RectHigh((opcsrc)->clip), RectHigh((opcdst)->clip) );\ int pixel_y,pixel_x;\ const PIXEL* pixel_src;\ PIXEL* pixel_dst;\ for( pixel_y = 0; pixel_y < pixel_high; ++pixel_y, edge_src += (opcsrc)->pitch, edge_dst += (opcdst)->pitch )\ for( pixel_x = 0, pixel_dst = (PIXEL*)edge_dst, pixel_src = (const PIXEL*)edge_src; pixel_x < pixel_wide; ++pixel_x, ++pixel_dst, ++pixel_src )
| PIXEL | Type of pixels in OPC | |
| opcdst | Target OPC pointer to iterate pixels within | |
| opcsrc | Source OPC pointer to iterate pixels within | |
| pixel_dst | What to name the pixel iterator for destination | |
| pixel_src | What to name the pixel iterator for source You also get a pixel_x and pixel_y that mirror the coordinates being iterated Useful for two OPCs that need to be translated, but may be of different sizes |
Definition at line 88 of file iterator.h.
| bool Animator_curr | ( | Animator * | self, | |
| int * | frame, | |||
| unsigned | msCurrent | |||
| ) |
Get current animation frame.
| self | Animation we're cycling | |
| frame | Int to receive frame index | |
| msCurrent | Realtime in milliseconds |
Definition at line 168 of file iterator.c.
00169 { 00170 if( msCurrent - self->msprev > self->msframe ) 00171 { 00172 if( !self->msprev ) 00173 { 00174 self->msprev = msCurrent; 00175 *frame = self->iFrame; 00176 return false; 00177 } 00178 self->msprev = msCurrent; 00179 switch( self->aDir ) 00180 { 00181 case an_Stop: 00182 break; 00183 case an_ForwardOneshot: 00184 if( ++self->iFrame > self->lastFrame ) 00185 { 00186 *frame = self->iFrame = self->lastFrame; 00187 self->aDir = an_Stop; 00188 return false; 00189 } 00190 break; 00191 case an_BackwardOneshot: 00192 if( --self->iFrame < self->firstFrame ) 00193 { 00194 *frame = self->iFrame = self->firstFrame; 00195 self->aDir = an_Stop; 00196 return false; 00197 } 00198 break; 00199 case an_ForwardLoop: 00200 if( ++self->iFrame > self->lastFrame ) 00201 self->iFrame = self->firstFrame; 00202 break; 00203 case an_BackwardLoop: 00204 if( --self->iFrame < self->firstFrame ) 00205 self->iFrame = self->lastFrame; 00206 break; 00207 case an_ForwardPingPong: 00208 if( ++self->iFrame > self->lastFrame ) 00209 { 00210 self->iFrame = self->lastFrame-1; 00211 self->aDir = an_BackwardPingPong; 00212 } 00213 break; 00214 case an_BackwardPingPong: 00215 if( --self->iFrame < self->firstFrame ) 00216 { 00217 self->iFrame = self->firstFrame + 1; 00218 self->aDir = an_ForwardPingPong; 00219 } 00220 break; 00221 case an_Random: 00222 self->iFrame = self->firstFrame + (rand() % (1+self->lastFrame-self->firstFrame)); 00223 break; 00224 } 00225 00226 } 00227 *frame = self->iFrame; 00228 return true; 00229 }
| int Animator_init | ( | Animator * | self, | |
| int | firstFrame, | |||
| int | lastFrame, | |||
| Animator_Dir | dir, | |||
| unsigned | msPerFrame | |||
| ) |
Initialize an animation.
| self | Animation we're cycling | |
| firstFrame | First frame index in set we're animating | |
| lastFrame | Last frame index in set we're animating | |
| dir | Animation type to apply | |
| msPerFrame | How many milliseconds each frame should be displayed |
Definition at line 106 of file iterator.c.
00107 { 00108 self->msprev = 0; 00109 self->msframe = msPerFrame; 00110 self->firstFrame = firstFrame; 00111 self->lastFrame = lastFrame; 00112 self->aDir = dir; 00113 switch( dir ) 00114 { 00115 case an_Stop: 00116 case an_ForwardOneshot: 00117 case an_ForwardLoop: 00118 case an_ForwardPingPong: 00119 case an_Random: 00120 self->iFrame = firstFrame; 00121 break; 00122 case an_BackwardOneshot: 00123 case an_BackwardLoop: 00124 case an_BackwardPingPong: 00125 self->iFrame = lastFrame; 00126 break; 00127 } 00128 return firstFrame; 00129 }
| bool Animator_pending | ( | const Animator * | self | ) |
Return true if we're pending a oneshot event.
| self | Animation we're cycling |
Definition at line 151 of file iterator.c.
00152 { 00153 if( self->aDir == an_ForwardOneshot ) 00154 return self->iFrame <= self->lastFrame; 00155 else if( self->aDir == an_BackwardOneshot ) 00156 return self->iFrame >= self->firstFrame; 00157 return false; 00158 }
| int Animator_set | ( | Animator * | self, | |
| int | frame | |||
| ) |
Set animation to single frame.
| self | Animation we're cycling | |
| frame | Frame to set |
Definition at line 136 of file iterator.c.
00137 { 00138 self->msprev = 0; 00139 self->msframe = 0; 00140 self->aDir = an_Stop; 00141 self->firstFrame = frame; 00142 self->lastFrame = frame; 00143 self->iFrame = frame; 00144 return frame; 00145 }
| bool LinePath_curr | ( | const LinePath * | self, | |
| int * | x, | |||
| int * | y, | |||
| int * | z, | |||
| unsigned | msCurrent | |||
| ) |
Get current position in space, given time.
| self | Motion we're operating | |
| x,y,z | A place to put current position | |
| msCurrent | Current time |
Definition at line 70 of file iterator.c.
Referenced by LinePath_moveto().
00071 { 00072 if( msCurrent <= self->begin ) 00073 { 00074 *x = self->x1; 00075 *y = self->y1; 00076 *z = self->z1; 00077 return true; 00078 } 00079 else if( msCurrent >= self->end ) 00080 { 00081 *x = self->x2; 00082 *y = self->y2; 00083 *z = self->z2; 00084 return false; 00085 } 00086 else 00087 { 00088 int total = (int)(1u + self->end - self->begin); 00089 int elapsed = (int)(msCurrent - self->begin); 00090 *x = self->x1 + ((self->x2-self->x1) * elapsed / total); 00091 *y = self->y1 + ((self->y2-self->y1) * elapsed / total); 00092 *z = self->z1 + ((self->z2-self->z1) * elapsed / total); 00093 return true; 00094 } 00095 }
| void LinePath_init | ( | LinePath * | self, | |
| int | x1, | |||
| int | y1, | |||
| int | z1, | |||
| unsigned | msBegin, | |||
| int | x2, | |||
| int | y2, | |||
| int | z2, | |||
| unsigned | msFinish | |||
| ) |
Initialize linear motion.
| self | Motion we're setting up | |
| x1,y1,z1 | Start position | |
| msBegin | Start time | |
| x2,y2,z2 | End position | |
| msFinish | End time |
Definition at line 19 of file iterator.c.
00020 { 00021 self->begin = msBegin; 00022 self->end = msFinish; 00023 self->x1 = x1; 00024 self->y1 = y1; 00025 self->z1 = z1; 00026 self->x2 = x2; 00027 self->y2 = y2; 00028 self->z2 = z2; 00029 }
| void LinePath_moveto | ( | LinePath * | self, | |
| int | x, | |||
| int | y, | |||
| int | z, | |||
| unsigned | msCurrent, | |||
| unsigned | msArrive | |||
| ) |
Move from current position to target.
| self | Motion we're operating | |
| x,y,z | A place to set current position | |
| msCurrent | Current time | |
| msArrive | Time to arrive |
Definition at line 53 of file iterator.c.
References LinePath_curr().
00054 { 00055 LinePath_curr( self, &self->x1,&self->y1,&self->z1, msCurrent ); 00056 self->begin = msCurrent; 00057 self->end = msArrive; 00058 self->x2 = x; 00059 self->y2 = y; 00060 self->z2 = z; 00061 }

| void LinePath_setpos | ( | LinePath * | self, | |
| int | x, | |||
| int | y, | |||
| int | z, | |||
| unsigned | msCurrent | |||
| ) |
Set current position in space, now.
| self | Motion we're operating | |
| x,y,z | A place to set current position | |
| msCurrent | Current time |
Definition at line 37 of file iterator.c.
00038 { 00039 self->begin = msCurrent; 00040 self->end = msCurrent; 00041 self->x2 = self->x1 = x; 00042 self->y2 = self->y1 = y; 00043 self->z2 = self->z1 = z; 00044 }
1.5.6