Coverage Report

Created: 2026-06-15 06:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/assimp/code/AssetLib/Blender/BlenderScene.cpp
Line
Count
Source
1
/*
2
Open Asset Import Library (ASSIMP)
3
----------------------------------------------------------------------
4
5
Copyright (c) 2006-2020, ASSIMP Development Team
6
All rights reserved.
7
8
Redistribution and use of this software in source and binary forms,
9
with or without modification, are permitted provided that the
10
following conditions are met:
11
12
* Redistributions of source code must retain the above
13
  copyright notice, this list of conditions and the
14
  following disclaimer.
15
16
* Redistributions in binary form must reproduce the above
17
  copyright notice, this list of conditions and the
18
  following disclaimer in the documentation and/or other
19
  materials provided with the distribution.
20
21
* Neither the name of the ASSIMP team, nor the names of its
22
  contributors may be used to endorse or promote products
23
  derived from this software without specific prior
24
  written permission of the ASSIMP Development Team.
25
26
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
38
----------------------------------------------------------------------
39
*/
40
41
/** @file  BlenderScene.cpp
42
 *  @brief MACHINE GENERATED BY ./scripts/BlenderImporter/genblenddna.py
43
 */
44
45
#ifndef ASSIMP_BUILD_NO_BLEND_IMPORTER
46
47
#include "BlenderScene.h"
48
#include "BlenderCustomData.h"
49
#include "BlenderDNA.h"
50
#include "BlenderSceneGen.h"
51
52
namespace Assimp {
53
namespace Blender {
54
55
//--------------------------------------------------------------------------------
56
template <>
57
void Structure ::Convert<Object>(
58
        Object &dest,
59
48
        const FileDatabase &db) const {
60
61
48
    ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
62
48
    int temp = 0;
63
48
    ReadField<ErrorPolicy_Fail>(temp, "type", db);
64
48
    dest.type = static_cast<Assimp::Blender::Object::Type>(temp);
65
48
    ReadFieldArray2<ErrorPolicy_Warn>(dest.obmat, "obmat", db);
66
48
    ReadFieldArray2<ErrorPolicy_Warn>(dest.parentinv, "parentinv", db);
67
48
    ReadFieldArray<ErrorPolicy_Warn>(dest.parsubstr, "parsubstr", db);
68
48
    {
69
48
        std::shared_ptr<Object> parent;
70
48
        ReadFieldPtr<ErrorPolicy_Warn>(parent, "*parent", db);
71
48
        dest.parent = parent.get();
72
48
    }
73
48
    ReadFieldPtr<ErrorPolicy_Warn>(dest.track, "*track", db);
74
48
    ReadFieldPtr<ErrorPolicy_Warn>(dest.proxy, "*proxy", db);
75
48
    ReadFieldPtr<ErrorPolicy_Warn>(dest.proxy_from, "*proxy_from", db);
76
48
    ReadFieldPtr<ErrorPolicy_Warn>(dest.proxy_group, "*proxy_group", db);
77
48
    ReadFieldPtr<ErrorPolicy_Warn>(dest.dup_group, "*dup_group", db);
78
48
    ReadFieldPtr<ErrorPolicy_Fail>(dest.data, "*data", db);
79
48
    ReadField<ErrorPolicy_Igno>(dest.modifiers, "modifiers", db);
80
81
48
    db.reader->IncPtr(size);
82
48
}
83
84
//--------------------------------------------------------------------------------
85
template <>
86
void Structure ::Convert<Group>(
87
        Group &dest,
88
0
        const FileDatabase &db) const {
89
90
0
    ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
91
0
    ReadField<ErrorPolicy_Igno>(dest.layer, "layer", db);
92
0
    ReadFieldPtr<ErrorPolicy_Igno>(dest.gobject, "*gobject", db);
93
94
0
    db.reader->IncPtr(size);
95
0
}
96
97
//--------------------------------------------------------------------------------
98
template <>
99
void Structure::Convert<CollectionObject>(
100
        CollectionObject &dest,
101
3
        const FileDatabase &db) const {
102
103
3
    ReadFieldPtr<ErrorPolicy_Fail>(dest.next, "*next", db);
104
3
    {
105
3
        std::shared_ptr<Object> ob;
106
3
        ReadFieldPtr<ErrorPolicy_Igno>(ob, "*ob", db);
107
3
        dest.ob = ob.get();
108
3
    }
109
110
3
    db.reader->IncPtr(size);
111
3
}
112
113
//--------------------------------------------------------------------------------
114
template <>
115
void Structure::Convert<CollectionChild>(
116
        CollectionChild &dest,
117
1
        const FileDatabase &db) const {
118
119
1
    ReadFieldPtr<ErrorPolicy_Fail>(dest.prev, "*prev", db);
120
1
    ReadFieldPtr<ErrorPolicy_Fail>(dest.next, "*next", db);
121
1
    ReadFieldPtr<ErrorPolicy_Igno>(dest.collection, "*collection", db);
122
123
1
    db.reader->IncPtr(size);
124
1
}
125
126
//--------------------------------------------------------------------------------
127
template <>
128
void Structure::Convert<Collection>(
129
        Collection &dest,
130
2
        const FileDatabase &db) const {
131
132
2
    ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
133
2
    ReadField<ErrorPolicy_Fail>(dest.gobject, "gobject", db);
134
2
    ReadField<ErrorPolicy_Fail>(dest.children, "children", db);
135
136
2
    db.reader->IncPtr(size);
137
2
}
138
139
//--------------------------------------------------------------------------------
140
template <>
141
void Structure ::Convert<MTex>(
142
        MTex &dest,
143
16
        const FileDatabase &db) const {
144
145
16
    int temp_short = 0;
146
16
    ReadField<ErrorPolicy_Igno>(temp_short, "mapto", db);
147
16
    dest.mapto = static_cast<Assimp::Blender::MTex::MapType>(temp_short);
148
16
    int temp = 0;
149
16
    ReadField<ErrorPolicy_Igno>(temp, "blendtype", db);
150
16
    dest.blendtype = static_cast<Assimp::Blender::MTex::BlendType>(temp);
151
16
    ReadFieldPtr<ErrorPolicy_Igno>(dest.object, "*object", db);
152
16
    ReadFieldPtr<ErrorPolicy_Igno>(dest.tex, "*tex", db);
153
16
    ReadFieldArray<ErrorPolicy_Igno>(dest.uvname, "uvname", db);
154
16
    ReadField<ErrorPolicy_Igno>(temp, "projx", db);
155
16
    dest.projx = static_cast<Assimp::Blender::MTex::Projection>(temp);
156
16
    ReadField<ErrorPolicy_Igno>(temp, "projy", db);
157
16
    dest.projy = static_cast<Assimp::Blender::MTex::Projection>(temp);
158
16
    ReadField<ErrorPolicy_Igno>(temp, "projz", db);
159
16
    dest.projz = static_cast<Assimp::Blender::MTex::Projection>(temp);
160
16
    ReadField<ErrorPolicy_Igno>(dest.mapping, "mapping", db);
161
16
    ReadFieldArray<ErrorPolicy_Igno>(dest.ofs, "ofs", db);
162
16
    ReadFieldArray<ErrorPolicy_Igno>(dest.size, "size", db);
163
16
    ReadField<ErrorPolicy_Igno>(dest.rot, "rot", db);
164
16
    ReadField<ErrorPolicy_Igno>(dest.texflag, "texflag", db);
165
16
    ReadField<ErrorPolicy_Igno>(dest.colormodel, "colormodel", db);
166
16
    ReadField<ErrorPolicy_Igno>(dest.pmapto, "pmapto", db);
167
16
    ReadField<ErrorPolicy_Igno>(dest.pmaptoneg, "pmaptoneg", db);
168
16
    ReadField<ErrorPolicy_Warn>(dest.r, "r", db);
169
16
    ReadField<ErrorPolicy_Warn>(dest.g, "g", db);
170
16
    ReadField<ErrorPolicy_Warn>(dest.b, "b", db);
171
16
    ReadField<ErrorPolicy_Warn>(dest.k, "k", db);
172
16
    ReadField<ErrorPolicy_Igno>(dest.colspecfac, "colspecfac", db);
173
16
    ReadField<ErrorPolicy_Igno>(dest.mirrfac, "mirrfac", db);
174
16
    ReadField<ErrorPolicy_Igno>(dest.alphafac, "alphafac", db);
175
16
    ReadField<ErrorPolicy_Igno>(dest.difffac, "difffac", db);
176
16
    ReadField<ErrorPolicy_Igno>(dest.specfac, "specfac", db);
177
16
    ReadField<ErrorPolicy_Igno>(dest.emitfac, "emitfac", db);
178
16
    ReadField<ErrorPolicy_Igno>(dest.hardfac, "hardfac", db);
179
16
    ReadField<ErrorPolicy_Igno>(dest.norfac, "norfac", db);
180
181
16
    db.reader->IncPtr(size);
182
16
}
183
184
//--------------------------------------------------------------------------------
185
template <>
186
void Structure ::Convert<TFace>(
187
        TFace &dest,
188
0
        const FileDatabase &db) const {
189
190
0
    ReadFieldArray2<ErrorPolicy_Fail>(dest.uv, "uv", db);
191
0
    ReadFieldArray<ErrorPolicy_Fail>(dest.col, "col", db);
192
0
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
193
0
    ReadField<ErrorPolicy_Igno>(dest.mode, "mode", db);
194
0
    ReadField<ErrorPolicy_Igno>(dest.tile, "tile", db);
195
0
    ReadField<ErrorPolicy_Igno>(dest.unwrap, "unwrap", db);
196
197
0
    db.reader->IncPtr(size);
198
0
}
199
200
//--------------------------------------------------------------------------------
201
template <>
202
void Structure ::Convert<SubsurfModifierData>(
203
        SubsurfModifierData &dest,
204
2
        const FileDatabase &db) const {
205
206
2
    ReadField<ErrorPolicy_Fail>(dest.modifier, "modifier", db);
207
2
    ReadField<ErrorPolicy_Warn>(dest.subdivType, "subdivType", db);
208
2
    ReadField<ErrorPolicy_Fail>(dest.levels, "levels", db);
209
2
    ReadField<ErrorPolicy_Igno>(dest.renderLevels, "renderLevels", db);
210
2
    ReadField<ErrorPolicy_Igno>(dest.flags, "flags", db);
211
212
2
    db.reader->IncPtr(size);
213
2
}
214
215
//--------------------------------------------------------------------------------
216
template <>
217
void Structure ::Convert<MFace>(
218
        MFace &dest,
219
5.82k
        const FileDatabase &db) const {
220
221
5.82k
    ReadField<ErrorPolicy_Fail>(dest.v1, "v1", db);
222
5.82k
    ReadField<ErrorPolicy_Fail>(dest.v2, "v2", db);
223
5.82k
    ReadField<ErrorPolicy_Fail>(dest.v3, "v3", db);
224
5.82k
    ReadField<ErrorPolicy_Fail>(dest.v4, "v4", db);
225
5.82k
    ReadField<ErrorPolicy_Fail>(dest.mat_nr, "mat_nr", db);
226
5.82k
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
227
228
5.82k
    db.reader->IncPtr(size);
229
5.82k
}
230
231
//--------------------------------------------------------------------------------
232
template <>
233
void Structure ::Convert<Lamp>(
234
        Lamp &dest,
235
15
        const FileDatabase &db) const {
236
237
15
    ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
238
15
    int temp = 0;
239
15
    ReadField<ErrorPolicy_Fail>(temp, "type", db);
240
15
    dest.type = static_cast<Assimp::Blender::Lamp::Type>(temp);
241
15
    ReadField<ErrorPolicy_Igno>(dest.flags, "flag", db);
242
15
    ReadField<ErrorPolicy_Igno>(dest.colormodel, "colormodel", db);
243
15
    ReadField<ErrorPolicy_Igno>(dest.totex, "totex", db);
244
15
    ReadField<ErrorPolicy_Warn>(dest.r, "r", db);
245
15
    ReadField<ErrorPolicy_Warn>(dest.g, "g", db);
246
15
    ReadField<ErrorPolicy_Warn>(dest.b, "b", db);
247
15
    ReadField<ErrorPolicy_Warn>(dest.k, "k", db);
248
15
    ReadField<ErrorPolicy_Igno>(dest.energy, "energy", db);
249
15
    ReadField<ErrorPolicy_Warn>(dest.dist, "dist", db);
250
15
    ReadField<ErrorPolicy_Igno>(dest.spotsize, "spotsize", db);
251
15
    ReadField<ErrorPolicy_Igno>(dest.spotblend, "spotblend", db);
252
15
    ReadField<ErrorPolicy_Warn>(dest.constant_coefficient, "coeff_const", db);
253
15
    ReadField<ErrorPolicy_Warn>(dest.linear_coefficient, "coeff_lin", db);
254
15
    ReadField<ErrorPolicy_Warn>(dest.quadratic_coefficient, "coeff_quad", db);
255
15
    ReadField<ErrorPolicy_Igno>(dest.att1, "att1", db);
256
15
    ReadField<ErrorPolicy_Igno>(dest.att2, "att2", db);
257
15
    ReadField<ErrorPolicy_Igno>(temp, "falloff_type", db);
258
15
    dest.falloff_type = static_cast<Assimp::Blender::Lamp::FalloffType>(temp);
259
15
    ReadField<ErrorPolicy_Igno>(dest.sun_brightness, "sun_brightness", db);
260
15
    ReadField<ErrorPolicy_Igno>(dest.area_size, "area_size", db);
261
15
    ReadField<ErrorPolicy_Igno>(dest.area_sizey, "area_sizey", db);
262
15
    ReadField<ErrorPolicy_Igno>(dest.area_sizez, "area_sizez", db);
263
15
    ReadField<ErrorPolicy_Igno>(dest.area_shape, "area_shape", db);
264
265
15
    db.reader->IncPtr(size);
266
15
}
267
268
//--------------------------------------------------------------------------------
269
template <>
270
void Structure ::Convert<MDeformWeight>(
271
        MDeformWeight &dest,
272
0
        const FileDatabase &db) const {
273
274
0
    ReadField<ErrorPolicy_Fail>(dest.def_nr, "def_nr", db);
275
0
    ReadField<ErrorPolicy_Fail>(dest.weight, "weight", db);
276
277
0
    db.reader->IncPtr(size);
278
0
}
279
280
//--------------------------------------------------------------------------------
281
template <>
282
void Structure ::Convert<PackedFile>(
283
        PackedFile &dest,
284
0
        const FileDatabase &db) const {
285
286
0
    ReadField<ErrorPolicy_Warn>(dest.size, "size", db);
287
0
    ReadField<ErrorPolicy_Warn>(dest.seek, "seek", db);
288
0
    ReadFieldPtr<ErrorPolicy_Warn>(dest.data, "*data", db);
289
290
0
    db.reader->IncPtr(size);
291
0
}
292
293
//--------------------------------------------------------------------------------
294
template <>
295
void Structure ::Convert<Base>(
296
        Base &dest,
297
18
        const FileDatabase &db) const {
298
    // note: as per https://github.com/assimp/assimp/issues/128,
299
    // reading the Object linked list recursively is prone to stack overflow.
300
    // This structure converter is therefore a hand-written exception that
301
    // does it iteratively.
302
303
18
    const int initial_pos = db.reader->GetCurrentPos();
304
305
18
    std::pair<Base *, int> todo = std::make_pair(&dest, initial_pos);
306
42
    for (;;) {
307
308
42
        Base &cur_dest = *todo.first;
309
42
        db.reader->SetCurrentPos(todo.second);
310
311
        // we know that this is a double-linked, circular list which we never
312
        // traverse backwards, so don't bother resolving the back links.
313
42
        cur_dest.prev = nullptr;
314
315
42
        ReadFieldPtr<ErrorPolicy_Warn>(cur_dest.object, "*object", db);
316
317
        // the return value of ReadFieldPtr indicates whether the object
318
        // was already cached. In this case, we don't need to resolve
319
        // it again.
320
42
        if (!ReadFieldPtr<ErrorPolicy_Warn>(cur_dest.next, "*next", db, true) && cur_dest.next) {
321
24
            todo = std::make_pair(&*cur_dest.next, db.reader->GetCurrentPos());
322
24
            continue;
323
24
        }
324
18
        break;
325
42
    }
326
327
18
    db.reader->SetCurrentPos(initial_pos + size);
328
18
}
329
330
//--------------------------------------------------------------------------------
331
template <>
332
void Structure ::Convert<MTFace>(
333
        MTFace &dest,
334
0
        const FileDatabase &db) const {
335
336
0
    ReadFieldArray2<ErrorPolicy_Fail>(dest.uv, "uv", db);
337
0
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
338
0
    ReadField<ErrorPolicy_Igno>(dest.mode, "mode", db);
339
0
    ReadField<ErrorPolicy_Igno>(dest.tile, "tile", db);
340
0
    ReadField<ErrorPolicy_Igno>(dest.unwrap, "unwrap", db);
341
342
0
    db.reader->IncPtr(size);
343
0
}
344
345
//--------------------------------------------------------------------------------
346
template <>
347
void Structure ::Convert<Material>(
348
        Material &dest,
349
16
        const FileDatabase &db) const {
350
16
    ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
351
16
    ReadField<ErrorPolicy_Warn>(dest.r, "r", db);
352
16
    ReadField<ErrorPolicy_Warn>(dest.g, "g", db);
353
16
    ReadField<ErrorPolicy_Warn>(dest.b, "b", db);
354
16
    ReadField<ErrorPolicy_Warn>(dest.specr, "specr", db);
355
16
    ReadField<ErrorPolicy_Warn>(dest.specg, "specg", db);
356
16
    ReadField<ErrorPolicy_Warn>(dest.specb, "specb", db);
357
16
    ReadField<ErrorPolicy_Igno>(dest.har, "har", db);
358
16
    ReadField<ErrorPolicy_Warn>(dest.ambr, "ambr", db);
359
16
    ReadField<ErrorPolicy_Warn>(dest.ambg, "ambg", db);
360
16
    ReadField<ErrorPolicy_Warn>(dest.ambb, "ambb", db);
361
16
    ReadField<ErrorPolicy_Igno>(dest.mirr, "mirr", db);
362
16
    ReadField<ErrorPolicy_Igno>(dest.mirg, "mirg", db);
363
16
    ReadField<ErrorPolicy_Igno>(dest.mirb, "mirb", db);
364
16
    ReadField<ErrorPolicy_Warn>(dest.emit, "emit", db);
365
16
    ReadField<ErrorPolicy_Igno>(dest.ray_mirror, "ray_mirror", db);
366
16
    ReadField<ErrorPolicy_Warn>(dest.alpha, "alpha", db);
367
16
    ReadField<ErrorPolicy_Igno>(dest.ref, "ref", db);
368
16
    ReadField<ErrorPolicy_Igno>(dest.translucency, "translucency", db);
369
16
    ReadField<ErrorPolicy_Igno>(dest.mode, "mode", db);
370
16
    ReadField<ErrorPolicy_Igno>(dest.roughness, "roughness", db);
371
16
    ReadField<ErrorPolicy_Igno>(dest.darkness, "darkness", db);
372
16
    ReadField<ErrorPolicy_Igno>(dest.refrac, "refrac", db);
373
16
    ReadFieldPtr<ErrorPolicy_Igno>(dest.group, "*group", db);
374
16
    ReadField<ErrorPolicy_Warn>(dest.diff_shader, "diff_shader", db);
375
16
    ReadField<ErrorPolicy_Warn>(dest.spec_shader, "spec_shader", db);
376
16
    ReadFieldPtr<ErrorPolicy_Igno>(dest.mtex, "*mtex", db);
377
378
16
    ReadField<ErrorPolicy_Igno>(dest.amb, "amb", db);
379
16
    ReadField<ErrorPolicy_Igno>(dest.ang, "ang", db);
380
16
    ReadField<ErrorPolicy_Igno>(dest.spectra, "spectra", db);
381
16
    ReadField<ErrorPolicy_Igno>(dest.spec, "spec", db);
382
16
    ReadField<ErrorPolicy_Igno>(dest.zoffs, "zoffs", db);
383
16
    ReadField<ErrorPolicy_Igno>(dest.add, "add", db);
384
16
    ReadField<ErrorPolicy_Igno>(dest.fresnel_mir, "fresnel_mir", db);
385
16
    ReadField<ErrorPolicy_Igno>(dest.fresnel_mir_i, "fresnel_mir_i", db);
386
16
    ReadField<ErrorPolicy_Igno>(dest.fresnel_tra, "fresnel_tra", db);
387
16
    ReadField<ErrorPolicy_Igno>(dest.fresnel_tra_i, "fresnel_tra_i", db);
388
16
    ReadField<ErrorPolicy_Igno>(dest.filter, "filter", db);
389
16
    ReadField<ErrorPolicy_Igno>(dest.tx_limit, "tx_limit", db);
390
16
    ReadField<ErrorPolicy_Igno>(dest.tx_falloff, "tx_falloff", db);
391
16
    ReadField<ErrorPolicy_Igno>(dest.gloss_mir, "gloss_mir", db);
392
16
    ReadField<ErrorPolicy_Igno>(dest.gloss_tra, "gloss_tra", db);
393
16
    ReadField<ErrorPolicy_Igno>(dest.adapt_thresh_mir, "adapt_thresh_mir", db);
394
16
    ReadField<ErrorPolicy_Igno>(dest.adapt_thresh_tra, "adapt_thresh_tra", db);
395
16
    ReadField<ErrorPolicy_Igno>(dest.aniso_gloss_mir, "aniso_gloss_mir", db);
396
16
    ReadField<ErrorPolicy_Igno>(dest.dist_mir, "dist_mir", db);
397
16
    ReadField<ErrorPolicy_Igno>(dest.hasize, "hasize", db);
398
16
    ReadField<ErrorPolicy_Igno>(dest.flaresize, "flaresize", db);
399
16
    ReadField<ErrorPolicy_Igno>(dest.subsize, "subsize", db);
400
16
    ReadField<ErrorPolicy_Igno>(dest.flareboost, "flareboost", db);
401
16
    ReadField<ErrorPolicy_Igno>(dest.strand_sta, "strand_sta", db);
402
16
    ReadField<ErrorPolicy_Igno>(dest.strand_end, "strand_end", db);
403
16
    ReadField<ErrorPolicy_Igno>(dest.strand_ease, "strand_ease", db);
404
16
    ReadField<ErrorPolicy_Igno>(dest.strand_surfnor, "strand_surfnor", db);
405
16
    ReadField<ErrorPolicy_Igno>(dest.strand_min, "strand_min", db);
406
16
    ReadField<ErrorPolicy_Igno>(dest.strand_widthfade, "strand_widthfade", db);
407
16
    ReadField<ErrorPolicy_Igno>(dest.sbias, "sbias", db);
408
16
    ReadField<ErrorPolicy_Igno>(dest.lbias, "lbias", db);
409
16
    ReadField<ErrorPolicy_Igno>(dest.shad_alpha, "shad_alpha", db);
410
16
    ReadField<ErrorPolicy_Igno>(dest.param, "param", db);
411
16
    ReadField<ErrorPolicy_Igno>(dest.rms, "rms", db);
412
16
    ReadField<ErrorPolicy_Igno>(dest.rampfac_col, "rampfac_col", db);
413
16
    ReadField<ErrorPolicy_Igno>(dest.rampfac_spec, "rampfac_spec", db);
414
16
    ReadField<ErrorPolicy_Igno>(dest.friction, "friction", db);
415
16
    ReadField<ErrorPolicy_Igno>(dest.fh, "fh", db);
416
16
    ReadField<ErrorPolicy_Igno>(dest.reflect, "reflect", db);
417
16
    ReadField<ErrorPolicy_Igno>(dest.fhdist, "fhdist", db);
418
16
    ReadField<ErrorPolicy_Igno>(dest.xyfrict, "xyfrict", db);
419
16
    ReadField<ErrorPolicy_Igno>(dest.sss_radius, "sss_radius", db);
420
16
    ReadField<ErrorPolicy_Igno>(dest.sss_col, "sss_col", db);
421
16
    ReadField<ErrorPolicy_Igno>(dest.sss_error, "sss_error", db);
422
16
    ReadField<ErrorPolicy_Igno>(dest.sss_scale, "sss_scale", db);
423
16
    ReadField<ErrorPolicy_Igno>(dest.sss_ior, "sss_ior", db);
424
16
    ReadField<ErrorPolicy_Igno>(dest.sss_colfac, "sss_colfac", db);
425
16
    ReadField<ErrorPolicy_Igno>(dest.sss_texfac, "sss_texfac", db);
426
16
    ReadField<ErrorPolicy_Igno>(dest.sss_front, "sss_front", db);
427
16
    ReadField<ErrorPolicy_Igno>(dest.sss_back, "sss_back", db);
428
429
16
    ReadField<ErrorPolicy_Igno>(dest.material_type, "material_type", db);
430
16
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
431
16
    ReadField<ErrorPolicy_Igno>(dest.ray_depth, "ray_depth", db);
432
16
    ReadField<ErrorPolicy_Igno>(dest.ray_depth_tra, "ray_depth_tra", db);
433
16
    ReadField<ErrorPolicy_Igno>(dest.samp_gloss_mir, "samp_gloss_mir", db);
434
16
    ReadField<ErrorPolicy_Igno>(dest.samp_gloss_tra, "samp_gloss_tra", db);
435
16
    ReadField<ErrorPolicy_Igno>(dest.fadeto_mir, "fadeto_mir", db);
436
16
    ReadField<ErrorPolicy_Igno>(dest.shade_flag, "shade_flag", db);
437
16
    ReadField<ErrorPolicy_Igno>(dest.flarec, "flarec", db);
438
16
    ReadField<ErrorPolicy_Igno>(dest.starc, "starc", db);
439
16
    ReadField<ErrorPolicy_Igno>(dest.linec, "linec", db);
440
16
    ReadField<ErrorPolicy_Igno>(dest.ringc, "ringc", db);
441
16
    ReadField<ErrorPolicy_Igno>(dest.pr_lamp, "pr_lamp", db);
442
16
    ReadField<ErrorPolicy_Igno>(dest.pr_texture, "pr_texture", db);
443
16
    ReadField<ErrorPolicy_Igno>(dest.ml_flag, "ml_flag", db);
444
16
    ReadField<ErrorPolicy_Igno>(dest.diff_shader, "diff_shader", db);
445
16
    ReadField<ErrorPolicy_Igno>(dest.spec_shader, "spec_shader", db);
446
16
    ReadField<ErrorPolicy_Igno>(dest.texco, "texco", db);
447
16
    ReadField<ErrorPolicy_Igno>(dest.mapto, "mapto", db);
448
16
    ReadField<ErrorPolicy_Igno>(dest.ramp_show, "ramp_show", db);
449
16
    ReadField<ErrorPolicy_Igno>(dest.pad3, "pad3", db);
450
16
    ReadField<ErrorPolicy_Igno>(dest.dynamode, "dynamode", db);
451
16
    ReadField<ErrorPolicy_Igno>(dest.pad2, "pad2", db);
452
16
    ReadField<ErrorPolicy_Igno>(dest.sss_flag, "sss_flag", db);
453
16
    ReadField<ErrorPolicy_Igno>(dest.sss_preset, "sss_preset", db);
454
16
    ReadField<ErrorPolicy_Igno>(dest.shadowonly_flag, "shadowonly_flag", db);
455
16
    ReadField<ErrorPolicy_Igno>(dest.index, "index", db);
456
16
    ReadField<ErrorPolicy_Igno>(dest.vcol_alpha, "vcol_alpha", db);
457
16
    ReadField<ErrorPolicy_Igno>(dest.pad4, "pad4", db);
458
459
16
    ReadField<ErrorPolicy_Igno>(dest.seed1, "seed1", db);
460
16
    ReadField<ErrorPolicy_Igno>(dest.seed2, "seed2", db);
461
462
16
    db.reader->IncPtr(size);
463
16
}
464
465
//--------------------------------------------------------------------------------
466
template <>
467
void Structure ::Convert<MTexPoly>(
468
        MTexPoly &dest,
469
91
        const FileDatabase &db) const {
470
471
91
    {
472
91
        std::shared_ptr<Image> tpage;
473
91
        ReadFieldPtr<ErrorPolicy_Igno>(tpage, "*tpage", db);
474
91
        dest.tpage = tpage.get();
475
91
    }
476
91
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
477
91
    ReadField<ErrorPolicy_Igno>(dest.transp, "transp", db);
478
91
    ReadField<ErrorPolicy_Igno>(dest.mode, "mode", db);
479
91
    ReadField<ErrorPolicy_Igno>(dest.tile, "tile", db);
480
91
    ReadField<ErrorPolicy_Igno>(dest.pad, "pad", db);
481
482
91
    db.reader->IncPtr(size);
483
91
}
484
485
//--------------------------------------------------------------------------------
486
template <>
487
void Structure ::Convert<Mesh>(
488
        Mesh &dest,
489
17
        const FileDatabase &db) const {
490
491
17
    ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
492
17
    ReadField<ErrorPolicy_Fail>(dest.totface, "totface", db);
493
17
    ReadField<ErrorPolicy_Fail>(dest.totedge, "totedge", db);
494
17
    ReadField<ErrorPolicy_Fail>(dest.totvert, "totvert", db);
495
17
    ReadField<ErrorPolicy_Igno>(dest.totloop, "totloop", db);
496
17
    ReadField<ErrorPolicy_Igno>(dest.totpoly, "totpoly", db);
497
17
    ReadField<ErrorPolicy_Igno>(dest.subdiv, "subdiv", db);
498
17
    ReadField<ErrorPolicy_Igno>(dest.subdivr, "subdivr", db);
499
17
    ReadField<ErrorPolicy_Igno>(dest.subsurftype, "subsurftype", db);
500
17
    ReadField<ErrorPolicy_Igno>(dest.smoothresh, "smoothresh", db);
501
17
    ReadFieldPtr<ErrorPolicy_Fail>(dest.mface, "*mface", db);
502
17
    ReadFieldPtr<ErrorPolicy_Igno>(dest.mtface, "*mtface", db);
503
17
    ReadFieldPtr<ErrorPolicy_Igno>(dest.tface, "*tface", db);
504
17
    ReadFieldPtr<ErrorPolicy_Fail>(dest.mvert, "*mvert", db);
505
17
    ReadFieldPtr<ErrorPolicy_Warn>(dest.medge, "*medge", db);
506
17
    ReadFieldPtr<ErrorPolicy_Igno>(dest.mloop, "*mloop", db);
507
17
    ReadFieldPtr<ErrorPolicy_Igno>(dest.mloopuv, "*mloopuv", db);
508
17
    ReadFieldPtr<ErrorPolicy_Igno>(dest.mloopcol, "*mloopcol", db);
509
17
    ReadFieldPtr<ErrorPolicy_Igno>(dest.mpoly, "*mpoly", db);
510
17
    ReadFieldPtr<ErrorPolicy_Igno>(dest.mtpoly, "*mtpoly", db);
511
17
    ReadFieldPtr<ErrorPolicy_Igno>(dest.dvert, "*dvert", db);
512
17
    ReadFieldPtr<ErrorPolicy_Igno>(dest.mcol, "*mcol", db);
513
17
    ReadFieldPtr<ErrorPolicy_Fail>(dest.mat, "**mat", db);
514
515
17
    ReadField<ErrorPolicy_Igno>(dest.vdata, "vdata", db);
516
17
    ReadField<ErrorPolicy_Igno>(dest.edata, "edata", db);
517
17
    ReadField<ErrorPolicy_Igno>(dest.fdata, "fdata", db);
518
17
    ReadField<ErrorPolicy_Igno>(dest.pdata, "pdata", db);
519
17
    ReadField<ErrorPolicy_Warn>(dest.ldata, "ldata", db);
520
521
17
    db.reader->IncPtr(size);
522
17
}
523
524
//--------------------------------------------------------------------------------
525
template <>
526
void Structure ::Convert<MDeformVert>(
527
        MDeformVert &dest,
528
0
        const FileDatabase &db) const {
529
530
0
    ReadFieldPtr<ErrorPolicy_Warn>(dest.dw, "*dw", db);
531
0
    ReadField<ErrorPolicy_Igno>(dest.totweight, "totweight", db);
532
533
0
    db.reader->IncPtr(size);
534
0
}
535
536
//--------------------------------------------------------------------------------
537
template <>
538
void Structure ::Convert<World>(
539
        World &dest,
540
16
        const FileDatabase &db) const {
541
542
16
    ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
543
544
16
    db.reader->IncPtr(size);
545
16
}
546
547
//--------------------------------------------------------------------------------
548
template <>
549
void Structure ::Convert<MLoopCol>(
550
        MLoopCol &dest,
551
0
        const FileDatabase &db) const {
552
553
0
    ReadField<ErrorPolicy_Igno>(dest.r, "r", db);
554
0
    ReadField<ErrorPolicy_Igno>(dest.g, "g", db);
555
0
    ReadField<ErrorPolicy_Igno>(dest.b, "b", db);
556
0
    ReadField<ErrorPolicy_Igno>(dest.a, "a", db);
557
558
0
    db.reader->IncPtr(size);
559
0
}
560
561
//--------------------------------------------------------------------------------
562
template <>
563
void Structure ::Convert<MVert>(
564
        MVert &dest,
565
7.34k
        const FileDatabase &db) const {
566
567
7.34k
    ReadFieldArray<ErrorPolicy_Fail>(dest.co, "co", db);
568
7.34k
    ReadFieldArray<ErrorPolicy_Warn>(dest.no, "no", db);
569
7.34k
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
570
    //ReadField<ErrorPolicy_Warn>(dest.mat_nr,"mat_nr",db);
571
7.34k
    ReadField<ErrorPolicy_Igno>(dest.bweight, "bweight", db);
572
573
7.34k
    db.reader->IncPtr(size);
574
7.34k
}
575
576
//--------------------------------------------------------------------------------
577
template <>
578
void Structure ::Convert<MEdge>(
579
        MEdge &dest,
580
14.4k
        const FileDatabase &db) const {
581
582
14.4k
    ReadField<ErrorPolicy_Fail>(dest.v1, "v1", db);
583
14.4k
    ReadField<ErrorPolicy_Fail>(dest.v2, "v2", db);
584
14.4k
    ReadField<ErrorPolicy_Igno>(dest.crease, "crease", db);
585
14.4k
    ReadField<ErrorPolicy_Igno>(dest.bweight, "bweight", db);
586
14.4k
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
587
588
14.4k
    db.reader->IncPtr(size);
589
14.4k
}
590
591
//--------------------------------------------------------------------------------
592
template <>
593
void Structure ::Convert<MLoopUV>(
594
        MLoopUV &dest,
595
324
        const FileDatabase &db) const {
596
597
324
    ReadFieldArray<ErrorPolicy_Igno>(dest.uv, "uv", db);
598
324
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
599
600
324
    db.reader->IncPtr(size);
601
324
}
602
603
//--------------------------------------------------------------------------------
604
template <>
605
void Structure ::Convert<GroupObject>(
606
        GroupObject &dest,
607
0
        const FileDatabase &db) const {
608
609
0
    ReadFieldPtr<ErrorPolicy_Fail>(dest.prev, "*prev", db);
610
0
    ReadFieldPtr<ErrorPolicy_Fail>(dest.next, "*next", db);
611
0
    ReadFieldPtr<ErrorPolicy_Igno>(dest.ob, "*ob", db);
612
613
0
    db.reader->IncPtr(size);
614
0
}
615
616
//--------------------------------------------------------------------------------
617
template <>
618
void Structure ::Convert<ListBase>(
619
        ListBase &dest,
620
62
        const FileDatabase &db) const {
621
622
62
    ReadFieldPtr<ErrorPolicy_Igno>(dest.first, "*first", db);
623
62
    std::shared_ptr<ElemBase> last;
624
62
    ReadFieldPtr<ErrorPolicy_Igno>(last, "*last", db);
625
62
    dest.last = last;
626
627
62
    db.reader->IncPtr(size);
628
62
}
629
630
//--------------------------------------------------------------------------------
631
template <>
632
void Structure ::Convert<MLoop>(
633
        MLoop &dest,
634
5.40k
        const FileDatabase &db) const {
635
636
5.40k
    ReadField<ErrorPolicy_Igno>(dest.v, "v", db);
637
5.40k
    ReadField<ErrorPolicy_Igno>(dest.e, "e", db);
638
639
5.40k
    db.reader->IncPtr(size);
640
5.40k
}
641
642
//--------------------------------------------------------------------------------
643
template <>
644
void Structure ::Convert<ModifierData>(
645
        ModifierData &dest,
646
2
        const FileDatabase &db) const {
647
648
2
    ReadFieldPtr<ErrorPolicy_Warn>(dest.next, "*next", db);
649
2
    std::shared_ptr<ElemBase> prev;
650
2
    ReadFieldPtr<ErrorPolicy_Warn>(prev, "*prev", db);
651
2
    dest.prev = prev;
652
2
    ReadField<ErrorPolicy_Igno>(dest.type, "type", db);
653
2
    ReadField<ErrorPolicy_Igno>(dest.mode, "mode", db);
654
2
    ReadFieldArray<ErrorPolicy_Igno>(dest.name, "name", db);
655
656
2
    db.reader->IncPtr(size);
657
2
}
658
659
//--------------------------------------------------------------------------------
660
template <>
661
void Structure ::Convert<ID>(
662
        ID &dest,
663
151
        const FileDatabase &db) const {
664
665
151
    ReadFieldArray<ErrorPolicy_Warn>(dest.name, "name", db);
666
151
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
667
668
151
    db.reader->IncPtr(size);
669
151
}
670
671
//--------------------------------------------------------------------------------
672
template <>
673
void Structure ::Convert<MCol>(
674
        MCol &dest,
675
0
        const FileDatabase &db) const {
676
677
0
    ReadField<ErrorPolicy_Fail>(dest.r, "r", db);
678
0
    ReadField<ErrorPolicy_Fail>(dest.g, "g", db);
679
0
    ReadField<ErrorPolicy_Fail>(dest.b, "b", db);
680
0
    ReadField<ErrorPolicy_Fail>(dest.a, "a", db);
681
682
0
    db.reader->IncPtr(size);
683
0
}
684
685
//--------------------------------------------------------------------------------
686
template <>
687
void Structure ::Convert<MPoly>(
688
        MPoly &dest,
689
1.39k
        const FileDatabase &db) const {
690
691
1.39k
    ReadField<ErrorPolicy_Igno>(dest.loopstart, "loopstart", db);
692
1.39k
    ReadField<ErrorPolicy_Igno>(dest.totloop, "totloop", db);
693
1.39k
    ReadField<ErrorPolicy_Igno>(dest.mat_nr, "mat_nr", db);
694
1.39k
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
695
696
1.39k
    db.reader->IncPtr(size);
697
1.39k
}
698
699
//--------------------------------------------------------------------------------
700
template <>
701
void Structure ::Convert<Scene>(
702
        Scene &dest,
703
16
        const FileDatabase &db) const {
704
705
16
    ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
706
16
    ReadFieldPtr<ErrorPolicy_Warn>(dest.camera, "*camera", db);
707
16
    ReadFieldPtr<ErrorPolicy_Warn>(dest.world, "*world", db);
708
16
    ReadFieldPtr<ErrorPolicy_Warn>(dest.basact, "*basact", db);
709
16
    ReadFieldPtr<ErrorPolicy_Warn>(dest.master_collection, "*master_collection", db);
710
16
    ReadField<ErrorPolicy_Igno>(dest.base, "base", db);
711
712
16
    db.reader->IncPtr(size);
713
16
}
714
715
//--------------------------------------------------------------------------------
716
template <>
717
void Structure ::Convert<Library>(
718
        Library &dest,
719
0
        const FileDatabase &db) const {
720
721
0
    ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
722
0
    ReadFieldArray<ErrorPolicy_Warn>(dest.name, "name", db);
723
0
    ReadFieldArray<ErrorPolicy_Fail>(dest.filename, "filename", db);
724
0
    ReadFieldPtr<ErrorPolicy_Warn>(dest.parent, "*parent", db);
725
726
0
    db.reader->IncPtr(size);
727
0
}
728
729
//--------------------------------------------------------------------------------
730
template <>
731
void Structure ::Convert<Tex>(
732
        Tex &dest,
733
16
        const FileDatabase &db) const {
734
16
    short temp_short = 0;
735
16
    ReadField<ErrorPolicy_Igno>(temp_short, "imaflag", db);
736
16
    dest.imaflag = static_cast<Assimp::Blender::Tex::ImageFlags>(temp_short);
737
16
    int temp = 0;
738
16
    ReadField<ErrorPolicy_Fail>(temp, "type", db);
739
16
    dest.type = static_cast<Assimp::Blender::Tex::Type>(temp);
740
16
    ReadFieldPtr<ErrorPolicy_Warn>(dest.ima, "*ima", db);
741
742
16
    db.reader->IncPtr(size);
743
16
}
744
745
//--------------------------------------------------------------------------------
746
template <>
747
void Structure ::Convert<Camera>(
748
        Camera &dest,
749
16
        const FileDatabase &db) const {
750
751
16
    ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
752
16
    int temp = 0;
753
16
    ReadField<ErrorPolicy_Warn>(temp, "type", db);
754
16
    dest.type = static_cast<Assimp::Blender::Camera::Type>(temp);
755
16
    ReadField<ErrorPolicy_Warn>(temp, "flag", db);
756
16
    dest.flag = static_cast<Assimp::Blender::Camera::Type>(temp);
757
16
    ReadField<ErrorPolicy_Warn>(dest.lens, "lens", db);
758
16
    ReadField<ErrorPolicy_Warn>(dest.sensor_x, "sensor_x", db);
759
16
    ReadField<ErrorPolicy_Igno>(dest.clipsta, "clipsta", db);
760
16
    ReadField<ErrorPolicy_Igno>(dest.clipend, "clipend", db);
761
762
16
    db.reader->IncPtr(size);
763
16
}
764
765
//--------------------------------------------------------------------------------
766
template <>
767
void Structure ::Convert<MirrorModifierData>(
768
        MirrorModifierData &dest,
769
0
        const FileDatabase &db) const {
770
771
0
    ReadField<ErrorPolicy_Fail>(dest.modifier, "modifier", db);
772
0
    ReadField<ErrorPolicy_Igno>(dest.axis, "axis", db);
773
0
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
774
0
    ReadField<ErrorPolicy_Igno>(dest.tolerance, "tolerance", db);
775
0
    std::shared_ptr<Object> mirror_ob;
776
0
    ReadFieldPtr<ErrorPolicy_Igno>(mirror_ob, "*mirror_ob", db);
777
0
    dest.mirror_ob = mirror_ob;
778
779
0
    db.reader->IncPtr(size);
780
0
}
781
782
//--------------------------------------------------------------------------------
783
template <>
784
void Structure ::Convert<Image>(
785
        Image &dest,
786
5
        const FileDatabase &db) const {
787
788
5
    ReadField<ErrorPolicy_Fail>(dest.id, "id", db);
789
5
    ReadFieldArray<ErrorPolicy_Warn>(dest.name, "name", db);
790
5
    ReadField<ErrorPolicy_Igno>(dest.ok, "ok", db);
791
5
    ReadField<ErrorPolicy_Igno>(dest.flag, "flag", db);
792
5
    ReadField<ErrorPolicy_Igno>(dest.source, "source", db);
793
5
    ReadField<ErrorPolicy_Igno>(dest.type, "type", db);
794
5
    ReadField<ErrorPolicy_Igno>(dest.pad, "pad", db);
795
5
    ReadField<ErrorPolicy_Igno>(dest.pad1, "pad1", db);
796
5
    ReadField<ErrorPolicy_Igno>(dest.lastframe, "lastframe", db);
797
5
    ReadField<ErrorPolicy_Igno>(dest.tpageflag, "tpageflag", db);
798
5
    ReadField<ErrorPolicy_Igno>(dest.totbind, "totbind", db);
799
5
    ReadField<ErrorPolicy_Igno>(dest.xrep, "xrep", db);
800
5
    ReadField<ErrorPolicy_Igno>(dest.yrep, "yrep", db);
801
5
    ReadField<ErrorPolicy_Igno>(dest.twsta, "twsta", db);
802
5
    ReadField<ErrorPolicy_Igno>(dest.twend, "twend", db);
803
5
    ReadFieldPtr<ErrorPolicy_Igno>(dest.packedfile, "*packedfile", db);
804
5
    ReadField<ErrorPolicy_Igno>(dest.lastupdate, "lastupdate", db);
805
5
    ReadField<ErrorPolicy_Igno>(dest.lastused, "lastused", db);
806
5
    ReadField<ErrorPolicy_Igno>(dest.animspeed, "animspeed", db);
807
5
    ReadField<ErrorPolicy_Igno>(dest.gen_x, "gen_x", db);
808
5
    ReadField<ErrorPolicy_Igno>(dest.gen_y, "gen_y", db);
809
5
    ReadField<ErrorPolicy_Igno>(dest.gen_type, "gen_type", db);
810
811
5
    db.reader->IncPtr(size);
812
5
}
813
814
//--------------------------------------------------------------------------------
815
template <>
816
void Structure::Convert<CustomData>(
817
        CustomData &dest,
818
71
        const FileDatabase &db) const {
819
71
    ReadFieldArray<ErrorPolicy_Warn>(dest.typemap, "typemap", db);
820
71
    ReadField<ErrorPolicy_Warn>(dest.totlayer, "totlayer", db);
821
71
    ReadField<ErrorPolicy_Warn>(dest.maxlayer, "maxlayer", db);
822
71
    ReadField<ErrorPolicy_Warn>(dest.totsize, "totsize", db);
823
71
    ReadFieldPtrVector<ErrorPolicy_Warn>(dest.layers, "*layers", db);
824
825
71
    db.reader->IncPtr(size);
826
71
}
827
828
//--------------------------------------------------------------------------------
829
template <>
830
void Structure::Convert<CustomDataLayer>(
831
        CustomDataLayer &dest,
832
205
        const FileDatabase &db) const {
833
205
    ReadField<ErrorPolicy_Fail>(dest.type, "type", db);
834
205
    ReadField<ErrorPolicy_Fail>(dest.offset, "offset", db);
835
205
    ReadField<ErrorPolicy_Fail>(dest.flag, "flag", db);
836
205
    ReadField<ErrorPolicy_Fail>(dest.active, "active", db);
837
205
    ReadField<ErrorPolicy_Fail>(dest.active_rnd, "active_rnd", db);
838
205
    ReadField<ErrorPolicy_Warn>(dest.active_clone, "active_clone", db);
839
205
    ReadField<ErrorPolicy_Warn>(dest.active_mask, "active_mask", db);
840
205
    ReadField<ErrorPolicy_Warn>(dest.uid, "uid", db);
841
205
    ReadFieldArray<ErrorPolicy_Warn>(dest.name, "name", db);
842
205
    ReadCustomDataPtr<ErrorPolicy_Fail>(dest.data, dest.type, "*data", db);
843
844
205
    db.reader->IncPtr(size);
845
205
}
846
847
//--------------------------------------------------------------------------------
848
16
void DNA::RegisterConverters() {
849
850
16
    converters["Object"] = DNA::FactoryPair(&Structure::Allocate<Object>, &Structure::Convert<Object>);
851
16
    converters["Group"] = DNA::FactoryPair(&Structure::Allocate<Group>, &Structure::Convert<Group>);
852
16
    converters["MTex"] = DNA::FactoryPair(&Structure::Allocate<MTex>, &Structure::Convert<MTex>);
853
16
    converters["TFace"] = DNA::FactoryPair(&Structure::Allocate<TFace>, &Structure::Convert<TFace>);
854
16
    converters["SubsurfModifierData"] = DNA::FactoryPair(&Structure::Allocate<SubsurfModifierData>, &Structure::Convert<SubsurfModifierData>);
855
16
    converters["MFace"] = DNA::FactoryPair(&Structure::Allocate<MFace>, &Structure::Convert<MFace>);
856
16
    converters["Lamp"] = DNA::FactoryPair(&Structure::Allocate<Lamp>, &Structure::Convert<Lamp>);
857
16
    converters["MDeformWeight"] = DNA::FactoryPair(&Structure::Allocate<MDeformWeight>, &Structure::Convert<MDeformWeight>);
858
16
    converters["PackedFile"] = DNA::FactoryPair(&Structure::Allocate<PackedFile>, &Structure::Convert<PackedFile>);
859
16
    converters["Base"] = DNA::FactoryPair(&Structure::Allocate<Base>, &Structure::Convert<Base>);
860
16
    converters["MTFace"] = DNA::FactoryPair(&Structure::Allocate<MTFace>, &Structure::Convert<MTFace>);
861
16
    converters["Material"] = DNA::FactoryPair(&Structure::Allocate<Material>, &Structure::Convert<Material>);
862
16
    converters["MTexPoly"] = DNA::FactoryPair(&Structure::Allocate<MTexPoly>, &Structure::Convert<MTexPoly>);
863
16
    converters["Mesh"] = DNA::FactoryPair(&Structure::Allocate<Mesh>, &Structure::Convert<Mesh>);
864
16
    converters["MDeformVert"] = DNA::FactoryPair(&Structure::Allocate<MDeformVert>, &Structure::Convert<MDeformVert>);
865
16
    converters["World"] = DNA::FactoryPair(&Structure::Allocate<World>, &Structure::Convert<World>);
866
16
    converters["MLoopCol"] = DNA::FactoryPair(&Structure::Allocate<MLoopCol>, &Structure::Convert<MLoopCol>);
867
16
    converters["MVert"] = DNA::FactoryPair(&Structure::Allocate<MVert>, &Structure::Convert<MVert>);
868
16
    converters["MEdge"] = DNA::FactoryPair(&Structure::Allocate<MEdge>, &Structure::Convert<MEdge>);
869
16
    converters["MLoopUV"] = DNA::FactoryPair(&Structure::Allocate<MLoopUV>, &Structure::Convert<MLoopUV>);
870
16
    converters["GroupObject"] = DNA::FactoryPair(&Structure::Allocate<GroupObject>, &Structure::Convert<GroupObject>);
871
16
    converters["ListBase"] = DNA::FactoryPair(&Structure::Allocate<ListBase>, &Structure::Convert<ListBase>);
872
16
    converters["MLoop"] = DNA::FactoryPair(&Structure::Allocate<MLoop>, &Structure::Convert<MLoop>);
873
16
    converters["ModifierData"] = DNA::FactoryPair(&Structure::Allocate<ModifierData>, &Structure::Convert<ModifierData>);
874
16
    converters["ID"] = DNA::FactoryPair(&Structure::Allocate<ID>, &Structure::Convert<ID>);
875
16
    converters["MCol"] = DNA::FactoryPair(&Structure::Allocate<MCol>, &Structure::Convert<MCol>);
876
16
    converters["MPoly"] = DNA::FactoryPair(&Structure::Allocate<MPoly>, &Structure::Convert<MPoly>);
877
16
    converters["Scene"] = DNA::FactoryPair(&Structure::Allocate<Scene>, &Structure::Convert<Scene>);
878
16
    converters["Library"] = DNA::FactoryPair(&Structure::Allocate<Library>, &Structure::Convert<Library>);
879
16
    converters["Tex"] = DNA::FactoryPair(&Structure::Allocate<Tex>, &Structure::Convert<Tex>);
880
16
    converters["Camera"] = DNA::FactoryPair(&Structure::Allocate<Camera>, &Structure::Convert<Camera>);
881
16
    converters["MirrorModifierData"] = DNA::FactoryPair(&Structure::Allocate<MirrorModifierData>, &Structure::Convert<MirrorModifierData>);
882
16
    converters["Image"] = DNA::FactoryPair(&Structure::Allocate<Image>, &Structure::Convert<Image>);
883
16
    converters["CustomData"] = DNA::FactoryPair(&Structure::Allocate<CustomData>, &Structure::Convert<CustomData>);
884
16
    converters["CustomDataLayer"] = DNA::FactoryPair(&Structure::Allocate<CustomDataLayer>, &Structure::Convert<CustomDataLayer>);
885
16
    converters["Collection"] = DNA::FactoryPair(&Structure::Allocate<Collection>, &Structure::Convert<Collection>);
886
16
    converters["CollectionChild"] = DNA::FactoryPair(&Structure::Allocate<CollectionChild>, &Structure::Convert<CollectionChild>);
887
16
    converters["CollectionObject"] = DNA::FactoryPair(&Structure::Allocate<CollectionObject>, &Structure::Convert<CollectionObject>);
888
16
}
889
890
} // namespace Blender
891
} //namespace Assimp
892
893
#endif // ASSIMP_BUILD_NO_BLEND_IMPORTER