Welcome to mirror list, hosted at ThFree Co, Russian Federation.

DNA_meta_types.h « makesdna « blender « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 56683bf47971f17d8fef74366bbba8daae6993ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 * ***** BEGIN GPL LICENSE BLOCK *****
 *
 * 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
 * of the License, or (at your option) any later version.
 *
 * 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,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 * 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.
 *
 * ***** END GPL LICENSE BLOCK *****
 */

/** \file DNA_meta_types.h
 *  \ingroup DNA
 */

#ifndef __DNA_META_TYPES_H__
#define __DNA_META_TYPES_H__

#include "DNA_listBase.h"
#include "DNA_ID.h"

struct BoundBox;
struct AnimData;
struct Ipo;
struct Material;


typedef struct MetaElem {
	struct MetaElem *next, *prev;

	struct BoundBox *bb;        /* Bound Box of MetaElem */

	short type, flag, selcol1, selcol2;
	float x, y, z;          /* Position of center of MetaElem */
	float quat[4];          /* Rotation of MetaElem (MUST be kept normalized) */
	float expx; /* dimension parameters, used for some types like cubes */
	float expy;
	float expz;
	float rad;              /* radius of the meta element */
	float rad2;             /* temp field, used only while processing */
	float s;                /* stiffness, how much of the element to fill */
	float len;              /* old, only used for backwards compat. use dimensions now */
	
	float *mat, *imat;      /* matrix and inverted matrix */
	
} MetaElem;

typedef struct MetaBall {
	ID id;
	struct AnimData *adt;
	
	struct BoundBox *bb;

	ListBase elems;
	ListBase disp;
	ListBase *editelems;		/* not saved in files, note we use pointer for editmode check */
	struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */

	/* material of the mother ball will define the material used of all others */
	struct Material **mat; 

	char flag, flag2;			/* flag is enum for updates, flag2 is bitflags for settings */
	short totcol;
	short texflag, pad; /* used to store MB_AUTOSPACE */
	
	/* texture space, copied as one block in editobject.c */
	float loc[3];
	float size[3];
	float rot[3];
	
	float wiresize, rendersize; /* display and render res */
	
	/* bias elements to have an offset volume.
	 * mother ball changes will effect other objects thresholds,
	 * but these may also have their own thresh as an offset */
	float thresh;

	/* used in editmode */
	/*ListBase edit_elems;*/
	MetaElem *lastelem;
} MetaBall;

/* **************** METABALL ********************* */

/* texflag */
#define MB_AUTOSPACE	1

/* mb->flag */
#define MB_UPDATE_ALWAYS	0
#define MB_UPDATE_HALFRES	1
#define MB_UPDATE_FAST		2
#define MB_UPDATE_NEVER		3

/* mb->flag2 */
#define MB_DS_EXPAND 	(1<<0)


/* ml->type */
#define MB_BALL		0
#define MB_TUBEX	1 /* depercated */
#define MB_TUBEY	2 /* depercated */
#define MB_TUBEZ	3 /* depercated */
#define MB_TUBE		4
#define MB_PLANE	5
#define MB_ELIPSOID	6
#define MB_CUBE 	7

#define MB_TYPE_SIZE_SQUARED(type)  (type == MB_ELIPSOID)

/* ml->flag */
#define MB_NEGATIVE	2
#define MB_HIDE		8
#define MB_SCALE_RAD	16

#endif