kobject kgeom_get_attribute(
kobject object,
int primitive,
int attribute,
kvalist)
KGEOM_OBJECT
for this argument.
Primitive-level attributes can be
retrieved by passing in the appropriate
primitive for this argument. The current
primitive is determined by the
KGEOM_PRIMITIVE_POSITION
attribute.
The variable argument list takes the form:
ATTRIBUTE_NAME, &value1 [, &value2, ...]
The number of value arguments in the variable argument list corresponds to the number of arguments needed to retrieve the attribute.
Attributes can be either global to the object, or specific to a primitive contained within the object. Attributes which are global are termed object-level, and attributes specific to a primitive are termed primitive-level.
Object-level attributes apply globally to all
primitives contained within a data object.
Two examples of object-level attributes are
KGEOM_NAME
, which is the name of the object,
and KGEOM_AMBIENT
, which dictates how the
geometry should react to ambient light sources.
Primitive-level attributes apply only to the current
primitive as indicated by the
KGEOM_PRIMITIVE_POSITION
attribute. An
example of such an attribute is the
KGEOM_NUMBER
attribute which determines the
number of vertices in the current primitive.
Attributes may have multiple components. For
example, the attribute KGEOM_BOUNDING_BOX
consists of two components, one component being the
minimum point of the bounding box, and the second
component being the maximum point of the bounding box.
Some of the geometry attributes have varying data
types and sizes depending on the values of other
attributes. For example, the KGEOM_CENTER
attribute must be retrieved with a pointer to the
data type indicated by the attribute
KGEOM_LOCATION_DATA_TYPE
. The returned array
will contain the number of values indicated by the
attribute KGEOM_LOCATION_SIZE
. Changes in the
attributes which determine the type or the size of
another attribute will cause the dependent attribute
to be recast or resized.
Note that any array attributes, such as strings, which are retrieved should not be altered or freed. The pointer returned points to the actual internal storage array. A copy should be made if the values need to be changed.
The following example illustrates the use of the get attribute call to retrieve two different attributes.
float *min;
float *max;
char *name;
kgeom_get_attribute(object, KGEOM_OBJECT,
KGEOM_NAME, &name);
kgeom_get_attribute(object, KGEOM_OBJECT,
KGEOM_BOUNDING_BOX, &min, &max);
A complete list of geometry attributes and primitives can be found in Chapter 3 of Programming Services Volume II.
none
none
$DATASERV/objects/library/koldgeom/src/geometry.c