BlenderScene.cpp 38 KB

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