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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
#ifndef _hierchnk_hpp
#define _hierchnk_hpp 1
#include "chunk.hpp"
#include "list_tem.hpp"
#include "chnktype.hpp"
class Object_Chunk;
class Object_Hierarchy_Data_Chunk;
class Object_Hierarchy_Name_Chunk;
class Shape_Chunk;
#ifdef MAXEXPORT
class INode;
#endif
class Object_Hierarchy_Chunk : public Chunk_With_Children
{
public:
Object_Hierarchy_Chunk(Chunk_With_Children * parent)
: Chunk_With_Children (parent, "OBJCHIER")
{}
// constructor from buffer
Object_Hierarchy_Chunk (Chunk_With_Children * const parent,const char *, size_t const);
List <Object_Hierarchy_Chunk *> list_h_children();
Object_Hierarchy_Data_Chunk * get_data ();
Object_Hierarchy_Name_Chunk * get_name ();
#ifdef MAXEXPORT
INode* node;
#endif
};
class Object_Hierarchy_Data_Chunk : public Chunk
{
public:
Object_Hierarchy_Data_Chunk (Object_Hierarchy_Chunk * parent, const char * obname);
Object_Hierarchy_Data_Chunk (Chunk_With_Children * parent, const char * sdata, size_t /*ssize*/);
~Object_Hierarchy_Data_Chunk ();
int num_extra_data;
int* extra_data;
Object_Chunk * const object;
virtual size_t size_chunk ();
virtual void fill_data_block (char * data_start);
virtual void post_input_processing();
void find_object_for_this_section(); //find the object_chunk from the name
char * ob_name;
private:
friend class Object_Hierarchy_Chunk;
};
// This chunk will normally go in the root as a way of identifiying the hierarchy
class Object_Hierarchy_Name_Chunk : public Chunk
{
public:
Object_Hierarchy_Name_Chunk (Object_Hierarchy_Chunk * parent, const char * hname);
Object_Hierarchy_Name_Chunk (Chunk_With_Children * parent, const char * sdata, size_t /*ssize*/);
~Object_Hierarchy_Name_Chunk();
char * hierarchy_name;
virtual size_t size_chunk ()
{
return(chunk_size = 12 + strlen (hierarchy_name) + 4 - strlen (hierarchy_name)%4);
}
virtual void fill_data_block (char * data_start);
private:
friend class Object_Hierarchy_Chunk;
};
struct Replaced_Shape_Details
{
~Replaced_Shape_Details()
{
if(old_object_name) delete[] old_object_name;
if(new_object_name) delete[] new_object_name;
}
//object name of shape to be replaced
char* old_object_name;
//object that replaces it.
char* new_object_name;
};
#define Avp_ShapeSet_Flag_Female 0x00000001
#define List_Object_Hierarchy_Alternate_Shape_Set_Chunk(parent,list) (parent)->lookup_child("OBHALTSH",list)
class Object_Hierarchy_Alternate_Shape_Set_Chunk : public Chunk
{
public :
Object_Hierarchy_Alternate_Shape_Set_Chunk(Chunk_With_Children* parent,int num,const char* name);
Object_Hierarchy_Alternate_Shape_Set_Chunk(Chunk_With_Children* parent,const char* name);
Object_Hierarchy_Alternate_Shape_Set_Chunk (Chunk_With_Children * parent, const char * data, size_t /*ssize*/);
~Object_Hierarchy_Alternate_Shape_Set_Chunk();
virtual size_t size_chunk();
virtual void fill_data_block (char * data_start);
char* Shape_Set_Name;
int Shape_Set_Num;
List<Replaced_Shape_Details*> Replaced_Shape_List;
int flags;
int spare[3];
private:
};
#define AvP_HColl_Flag_NotRandom 0x00000001
#define List_Hierarchy_Shape_Set_Collection_Chunk(parent,list) (parent)->lookup_child("HSETCOLL",list)
//this chunk hold a list of indeces for shape_set_chunks that should be applied
class Hierarchy_Shape_Set_Collection_Chunk : public Chunk
{
public :
Hierarchy_Shape_Set_Collection_Chunk(Chunk_With_Children* parent,int num,const char* name);
Hierarchy_Shape_Set_Collection_Chunk (Chunk_With_Children * parent, const char * data, size_t /*ssize*/);
~Hierarchy_Shape_Set_Collection_Chunk();
virtual size_t size_chunk();
virtual void fill_data_block (char * data_start);
char* Set_Collection_Name;
int Set_Collection_Num;
List<int> Index_List;
int TypeIndex;
int flags;
};
class Hierarchy_Degradation_Distance_Chunk : public Chunk
{
public :
Hierarchy_Degradation_Distance_Chunk(Chunk_With_Children * parent, const char * data, size_t /*ssize*/);
Hierarchy_Degradation_Distance_Chunk(Chunk_With_Children* parent,int _num_detail_levels);
~Hierarchy_Degradation_Distance_Chunk();
virtual size_t size_chunk();
virtual void fill_data_block (char * data_start);
int num_detail_levels;
int* distance_array;
private:
};
class Hierarchy_Bounding_Box_Chunk :public Chunk
{
public :
Hierarchy_Bounding_Box_Chunk(Chunk_With_Children * parent,const char*data,size_t datasize);
Hierarchy_Bounding_Box_Chunk(Chunk_With_Children * parent)
:Chunk(parent,"HIERBBOX")
{}
virtual void fill_data_block (char * data_start);
virtual size_t size_chunk()
{return chunk_size=12+6*4;}
ChunkVectorInt min;
ChunkVectorInt max;
};
#endif
|