/* $NoKeywords: $ */
/*
//
// Copyright (c) 1993-2011 Robert McNeel & Associates. All rights reserved.
// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
// McNeel & Associates.
//
// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
// MERCHANTABILITY ARE HEREBY DISCLAIMED.
//				
// For complete openNURBS copyright information see <http://www.opennurbs.org>.
//
////////////////////////////////////////////////////////////////
*/

#if !defined(OPENNURBS_THREEDM_INC_)
#define OPENNURBS_THREEDM_INC_

/* 3dm defines, structs and typedefs */

/*  Typecode format 4 bytes long

   x xxxxxxxxxxxxxxx,x xxx xxxx xxxx x x xx
  | |               | |               | |  |
   |        |        |                 |
   |        |        |         |       +---  "stuff" bit
   |        |        |         |
   |        |        |         +-- specific codes
   |        |        |
   |        |        +-- RESERVED - DO NOT USE (should be 0) (will be used to control CRC on/off)
   |        |
   |        +-- category:_000 0000 0000 0001  Legacy geometry    TCODE_LEGACY_GEOMETRY
   |                     _000 0000 0000 0010  openNURBS object   TCODE_OPENNURBS_OBJECT
   |                     _000 0000 0000 0100  -- RESERVED - DO NOT USE (should be 0 in any typecode) -- 
   |                     _000 0000 0000 1000  -- RESERVED - DO NOT USE (should be 0 in any typecode) --                     
   |                     _000 0000 0001 0000  Geometry           TCODE_GEOMETRY
   |                     _000 0000 0010 0000  Annotation
   |                     _000 0000 0100 0000  Display Attributes TCODE_DISPLAY
   |                     _000 0000 1000 0000  Rendering          TCODE_RENDER     
   |                     _000 0001 0000 0000                         
   |                     _000 0010 0000 0000  Interface          TCODE_INTERFACE 
   |                     _000 0100 0000 0000  -- RESERVED - DO NOT USE (should be 0 in any typecode) --
   |                     _000 1000 0000 0000  Tolerances         TCODE_TOLERANCE
   |                     _001 0000 0000 0000  Tables             TCODE_TABLE    
   |                     _010 0000 0000 0000  Table record       TCODE_TABLEREC
   |                     _100 0000 0000 0000  User information   TCODE_USER
   | 
   +-- format: 0 - data size in header  - data block follows    TCODE_SHORT
               1 - data in header - no data block follows

*/


/*
// The TCODE_COMMENTBLOCK is the first chunk in the file, starts 32 bytes into
// the file, and contains text information terminated with a ^Z.  This ^Z and
// contents of this chunk were expanded in February 2000.  Files written with
// code released earlier than this will not have the ^Z.
//
// The TCODE_ENDOFFILE is the last chunk in the file and the first 4 bytes
// of information in this chunk is an integer that contains the file length.
// This chunk was added in February 2000 and files written with code released
// earlier than this will not have this termination block.
*/
#define TCODE_COMMENTBLOCK        0x00000001
#define TCODE_ENDOFFILE           0x00007FFF
#define TCODE_ENDOFFILE_GOO       0x00007FFE /*
                                             // this typecode is returned when
                                             // a rogue eof marker is found
                                             // Some v1 3dm file writers put
                                             // these markers in a "goo". 
                                             // Simply skip these chunks and continue.
                                             */
#define TCODE_LEGACY_GEOMETRY     0x00010000
#define TCODE_OPENNURBS_OBJECT    0x00020000
#define TCODE_GEOMETRY            0x00100000
#define TCODE_ANNOTATION          0x00200000
#define TCODE_DISPLAY             0x00400000
#define TCODE_RENDER              0x00800000
#define TCODE_INTERFACE           0x02000000
#define TCODE_TOLERANCE           0x08000000
#define TCODE_TABLE               0x10000000
#define TCODE_TABLEREC            0x20000000
#define TCODE_USER                0x40000000
#define TCODE_SHORT               0x80000000

#define TCODE_CRC                 0x8000

#define TCODE_ANONYMOUS_CHUNK     (TCODE_USER | TCODE_CRC | 0x0000 )

/* The openNURBS toolkit allows users to write all openNURBS classed that are
// derived from ON_Object using using TCODE_OPENNURBS_CLASS chunks.
// In the .3dm file these TCODE_OPENNURBS_CLASS chunks are always have the
// following format.
*/

/* tables added 17 February 2000 */
#define TCODE_MATERIAL_TABLE   (TCODE_TABLE | 0x0010) /* rendering materials */
#define TCODE_LAYER_TABLE      (TCODE_TABLE | 0x0011) /* layers */
#define TCODE_LIGHT_TABLE      (TCODE_TABLE | 0x0012) /* rendering lights */
#define TCODE_OBJECT_TABLE     (TCODE_TABLE | 0x0013) /* geometry and annotation */
#define TCODE_PROPERTIES_TABLE (TCODE_TABLE | 0x0014) /* model properties:
                                                      //   revision history
                                                      //   notes
                                                      //   preview image
                                                      */
#define TCODE_SETTINGS_TABLE   (TCODE_TABLE | 0x0015) /* file properties including,
                                                      // units, tolerancess, 
                                                      // annotation defaults, 
                                                      // render mesh defaults, 
                                                      // current layer, 
                                                      // current material,
                                                      // current color,
                                                      // named construction planes,
                                                      // named viewports,
                                                      // current viewports,
                                                      */
#define TCODE_BITMAP_TABLE    (TCODE_TABLE | 0x0016) /* embedded bitmaps */
#define TCODE_USER_TABLE      (TCODE_TABLE | 0x0017) /* user table */

#define TCODE_GROUP_TABLE     (TCODE_TABLE | 0x0018) /* group table */

#define TCODE_FONT_TABLE      (TCODE_TABLE | 0x0019) /* annotation font table */
#define TCODE_DIMSTYLE_TABLE  (TCODE_TABLE | 0x0020) /* annotation dimension style table */

#define TCODE_INSTANCE_DEFINITION_TABLE (TCODE_TABLE | 0x0021) /* instance definition table */

#define TCODE_HATCHPATTERN_TABLE (TCODE_TABLE | 0x0022) /* hatch pattern table */

#define TCODE_LINETYPE_TABLE (TCODE_TABLE | 0x0023) /* linetype table */

#define TCODE_OBSOLETE_LAYERSET_TABLE (TCODE_TABLE | 0x0024) /* obsolete layer set table */

#define TCODE_TEXTURE_MAPPING_TABLE (TCODE_TABLE | 0x0025) /* texture mappings */

#define TCODE_HISTORYRECORD_TABLE (TCODE_TABLE | 0x0026) /* history records */

#define TCODE_ENDOFTABLE          0xFFFFFFFF

/* records in properties table */
#define TCODE_PROPERTIES_REVISIONHISTORY (TCODE_TABLEREC | TCODE_CRC | 0x0021)
#define TCODE_PROPERTIES_NOTES           (TCODE_TABLEREC | TCODE_CRC | 0x0022)
#define TCODE_PROPERTIES_PREVIEWIMAGE    (TCODE_TABLEREC | TCODE_CRC | 0x0023)
#define TCODE_PROPERTIES_APPLICATION     (TCODE_TABLEREC | TCODE_CRC | 0x0024)
#define TCODE_PROPERTIES_COMPRESSED_PREVIEWIMAGE (TCODE_TABLEREC | TCODE_CRC | 0x0025)
#define TCODE_PROPERTIES_OPENNURBS_VERSION (TCODE_TABLEREC | TCODE_SHORT | 0x0026)

/* records in settings table */
#define TCODE_SETTINGS_PLUGINLIST             (TCODE_TABLEREC | TCODE_CRC   | 0x0135)
#define TCODE_SETTINGS_UNITSANDTOLS           (TCODE_TABLEREC | TCODE_CRC   | 0x0031)
#define TCODE_SETTINGS_RENDERMESH             (TCODE_TABLEREC | TCODE_CRC   | 0x0032)
#define TCODE_SETTINGS_ANALYSISMESH           (TCODE_TABLEREC | TCODE_CRC   | 0x0033)
#define TCODE_SETTINGS_ANNOTATION             (TCODE_TABLEREC | TCODE_CRC   | 0x0034)
#define TCODE_SETTINGS_NAMED_CPLANE_LIST      (TCODE_TABLEREC | TCODE_CRC   | 0x0035)
#define TCODE_SETTINGS_NAMED_VIEW_LIST        (TCODE_TABLEREC | TCODE_CRC   | 0x0036)
#define TCODE_SETTINGS_VIEW_LIST              (TCODE_TABLEREC | TCODE_CRC   | 0x0037)
#define TCODE_SETTINGS_CURRENT_LAYER_INDEX    (TCODE_TABLEREC | TCODE_SHORT | 0x0038)
#define TCODE_SETTINGS_CURRENT_MATERIAL_INDEX (TCODE_TABLEREC | TCODE_CRC   | 0x0039)
#define TCODE_SETTINGS_CURRENT_COLOR          (TCODE_TABLEREC | TCODE_CRC   | 0x003A)
#define TCODE_SETTINGS__NEVER__USE__THIS      (TCODE_TABLEREC | TCODE_CRC   | 0x003E)
#define TCODE_SETTINGS_CURRENT_WIRE_DENSITY   (TCODE_TABLEREC | TCODE_SHORT | 0x003C)
#define TCODE_SETTINGS_RENDER                 (TCODE_TABLEREC | TCODE_CRC   | 0x003D)
#define TCODE_SETTINGS_GRID_DEFAULTS          (TCODE_TABLEREC | TCODE_CRC   | 0x003F)
#define TCODE_SETTINGS_MODEL_URL              (TCODE_TABLEREC | TCODE_CRC   | 0x0131)
#define TCODE_SETTINGS_CURRENT_FONT_INDEX     (TCODE_TABLEREC | TCODE_SHORT | 0x0132)
#define TCODE_SETTINGS_CURRENT_DIMSTYLE_INDEX (TCODE_TABLEREC | TCODE_SHORT | 0x0133)
/* added 29 October 2002 as a chunk to hold new and future ON_3dmSettings information */
#define TCODE_SETTINGS_ATTRIBUTES             (TCODE_TABLEREC | TCODE_CRC   | 0x0134)


/* views are subrecords in the settings table */
#define TCODE_VIEW_RECORD            (TCODE_TABLEREC | TCODE_CRC   | 0x003B)
/* subrecords if view record */
#define TCODE_VIEW_CPLANE            (TCODE_TABLEREC | TCODE_CRC   | 0x013B)
#define TCODE_VIEW_VIEWPORT          (TCODE_TABLEREC | TCODE_CRC   | 0x023B)
#define TCODE_VIEW_SHOWCONGRID       (TCODE_TABLEREC | TCODE_SHORT | 0x033B)
#define TCODE_VIEW_SHOWCONAXES       (TCODE_TABLEREC | TCODE_SHORT | 0x043B)
#define TCODE_VIEW_SHOWWORLDAXES     (TCODE_TABLEREC | TCODE_SHORT | 0x053B)
#define TCODE_VIEW_TRACEIMAGE        (TCODE_TABLEREC | TCODE_CRC   | 0x063B)
#define TCODE_VIEW_WALLPAPER         (TCODE_TABLEREC | TCODE_CRC   | 0x073B)
#define TCODE_VIEW_WALLPAPER_V3      (TCODE_TABLEREC | TCODE_CRC   | 0x074B)
#define TCODE_VIEW_TARGET            (TCODE_TABLEREC | TCODE_CRC   | 0x083B)
#define TCODE_VIEW_DISPLAYMODE       (TCODE_TABLEREC | TCODE_SHORT | 0x093B)
#define TCODE_VIEW_NAME              (TCODE_TABLEREC | TCODE_CRC   | 0x0A3B)
#define TCODE_VIEW_POSITION          (TCODE_TABLEREC | TCODE_CRC   | 0x0B3B)

/* added 29 October 2002 as a chunk to hold new and future ON_3dmView information */
#define TCODE_VIEW_ATTRIBUTES        (TCODE_TABLEREC | TCODE_CRC   | 0x0C3B)

/* added 27 June 2008 as a chunk to hold userdata on ON_Viewports saved in named view list */
#define TCODE_VIEW_VIEWPORT_USERDATA (TCODE_TABLEREC | TCODE_CRC   | 0x0D3B)

/* records in bitmap table */
#define TCODE_BITMAP_RECORD (TCODE_TABLEREC | TCODE_CRC | 0x0090) /* bitmap table record derived from ON_Bitmap */

/* records in material table */
#define TCODE_MATERIAL_RECORD (TCODE_TABLEREC | TCODE_CRC | 0x0040) /* material table record derived from ON_Material */

/* records in layer table */
#define TCODE_LAYER_RECORD    (TCODE_TABLEREC | TCODE_CRC | 0x0050) /* layer table record derived from ON_Layer */

/* records in light table */
#define TCODE_LIGHT_RECORD            (TCODE_TABLEREC | TCODE_CRC | 0x0060)    /* light table record derived from ON_Light */
#define TCODE_LIGHT_RECORD_ATTRIBUTES (TCODE_INTERFACE | TCODE_CRC   | 0x0061) /* ON_3dmObjectAttributes chunk */
#define TCODE_LIGHT_RECORD_ATTRIBUTES_USERDATA (TCODE_INTERFACE | 0x0062)      /* ON_3dmObjectAttributes userdata chunk */

#define TCODE_LIGHT_RECORD_END        (TCODE_INTERFACE | TCODE_SHORT | 0x006F)

/* records in user table 
     Each user table entery has two top level chunks, a TCODE_USER_TABLE_UUID chunk
     and a TCODE_USER_RECORD chunk.
*/

/* The TCODE_USER_TABLE_UUID chunk
   contains the plug-in id and, if the archive is V5 or later
   and was written by an opennurbs with version >= 200910190,
   a TCODE_USER_TABLE_RECORD_HEADER chunk.
*/
#define TCODE_USER_TABLE_UUID          (TCODE_TABLEREC | TCODE_CRC | 0x0080)
/* the user record header was added in 200910190 and is inside the TCODE_USER_TABLE_UUID chunk */
#define TCODE_USER_TABLE_RECORD_HEADER (TCODE_TABLEREC | TCODE_CRC | 0x0082)
/* information saved by the plug-in is in a TCODE_USER_RECORD chunk */
#define TCODE_USER_RECORD              (TCODE_TABLEREC | 0x0081) 


/* records in group table */
#define TCODE_GROUP_RECORD             (TCODE_TABLEREC  | TCODE_CRC   | 0x0073)

/* records in font table */
#define TCODE_FONT_RECORD             (TCODE_TABLEREC  | TCODE_CRC   | 0x0074)

/* records in dimension style table */
#define TCODE_DIMSTYLE_RECORD          (TCODE_TABLEREC  | TCODE_CRC   | 0x0075)

/* records in instance definition table */
#define TCODE_INSTANCE_DEFINITION_RECORD  (TCODE_TABLEREC  | TCODE_CRC   | 0x0076)

/* records in hatch pattern table */
#define TCODE_HATCHPATTERN_RECORD  (TCODE_TABLEREC  | TCODE_CRC   | 0x0077)

/* records in linetye pattern table */
#define TCODE_LINETYPE_RECORD  (TCODE_TABLEREC  | TCODE_CRC   | 0x0078)

/* OBSOLETE records in layer set table */
#define TCODE_OBSOLETE_LAYERSET_RECORD  (TCODE_TABLEREC  | TCODE_CRC   | 0x0079)

/* records in linetye pattern table */
#define TCODE_TEXTURE_MAPPING_RECORD  (TCODE_TABLEREC  | TCODE_CRC   | 0x007A)

/* records in history record pattern table */
#define TCODE_HISTORYRECORD_RECORD  (TCODE_TABLEREC  | TCODE_CRC   | 0x007B)

/* records in object table */
#define TCODE_OBJECT_RECORD            (TCODE_TABLEREC  | TCODE_CRC   | 0x0070)
#define TCODE_OBJECT_RECORD_TYPE       (TCODE_INTERFACE | TCODE_SHORT | 0x0071)   /* ON::object_type value */
#define TCODE_OBJECT_RECORD_ATTRIBUTES (TCODE_INTERFACE | TCODE_CRC   | 0x0072)   /* ON_3dmObjectAttributes chunk */
#define TCODE_OBJECT_RECORD_ATTRIBUTES_USERDATA (TCODE_INTERFACE | 0x0073)        /* ON_3dmObjectAttributes userdata chunk */
#define TCODE_OBJECT_RECORD_HISTORY    (TCODE_INTERFACE | TCODE_CRC   | 0x0074)   /* construction history */
#define TCODE_OBJECT_RECORD_HISTORY_HEADER (TCODE_INTERFACE | TCODE_CRC | 0x0075) /* construction history header*/
#define TCODE_OBJECT_RECORD_HISTORY_DATA   (TCODE_INTERFACE | TCODE_CRC | 0x0076) /* construction history data */
#define TCODE_OBJECT_RECORD_END        (TCODE_INTERFACE | TCODE_SHORT | 0x007F)

/*
/////////////////////////////////////////////////////////////////////////////////////
//
// TCODE_OBJECT_RECORD
//   4 byte length of entire object record
//
//   TCODE_OBJECT_RECORD_TYPE required - used to quickly filter and skip unwanted objects
//     4 byte ON::object_type
//
//   TCODE_OPENNURBS_CLASS
//     4 byte length
//     TCODE_OPENNURBS_CLASS_UUID
//       4 byte length = 20
//       value of ON_ClassId::m_uuid for this class
//       4 byte CRC
//     TCODE_OPENNURBS_CLASS_DATA
//       4 byte length 
//       class specific data for geometry or annotation object
//       4 byte CRC
//     TCODE_OPENNURBS_CLASS_USERDATA (1 chunk per piece of user data)
//       4 byte length
//       2 byte chunk version 2.1
//       TCODE_OPENNURBS_CLASS_USERDATA_HEADER
//         4 byte length
//         16 byte value of ON_ClassId::m_uuid for this child class of ON_UserData
//         16 byte value of ON_UserData::m_userdata_uuid
//         4 byte value of ON_UserData::m_userdata_copycount
//         128 byte value of ON_UserData::m_userdata_xform
//         16 byte value of  ON_UserData::m_application_uuid (in ver 2.1 chunks)
//       TCODE_ANONYMOUS_CHUNK
//         4 byte length
//         specific user data
//     TCODE_OPENNURBS_CLASS_END
//
//   TCODE_OBJECT_RECORD_ATTRIBUTES (optional)
//     4 byte length
//     ON_3dmObjectAttributes information
//     4 byte crc
//
//   TCODE_OBJECT_RECORD_ATTRIBUTES_USERDATA (optional)
//     4 byte length
//     TCODE_OPENNURBS_CLASS_USERDATA (1 chunk per piece of user data)
//       4 byte length
//       2 byte chunk version 2.1
//       TCODE_OPENNURBS_CLASS_USERDATA_HEADER
//         4 byte length
//         16 byte value of ON_ClassId::m_uuid for this child class of ON_UserData
//         16 byte value of ON_UserData::m_userdata_uuid
//         4 byte value of ON_UserData::m_userdata_copycount
//         128 byte value of ON_UserData::m_userdata_xform
//         16 byte value of  ON_UserData::m_application_uuid (in ver 2.1 chunks)
//       TCODE_ANONYMOUS_CHUNK
//         4 byte length
//         specific user data
//
//   TCODE_OBJECT_RECORD_HISTORY (optional) construction history
//     4 byte length
//     2 byte chunk version
//     TCODE_OBJECT_RECORD_HISTORY_HEADER
//       4 byte length
//       2 byte chunk version 
//       ...
//       4 byte crc
//     TCODE_OBJECT_RECORD_HISTORY_DATA
//       4 byte length
//       2 byte chunk version 
//       ...
//       4 byte crc
//
//   TCODE_OBJECT_RECORD_END required - marks end of object record
//
/////////////////////////////////////////////////////////////////////////////////////
*/

#define TCODE_OPENNURBS_CLASS          (TCODE_OPENNURBS_OBJECT               | 0x7FFA)
#define TCODE_OPENNURBS_CLASS_UUID     (TCODE_OPENNURBS_OBJECT | TCODE_CRC   | 0x7FFB)
#define TCODE_OPENNURBS_CLASS_DATA     (TCODE_OPENNURBS_OBJECT | TCODE_CRC   | 0x7FFC)
#define TCODE_OPENNURBS_CLASS_USERDATA (TCODE_OPENNURBS_OBJECT               | 0x7FFD)
#define TCODE_OPENNURBS_CLASS_USERDATA_HEADER (TCODE_OPENNURBS_OBJECT | TCODE_CRC | 0x7FF9)
#define TCODE_OPENNURBS_CLASS_END      (TCODE_OPENNURBS_OBJECT | TCODE_SHORT | 0x7FFF)

/*
/////////////////////////////////////////////////////////////////////////////////////
//
// TCODE_OPENNURBS_CLASS
// length of entire openNURBS class object chunk
//
//   TCODE_OPENNURBS_CLASS_UUID
//   length of uuid (16 byte UUID + 4 byte CRC)
//   16 byte UUID ( a.k.a. GUID ) openNURBS class ID - determines specific openNURBS class
//   4 bytes (32 bit CRC of the UUID)
//
//   TCODE_OPENNURBS_CLASS_DATA
//   length of object data
//   ... data that defines object
//       use ON_classname::Read() to read this data and ON_classname::Write()
//       to write this data
//   4 bytes (32 bit CRC of the object data)
//
//   TCODE_OPENNURBS_CLASS_USERDATA ( 0 or more user data chunks)
//
//   TCODE_OPENNURBS_CLASS_END
//   4 bytes = 0
//
/////////////////////////////////////////////////////////////////////////////////////
*/

/*
/////////////////////////////////////////////////////////////////////////////////////
//
//
//  The TCODEs below were used in the version 1 file format and are needed so that
//  the these files can be read and (optionally) written by the current OpenNURBS
//  toolkit.
//
//
/////////////////////////////////////////////////////////////////////////////////////
*/


#define TCODE_ANNOTATION_SETTINGS (TCODE_ANNOTATION | 0x0001)

#define TCODE_TEXT_BLOCK          (TCODE_ANNOTATION | 0x0004)
#define TCODE_ANNOTATION_LEADER   (TCODE_ANNOTATION | 0x0005)
#define TCODE_LINEAR_DIMENSION    (TCODE_ANNOTATION | 0x0006)
#define TCODE_ANGULAR_DIMENSION   (TCODE_ANNOTATION | 0x0007)
#define TCODE_RADIAL_DIMENSION    (TCODE_ANNOTATION | 0x0008)

/* old RhinoIO toolkit (pre February 2000) defines */
#define TCODE_RHINOIO_OBJECT_NURBS_CURVE   (TCODE_OPENNURBS_OBJECT | 0x0008) /* old CRhinoNurbsCurve   */
#define TCODE_RHINOIO_OBJECT_NURBS_SURFACE (TCODE_OPENNURBS_OBJECT | 0x0009) /* old CRhinoNurbsSurface */
#define TCODE_RHINOIO_OBJECT_BREP          (TCODE_OPENNURBS_OBJECT | 0x000B) /* old CRhinoBrep         */
#define TCODE_RHINOIO_OBJECT_DATA          (TCODE_OPENNURBS_OBJECT | 0xFFFE) /* obsolete - don't confuse with TCODE_OPENNURBS_OBJECT_DATA */
#define TCODE_RHINOIO_OBJECT_END           (TCODE_OPENNURBS_OBJECT | 0xFFFF) /* obsolete - don't confuse with TCODE_OPENNURBS_OBJECT_END */

/* OpenNURBS classes the require a unique tcode */
#define TCODE_OPENNURBS_BUFFER (TCODE_OPENNURBS_OBJECT | TCODE_CRC | 0x0100) /* chunk stores ON_Buffer classes */

/* legacy objects from Rhino 1.x */
#define TCODE_LEGACY_ASM          (TCODE_LEGACY_GEOMETRY | 0x0001)
#define TCODE_LEGACY_PRT          (TCODE_LEGACY_GEOMETRY | 0x0002)
#define TCODE_LEGACY_SHL          (TCODE_LEGACY_GEOMETRY | 0x0003)
#define TCODE_LEGACY_FAC          (TCODE_LEGACY_GEOMETRY | 0x0004)
#define TCODE_LEGACY_BND          (TCODE_LEGACY_GEOMETRY | 0x0005)
#define TCODE_LEGACY_TRM          (TCODE_LEGACY_GEOMETRY | 0x0006)
#define TCODE_LEGACY_SRF          (TCODE_LEGACY_GEOMETRY | 0x0007)
#define TCODE_LEGACY_CRV          (TCODE_LEGACY_GEOMETRY | 0x0008)
#define TCODE_LEGACY_SPL          (TCODE_LEGACY_GEOMETRY | 0x0009)
#define TCODE_LEGACY_PNT          (TCODE_LEGACY_GEOMETRY | 0x000A)

#define TCODE_STUFF               0x0100

#define TCODE_LEGACY_ASMSTUFF     (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_ASM)
#define TCODE_LEGACY_PRTSTUFF     (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_PRT)
#define TCODE_LEGACY_SHLSTUFF     (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_SHL)
#define TCODE_LEGACY_FACSTUFF     (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_FAC)
#define TCODE_LEGACY_BNDSTUFF     (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_BND)
#define TCODE_LEGACY_TRMSTUFF     (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_TRM)
#define TCODE_LEGACY_SRFSTUFF     (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_SRF)
#define TCODE_LEGACY_CRVSTUFF     (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_CRV)
#define TCODE_LEGACY_SPLSTUFF     (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_SPL)
#define TCODE_LEGACY_PNTSTUFF     (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_PNT)

/* legacy objects from Rhino 1.x */
#define TCODE_RH_POINT            (TCODE_GEOMETRY | 0x0001)

#define TCODE_RH_SPOTLIGHT        (TCODE_RENDER   | 0x0001)

#define TCODE_OLD_RH_TRIMESH          (TCODE_GEOMETRY | 0x0011)
#define TCODE_OLD_MESH_VERTEX_NORMALS (TCODE_GEOMETRY | 0x0012)
#define TCODE_OLD_MESH_UV             (TCODE_GEOMETRY | 0x0013)
#define TCODE_OLD_FULLMESH            (TCODE_GEOMETRY | 0x0014)


#define TCODE_MESH_OBJECT         (TCODE_GEOMETRY | 0x0015)
#define TCODE_COMPRESSED_MESH_GEOMETRY   (TCODE_GEOMETRY | 0x0017)
#define TCODE_ANALYSIS_MESH       (TCODE_GEOMETRY | 0x0018)

#define TCODE_NAME                (TCODE_INTERFACE | 0x0001)
#define TCODE_VIEW                (TCODE_INTERFACE | 0x0002)
#define TCODE_CPLANE              (TCODE_INTERFACE | 0x0003)

#define TCODE_NAMED_CPLANE        (TCODE_INTERFACE | 0x0004)
#define TCODE_NAMED_VIEW          (TCODE_INTERFACE | 0x0005)
#define TCODE_VIEWPORT            (TCODE_INTERFACE | 0x0006)

#define TCODE_SHOWGRID            (TCODE_SHORT | TCODE_INTERFACE | 0x0007)
#define TCODE_SHOWGRIDAXES        (TCODE_SHORT | TCODE_INTERFACE | 0x0008)
#define TCODE_SHOWWORLDAXES       (TCODE_SHORT | TCODE_INTERFACE | 0x0009)

#define TCODE_VIEWPORT_POSITION   (TCODE_INTERFACE | 0x000A)
#define TCODE_VIEWPORT_TRACEINFO  (TCODE_INTERFACE | 0x000B)
#define TCODE_SNAPSIZE            (TCODE_INTERFACE | 0x000C)
#define TCODE_NEAR_CLIP_PLANE     (TCODE_INTERFACE | 0x000D)
#define TCODE_HIDE_TRACE          (TCODE_INTERFACE | 0x000E)

#define TCODE_NOTES               (TCODE_INTERFACE | 0x000F)
#define TCODE_UNIT_AND_TOLERANCES (TCODE_INTERFACE | 0x0010)

#define TCODE_MAXIMIZED_VIEWPORT  (TCODE_SHORT | TCODE_INTERFACE | 0x0011)
#define TCODE_VIEWPORT_WALLPAPER  (TCODE_INTERFACE | 0x0012)


#define TCODE_SUMMARY             (TCODE_INTERFACE | 0x0013)
#define TCODE_BITMAPPREVIEW       (TCODE_INTERFACE | 0x0014)
#define TCODE_VIEWPORT_DISPLAY_MODE  (TCODE_SHORT | TCODE_INTERFACE | 0x0015)


#define TCODE_LAYERTABLE          (TCODE_SHORT   | TCODE_TABLE    | 0x0001) /* obsolete - do not use */
#define TCODE_LAYERREF            (TCODE_SHORT   | TCODE_TABLEREC | 0x0001)

#define TCODE_XDATA               (TCODE_USER | 0x0001)

#define TCODE_RGB                 (TCODE_SHORT   | TCODE_DISPLAY | 0x0001)
#define TCODE_TEXTUREMAP          (TCODE_DISPLAY | 0x0002)
#define TCODE_BUMPMAP             (TCODE_DISPLAY | 0x0003)
#define TCODE_TRANSPARENCY        (TCODE_SHORT   | TCODE_DISPLAY | 0x0004)
#define TCODE_DISP_AM_RESOLUTION  (TCODE_SHORT   | TCODE_DISPLAY | 0x0005)
#define TCODE_RGBDISPLAY          (TCODE_SHORT   | TCODE_DISPLAY | 0x0006)  /* will be used for color by object */
#define TCODE_RENDER_MATERIAL_ID  (TCODE_DISPLAY | 0x0007)                  /* id for render material */

#define TCODE_LAYER               (TCODE_DISPLAY | 0x0010)

/* obsolete layer typecodes from earlier betas - not used anymore */
#define TCODE_LAYER_OBSELETE_1    (TCODE_SHORT   | TCODE_DISPLAY | 0x0013)
#define TCODE_LAYER_OBSELETE_2    (TCODE_SHORT   | TCODE_DISPLAY | 0x0014)
#define TCODE_LAYER_OBSELETE_3    (TCODE_SHORT   | TCODE_DISPLAY | 0x0015)

/* these were only ever used by AccuModel and never by Rhino */
#define TCODE_LAYERON             (TCODE_SHORT   | TCODE_DISPLAY | 0x0016)
#define TCODE_LAYERTHAWED         (TCODE_SHORT   | TCODE_DISPLAY | 0x0017)
#define TCODE_LAYERLOCKED         (TCODE_SHORT   | TCODE_DISPLAY | 0x0018)


#define TCODE_LAYERVISIBLE        (TCODE_SHORT   | TCODE_DISPLAY | 0x0012)
#define TCODE_LAYERPICKABLE       (TCODE_SHORT   | TCODE_DISPLAY | 0x0030)
#define TCODE_LAYERSNAPABLE       (TCODE_SHORT   | TCODE_DISPLAY | 0x0031)
#define TCODE_LAYERRENDERABLE     (TCODE_SHORT   | TCODE_DISPLAY | 0x0032)


/* use LAYERSTATE ( 0 = LAYER_ON, 1 = LAYER_OFF, 2 = LAYER_LOCKED ) instead of above individual toggles */
#define TCODE_LAYERSTATE          (TCODE_SHORT   | TCODE_DISPLAY | 0x0033)
#define TCODE_LAYERINDEX          (TCODE_SHORT   | TCODE_DISPLAY | 0x0034)
#define TCODE_LAYERMATERIALINDEX  (TCODE_SHORT   | TCODE_DISPLAY | 0x0035)

#define TCODE_RENDERMESHPARAMS    (TCODE_DISPLAY | 0x0020) /* block of parameters for render meshes */



#define TCODE_DISP_CPLINES        (TCODE_SHORT   | TCODE_DISPLAY | 0x0022)
#define TCODE_DISP_MAXLENGTH      (TCODE_DISPLAY | 0x0023)

#define TCODE_CURRENTLAYER        (TCODE_SHORT   | TCODE_DISPLAY | 0x0025 )

#define TCODE_LAYERNAME           (TCODE_DISPLAY | 0x0011)

#define TCODE_LEGACY_TOL_FIT      (TCODE_TOLERANCE | 0x0001)
#define TCODE_LEGACY_TOL_ANGLE    (TCODE_TOLERANCE | 0x0002)

#define TCODE_DICTIONARY          (TCODE_USER | TCODE_CRC   | 0x0010)
#define TCODE_DICTIONARY_ID       (TCODE_USER | TCODE_CRC   | 0x0011)
#define TCODE_DICTIONARY_ENTRY    (TCODE_USER | TCODE_CRC   | 0x0012)
#define TCODE_DICTIONARY_END      (TCODE_USER | TCODE_SHORT | 0x0013)

#endif
