vrshoot

diff libs/assimp/BlenderScene.cpp @ 0:b2f14e535253

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 01 Feb 2014 19:58:19 +0200
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/libs/assimp/BlenderScene.cpp	Sat Feb 01 19:58:19 2014 +0200
     1.3 @@ -0,0 +1,694 @@
     1.4 +/*
     1.5 +Open Asset Import Library (ASSIMP)
     1.6 +----------------------------------------------------------------------
     1.7 +
     1.8 +Copyright (c) 2006-2010, ASSIMP Development Team
     1.9 +All rights reserved.
    1.10 +
    1.11 +Redistribution and use of this software in source and binary forms, 
    1.12 +with or without modification, are permitted provided that the 
    1.13 +following conditions are met:
    1.14 +
    1.15 +* Redistributions of source code must retain the above
    1.16 +  copyright notice, this list of conditions and the
    1.17 +  following disclaimer.
    1.18 +
    1.19 +* Redistributions in binary form must reproduce the above
    1.20 +  copyright notice, this list of conditions and the
    1.21 +  following disclaimer in the documentation and/or other
    1.22 +  materials provided with the distribution.
    1.23 +
    1.24 +* Neither the name of the ASSIMP team, nor the names of its
    1.25 +  contributors may be used to endorse or promote products
    1.26 +  derived from this software without specific prior
    1.27 +  written permission of the ASSIMP Development Team.
    1.28 +
    1.29 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    1.30 +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    1.31 +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    1.32 +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    1.33 +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    1.34 +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    1.35 +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    1.36 +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
    1.37 +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    1.38 +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    1.39 +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    1.40 +
    1.41 +----------------------------------------------------------------------
    1.42 +*/
    1.43 +
    1.44 +/** @file  BlenderScene.cpp
    1.45 + *  @brief MACHINE GENERATED BY ./scripts/BlenderImporter/genblenddna.py
    1.46 + */
    1.47 +#include "AssimpPCH.h"
    1.48 +#ifndef AI_BUILD_NO_BLEND_IMPORTER
    1.49 +
    1.50 +#include "BlenderDNA.h"
    1.51 +#include "BlenderScene.h"
    1.52 +#include "BlenderSceneGen.h"
    1.53 +
    1.54 +using namespace Assimp;
    1.55 +using namespace Assimp::Blender;
    1.56 +
    1.57 +//--------------------------------------------------------------------------------
    1.58 +template <> void Structure :: Convert<Object> (
    1.59 +    Object& dest,
    1.60 +    const FileDatabase& db
    1.61 +    ) const
    1.62 +{ 
    1.63 +
    1.64 +    ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
    1.65 +    ReadField<ErrorPolicy_Fail>((int&)dest.type,"type",db);
    1.66 +    ReadFieldArray2<ErrorPolicy_Warn>(dest.obmat,"obmat",db);
    1.67 +    ReadFieldArray2<ErrorPolicy_Warn>(dest.parentinv,"parentinv",db);
    1.68 +    ReadFieldArray<ErrorPolicy_Warn>(dest.parsubstr,"parsubstr",db);
    1.69 +    {
    1.70 +        boost::shared_ptr<Object> parent;
    1.71 +        ReadFieldPtr<ErrorPolicy_Warn>(parent,"*parent",db);
    1.72 +        dest.parent = parent.get();
    1.73 +    }
    1.74 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.track,"*track",db);
    1.75 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.proxy,"*proxy",db);
    1.76 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.proxy_from,"*proxy_from",db);
    1.77 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.proxy_group,"*proxy_group",db);
    1.78 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.dup_group,"*dup_group",db);
    1.79 +    ReadFieldPtr<ErrorPolicy_Fail>(dest.data,"*data",db);
    1.80 +    ReadField<ErrorPolicy_Igno>(dest.modifiers,"modifiers",db);
    1.81 +
    1.82 +	db.reader->IncPtr(size);
    1.83 +}
    1.84 +
    1.85 +//--------------------------------------------------------------------------------
    1.86 +template <> void Structure :: Convert<Group> (
    1.87 +    Group& dest,
    1.88 +    const FileDatabase& db
    1.89 +    ) const
    1.90 +{ 
    1.91 +
    1.92 +    ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
    1.93 +    ReadField<ErrorPolicy_Igno>(dest.layer,"layer",db);
    1.94 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.gobject,"*gobject",db);
    1.95 +
    1.96 +	db.reader->IncPtr(size);
    1.97 +}
    1.98 +
    1.99 +//--------------------------------------------------------------------------------
   1.100 +template <> void Structure :: Convert<MTex> (
   1.101 +    MTex& dest,
   1.102 +    const FileDatabase& db
   1.103 +    ) const
   1.104 +{ 
   1.105 +
   1.106 +    ReadField<ErrorPolicy_Igno>((int&)dest.blendtype,"blendtype",db);
   1.107 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.object,"*object",db);
   1.108 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.tex,"*tex",db);
   1.109 +    ReadFieldArray<ErrorPolicy_Igno>(dest.uvname,"uvname",db);
   1.110 +    ReadField<ErrorPolicy_Igno>((int&)dest.projx,"projx",db);
   1.111 +    ReadField<ErrorPolicy_Igno>((int&)dest.projy,"projy",db);
   1.112 +    ReadField<ErrorPolicy_Igno>((int&)dest.projz,"projz",db);
   1.113 +    ReadField<ErrorPolicy_Igno>(dest.mapping,"mapping",db);
   1.114 +    ReadFieldArray<ErrorPolicy_Igno>(dest.ofs,"ofs",db);
   1.115 +    ReadFieldArray<ErrorPolicy_Igno>(dest.size,"size",db);
   1.116 +    ReadField<ErrorPolicy_Igno>(dest.rot,"rot",db);
   1.117 +    ReadField<ErrorPolicy_Igno>(dest.texflag,"texflag",db);
   1.118 +    ReadField<ErrorPolicy_Igno>(dest.colormodel,"colormodel",db);
   1.119 +    ReadField<ErrorPolicy_Igno>(dest.pmapto,"pmapto",db);
   1.120 +    ReadField<ErrorPolicy_Igno>(dest.pmaptoneg,"pmaptoneg",db);
   1.121 +    ReadField<ErrorPolicy_Warn>(dest.r,"r",db);
   1.122 +    ReadField<ErrorPolicy_Warn>(dest.g,"g",db);
   1.123 +    ReadField<ErrorPolicy_Warn>(dest.b,"b",db);
   1.124 +    ReadField<ErrorPolicy_Warn>(dest.k,"k",db);
   1.125 +    ReadField<ErrorPolicy_Igno>(dest.colspecfac,"colspecfac",db);
   1.126 +    ReadField<ErrorPolicy_Igno>(dest.mirrfac,"mirrfac",db);
   1.127 +    ReadField<ErrorPolicy_Igno>(dest.alphafac,"alphafac",db);
   1.128 +    ReadField<ErrorPolicy_Igno>(dest.difffac,"difffac",db);
   1.129 +    ReadField<ErrorPolicy_Igno>(dest.specfac,"specfac",db);
   1.130 +    ReadField<ErrorPolicy_Igno>(dest.emitfac,"emitfac",db);
   1.131 +    ReadField<ErrorPolicy_Igno>(dest.hardfac,"hardfac",db);
   1.132 +
   1.133 +	db.reader->IncPtr(size);
   1.134 +}
   1.135 +
   1.136 +//--------------------------------------------------------------------------------
   1.137 +template <> void Structure :: Convert<TFace> (
   1.138 +    TFace& dest,
   1.139 +    const FileDatabase& db
   1.140 +    ) const
   1.141 +{ 
   1.142 +
   1.143 +    ReadFieldArray2<ErrorPolicy_Fail>(dest.uv,"uv",db);
   1.144 +    ReadFieldArray<ErrorPolicy_Fail>(dest.col,"col",db);
   1.145 +    ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
   1.146 +    ReadField<ErrorPolicy_Igno>(dest.mode,"mode",db);
   1.147 +    ReadField<ErrorPolicy_Igno>(dest.tile,"tile",db);
   1.148 +    ReadField<ErrorPolicy_Igno>(dest.unwrap,"unwrap",db);
   1.149 +
   1.150 +	db.reader->IncPtr(size);
   1.151 +}
   1.152 +
   1.153 +//--------------------------------------------------------------------------------
   1.154 +template <> void Structure :: Convert<SubsurfModifierData> (
   1.155 +    SubsurfModifierData& dest,
   1.156 +    const FileDatabase& db
   1.157 +    ) const
   1.158 +{ 
   1.159 +
   1.160 +    ReadField<ErrorPolicy_Fail>(dest.modifier,"modifier",db);
   1.161 +    ReadField<ErrorPolicy_Warn>(dest.subdivType,"subdivType",db);
   1.162 +    ReadField<ErrorPolicy_Fail>(dest.levels,"levels",db);
   1.163 +    ReadField<ErrorPolicy_Igno>(dest.renderLevels,"renderLevels",db);
   1.164 +    ReadField<ErrorPolicy_Igno>(dest.flags,"flags",db);
   1.165 +
   1.166 +	db.reader->IncPtr(size);
   1.167 +}
   1.168 +
   1.169 +//--------------------------------------------------------------------------------
   1.170 +template <> void Structure :: Convert<MFace> (
   1.171 +    MFace& dest,
   1.172 +    const FileDatabase& db
   1.173 +    ) const
   1.174 +{ 
   1.175 +
   1.176 +    ReadField<ErrorPolicy_Fail>(dest.v1,"v1",db);
   1.177 +    ReadField<ErrorPolicy_Fail>(dest.v2,"v2",db);
   1.178 +    ReadField<ErrorPolicy_Fail>(dest.v3,"v3",db);
   1.179 +    ReadField<ErrorPolicy_Fail>(dest.v4,"v4",db);
   1.180 +    ReadField<ErrorPolicy_Fail>(dest.mat_nr,"mat_nr",db);
   1.181 +    ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
   1.182 +
   1.183 +	db.reader->IncPtr(size);
   1.184 +}
   1.185 +
   1.186 +//--------------------------------------------------------------------------------
   1.187 +template <> void Structure :: Convert<Lamp> (
   1.188 +    Lamp& dest,
   1.189 +    const FileDatabase& db
   1.190 +    ) const
   1.191 +{ 
   1.192 +
   1.193 +    ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
   1.194 +    ReadField<ErrorPolicy_Fail>((int&)dest.type,"type",db);
   1.195 +    ReadField<ErrorPolicy_Igno>(dest.flags,"flags",db);
   1.196 +    ReadField<ErrorPolicy_Igno>(dest.colormodel,"colormodel",db);
   1.197 +    ReadField<ErrorPolicy_Igno>(dest.totex,"totex",db);
   1.198 +    ReadField<ErrorPolicy_Warn>(dest.r,"r",db);
   1.199 +    ReadField<ErrorPolicy_Warn>(dest.g,"g",db);
   1.200 +    ReadField<ErrorPolicy_Warn>(dest.b,"b",db);
   1.201 +    ReadField<ErrorPolicy_Warn>(dest.k,"k",db);
   1.202 +    ReadField<ErrorPolicy_Igno>(dest.energy,"energy",db);
   1.203 +    ReadField<ErrorPolicy_Igno>(dest.dist,"dist",db);
   1.204 +    ReadField<ErrorPolicy_Igno>(dest.spotsize,"spotsize",db);
   1.205 +    ReadField<ErrorPolicy_Igno>(dest.spotblend,"spotblend",db);
   1.206 +    ReadField<ErrorPolicy_Igno>(dest.att1,"att1",db);
   1.207 +    ReadField<ErrorPolicy_Igno>(dest.att2,"att2",db);
   1.208 +    ReadField<ErrorPolicy_Igno>((int&)dest.falloff_type,"falloff_type",db);
   1.209 +    ReadField<ErrorPolicy_Igno>(dest.sun_brightness,"sun_brightness",db);
   1.210 +
   1.211 +	db.reader->IncPtr(size);
   1.212 +}
   1.213 +
   1.214 +//--------------------------------------------------------------------------------
   1.215 +template <> void Structure :: Convert<MDeformWeight> (
   1.216 +    MDeformWeight& dest,
   1.217 +    const FileDatabase& db
   1.218 +    ) const
   1.219 +{ 
   1.220 +
   1.221 +    ReadField<ErrorPolicy_Fail>(dest.def_nr,"def_nr",db);
   1.222 +    ReadField<ErrorPolicy_Fail>(dest.weight,"weight",db);
   1.223 +
   1.224 +	db.reader->IncPtr(size);
   1.225 +}
   1.226 +
   1.227 +//--------------------------------------------------------------------------------
   1.228 +template <> void Structure :: Convert<PackedFile> (
   1.229 +    PackedFile& dest,
   1.230 +    const FileDatabase& db
   1.231 +    ) const
   1.232 +{ 
   1.233 +
   1.234 +    ReadField<ErrorPolicy_Warn>(dest.size,"size",db);
   1.235 +    ReadField<ErrorPolicy_Warn>(dest.seek,"seek",db);
   1.236 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.data,"*data",db);
   1.237 +
   1.238 +	db.reader->IncPtr(size);
   1.239 +}
   1.240 +
   1.241 +//--------------------------------------------------------------------------------
   1.242 +template <> void Structure :: Convert<Base> (
   1.243 +    Base& dest,
   1.244 +    const FileDatabase& db
   1.245 +    ) const
   1.246 +{ 
   1.247 +
   1.248 +    {
   1.249 +        boost::shared_ptr<Base> prev;
   1.250 +        ReadFieldPtr<ErrorPolicy_Warn>(prev,"*prev",db);
   1.251 +        dest.prev = prev.get();
   1.252 +    }
   1.253 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.next,"*next",db);
   1.254 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.object,"*object",db);
   1.255 +
   1.256 +	db.reader->IncPtr(size);
   1.257 +}
   1.258 +
   1.259 +//--------------------------------------------------------------------------------
   1.260 +template <> void Structure :: Convert<MTFace> (
   1.261 +    MTFace& dest,
   1.262 +    const FileDatabase& db
   1.263 +    ) const
   1.264 +{ 
   1.265 +
   1.266 +    ReadFieldArray2<ErrorPolicy_Fail>(dest.uv,"uv",db);
   1.267 +    ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
   1.268 +    ReadField<ErrorPolicy_Igno>(dest.mode,"mode",db);
   1.269 +    ReadField<ErrorPolicy_Igno>(dest.tile,"tile",db);
   1.270 +    ReadField<ErrorPolicy_Igno>(dest.unwrap,"unwrap",db);
   1.271 +
   1.272 +	db.reader->IncPtr(size);
   1.273 +}
   1.274 +
   1.275 +//--------------------------------------------------------------------------------
   1.276 +template <> void Structure :: Convert<Material> (
   1.277 +    Material& dest,
   1.278 +    const FileDatabase& db
   1.279 +    ) const
   1.280 +{ 
   1.281 +
   1.282 +    ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
   1.283 +    ReadField<ErrorPolicy_Warn>(dest.r,"r",db);
   1.284 +    ReadField<ErrorPolicy_Warn>(dest.g,"g",db);
   1.285 +    ReadField<ErrorPolicy_Warn>(dest.b,"b",db);
   1.286 +    ReadField<ErrorPolicy_Warn>(dest.specr,"specr",db);
   1.287 +    ReadField<ErrorPolicy_Warn>(dest.specg,"specg",db);
   1.288 +    ReadField<ErrorPolicy_Warn>(dest.specb,"specb",db);
   1.289 +    ReadField<ErrorPolicy_Igno>(dest.har,"har",db);
   1.290 +    ReadField<ErrorPolicy_Warn>(dest.ambr,"ambr",db);
   1.291 +    ReadField<ErrorPolicy_Warn>(dest.ambg,"ambg",db);
   1.292 +    ReadField<ErrorPolicy_Warn>(dest.ambb,"ambb",db);
   1.293 +    ReadField<ErrorPolicy_Igno>(dest.mirr,"mirr",db);
   1.294 +    ReadField<ErrorPolicy_Igno>(dest.mirg,"mirg",db);
   1.295 +    ReadField<ErrorPolicy_Igno>(dest.mirb,"mirb",db);
   1.296 +    ReadField<ErrorPolicy_Warn>(dest.emit,"emit",db);
   1.297 +    ReadField<ErrorPolicy_Warn>(dest.alpha,"alpha",db);
   1.298 +    ReadField<ErrorPolicy_Igno>(dest.ref,"ref",db);
   1.299 +    ReadField<ErrorPolicy_Igno>(dest.translucency,"translucency",db);
   1.300 +    ReadField<ErrorPolicy_Igno>(dest.roughness,"roughness",db);
   1.301 +    ReadField<ErrorPolicy_Igno>(dest.darkness,"darkness",db);
   1.302 +    ReadField<ErrorPolicy_Igno>(dest.refrac,"refrac",db);
   1.303 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.group,"*group",db);
   1.304 +    ReadField<ErrorPolicy_Warn>(dest.diff_shader,"diff_shader",db);
   1.305 +    ReadField<ErrorPolicy_Warn>(dest.spec_shader,"spec_shader",db);
   1.306 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.mtex,"*mtex",db);
   1.307 +
   1.308 +	db.reader->IncPtr(size);
   1.309 +}
   1.310 +
   1.311 +//--------------------------------------------------------------------------------
   1.312 +template <> void Structure :: Convert<MTexPoly> (
   1.313 +    MTexPoly& dest,
   1.314 +    const FileDatabase& db
   1.315 +    ) const
   1.316 +{ 
   1.317 +
   1.318 +    {
   1.319 +        boost::shared_ptr<Image> tpage;
   1.320 +        ReadFieldPtr<ErrorPolicy_Igno>(tpage,"*tpage",db);
   1.321 +        dest.tpage = tpage.get();
   1.322 +    }
   1.323 +    ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
   1.324 +    ReadField<ErrorPolicy_Igno>(dest.transp,"transp",db);
   1.325 +    ReadField<ErrorPolicy_Igno>(dest.mode,"mode",db);
   1.326 +    ReadField<ErrorPolicy_Igno>(dest.tile,"tile",db);
   1.327 +    ReadField<ErrorPolicy_Igno>(dest.pad,"pad",db);
   1.328 +
   1.329 +	db.reader->IncPtr(size);
   1.330 +}
   1.331 +
   1.332 +//--------------------------------------------------------------------------------
   1.333 +template <> void Structure :: Convert<Mesh> (
   1.334 +    Mesh& dest,
   1.335 +    const FileDatabase& db
   1.336 +    ) const
   1.337 +{ 
   1.338 +
   1.339 +    ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
   1.340 +    ReadField<ErrorPolicy_Fail>(dest.totface,"totface",db);
   1.341 +    ReadField<ErrorPolicy_Fail>(dest.totedge,"totedge",db);
   1.342 +    ReadField<ErrorPolicy_Fail>(dest.totvert,"totvert",db);
   1.343 +    ReadField<ErrorPolicy_Igno>(dest.totloop,"totloop",db);
   1.344 +    ReadField<ErrorPolicy_Igno>(dest.totpoly,"totpoly",db);
   1.345 +    ReadField<ErrorPolicy_Igno>(dest.subdiv,"subdiv",db);
   1.346 +    ReadField<ErrorPolicy_Igno>(dest.subdivr,"subdivr",db);
   1.347 +    ReadField<ErrorPolicy_Igno>(dest.subsurftype,"subsurftype",db);
   1.348 +    ReadField<ErrorPolicy_Igno>(dest.smoothresh,"smoothresh",db);
   1.349 +    ReadFieldPtr<ErrorPolicy_Fail>(dest.mface,"*mface",db);
   1.350 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.mtface,"*mtface",db);
   1.351 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.tface,"*tface",db);
   1.352 +    ReadFieldPtr<ErrorPolicy_Fail>(dest.mvert,"*mvert",db);
   1.353 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.medge,"*medge",db);
   1.354 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.mloop,"*mloop",db);
   1.355 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.mloopuv,"*mloopuv",db);
   1.356 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.mloopcol,"*mloopcol",db);
   1.357 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.mpoly,"*mpoly",db);
   1.358 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.mtpoly,"*mtpoly",db);
   1.359 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.dvert,"*dvert",db);
   1.360 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.mcol,"*mcol",db);
   1.361 +    ReadFieldPtr<ErrorPolicy_Fail>(dest.mat,"**mat",db);
   1.362 +
   1.363 +	db.reader->IncPtr(size);
   1.364 +}
   1.365 +
   1.366 +//--------------------------------------------------------------------------------
   1.367 +template <> void Structure :: Convert<MDeformVert> (
   1.368 +    MDeformVert& dest,
   1.369 +    const FileDatabase& db
   1.370 +    ) const
   1.371 +{ 
   1.372 +
   1.373 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.dw,"*dw",db);
   1.374 +    ReadField<ErrorPolicy_Igno>(dest.totweight,"totweight",db);
   1.375 +
   1.376 +	db.reader->IncPtr(size);
   1.377 +}
   1.378 +
   1.379 +//--------------------------------------------------------------------------------
   1.380 +template <> void Structure :: Convert<World> (
   1.381 +    World& dest,
   1.382 +    const FileDatabase& db
   1.383 +    ) const
   1.384 +{ 
   1.385 +
   1.386 +    ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
   1.387 +
   1.388 +	db.reader->IncPtr(size);
   1.389 +}
   1.390 +
   1.391 +//--------------------------------------------------------------------------------
   1.392 +template <> void Structure :: Convert<MLoopCol> (
   1.393 +    MLoopCol& dest,
   1.394 +    const FileDatabase& db
   1.395 +    ) const
   1.396 +{ 
   1.397 +
   1.398 +    ReadField<ErrorPolicy_Igno>(dest.r,"r",db);
   1.399 +    ReadField<ErrorPolicy_Igno>(dest.g,"g",db);
   1.400 +    ReadField<ErrorPolicy_Igno>(dest.b,"b",db);
   1.401 +    ReadField<ErrorPolicy_Igno>(dest.a,"a",db);
   1.402 +
   1.403 +	db.reader->IncPtr(size);
   1.404 +}
   1.405 +
   1.406 +//--------------------------------------------------------------------------------
   1.407 +template <> void Structure :: Convert<MVert> (
   1.408 +    MVert& dest,
   1.409 +    const FileDatabase& db
   1.410 +    ) const
   1.411 +{ 
   1.412 +
   1.413 +    ReadFieldArray<ErrorPolicy_Fail>(dest.co,"co",db);
   1.414 +    ReadFieldArray<ErrorPolicy_Fail>(dest.no,"no",db);
   1.415 +    ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
   1.416 +    ReadField<ErrorPolicy_Warn>(dest.mat_nr,"mat_nr",db);
   1.417 +    ReadField<ErrorPolicy_Igno>(dest.bweight,"bweight",db);
   1.418 +
   1.419 +	db.reader->IncPtr(size);
   1.420 +}
   1.421 +
   1.422 +//--------------------------------------------------------------------------------
   1.423 +template <> void Structure :: Convert<MEdge> (
   1.424 +    MEdge& dest,
   1.425 +    const FileDatabase& db
   1.426 +    ) const
   1.427 +{ 
   1.428 +
   1.429 +    ReadField<ErrorPolicy_Fail>(dest.v1,"v1",db);
   1.430 +    ReadField<ErrorPolicy_Fail>(dest.v2,"v2",db);
   1.431 +    ReadField<ErrorPolicy_Igno>(dest.crease,"crease",db);
   1.432 +    ReadField<ErrorPolicy_Igno>(dest.bweight,"bweight",db);
   1.433 +    ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
   1.434 +
   1.435 +	db.reader->IncPtr(size);
   1.436 +}
   1.437 +
   1.438 +//--------------------------------------------------------------------------------
   1.439 +template <> void Structure :: Convert<MLoopUV> (
   1.440 +    MLoopUV& dest,
   1.441 +    const FileDatabase& db
   1.442 +    ) const
   1.443 +{ 
   1.444 +
   1.445 +    ReadFieldArray<ErrorPolicy_Igno>(dest.uv,"uv",db);
   1.446 +    ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
   1.447 +
   1.448 +	db.reader->IncPtr(size);
   1.449 +}
   1.450 +
   1.451 +//--------------------------------------------------------------------------------
   1.452 +template <> void Structure :: Convert<GroupObject> (
   1.453 +    GroupObject& dest,
   1.454 +    const FileDatabase& db
   1.455 +    ) const
   1.456 +{ 
   1.457 +
   1.458 +    ReadFieldPtr<ErrorPolicy_Fail>(dest.prev,"*prev",db);
   1.459 +    ReadFieldPtr<ErrorPolicy_Fail>(dest.next,"*next",db);
   1.460 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.ob,"*ob",db);
   1.461 +
   1.462 +	db.reader->IncPtr(size);
   1.463 +}
   1.464 +
   1.465 +//--------------------------------------------------------------------------------
   1.466 +template <> void Structure :: Convert<ListBase> (
   1.467 +    ListBase& dest,
   1.468 +    const FileDatabase& db
   1.469 +    ) const
   1.470 +{ 
   1.471 +
   1.472 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.first,"*first",db);
   1.473 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.last,"*last",db);
   1.474 +
   1.475 +	db.reader->IncPtr(size);
   1.476 +}
   1.477 +
   1.478 +//--------------------------------------------------------------------------------
   1.479 +template <> void Structure :: Convert<MLoop> (
   1.480 +    MLoop& dest,
   1.481 +    const FileDatabase& db
   1.482 +    ) const
   1.483 +{ 
   1.484 +
   1.485 +    ReadField<ErrorPolicy_Igno>(dest.v,"v",db);
   1.486 +    ReadField<ErrorPolicy_Igno>(dest.e,"e",db);
   1.487 +
   1.488 +	db.reader->IncPtr(size);
   1.489 +}
   1.490 +
   1.491 +//--------------------------------------------------------------------------------
   1.492 +template <> void Structure :: Convert<ModifierData> (
   1.493 +    ModifierData& dest,
   1.494 +    const FileDatabase& db
   1.495 +    ) const
   1.496 +{ 
   1.497 +
   1.498 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.next,"*next",db);
   1.499 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.prev,"*prev",db);
   1.500 +    ReadField<ErrorPolicy_Igno>(dest.type,"type",db);
   1.501 +    ReadField<ErrorPolicy_Igno>(dest.mode,"mode",db);
   1.502 +    ReadFieldArray<ErrorPolicy_Igno>(dest.name,"name",db);
   1.503 +
   1.504 +	db.reader->IncPtr(size);
   1.505 +}
   1.506 +
   1.507 +//--------------------------------------------------------------------------------
   1.508 +template <> void Structure :: Convert<ID> (
   1.509 +    ID& dest,
   1.510 +    const FileDatabase& db
   1.511 +    ) const
   1.512 +{ 
   1.513 +
   1.514 +    ReadFieldArray<ErrorPolicy_Warn>(dest.name,"name",db);
   1.515 +    ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
   1.516 +
   1.517 +	db.reader->IncPtr(size);
   1.518 +}
   1.519 +
   1.520 +//--------------------------------------------------------------------------------
   1.521 +template <> void Structure :: Convert<MCol> (
   1.522 +    MCol& dest,
   1.523 +    const FileDatabase& db
   1.524 +    ) const
   1.525 +{ 
   1.526 +
   1.527 +    ReadField<ErrorPolicy_Fail>(dest.r,"r",db);
   1.528 +    ReadField<ErrorPolicy_Fail>(dest.g,"g",db);
   1.529 +    ReadField<ErrorPolicy_Fail>(dest.b,"b",db);
   1.530 +    ReadField<ErrorPolicy_Fail>(dest.a,"a",db);
   1.531 +
   1.532 +	db.reader->IncPtr(size);
   1.533 +}
   1.534 +
   1.535 +//--------------------------------------------------------------------------------
   1.536 +template <> void Structure :: Convert<MPoly> (
   1.537 +    MPoly& dest,
   1.538 +    const FileDatabase& db
   1.539 +    ) const
   1.540 +{ 
   1.541 +
   1.542 +    ReadField<ErrorPolicy_Igno>(dest.loopstart,"loopstart",db);
   1.543 +    ReadField<ErrorPolicy_Igno>(dest.totloop,"totloop",db);
   1.544 +    ReadField<ErrorPolicy_Igno>(dest.mat_nr,"mat_nr",db);
   1.545 +    ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
   1.546 +
   1.547 +	db.reader->IncPtr(size);
   1.548 +}
   1.549 +
   1.550 +//--------------------------------------------------------------------------------
   1.551 +template <> void Structure :: Convert<Scene> (
   1.552 +    Scene& dest,
   1.553 +    const FileDatabase& db
   1.554 +    ) const
   1.555 +{ 
   1.556 +
   1.557 +    ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
   1.558 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.camera,"*camera",db);
   1.559 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.world,"*world",db);
   1.560 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.basact,"*basact",db);
   1.561 +    ReadField<ErrorPolicy_Igno>(dest.base,"base",db);
   1.562 +
   1.563 +	db.reader->IncPtr(size);
   1.564 +}
   1.565 +
   1.566 +//--------------------------------------------------------------------------------
   1.567 +template <> void Structure :: Convert<Library> (
   1.568 +    Library& dest,
   1.569 +    const FileDatabase& db
   1.570 +    ) const
   1.571 +{ 
   1.572 +
   1.573 +    ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
   1.574 +    ReadFieldArray<ErrorPolicy_Warn>(dest.name,"name",db);
   1.575 +    ReadFieldArray<ErrorPolicy_Fail>(dest.filename,"filename",db);
   1.576 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.parent,"*parent",db);
   1.577 +
   1.578 +	db.reader->IncPtr(size);
   1.579 +}
   1.580 +
   1.581 +//--------------------------------------------------------------------------------
   1.582 +template <> void Structure :: Convert<Tex> (
   1.583 +    Tex& dest,
   1.584 +    const FileDatabase& db
   1.585 +    ) const
   1.586 +{ 
   1.587 +
   1.588 +    ReadField<ErrorPolicy_Fail>((int&)dest.type,"type",db);
   1.589 +    ReadFieldPtr<ErrorPolicy_Warn>(dest.ima,"*ima",db);
   1.590 +
   1.591 +	db.reader->IncPtr(size);
   1.592 +}
   1.593 +
   1.594 +//--------------------------------------------------------------------------------
   1.595 +template <> void Structure :: Convert<Camera> (
   1.596 +    Camera& dest,
   1.597 +    const FileDatabase& db
   1.598 +    ) const
   1.599 +{ 
   1.600 +
   1.601 +    ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
   1.602 +    ReadField<ErrorPolicy_Warn>((int&)dest.type,"type",db);
   1.603 +    ReadField<ErrorPolicy_Warn>((int&)dest.flag,"flag",db);
   1.604 +    ReadField<ErrorPolicy_Warn>(dest.angle,"angle",db);
   1.605 +
   1.606 +	db.reader->IncPtr(size);
   1.607 +}
   1.608 +
   1.609 +//--------------------------------------------------------------------------------
   1.610 +template <> void Structure :: Convert<MirrorModifierData> (
   1.611 +    MirrorModifierData& dest,
   1.612 +    const FileDatabase& db
   1.613 +    ) const
   1.614 +{ 
   1.615 +
   1.616 +    ReadField<ErrorPolicy_Fail>(dest.modifier,"modifier",db);
   1.617 +    ReadField<ErrorPolicy_Igno>(dest.axis,"axis",db);
   1.618 +    ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
   1.619 +    ReadField<ErrorPolicy_Igno>(dest.tolerance,"tolerance",db);
   1.620 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.mirror_ob,"*mirror_ob",db);
   1.621 +
   1.622 +	db.reader->IncPtr(size);
   1.623 +}
   1.624 +
   1.625 +//--------------------------------------------------------------------------------
   1.626 +template <> void Structure :: Convert<Image> (
   1.627 +    Image& dest,
   1.628 +    const FileDatabase& db
   1.629 +    ) const
   1.630 +{ 
   1.631 +
   1.632 +    ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
   1.633 +    ReadFieldArray<ErrorPolicy_Warn>(dest.name,"name",db);
   1.634 +    ReadField<ErrorPolicy_Igno>(dest.ok,"ok",db);
   1.635 +    ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
   1.636 +    ReadField<ErrorPolicy_Igno>(dest.source,"source",db);
   1.637 +    ReadField<ErrorPolicy_Igno>(dest.type,"type",db);
   1.638 +    ReadField<ErrorPolicy_Igno>(dest.pad,"pad",db);
   1.639 +    ReadField<ErrorPolicy_Igno>(dest.pad1,"pad1",db);
   1.640 +    ReadField<ErrorPolicy_Igno>(dest.lastframe,"lastframe",db);
   1.641 +    ReadField<ErrorPolicy_Igno>(dest.tpageflag,"tpageflag",db);
   1.642 +    ReadField<ErrorPolicy_Igno>(dest.totbind,"totbind",db);
   1.643 +    ReadField<ErrorPolicy_Igno>(dest.xrep,"xrep",db);
   1.644 +    ReadField<ErrorPolicy_Igno>(dest.yrep,"yrep",db);
   1.645 +    ReadField<ErrorPolicy_Igno>(dest.twsta,"twsta",db);
   1.646 +    ReadField<ErrorPolicy_Igno>(dest.twend,"twend",db);
   1.647 +    ReadFieldPtr<ErrorPolicy_Igno>(dest.packedfile,"*packedfile",db);
   1.648 +    ReadField<ErrorPolicy_Igno>(dest.lastupdate,"lastupdate",db);
   1.649 +    ReadField<ErrorPolicy_Igno>(dest.lastused,"lastused",db);
   1.650 +    ReadField<ErrorPolicy_Igno>(dest.animspeed,"animspeed",db);
   1.651 +    ReadField<ErrorPolicy_Igno>(dest.gen_x,"gen_x",db);
   1.652 +    ReadField<ErrorPolicy_Igno>(dest.gen_y,"gen_y",db);
   1.653 +    ReadField<ErrorPolicy_Igno>(dest.gen_type,"gen_type",db);
   1.654 +
   1.655 +	db.reader->IncPtr(size);
   1.656 +}
   1.657 +
   1.658 +//--------------------------------------------------------------------------------
   1.659 +void DNA::RegisterConverters() {
   1.660 +
   1.661 +    converters["Object"] = DNA::FactoryPair( &Structure::Allocate<Object>, &Structure::Convert<Object> );
   1.662 +    converters["Group"] = DNA::FactoryPair( &Structure::Allocate<Group>, &Structure::Convert<Group> );
   1.663 +    converters["MTex"] = DNA::FactoryPair( &Structure::Allocate<MTex>, &Structure::Convert<MTex> );
   1.664 +    converters["TFace"] = DNA::FactoryPair( &Structure::Allocate<TFace>, &Structure::Convert<TFace> );
   1.665 +    converters["SubsurfModifierData"] = DNA::FactoryPair( &Structure::Allocate<SubsurfModifierData>, &Structure::Convert<SubsurfModifierData> );
   1.666 +    converters["MFace"] = DNA::FactoryPair( &Structure::Allocate<MFace>, &Structure::Convert<MFace> );
   1.667 +    converters["Lamp"] = DNA::FactoryPair( &Structure::Allocate<Lamp>, &Structure::Convert<Lamp> );
   1.668 +    converters["MDeformWeight"] = DNA::FactoryPair( &Structure::Allocate<MDeformWeight>, &Structure::Convert<MDeformWeight> );
   1.669 +    converters["PackedFile"] = DNA::FactoryPair( &Structure::Allocate<PackedFile>, &Structure::Convert<PackedFile> );
   1.670 +    converters["Base"] = DNA::FactoryPair( &Structure::Allocate<Base>, &Structure::Convert<Base> );
   1.671 +    converters["MTFace"] = DNA::FactoryPair( &Structure::Allocate<MTFace>, &Structure::Convert<MTFace> );
   1.672 +    converters["Material"] = DNA::FactoryPair( &Structure::Allocate<Material>, &Structure::Convert<Material> );
   1.673 +    converters["MTexPoly"] = DNA::FactoryPair( &Structure::Allocate<MTexPoly>, &Structure::Convert<MTexPoly> );
   1.674 +    converters["Mesh"] = DNA::FactoryPair( &Structure::Allocate<Mesh>, &Structure::Convert<Mesh> );
   1.675 +    converters["MDeformVert"] = DNA::FactoryPair( &Structure::Allocate<MDeformVert>, &Structure::Convert<MDeformVert> );
   1.676 +    converters["World"] = DNA::FactoryPair( &Structure::Allocate<World>, &Structure::Convert<World> );
   1.677 +    converters["MLoopCol"] = DNA::FactoryPair( &Structure::Allocate<MLoopCol>, &Structure::Convert<MLoopCol> );
   1.678 +    converters["MVert"] = DNA::FactoryPair( &Structure::Allocate<MVert>, &Structure::Convert<MVert> );
   1.679 +    converters["MEdge"] = DNA::FactoryPair( &Structure::Allocate<MEdge>, &Structure::Convert<MEdge> );
   1.680 +    converters["MLoopUV"] = DNA::FactoryPair( &Structure::Allocate<MLoopUV>, &Structure::Convert<MLoopUV> );
   1.681 +    converters["GroupObject"] = DNA::FactoryPair( &Structure::Allocate<GroupObject>, &Structure::Convert<GroupObject> );
   1.682 +    converters["ListBase"] = DNA::FactoryPair( &Structure::Allocate<ListBase>, &Structure::Convert<ListBase> );
   1.683 +    converters["MLoop"] = DNA::FactoryPair( &Structure::Allocate<MLoop>, &Structure::Convert<MLoop> );
   1.684 +    converters["ModifierData"] = DNA::FactoryPair( &Structure::Allocate<ModifierData>, &Structure::Convert<ModifierData> );
   1.685 +    converters["ID"] = DNA::FactoryPair( &Structure::Allocate<ID>, &Structure::Convert<ID> );
   1.686 +    converters["MCol"] = DNA::FactoryPair( &Structure::Allocate<MCol>, &Structure::Convert<MCol> );
   1.687 +    converters["MPoly"] = DNA::FactoryPair( &Structure::Allocate<MPoly>, &Structure::Convert<MPoly> );
   1.688 +    converters["Scene"] = DNA::FactoryPair( &Structure::Allocate<Scene>, &Structure::Convert<Scene> );
   1.689 +    converters["Library"] = DNA::FactoryPair( &Structure::Allocate<Library>, &Structure::Convert<Library> );
   1.690 +    converters["Tex"] = DNA::FactoryPair( &Structure::Allocate<Tex>, &Structure::Convert<Tex> );
   1.691 +    converters["Camera"] = DNA::FactoryPair( &Structure::Allocate<Camera>, &Structure::Convert<Camera> );
   1.692 +    converters["MirrorModifierData"] = DNA::FactoryPair( &Structure::Allocate<MirrorModifierData>, &Structure::Convert<MirrorModifierData> );
   1.693 +    converters["Image"] = DNA::FactoryPair( &Structure::Allocate<Image>, &Structure::Convert<Image> );
   1.694 +}
   1.695 +
   1.696 +
   1.697 +#endif