pfDoubleFCS(3pf) OpenGL Performer 3.2.2 libpf C Reference Pages
NAME
pfNewDoubleFCS, pfGetDoubleFCSClassType, pfDoubleFCSFlux,
pfGetDoubleFCSFlux, pfGetDoubleFCSMat, pfGetDoubleFCSMatPtr,
pfDoubleFCSMatType, pfGetDoubleFCSMatType - Create, modify, and query
double-precision flux coordinate system nodes.
FUNCTION SPECIFICATION
#include <Performer/pf.h>
pfDoubleFCS * pfNewDoubleFCS(pfFlux *flux);
pfType * pfGetDoubleFCSClassType(void);
void pfDoubleFCSFlux(pfDoubleFCS* fcs, pfFlux *flux);
pfFlux* pfGetDoubleFCSFlux(pfDoubleFCS* fcs);
void pfGetDoubleFCSMat(pfDoubleFCS *fcs, pfMatrix4d m);
const pfMatrix4d* pfGetDoubleFCSMatPtr(pfDoubleFCS *fcs);
void pfDoubleFCSMatType(pfDoubleFCS *fcs, uint val);
uint pfGetDoubleFCSMatType(pfDoubleFCS *fcs);
PARENT CLASS FUNCTIONS
The OpenGL Performer class pfDoubleFCS is derived from the parent class
pfDoubleSCS, so each of these member functions of class pfDoubleSCS are
also directly usable with objects of class pfDoubleFCS. Casting an
object of class pfDoubleFCS to an object of class pfDoubleSCS is taken
care of automatically. This is also true for casts to objects of
ancestor classes of class pfDoubleSCS.
void pfGetDoubleSCSMat(pfDoubleSCS *scs, pfMatrix4d mat);
const pfMatrix4d* pfGetDoubleSCSMatPtr(pfDoubleSCS *scs);
Since the class pfDoubleSCS is itself derived from the parent class
pfGroup, objects of class pfDoubleFCS can also be used with these
functions designed for objects of class pfGroup.
int pfAddChild(pfGroup *group, pfNode *child);
int pfInsertChild(pfGroup *group, int index, pfNode *child);
int pfReplaceChild(pfGroup *group, pfNode *old, pfNode *new);
int pfRemoveChild(pfGroup *group, pfNode* child);
int pfSearchChild(pfGroup *group, pfNode* child);
pfNode * pfGetChild(const pfGroup *group, int index);
int pfGetNumChildren(const pfGroup *group);
int pfBufferAddChild(pfGroup *group, pfNode *child);
int pfBufferRemoveChild(pfGroup *group, pfNode *child);
Page 1
pfDoubleFCS(3pf) OpenGL Performer 3.2.2 libpf C Reference Pages
Since the class pfGroup is itself derived from the parent class pfNode,
objects of class pfDoubleFCS can also be used with these functions
designed for objects of class pfNode.
pfGroup * pfGetParent(const pfNode *node, int i);
int pfGetNumParents(const pfNode *node);
void pfNodeBSphere(pfNode *node, pfSphere *bsph, int mode);
int pfGetNodeBSphere(pfNode *node, pfSphere *bsph);
pfNode* pfClone(pfNode *node, int mode);
pfNode* pfBufferClone(pfNode *node, int mode, pfBuffer *buf);
int pfFlatten(pfNode *node, int mode);
int pfNodeName(pfNode *node, const char *name);
const char * pfGetNodeName(const pfNode *node);
pfNode* pfFindNode(pfNode *node, const char *pathName,
pfType *type);
pfNode* pfLookupNode(const char *name, pfType* type);
int pfNodeIsectSegs(pfNode *node, pfSegSet *segSet,
pfHit **hits[]);
void pfNodeTravMask(pfNode *node, int which, uint mask,
int setMode, int bitOp);
uint pfGetNodeTravMask(const pfNode *node, int which);
void pfNodeTravFuncs(pfNode* node, int which,
pfNodeTravFuncType pre, pfNodeTravFuncType post);
void pfGetNodeTravFuncs(const pfNode* node, int which,
pfNodeTravFuncType *pre, pfNodeTravFuncType *post);
void pfNodeTravData(pfNode *node, int which, void *data);
void * pfGetNodeTravData(const pfNode *node, int which);
void pfNodeTravMode(pfNode* node, int which, int mode,
int val);
int pfGetNodeTravMode(const pfNode* node, int which,
int mode);
Since the class pfNode is itself derived from the parent class pfObject,
objects of class pfDoubleFCS can also be used with these functions
designed for objects of class pfObject.
void pfUserDataSlot(pfObject *obj, int slot, void *data);
void pfUserData(pfObject *obj, void *data);
void* pfGetUserDataSlot(pfObject *obj, int slot);
void* pfGetUserData(pfObject *obj);
int pfGetNumUserData(pfObject *obj);
int pfGetNamedUserDataSlot(const char *name);
const char* pfGetUserDataSlotName(int slot);
int pfGetNumNamedUserDataSlots(void);
int pfDeleteGLHandle(pfObject *obj);
Since the class pfObject is itself derived from the parent class
pfMemory, objects of class pfDoubleFCS can also be used with these
functions designed for objects of class pfMemory.
Page 2
pfDoubleFCS(3pf) OpenGL Performer 3.2.2 libpf C Reference Pages
pfType * pfGetType(const void *ptr);
int pfIsOfType(const void *ptr, pfType *type);
int pfIsExactType(const void *ptr, pfType *type);
const char * pfGetTypeName(const void *ptr);
int pfRef(void *ptr);
int pfUnref(void *ptr);
int pfUnrefDelete(void *ptr);
int pfUnrefGetRef(void *ptr);
int pfGetRef(const void *ptr);
int pfCopy(void *dst, void *src);
int pfDelete(void *ptr);
int pfIsFluxed(void *ptr);
int pfCompare(const void *ptr1, const void *ptr2);
void pfPrint(const void *ptr, uint which, uint verbose,
FILE *file);
void * pfGetArena(void *ptr);
PARAMETERS
fcs identifies a pfDoubleFCS
DESCRIPTION
A pfDoubleFCS (Double-precision Flux Coordinate System) is a pfDoubleSCS
whose matrix is contained in a pfFlux. A pfDoubleFCS is similar to a
pfDoubleDCS, in that its matrix can change, but since its matrix is
contained in a pfFlux, it can be animated using pfEngines.
pfNewDoubleFCS creates and returns a handle to a pfDoubleFCS. The matrix
of a the new pfDoubleFCS will be contained in flux. Like other pfNodes,
pfDoubleFCSes are always allocated from shared memory and can be deleted
using pfDelete.
pfGetDoubleFCSClassType returns the pfType* for the class pfDoubleFCS.
The pfType* returned by pfGetDoubleFCSClassType is the same as the
pfType* returned by invoking pfGetType on any instance of class
pfDoubleFCS. Because OpenGL Performer allows subclassing of built-in
types, when decisions are made based on the type of an object, it is
usually better to use pfIsOfType to test if an object is of a type
derived from a Performer type rather than to test for strict equality of
the pfType*'s.
pfDoubleFCSFlux attaches a pfFlux to a pDoubleFCS.
pfGetDoubleFCSFlux returns the pfFlux currently attached to a
pfDoubleFCS.
pfDoubleFCSMatType allows the specification of information about the type
of transformation the matrix represents. This information allows
Performer to speed up some operations. The matrix type is specified as
the OR of
Page 3
pfDoubleFCS(3pf) OpenGL Performer 3.2.2 libpf C Reference Pages
PFMAT_TRANS:
matrix may include a translational component in the 4th row.
PFMAT_ROT
matrix may include a rotational component in the left upper 3X3
submatrix.
PFMAT_SCALE
matrix may include a uniform scale in the left upper 3X3
submatrix.
PFMAT_NONORTHO
matrix may include a non-uniform scale in the left upper 3X3
submatrix.
PFMAT_PROJ
matrix may include projections.
PFMAT_HOM_SCALE
matrix may have mat[4][4] != 1.
PFMAT_MIRROR
matrix may include mirroring transformation that switches
between right handed and left handed coordinate systems.
pfGetDoubleFCSMatType returns the matrix type as
set by pfDoubleFCSMatType. If no matrix type is set the default is
~0, corresponding to a general matrix.
The transformation of a pfDoubleFCS affects all its children. As
the hierarchy is traversed from top to bottom, each new matrix is
pre-multiplied to create the new transformation. For example, if
DoubleFCSb is below DoubleFCSa in the scene graph, any geometry G
below DoubleFCSa is transformed as G*DoubleFCSb*DoubleFCSa.
pfFlatten cannot flatten pfDoubleFCSes since they may change at
run-time. In this case pfFlatten will compute a pfDoubleSCS
representing the accumulated static transformation that the
pfDoubleFCS inherits and insert it above the pfDoubleFCS. Static
transformations below a pfDoubleFCS are flattened as usual. See
pfFlatten for more details.
The presence of transformations in the scene graph impacts the
performance of intersection, culling and drawing. pfGeoSet culling
(see PFCULL_GSET in pfChanTravMode) is disabled in portions of the
scene graph below pfDoubleFCSes.
Both pre and post CULL and DRAW callbacks attached to a pfDoubleFCS
(pfNodeTravFuncs) will be affected by the transformation represented
by the pfDoubleFCS, i.e. - the pfDoubleFCS matrix will already have
been applied to the matrix stack before the pre callback is called
and will be popped only after the post callback is called.
Page 4
pfDoubleFCS(3pf) OpenGL Performer 3.2.2 libpf C Reference Pages
pfGetDoubleFCSMat copies the transformation matrix value from fcs
into the matrix m. For faster matrix access, pfGetDoubleFCSMatPtr
can be used to get a const pointer to fcs's matrix.
SEE ALSO
pfFlux, pfEngine, pfGroup, pfChanTravMode, pfLookupNode, pfFlatten,
pfMatrix4d, pfNode, pfDoubleSCS, pfDoubleDCS, pfScene, pfTraverser,
pfDelete
Page 5