1 /*
2 Open Asset Import Library (assimp)
3 ----------------------------------------------------------------------
4 
5 Copyright (c) 2006-2017, assimp team
6 
7 All rights reserved.
8 
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the
11 following conditions are met:
12 
13 * Redistributions of source code must retain the above
14   copyright notice, this list of conditions and the
15   following disclaimer.
16 
17 * Redistributions in binary form must reproduce the above
18   copyright notice, this list of conditions and the
19   following disclaimer in the documentation and/or other
20   materials provided with the distribution.
21 
22 * Neither the name of the assimp team, nor the names of its
23   contributors may be used to endorse or promote products
24   derived from this software without specific prior
25   written permission of the assimp team.
26 
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 
39 ----------------------------------------------------------------------
40 */
41 
42 /** @file  BlenderScene.h
43  *  @brief Intermediate representation of a BLEND scene.
44  */
45 #ifndef INCLUDED_AI_BLEND_SCENE_H
46 #define INCLUDED_AI_BLEND_SCENE_H
47 
48 #include "BlenderDNA.h"
49 
50 namespace Assimp    {
51 namespace Blender {
52 
53 // Minor parts of this file are extracts from blender data structures,
54 // declared in the ./source/blender/makesdna directory.
55 // Stuff that is not used by Assimp is commented.
56 
57 
58 // NOTE
59 // this file serves as input data to the `./scripts/genblenddna.py`
60 // script. This script generates the actual binding code to read a
61 // blender file with a possibly different DNA into our structures.
62 // Only `struct` declarations are considered and the following
63 // rules must be obeyed in order for the script to work properly:
64 //
65 // * C++ style comments only
66 //
67 // * Structures may include the primitive types char, int, short,
68 //   float, double. Signed specifiers are not allowed on
69 //   integers. Enum types are allowed, but they must have been
70 //   defined in this header.
71 //
72 // * Structures may aggregate other structures, unless not defined
73 //   in this header.
74 //
75 // * Pointers to other structures or primitive types are allowed.
76 //   No references or double pointers or arrays of pointers.
77 //   A pointer to a T is normally written as std::shared_ptr, while a
78 //   pointer to an array of elements is written as boost::
79 //   shared_array. To avoid cyclic pointers, use raw pointers in
80 //   one direction.
81 //
82 // * Arrays can have maximally two-dimensions. Any non-pointer
83 //   type can form them.
84 //
85 // * Multiple fields can be declare in a single line (i.e `int a,b;`)
86 //   provided they are neither pointers nor arrays.
87 //
88 // * One of WARN, FAIL can be appended to the declaration (
89 //   prior to the semicolon to specify the error handling policy if
90 //   this field is missing in the input DNA). If none of those
91 //   is specified the default policy is to substitute a default
92 //   value for the field.
93 //
94 
95 // warn if field is missing, substitute default value
96 #ifdef WARN
97 #  undef WARN
98 #endif
99 #define WARN
100 
101 // fail the import if the field does not exist
102 #ifdef FAIL
103 #  undef FAIL
104 #endif
105 #define FAIL
106 
107 struct Object;
108 struct MTex;
109 struct Image;
110 
111 #include <memory>
112 
113 #define AI_BLEND_MESH_MAX_VERTS 2000000000L
114 
115 static const size_t MaxNameLen = 1024;
116 
117 // -------------------------------------------------------------------------------
118 struct ID : ElemBase {
119     char name[ MaxNameLen ] WARN;
120     short flag;
121 };
122 
123 // -------------------------------------------------------------------------------
124 struct ListBase : ElemBase {
125     std::shared_ptr<ElemBase> first;
126     std::shared_ptr<ElemBase> last;
127 };
128 
129 
130 // -------------------------------------------------------------------------------
131 struct PackedFile : ElemBase {
132      int size WARN;
133      int seek WARN;
134      std::shared_ptr< FileOffset > data WARN;
135 };
136 
137 // -------------------------------------------------------------------------------
138 struct GroupObject : ElemBase {
139     std::shared_ptr<GroupObject> prev,next FAIL;
140     std::shared_ptr<Object> ob;
141 };
142 
143 // -------------------------------------------------------------------------------
144 struct Group : ElemBase {
145     ID id FAIL;
146     int layer;
147 
148     std::shared_ptr<GroupObject> gobject;
149 };
150 
151 // -------------------------------------------------------------------------------
152 struct World : ElemBase {
153     ID id FAIL;
154 };
155 
156 // -------------------------------------------------------------------------------
157 struct MVert : ElemBase {
158     float co[3] FAIL;
159     float no[3] FAIL;
160     char flag;
161     int mat_nr WARN;
162     int bweight;
163 };
164 
165 // -------------------------------------------------------------------------------
166 struct MEdge : ElemBase {
167       int v1, v2 FAIL;
168       char crease, bweight;
169       short flag;
170 };
171 
172 // -------------------------------------------------------------------------------
173 struct MLoop : ElemBase {
174     int v, e;
175 };
176 
177 // -------------------------------------------------------------------------------
178 struct MLoopUV : ElemBase {
179     float uv[2];
180     int flag;
181 };
182 
183 // -------------------------------------------------------------------------------
184 // Note that red and blue are not swapped, as with MCol
185 struct MLoopCol : ElemBase {
186 	unsigned char r, g, b, a;
187 };
188 
189 // -------------------------------------------------------------------------------
190 struct MPoly : ElemBase {
191     int loopstart;
192     int totloop;
193     short mat_nr;
194     char flag;
195 };
196 
197 // -------------------------------------------------------------------------------
198 struct MTexPoly : ElemBase {
199     Image* tpage;
200     char flag, transp;
201     short mode, tile, pad;
202 };
203 
204 // -------------------------------------------------------------------------------
205 struct MCol : ElemBase {
206     char r,g,b,a FAIL;
207 };
208 
209 // -------------------------------------------------------------------------------
210 struct MFace : ElemBase {
211     int v1,v2,v3,v4 FAIL;
212     int mat_nr FAIL;
213     char flag;
214 };
215 
216 // -------------------------------------------------------------------------------
217 struct TFace : ElemBase {
218     float uv[4][2] FAIL;
219     int col[4] FAIL;
220     char flag;
221     short mode;
222     short tile;
223     short unwrap;
224 };
225 
226 // -------------------------------------------------------------------------------
227 struct MTFace : ElemBase {
MTFaceMTFace228 	MTFace()
229 	: flag(0)
230 	, mode(0)
231 	, tile(0)
232 	, unwrap(0)
233 	{
234 	}
235 
236     float uv[4][2] FAIL;
237     char flag;
238     short mode;
239     short tile;
240     short unwrap;
241 
242     // std::shared_ptr<Image> tpage;
243 };
244 
245 // -------------------------------------------------------------------------------
246 struct MDeformWeight : ElemBase  {
247       int    def_nr FAIL;
248       float  weight FAIL;
249 };
250 
251 // -------------------------------------------------------------------------------
252 struct MDeformVert : ElemBase  {
253     vector<MDeformWeight> dw WARN;
254     int totweight;
255 };
256 
257 // -------------------------------------------------------------------------------
258 #define MA_RAYMIRROR    0x40000
259 #define MA_TRANSPARENCY 0x10000
260 #define MA_RAYTRANSP    0x20000
261 #define MA_ZTRANSP      0x00040
262 
263 struct Material : ElemBase {
264     ID id FAIL;
265 
266     float r,g,b WARN;
267     float specr,specg,specb WARN;
268     short har;
269     float ambr,ambg,ambb WARN;
270     float mirr,mirg,mirb;
271     float emit WARN;
272     float ray_mirror;
273     float alpha WARN;
274     float ref;
275     float translucency;
276     int mode;
277     float roughness;
278     float darkness;
279     float refrac;
280 
281     float amb;
282     float ang;
283     float spectra;
284     float spec;
285     float zoffs;
286     float add;
287     float fresnel_mir;
288     float fresnel_mir_i;
289     float fresnel_tra;
290     float fresnel_tra_i;
291     float filter;
292     float tx_limit;
293     float tx_falloff;
294     float gloss_mir;
295     float gloss_tra;
296     float adapt_thresh_mir;
297     float adapt_thresh_tra;
298     float aniso_gloss_mir;
299     float dist_mir;
300     float hasize;
301     float flaresize;
302     float subsize;
303     float flareboost;
304     float strand_sta;
305     float strand_end;
306     float strand_ease;
307     float strand_surfnor;
308     float strand_min;
309     float strand_widthfade;
310     float sbias;
311     float lbias;
312     float shad_alpha;
313     float param;
314     float rms;
315     float rampfac_col;
316     float rampfac_spec;
317     float friction;
318     float fh;
319     float reflect;
320     float fhdist;
321     float xyfrict;
322     float sss_radius;
323     float sss_col;
324     float sss_error;
325     float sss_scale;
326     float sss_ior;
327     float sss_colfac;
328     float sss_texfac;
329     float sss_front;
330     float sss_back;
331 
332     short material_type;
333     short flag;
334     short ray_depth;
335     short ray_depth_tra;
336     short samp_gloss_mir;
337     short samp_gloss_tra;
338     short fadeto_mir;
339     short shade_flag;
340     short flarec;
341     short starc;
342     short linec;
343     short ringc;
344     short pr_lamp;
345     short pr_texture;
346     short ml_flag;
347     short texco;
348     short mapto;
349     short ramp_show;
350     short pad3;
351     short dynamode;
352     short pad2;
353     short sss_flag;
354     short sss_preset;
355     short shadowonly_flag;
356     short index;
357     short vcol_alpha;
358     short pad4;
359 
360     char seed1;
361     char seed2;
362 
363     std::shared_ptr<Group> group;
364 
365     short diff_shader WARN;
366     short spec_shader WARN;
367 
368     std::shared_ptr<MTex> mtex[18];
369 };
370 
371 // -------------------------------------------------------------------------------
372 struct Mesh : ElemBase {
373     ID id FAIL;
374 
375     int totface FAIL;
376     int totedge FAIL;
377     int totvert FAIL;
378     int totloop;
379     int totpoly;
380 
381     short subdiv;
382     short subdivr;
383     short subsurftype;
384     short smoothresh;
385 
386     vector<MFace> mface FAIL;
387     vector<MTFace> mtface;
388     vector<TFace> tface;
389     vector<MVert> mvert FAIL;
390     vector<MEdge> medge WARN;
391     vector<MLoop> mloop;
392     vector<MLoopUV> mloopuv;
393     vector<MLoopCol> mloopcol;
394     vector<MPoly> mpoly;
395     vector<MTexPoly> mtpoly;
396     vector<MDeformVert> dvert;
397     vector<MCol> mcol;
398 
399     vector< std::shared_ptr<Material> > mat FAIL;
400 };
401 
402 // -------------------------------------------------------------------------------
403 struct Library : ElemBase {
404     ID id FAIL;
405 
406     char name[240] WARN;
407     char filename[240] FAIL;
408     std::shared_ptr<Library> parent WARN;
409 };
410 
411 // -------------------------------------------------------------------------------
412 struct Camera : ElemBase {
413     enum Type {
414           Type_PERSP    =   0
415          ,Type_ORTHO    =   1
416     };
417 
418     ID id FAIL;
419 
420     Type type,flag WARN;
421     float lens WARN;
422     float sensor_x WARN;
423     float clipsta, clipend;
424 };
425 
426 
427 // -------------------------------------------------------------------------------
428 struct Lamp : ElemBase {
429 
430     enum FalloffType {
431          FalloffType_Constant   = 0x0
432         ,FalloffType_InvLinear  = 0x1
433         ,FalloffType_InvSquare  = 0x2
434         //,FalloffType_Curve    = 0x3
435         //,FalloffType_Sliders  = 0x4
436     };
437 
438     enum Type {
439          Type_Local         = 0x0
440         ,Type_Sun           = 0x1
441         ,Type_Spot          = 0x2
442         ,Type_Hemi          = 0x3
443         ,Type_Area          = 0x4
444         //,Type_YFPhoton    = 0x5
445     };
446 
447       ID id FAIL;
448       //AnimData *adt;
449 
450       Type type FAIL;
451       short flags;
452 
453       //int mode;
454 
455       short colormodel, totex;
456       float r,g,b,k WARN;
457       //float shdwr, shdwg, shdwb;
458 
459       float energy, dist, spotsize, spotblend;
460       //float haint;
461 
462       float att1, att2;
463       //struct CurveMapping *curfalloff;
464       FalloffType falloff_type;
465 
466       //float clipsta, clipend, shadspotsize;
467       //float bias, soft, compressthresh;
468       //short bufsize, samp, buffers, filtertype;
469       //char bufflag, buftype;
470 
471       //short ray_samp, ray_sampy, ray_sampz;
472       //short ray_samp_type;
473       short area_shape;
474       float area_size, area_sizey, area_sizez;
475       //float adapt_thresh;
476       //short ray_samp_method;
477 
478       //short texact, shadhalostep;
479 
480       //short sun_effect_type;
481       //short skyblendtype;
482       //float horizon_brightness;
483       //float spread;
484       float sun_brightness;
485       //float sun_size;
486       //float backscattered_light;
487       //float sun_intensity;
488       //float atm_turbidity;
489       //float atm_inscattering_factor;
490       //float atm_extinction_factor;
491       //float atm_distance_factor;
492       //float skyblendfac;
493       //float sky_exposure;
494       //short sky_colorspace;
495 
496       // int YF_numphotons, YF_numsearch;
497       // short YF_phdepth, YF_useqmc, YF_bufsize, YF_pad;
498       // float YF_causticblur, YF_ltradius;
499 
500       // float YF_glowint, YF_glowofs;
501       // short YF_glowtype, YF_pad2;
502 
503       //struct Ipo *ipo;
504       //struct MTex *mtex[18];
505       // short pr_texture;
506 
507       //struct PreviewImage *preview;
508 };
509 
510 // -------------------------------------------------------------------------------
511 struct ModifierData : ElemBase  {
512     enum ModifierType {
513       eModifierType_None = 0,
514       eModifierType_Subsurf,
515       eModifierType_Lattice,
516       eModifierType_Curve,
517       eModifierType_Build,
518       eModifierType_Mirror,
519       eModifierType_Decimate,
520       eModifierType_Wave,
521       eModifierType_Armature,
522       eModifierType_Hook,
523       eModifierType_Softbody,
524       eModifierType_Boolean,
525       eModifierType_Array,
526       eModifierType_EdgeSplit,
527       eModifierType_Displace,
528       eModifierType_UVProject,
529       eModifierType_Smooth,
530       eModifierType_Cast,
531       eModifierType_MeshDeform,
532       eModifierType_ParticleSystem,
533       eModifierType_ParticleInstance,
534       eModifierType_Explode,
535       eModifierType_Cloth,
536       eModifierType_Collision,
537       eModifierType_Bevel,
538       eModifierType_Shrinkwrap,
539       eModifierType_Fluidsim,
540       eModifierType_Mask,
541       eModifierType_SimpleDeform,
542       eModifierType_Multires,
543       eModifierType_Surface,
544       eModifierType_Smoke,
545       eModifierType_ShapeKey
546     };
547 
548     std::shared_ptr<ElemBase> next WARN;
549     std::shared_ptr<ElemBase> prev WARN;
550 
551     int type, mode;
552     char name[32];
553 };
554 
555 // -------------------------------------------------------------------------------
556 struct SubsurfModifierData : ElemBase  {
557 
558     enum Type {
559 
560         TYPE_CatmullClarke = 0x0,
561         TYPE_Simple = 0x1
562     };
563 
564     enum Flags {
565         // some omitted
566         FLAGS_SubsurfUV     =1<<3
567     };
568 
569     ModifierData modifier FAIL;
570     short subdivType WARN;
571     short levels FAIL;
572     short renderLevels ;
573     short flags;
574 };
575 
576 // -------------------------------------------------------------------------------
577 struct MirrorModifierData : ElemBase {
578 
579     enum Flags {
580         Flags_CLIPPING      =1<<0,
581         Flags_MIRROR_U      =1<<1,
582         Flags_MIRROR_V      =1<<2,
583         Flags_AXIS_X        =1<<3,
584         Flags_AXIS_Y        =1<<4,
585         Flags_AXIS_Z        =1<<5,
586         Flags_VGROUP        =1<<6
587     };
588 
589     ModifierData modifier FAIL;
590 
591     short axis, flag;
592     float tolerance;
593     std::shared_ptr<Object> mirror_ob;
594 };
595 
596 // -------------------------------------------------------------------------------
597 struct Object : ElemBase  {
598     ID id FAIL;
599 
600     enum Type {
601          Type_EMPTY     =   0
602         ,Type_MESH      =   1
603         ,Type_CURVE     =   2
604         ,Type_SURF      =   3
605         ,Type_FONT      =   4
606         ,Type_MBALL     =   5
607 
608         ,Type_LAMP      =   10
609         ,Type_CAMERA    =   11
610 
611         ,Type_WAVE      =   21
612         ,Type_LATTICE   =   22
613     };
614 
615     Type type FAIL;
616     float obmat[4][4] WARN;
617     float parentinv[4][4] WARN;
618     char parsubstr[32] WARN;
619 
620     Object* parent WARN;
621     std::shared_ptr<Object> track WARN;
622 
623     std::shared_ptr<Object> proxy,proxy_from,proxy_group WARN;
624     std::shared_ptr<Group> dup_group WARN;
625     std::shared_ptr<ElemBase> data FAIL;
626 
627     ListBase modifiers;
628 
ObjectObject629     Object()
630     : ElemBase()
631     , type( Type_EMPTY )
632     , parent( nullptr )
633     , track()
634     , proxy()
635     , proxy_from()
636     , data() {
637         // empty
638     }
639 };
640 
641 
642 // -------------------------------------------------------------------------------
643 struct Base : ElemBase {
644     Base* prev WARN;
645     std::shared_ptr<Base> next WARN;
646     std::shared_ptr<Object> object WARN;
647 
BaseBase648     Base()
649     : ElemBase()
650     , prev( nullptr )
651     , next()
652     , object() {
653         // empty
654         // empty
655     }
656 };
657 
658 // -------------------------------------------------------------------------------
659 struct Scene : ElemBase {
660     ID id FAIL;
661 
662     std::shared_ptr<Object> camera WARN;
663     std::shared_ptr<World> world WARN;
664     std::shared_ptr<Base> basact WARN;
665 
666     ListBase base;
667 
SceneScene668     Scene()
669     : ElemBase()
670     , camera()
671     , world()
672     , basact() {
673         // empty
674     }
675 };
676 
677 // -------------------------------------------------------------------------------
678 struct Image : ElemBase {
679     ID id FAIL;
680 
681     char name[240] WARN;
682 
683     //struct anim *anim;
684 
685     short ok, flag;
686     short source, type, pad, pad1;
687     int lastframe;
688 
689     short tpageflag, totbind;
690     short xrep, yrep;
691     short twsta, twend;
692     //unsigned int bindcode;
693     //unsigned int *repbind;
694 
695     std::shared_ptr<PackedFile> packedfile;
696     //struct PreviewImage * preview;
697 
698     float lastupdate;
699     int lastused;
700     short animspeed;
701 
702     short gen_x, gen_y, gen_type;
703 
ImageImage704     Image()
705     : ElemBase() {
706         // empty
707     }
708 };
709 
710 // -------------------------------------------------------------------------------
711 struct Tex : ElemBase {
712 
713     // actually, the only texture type we support is Type_IMAGE
714     enum Type {
715          Type_CLOUDS        = 1
716         ,Type_WOOD          = 2
717         ,Type_MARBLE        = 3
718         ,Type_MAGIC         = 4
719         ,Type_BLEND         = 5
720         ,Type_STUCCI        = 6
721         ,Type_NOISE         = 7
722         ,Type_IMAGE         = 8
723         ,Type_PLUGIN        = 9
724         ,Type_ENVMAP        = 10
725         ,Type_MUSGRAVE      = 11
726         ,Type_VORONOI       = 12
727         ,Type_DISTNOISE     = 13
728         ,Type_POINTDENSITY  = 14
729         ,Type_VOXELDATA     = 15
730     };
731 
732     enum ImageFlags {
733          ImageFlags_INTERPOL         = 1
734         ,ImageFlags_USEALPHA         = 2
735         ,ImageFlags_MIPMAP           = 4
736         ,ImageFlags_IMAROT           = 16
737         ,ImageFlags_CALCALPHA        = 32
738         ,ImageFlags_NORMALMAP        = 2048
739         ,ImageFlags_GAUSS_MIP        = 4096
740         ,ImageFlags_FILTER_MIN       = 8192
741         ,ImageFlags_DERIVATIVEMAP   = 16384
742     };
743 
744     ID id FAIL;
745     // AnimData *adt;
746 
747     //float noisesize, turbul;
748     //float bright, contrast, rfac, gfac, bfac;
749     //float filtersize;
750 
751     //float mg_H, mg_lacunarity, mg_octaves, mg_offset, mg_gain;
752     //float dist_amount, ns_outscale;
753 
754     //float vn_w1;
755     //float vn_w2;
756     //float vn_w3;
757     //float vn_w4;
758     //float vn_mexp;
759     //short vn_distm, vn_coltype;
760 
761     //short noisedepth, noisetype;
762     //short noisebasis, noisebasis2;
763 
764     //short flag;
765     ImageFlags imaflag;
766     Type type FAIL;
767     //short stype;
768 
769     //float cropxmin, cropymin, cropxmax, cropymax;
770     //int texfilter;
771     //int afmax;
772     //short xrepeat, yrepeat;
773     //short extend;
774 
775     //short fie_ima;
776     //int len;
777     //int frames, offset, sfra;
778 
779     //float checkerdist, nabla;
780     //float norfac;
781 
782     //ImageUser iuser;
783 
784     //bNodeTree *nodetree;
785     //Ipo *ipo;
786     std::shared_ptr<Image> ima WARN;
787     //PluginTex *plugin;
788     //ColorBand *coba;
789     //EnvMap *env;
790     //PreviewImage * preview;
791     //PointDensity *pd;
792     //VoxelData *vd;
793 
794     //char use_nodes;
795 
TexTex796     Tex()
797     : ElemBase()
798     , imaflag( ImageFlags_INTERPOL )
799     , type( Type_CLOUDS )
800     , ima() {
801         // empty
802     }
803 };
804 
805 // -------------------------------------------------------------------------------
806 struct MTex : ElemBase {
807 
808     enum Projection {
809          Proj_N = 0
810         ,Proj_X = 1
811         ,Proj_Y = 2
812         ,Proj_Z = 3
813     };
814 
815     enum Flag {
816          Flag_RGBTOINT      = 0x1
817         ,Flag_STENCIL       = 0x2
818         ,Flag_NEGATIVE      = 0x4
819         ,Flag_ALPHAMIX      = 0x8
820         ,Flag_VIEWSPACE     = 0x10
821     };
822 
823     enum BlendType {
824          BlendType_BLEND            = 0
825         ,BlendType_MUL              = 1
826         ,BlendType_ADD              = 2
827         ,BlendType_SUB              = 3
828         ,BlendType_DIV              = 4
829         ,BlendType_DARK             = 5
830         ,BlendType_DIFF             = 6
831         ,BlendType_LIGHT            = 7
832         ,BlendType_SCREEN           = 8
833         ,BlendType_OVERLAY          = 9
834         ,BlendType_BLEND_HUE        = 10
835         ,BlendType_BLEND_SAT        = 11
836         ,BlendType_BLEND_VAL        = 12
837         ,BlendType_BLEND_COLOR      = 13
838     };
839 
840     enum MapType {
841          MapType_COL         = 1
842         ,MapType_NORM        = 2
843         ,MapType_COLSPEC     = 4
844         ,MapType_COLMIR      = 8
845         ,MapType_REF         = 16
846         ,MapType_SPEC        = 32
847         ,MapType_EMIT        = 64
848         ,MapType_ALPHA       = 128
849         ,MapType_HAR         = 256
850         ,MapType_RAYMIRR     = 512
851         ,MapType_TRANSLU     = 1024
852         ,MapType_AMB         = 2048
853         ,MapType_DISPLACE    = 4096
854         ,MapType_WARP        = 8192
855     };
856 
857     // short texco, maptoneg;
858     MapType mapto;
859 
860     BlendType blendtype;
861     std::shared_ptr<Object> object;
862     std::shared_ptr<Tex> tex;
863     char uvname[32];
864 
865     Projection projx,projy,projz;
866     char mapping;
867     float ofs[3], size[3], rot;
868 
869     int texflag;
870     short colormodel, pmapto, pmaptoneg;
871     //short normapspace, which_output;
872     //char brush_map_mode;
873     float r,g,b,k WARN;
874     //float def_var, rt;
875 
876     //float colfac, varfac;
877 
878     float norfac;
879     //float dispfac, warpfac;
880     float colspecfac, mirrfac, alphafac;
881     float difffac, specfac, emitfac, hardfac;
882     //float raymirrfac, translfac, ambfac;
883     //float colemitfac, colreflfac, coltransfac;
884     //float densfac, scatterfac, reflfac;
885 
886     //float timefac, lengthfac, clumpfac;
887     //float kinkfac, roughfac, padensfac;
888     //float lifefac, sizefac, ivelfac, pvelfac;
889     //float shadowfac;
890     //float zenupfac, zendownfac, blendfac;
891 
MTexMTex892     MTex()
893     : ElemBase() {
894         // empty
895     }
896 };
897 
898 }
899 }
900 #endif
901