BlenderScene.cpp 36 KB

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