2002-10-12 11:37:38 +00:00
/**
* blenlib / DNA_ID . h ( mar - 2001 nzc )
*
2006-11-17 04:46:48 +00:00
* ID and Library types , which are fundamental for sdna ,
2002-10-12 11:37:38 +00:00
*
2006-11-17 04:46:48 +00:00
* $ Id $
2002-10-12 11:37:38 +00:00
*
2008-01-07 19:13:47 +00:00
* * * * * * BEGIN GPL LICENSE BLOCK * * * * *
2002-10-12 11:37:38 +00:00
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
2008-01-07 19:13:47 +00:00
* of the License , or ( at your option ) any later version .
2002-10-12 11:37:38 +00:00
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software Foundation ,
2010-02-12 13:34:04 +00:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
2002-10-12 11:37:38 +00:00
*
* The Original Code is Copyright ( C ) 2001 - 2002 by NaN Holding BV .
* All rights reserved .
*
* The Original Code is : all of this file .
*
* Contributor ( s ) : none yet .
*
2008-01-07 19:13:47 +00:00
* * * * * * END GPL LICENSE BLOCK * * * * *
2002-10-12 11:37:38 +00:00
*/
# ifndef DNA_ID_H
# define DNA_ID_H
2006-11-17 04:46:48 +00:00
# include "DNA_listBase.h"
2002-10-12 11:37:38 +00:00
# ifdef __cplusplus
extern " C " {
# endif
struct Library ;
struct FileData ;
2006-11-17 04:46:48 +00:00
struct ID ;
typedef struct IDPropertyData {
void * pointer ;
ListBase group ;
2008-07-24 19:22:17 +00:00
int val , val2 ; /*note, we actually fit a double into these two ints*/
2006-11-17 04:46:48 +00:00
} IDPropertyData ;
typedef struct IDProperty {
struct IDProperty * next , * prev ;
char type , subtype ;
short flag ;
2008-11-17 18:44:06 +00:00
char name [ 32 ] ;
2007-04-24 14:52:35 +00:00
int saved ; /*saved is used to indicate if this struct has been saved yet.
seemed like a good idea as a pad var was needed anyway : ) */
IDPropertyData data ; /* note, alignment for 64 bits */
2006-11-17 04:46:48 +00:00
int len ; /* array length, also (this is important!) string length + 1.
2010-03-22 09:30:00 +00:00
the idea is to be able to reuse array realloc functions on strings . */
2006-11-17 04:46:48 +00:00
/*totallen is total length of allocated array/string, including a buffer.
Note that the buffering is mild ; the code comes from python ' s list implementation . */
int totallen ; /*strings and arrays are both buffered, though the buffer isn't
2010-03-22 09:30:00 +00:00
saved . */
2006-11-17 04:46:48 +00:00
} IDProperty ;
# define MAX_IDPROP_NAME 32
# define DEFAULT_ALLOC_FOR_NULL_STRINGS 64
/*->type*/
2008-11-17 18:44:06 +00:00
# define IDP_STRING 0
# define IDP_INT 1
# define IDP_FLOAT 2
# define IDP_ARRAY 5
# define IDP_GROUP 6
2007-12-24 18:53:37 +00:00
/* the ID link property type hasn't been implemented yet, this will require
some cleanup of blenkernel , most likely . */
2008-11-17 18:44:06 +00:00
# define IDP_ID 7
# define IDP_DOUBLE 8
2008-12-31 13:16:37 +00:00
# define IDP_IDPARRAY 9
# define IDP_NUMTYPES 10
2006-11-17 04:46:48 +00:00
2007-12-24 18:53:37 +00:00
/* add any future new id property types here.*/
2002-10-12 11:37:38 +00:00
2003-04-27 11:55:33 +00:00
/* watch it: Sequence has identical beginning. */
2002-10-12 11:37:38 +00:00
/**
* ID is the first thing included in all serializable types . It
* provides a common handle to place all data in double - linked lists .
* */
2006-11-17 04:46:48 +00:00
2007-12-24 18:53:37 +00:00
# define MAX_ID_NAME 24
2006-11-17 04:46:48 +00:00
/* There's a nasty circular dependency here.... void* to the rescue! I
* really wonder why this is needed . */
2002-10-12 11:37:38 +00:00
typedef struct ID {
void * next , * prev ;
struct ID * newid ;
struct Library * lib ;
char name [ 24 ] ;
short us ;
/**
* LIB_ . . . flags report on status of the datablock this ID belongs
* to .
*/
short flag ;
2005-12-21 22:21:43 +00:00
int icon_id ;
2006-11-17 04:46:48 +00:00
IDProperty * properties ;
2002-10-12 11:37:38 +00:00
} ID ;
/**
2003-04-27 11:55:33 +00:00
* For each library file used , a Library struct is added to Main
2006-12-01 10:12:41 +00:00
* WARNING : readfile . c , expand_doit ( ) reads this struct without DNA check !
2002-10-12 11:37:38 +00:00
*/
typedef struct Library {
ID id ;
ID * idblock ;
struct FileData * filedata ;
2009-02-12 03:48:56 +00:00
char name [ 240 ] ; /* revealed in the UI, can store relative path */
2006-12-01 10:12:41 +00:00
char filename [ 240 ] ; /* expanded name, not relative, used while reading */
int tot , pad ; /* tot, idblock and filedata are only fo read and write */
struct Library * parent ; /* for outliner, showing dependency */
2002-10-12 11:37:38 +00:00
} Library ;
2007-09-02 17:25:03 +00:00
# define PREVIEW_MIPMAPS 2
# define PREVIEW_MIPMAP_ZERO 0
# define PREVIEW_MIPMAP_LARGE 1
typedef struct PreviewImage {
unsigned int w [ 2 ] ;
unsigned int h [ 2 ] ;
short changed [ 2 ] ;
short pad0 , pad1 ;
unsigned int * rect [ 2 ] ;
} PreviewImage ;
2002-10-12 11:37:38 +00:00
/**
* Defines for working with IDs .
*
* The tags represent types ! This is a dirty way of enabling RTTI . The
* sig_byte end endian defines aren ' t really used much .
*
* */
2008-03-23 12:59:26 +00:00
# if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
2002-10-12 11:37:38 +00:00
/* big endian */
# define MAKE_ID2(c, d) ( (c)<<8 | (d) )
# define MOST_SIG_BYTE 0
# define BBIG_ENDIAN
# else
/* little endian */
# define MAKE_ID2(c, d) ( (d)<<8 | (c) )
# define MOST_SIG_BYTE 1
# define BLITTLE_ENDIAN
# endif
2006-11-25 13:07:28 +00:00
/* ID from database */
2009-09-16 01:15:30 +00:00
# define ID_SCE MAKE_ID2('S', 'C') /* Scene */
# define ID_LI MAKE_ID2('L', 'I') /* Library */
# define ID_OB MAKE_ID2('O', 'B') /* Object */
# define ID_ME MAKE_ID2('M', 'E') /* Mesh */
# define ID_CU MAKE_ID2('C', 'U') /* Curve */
# define ID_MB MAKE_ID2('M', 'B') /* MetaBall */
# define ID_MA MAKE_ID2('M', 'A') /* Material */
# define ID_TE MAKE_ID2('T', 'E') /* Texture */
# define ID_IM MAKE_ID2('I', 'M') /* Image */
# define ID_WV MAKE_ID2('W', 'V') /* Wave (unused) */
# define ID_LT MAKE_ID2('L', 'T') /* Lattice */
# define ID_LA MAKE_ID2('L', 'A') /* Lamp */
# define ID_CA MAKE_ID2('C', 'A') /* Camera */
# define ID_IP MAKE_ID2('I', 'P') /* Ipo (depreciated, replaced by FCurves) */
# define ID_KE MAKE_ID2('K', 'E') /* Key (shape key) */
# define ID_WO MAKE_ID2('W', 'O') /* World */
# define ID_SCR MAKE_ID2('S', 'R') /* Screen */
# define ID_SCRN MAKE_ID2('S', 'N') /* (depreciated?) */
# define ID_VF MAKE_ID2('V', 'F') /* VectorFont */
# define ID_TXT MAKE_ID2('T', 'X') /* Text */
# define ID_SO MAKE_ID2('S', 'O') /* Sound */
# define ID_GR MAKE_ID2('G', 'R') /* Group */
# define ID_ID MAKE_ID2('I', 'D') /* (internal use only) */
# define ID_AR MAKE_ID2('A', 'R') /* Armature */
# define ID_AC MAKE_ID2('A', 'C') /* Action */
# define ID_SCRIPT MAKE_ID2('P', 'Y') /* Script (depreciated) */
# define ID_NT MAKE_ID2('N', 'T') /* NodeTree */
# define ID_BR MAKE_ID2('B', 'R') /* Brush */
# define ID_PA MAKE_ID2('P', 'A') /* ParticleSettings */
# define ID_GD MAKE_ID2('G', 'D') /* GreasePencil */
# define ID_WM MAKE_ID2('W', 'M') /* WindowManager */
2002-10-12 11:37:38 +00:00
2005-10-10 18:05:30 +00:00
/* NOTE! Fake IDs, needed for g.sipo->blocktype or outliner */
# define ID_SEQ MAKE_ID2('S', 'Q')
/* constraint */
# define ID_CO MAKE_ID2('C', 'O')
/* pose (action channel, used to be ID_AC in code, so we keep code for backwards compat) */
# define ID_PO MAKE_ID2('A', 'C')
/* used in outliner... */
# define ID_NLA MAKE_ID2('N', 'L')
2006-11-25 13:07:28 +00:00
/* fluidsim Ipo */
# define ID_FLUIDSIM MAKE_ID2('F', 'S')
2010-01-17 20:06:34 +00:00
# define ID_REAL_USERS(id) (((ID *)id)->us - ((((ID *)id)->flag & LIB_FAKEUSER) ? 1:0))
2003-04-27 11:55:33 +00:00
/* id->flag: set frist 8 bits always at zero while reading */
2002-10-12 11:37:38 +00:00
# define LIB_LOCAL 0
# define LIB_EXTERN 1
# define LIB_INDIRECT 2
# define LIB_TEST 8
# define LIB_TESTEXT 9
# define LIB_TESTIND 10
# define LIB_READ 16
# define LIB_NEEDLINK 32
# define LIB_NEW 256
# define LIB_FAKEUSER 512
2003-04-27 11:55:33 +00:00
/* free test flag */
2002-10-12 11:37:38 +00:00
# define LIB_DOIT 1024
2010-01-07 16:19:38 +00:00
/* tag existing data before linking so we know what is new */
# define LIB_PRE_EXISTING 2048
2002-10-12 11:37:38 +00:00
# ifdef __cplusplus
}
# endif
# endif
2002-10-30 02:07:20 +00:00