|
TK_Status | Read (BStreamFileToolkit &tk) alter |
|
TK_Status | ReadAscii (BStreamFileToolkit &tk) alter |
| Deprecated.
|
|
void | Reset () alter |
|
void | set_flist (int count, int const *list=0) alter |
| obsolete. Provided for compatibility
|
|
TK_Status | Write (BStreamFileToolkit &tk) alter |
|
TK_Status | WriteAscii (BStreamFileToolkit &tk) alter |
| Deprecated.
|
|
TK_Status | AppendObject (BStreamFileToolkit &tk, BBaseOpcodeHandler *obj) |
|
const float * | GetBounding () const |
|
unsigned int const * | GetExists () const |
|
unsigned int * | GetExists () |
|
float const * | GetFaceColors () const |
|
float * | GetFaceColors () |
|
unsigned int const * | GetFaceExists () const |
|
unsigned int * | GetFaceExists () |
|
float const * | GetFaceIndices () const |
|
float * | GetFaceIndices () |
|
int const * | GetFaceRegions () const |
|
int alter * | GetFaceRegions () alter |
|
ID_Key | GetKey () const |
|
int | GetPointCount () const |
|
float const * | GetPoints () const |
|
float * | GetPoints () |
|
unsigned char | GetSubop () const |
|
unsigned short | GetSubop2 () const |
|
float const * | GetVertexColors () const |
|
float * | GetVertexColors () |
|
float const * | GetVertexEdgeColors () const |
|
float * | GetVertexEdgeColors () |
|
float const * | GetVertexEdgeIndices () const |
|
float * | GetVertexEdgeIndices () |
|
float const * | GetVertexFaceColors () const |
|
float * | GetVertexFaceColors () |
|
float const * | GetVertexFaceIndices () const |
|
float * | GetVertexFaceIndices () |
|
float const * | GetVertexIndices () const |
|
float * | GetVertexIndices () |
|
float const * | GetVertexMarkerColors () const |
|
float * | GetVertexMarkerColors () |
|
float const * | GetVertexMarkerIndices () const |
|
float * | GetVertexMarkerIndices () |
|
float const * | GetVertexMarkerRGBAs () const |
|
float * | GetVertexMarkerRGBAs () |
|
float const * | GetVertexNormals () const |
|
float * | GetVertexNormals () |
|
float const * | GetVertexParameters () const |
|
float * | GetVertexParameters () |
|
bool | HasEdgeAttributes () const |
|
bool | HasEdgeColors () const |
|
bool | HasEdgeIndices () const |
|
bool | HasEdgeNormals () const |
|
bool | HasEdgePatterns () const |
|
bool | HasEdgeVisibilities () const |
|
bool | HasEdgeWeights () const |
|
bool | HasFaceAttributes () const |
|
bool | HasFaceColors () const |
|
bool | HasFaceIndices () const |
|
bool | HasFaceNormals () const |
|
bool | HasFacePatterns () const |
|
bool | HasFaceRegions () const |
|
bool | HasFaceVisibilities () const |
|
bool | HasOptionals () |
|
bool | HasVertexAttributes () const |
|
bool | HasVertexColors () const |
|
bool | HasVertexEdgeColors () const |
|
bool | HasVertexEdgeIndices () const |
|
bool | HasVertexFaceColors () const |
|
bool | HasVertexFaceIndices () const |
|
bool | HasVertexIndices () const |
|
bool | HasVertexMarkerColors () const |
|
bool | HasVertexMarkerIndices () const |
|
bool | HasVertexMarkerRGBAs () const |
|
bool | HasVertexMarkerSizes () const |
|
bool | HasVertexMarkerSymbols () const |
|
bool | HasVertexMarkerVisibilities () const |
|
bool | HasVertexNormals () const |
|
bool | HasVertexParameters () const |
|
TK_Status | InitSubop (BStreamFileToolkit &tk, int lodlevel, bool is_firstpass) alter |
|
BBaseOpcodeHandler * | PopObject () |
|
TK_Status | SetBounding (float const *bbox) alter |
|
TK_Status | SetEdgeColors (float const *colors=0) alter |
|
TK_Status | SetEdgeExists (unsigned int const *vals=0) alter |
|
TK_Status | SetEdgeIndices (float const *indices=0) alter |
|
TK_Status | SetEdgeNormals (float const *normals=0) alter |
|
TK_Status | SetEdgePatterns (char const *patterns=0) alter |
|
TK_Status | SetEdgePatternStrings () alter |
|
TK_Status | SetEdgeVisibilities (char const *visibilities=0) alter |
|
TK_Status | SetEdgeWeights (float const *weights=0) alter |
|
TK_Status | SetExists (unsigned int const *vals=0) alter |
|
TK_Status | SetFaceColors (float const *colors=0) alter |
|
TK_Status | SetFaceExists (unsigned int const *vals=0) alter |
|
TK_Status | SetFaceIndices (float const *indices=0) alter |
|
TK_Status | SetFaceNormals (float const *normals=0) alter |
|
TK_Status | SetFacePatterns (char const *patterns=0) alter |
|
TK_Status | SetFaceRegions (int const *regions=0) alter |
|
TK_Status | SetFaceVisibilities (char const *visibilities=0) alter |
|
TK_Status | SetKey (BStreamFileToolkit &tk, ID_Key key) alter |
| informs the TK_Polyhedron of the id by which this piece of geometry is known
|
|
TK_Status | SetPoints (int count, float const *points=0) alter |
|
TK_Status | SetSubop (unsigned char subop) alter |
|
TK_Status | SetSubop2 (unsigned short subop2) alter |
|
TK_Status | SetVertexColors (float const *colors=0) alter |
|
TK_Status | SetVertexEdgeColors (float const *colors=0) alter |
|
TK_Status | SetVertexEdgeIndices (float const *indices=0) alter |
|
TK_Status | SetVertexFaceColors (float const *colors=0) alter |
|
TK_Status | SetVertexFaceIndices (float const *indices=0) alter |
|
TK_Status | SetVertexIndices (float const *indices=0) alter |
|
TK_Status | SetVertexMarkerColors (float const *colors=0) alter |
|
TK_Status | SetVertexMarkerIndices (float const *indices=0) alter |
|
TK_Status | SetVertexMarkerRGBAs (float const *colors=0) alter |
|
TK_Status | SetVertexMarkerSizes (float const *sizes=0) alter |
|
TK_Status | SetVertexMarkerSymbols (char const *symbols=0) alter |
|
TK_Status | SetVertexMarkerSymbolStrings () alter |
|
TK_Status | SetVertexMarkerVisibilities (char const *visibilities=0) alter |
|
TK_Status | SetVertexNormals (float const *normals=0) alter |
|
TK_Status | SetVertexParameters (float const *parameters=0, int width=0) alter |
|
Public Member Functions inherited from BBaseOpcodeHandler |
| BBaseOpcodeHandler (int op) |
|
virtual TK_Status | Clone (BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const |
|
virtual TK_Status | Execute (BStreamFileToolkit &tk) alter |
|
char const * | GetLoggingString () const |
|
char alter * | GetLoggingString () alter |
|
virtual TK_Status | Interpret (BStreamFileToolkit &tk, ID_Key key, int variant=0) alter |
|
virtual TK_Status | Interpret (BStreamFileToolkit &tk, ID_Key key, char const *special) alter |
|
void | LogDebug (BStreamFileToolkit &tk, char const *string=0) alter |
|
virtual bool | Match_Instance (BStreamFileToolkit const &tk, Recorded_Instance alter *instance) alter |
|
virtual bool | NeedsContext (BStreamFileToolkit &tk) const |
|
bool | NeedsTag () const |
|
unsigned char | Opcode () const |
|
int | Pass (BStreamFileToolkit &tk) const |
|
void | SetLoggingString (char const *segment) alter |
|
void | SetLoggingString (int length) alter |
|
void | SetNeedsTag (bool n) alter |
|
TK_Status | Tag (BStreamFileToolkit &tk, int variant=-1) const |
|
bool | Tagging (BStreamFileToolkit &tk) const |
|
void | operator delete (void *p) |
| force deallocation to happen in the stream toolkit's scope
|
|
void * | operator new (size_t size) |
| force allocation to happen in the stream toolkit's scope
|
|
|
TK_Status | EnumerateEdges () |
|
int const * | GetFaces () const |
|
int | GetFacesLength () const |
|
int | GetLodLevel () const |
|
TK_Status | SetFaces (int length, int const *face_list=0) alter |
|
TK_Status | SetLodLevel (int level) alter |
| Sets the lod level for this representation (as in HOOPS, '0' means original base resolution)
|
|
Protected Member Functions inherited from BBaseOpcodeHandler |
void | add_segment (BStreamFileToolkit &tk, ID_Key key) alter |
| for internal use only
|
|
void | adjust_written (BStreamFileToolkit &tk, int count) alter |
| for internal use only
|
|
void | bytes_to_floats (unsigned char const *in, float alter *out, int count) const |
| for internal use only
|
|
void | decrease_nesting (BStreamFileToolkit &tk, int amount=1) alter |
| for internal use only
|
|
bool | Find_Instance (BStreamFileToolkit &tk, int val1, int val2, int val3) alter |
|
bool | Find_Item (BStreamFileToolkit &tk, ID_Key key) const |
|
void | fix (int *i, int n) |
| for internal use only
|
|
void | fix (short *s, int n) |
| for internal use only
|
|
void | fix_in (float *f, int n) |
| for internal use only
|
|
void | fix_out (float *f, int n) |
| for internal use only
|
|
short | flip (short s) |
| for internal use only
|
|
int | flip (int i) |
| for internal use only
|
|
void | floats_to_bytes (float const *in, unsigned char alter *out, int count) const |
| for internal use only
|
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, int *rInts, unsigned int n) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, unsigned char &value) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, char &value) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, unsigned short &value) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, short &value) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, int &value) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, float &value) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, float *rFloats, unsigned int n) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, char *m_string, unsigned int n) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, unsigned char *m_string, unsigned int n) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, int *rInts, unsigned int n) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, short *rShorts, unsigned int n) alter |
|
TK_Status | GetAsciiData (BStreamFileToolkit &tk, const char *tag, unsigned short *rShorts, unsigned int n) alter |
|
TK_Status | GetAsciiHex (BStreamFileToolkit &tk, const char *tag, unsigned char &value) alter |
|
TK_Status | GetAsciiHex (BStreamFileToolkit &tk, const char *tag, int &value) alter |
|
TK_Status | GetAsciiHex (BStreamFileToolkit &tk, const char *tag, char &value) alter |
|
TK_Status | GetAsciiHex (BStreamFileToolkit &tk, const char *tag, unsigned short &value) alter |
|
TK_Status | GetAsciiImageData (BStreamFileToolkit &tk, const char *tag, unsigned char *rValues, unsigned int n) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, char *b, int n) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, short *s, int n) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, int *i, int n) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, float *f, int n) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, unsigned char *b, int n) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, unsigned short *s, int n) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, unsigned int *i, int n) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, char &c) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, short &s) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, int &i) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, unsigned char &b) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, unsigned short &s) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, unsigned int &i) alter |
|
TK_Status | GetData (BStreamFileToolkit &tk, float &f) alter |
|
void | increase_nesting (BStreamFileToolkit &tk, int amount=1) alter |
| for internal use only
|
|
ID_Key | last_key (BStreamFileToolkit &tk) const |
| obsolete
|
|
void | log_opcode (BStreamFileToolkit &tk, unsigned int sequence, unsigned char opcode) alter |
| for internal use only
|
|
TK_Status | LookatData (BStreamFileToolkit &tk, unsigned char &b) alter |
|
BBaseOpcodeHandler alter * | Opcode_Handler (BStreamFileToolkit &tk, unsigned char op) const |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, char const *b, int n) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, short const *s, int n) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, int const *i, int n) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, float const *f, int n) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, unsigned char const *b, int n) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, unsigned short const *s, int n) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, unsigned int const *i, int n) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, char const &c) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, short const &s) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, int const &i) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, unsigned char const &b) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, unsigned short const &s) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, unsigned int const &i) alter |
|
TK_Status | PutAsciiData (BStreamFileToolkit &tk, char const *tag, float const &f) alter |
|
TK_Status | PutAsciiFlag (BStreamFileToolkit &tk, char const *tag, int const &i) alter |
|
TK_Status | PutAsciiHex (BStreamFileToolkit &tk, char const *tag, int const &i) alter |
|
TK_Status | PutAsciiMask (BStreamFileToolkit &tk, char const *tag, int const &i) alter |
|
TK_Status | PutAsciiOpcode (BStreamFileToolkit &tk, int adjust=1, bool is_end=false, bool want_newline=true) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, char const *b, int n) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, short const *s, int n) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, int const *i, int n) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, float const *f, int n) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, unsigned char const *b, int n) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, unsigned short const *s, int n) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, unsigned int const *i, int n) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, char const &c) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, short const &s) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, int const &i) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, unsigned char const &b) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, unsigned short const &s) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, unsigned int const &i) alter |
|
TK_Status | PutData (BStreamFileToolkit &tk, float const &f) alter |
|
TK_Status | PutEndXMLTag (BStreamFileToolkit &tk, char const *tag) alter |
|
TK_Status | PutOpcode (BStreamFileToolkit &tk, int adjust=1) alter |
|
TK_Status | PutStartXMLTag (BStreamFileToolkit &tk, char const *tag) alter |
|
TK_Status | Read_Referenced_Segment (BStreamFileToolkit &tk, int &i_progress) alter |
|
TK_Status | ReadAsciiLine (BStreamFileToolkit &tk, unsigned int *readSize=0) alter |
|
TK_Status | ReadAsciiWord (BStreamFileToolkit &tk, unsigned int *readSize=0) alter |
|
TK_Status | ReadEndOpcode (BStreamFileToolkit &tk) alter |
|
void | Record_Instance (BStreamFileToolkit &tk, ID_Key key, int variant, int val1, int val2, int val3) const |
|
void | Remember_Item (BStreamFileToolkit &tk, ID_Key key) const |
|
ID_Key | remove_segment (BStreamFileToolkit &tk) alter |
| for internal use only
|
|
bool | RemoveAngularBrackets (char *string) alter |
|
bool | RemoveQuotes (char *string) alter |
|
void | Revisit (BStreamFileToolkit &tk, float priority=0.0f, int variant=0) const |
|
void | set_last_key (BStreamFileToolkit &tk, ID_Key key) alter |
| sets the given key as "most recent" on the toolkit for the purposes of associating keys with indices
|
|
TK_Status | SkipNewlineAndTabs (BStreamFileToolkit &tk, unsigned int *readSize=0) alter |
|
bool | validate_count (int count, int limit=1<< 24) const |
|
|
enum | Edge_Exists {
Edge_None = 0x0000,
Edge_Color = 0x0001,
Edge_Index = 0x0002,
Edge_Any_Color = 0x0003,
Edge_Normal = 0x0004,
Edge_Visibility = 0x0008,
Edge_Pattern = 0x0010,
Edge_Weight = 0x0020,
Fake_Edge = 0x8000
} |
|
enum | Exists {
Vertex_None = 0x0000,
Vertex_Normal = 0x0001,
Vertex_Parameter = 0x0002,
Vertex_Face_Color = 0x0004,
Vertex_Edge_Color = 0x0008,
Vertex_Marker_Color = 0x0010,
Vertex_Face_Index = 0x0020,
Vertex_Edge_Index = 0x0040,
Vertex_Marker_Index = 0x0080,
Vertex_Marker_Visibility = 0x0100,
Vertex_Marker_Size = 0x0200,
Vertex_Marker_Symbol = 0x0400,
Vertex_Marker_RGBA = 0x0800,
Vertex_Any_Color = 0x08FC
} |
|
enum | Face_Exists {
Face_None = 0x0000,
Face_Color = 0x0001,
Face_Index = 0x0002,
Face_Any_Color = 0x0003,
Face_Normal = 0x0004,
Face_Visibility = 0x0008,
Face_Pattern = 0x0010
} |
|
enum | Opt_Opcode {
OPT_TERMINATE = 0,
OPT_ALL_NORMALS_COMPRESSED = 1,
OPT_NORMALS_COMPRESSED = 2,
OPT_ALL_PARAMETERS_COMPRESSED = 3,
OPT_PARAMETERS_COMPRESSED = 4,
OPT_ALL_VFCOLORS = 5,
OPT_VERTEX_FCOLORS = 6,
OPT_ALL_VECOLORS = 7,
OPT_VERTEX_ECOLORS = 8,
OPT_ALL_VMCOLORS = 9,
OPT_VERTEX_MCOLORS = 10,
OPT_ALL_VFINDICES = 11,
OPT_VERTEX_FINDICES = 12,
OPT_ALL_VEINDICES = 13,
OPT_VERTEX_EINDICES = 14,
OPT_ALL_VMINDICES = 15,
OPT_VERTEX_MINDICES = 16,
OPT_ALL_NORMALS = 17,
OPT_NORMALS = 18,
OPT_ALL_NORMALS_POLAR = 19,
OPT_NORMALS_POLAR = 20,
OPT_ALL_VMVISIBILITIES = 21,
OPT_VERTEX_MARKER_VISIBILITIES = 22,
OPT_ALL_VMSYMBOLS = 23,
OPT_VERTEX_MARKER_SYMBOLS = 24,
OPT_ALL_VMSIZES = 25,
OPT_VERTEX_MARKER_SIZES = 26,
OPT_PARAMETERS = 27,
OPT_ALL_PARAMETERS = 28,
OPT_ALL_VMRGBAS = 29,
OPT_VERTEX_MRGBAS = 30,
OPT_ALL_FACE_COLORS = 33,
OPT_FACE_COLORS = 34,
OPT_ALL_FACE_INDICES = 35,
OPT_FACE_INDICES = 36,
OPT_ALL_FACE_NORMALS_POLAR = 37,
OPT_FACE_NORMALS_POLAR = 38,
OPT_ALL_FACE_VISIBILITIES = 39,
OPT_FACE_VISIBILITIES = 40,
OPT_ALL_FACE_PATTERNS = 41,
OPT_FACE_PATTERNS = 42,
OPT_FACE_REGIONS = 51,
OPT_ALL_EDGE_COLORS = 71,
OPT_EDGE_COLORS = 72,
OPT_ALL_EDGE_INDICES = 73,
OPT_EDGE_INDICES = 74,
OPT_ALL_EDGE_NORMALS_POLAR = 75,
OPT_EDGE_NORMALS_POLAR = 76,
OPT_ALL_EDGE_VISIBILITIES = 77,
OPT_EDGE_VISIBILITIES = 78,
OPT_ALL_EDGE_PATTERNS = 79,
OPT_EDGE_PATTERNS = 80,
OPT_ALL_EDGE_WEIGHTS = 81,
OPT_EDGE_WEIGHTS = 82,
OPT_RESERVED_SPATIAL = 90,
OPT_ENTITY_ATTRIBUTES = 99
} |
|
enum | Suboptions {
TKSH_STANDARD = 0x00,
TKSH_COMPRESSED_POINTS = 0x01,
TKSH_COMPRESSED_FACES = 0x02,
TKSH_TRISTRIPS = 0x04,
TKSH_HAS_OPTIONALS = 0x08,
TKSH_FIRSTPASS = 0x10,
TKSH_BOUNDING_ONLY = 0x20,
TKSH_CONNECTIVITY_COMPRESSION = 0x40,
TKSH_EXPANDED = 0x80
} |
|
enum | Suboptions2 { TKSH2_COLLECTION = 0x0001,
TKSH2_NULL = 0x0002,
TKSH2_HAS_NEGATIVE_FACES = 0x0004,
TKSH2_GLOBAL_QUANTIZATION = 0x0008
} |
|
Static Protected Member Functions inherited from BBaseOpcodeHandler |
static float | read_float (char const *cp, char const *alter *newcpp=0) |
|
static float | read_float (char const *cp, char alter *alter *newcpp) |
| for internal use only
|
|
static char * | write_float (char *buffer, double f) |
| for internal use only
|
|
Handles the TKE_Shell opcode.
TK_Shell provides support for writing/reading the TKE_Shell opcode object to/from an HSF file.
The HOOPS/3dGS scene-graph can contain 'shell' primitives which consist of a points array and a connectivity list to define the facets of the shell.
TK_Status TK_Shell::SetFaces |
( |
int |
length, |
|
|
int const * |
face_list = 0 |
|
) |
| |
|
protected |
Allocate an array of the provided length for the face list, and set values if given. The face_list is an array of integers. The first integer is the number of vertices that should be connected to form the first face. For example, "3" for a triangle. The next three integers (in this example) are the offsets into the points array at which the three x-y-z's can be found. The first point in the points array is considered to be at offset zero, so "0, 1, 2" in the face_list array would form the triangle from the first three entries in points.
Continuing with the example, a second triangle might be specified as "3, 0, 1, 3", meaning "form a face using three vertices. The vertices
are at offsets zero, one, and three in the points array". So this second face happens to share an edge—the (0, 1) edge—with the first face. A third face might be "4, 1, 2, 11, 12", forming a quadrilateral. Faces continue being formed until an flist_length number of integers in face_list have been processed.
One special case: if a vertex count in the list is negative, that means "continue with the previous face and subtract a polygon formed from the
following vertices". This allows you to build faces with true holes in them. Multiple holes get an "even-odd" rule applied. A region is part of the face if there are an odd number of edges between it and infinity in the plane of the face. Otherwise a region is considered exterior and is not drawn. The edges of the hole receive the usual edge attributes. For face-numbering purposes (for example, Edit_Shell_Faces) the hole is not counted separately—it's a part of the face it's in.
If the TKSH_TRISTRIPS bit is set in suboptions (e.g. via the functoin TK_Polyhedron::SetSubop), the shell is assumed to contain triangles only and may not contain holes, and the "faces" are actually the way that vertices are connected into triangle strips. Start with the length of the strip, followed by the vertex indices to be connected. The first 3 vertices form a triangle, and every additional vertex is combined with the two previous ones to define one additional triangle. Exactly as with OpenGL's GL_TRIANGLE_STRIP primitive, the orientation of every even triangle is reversed, beginning with the second.