(root)/
libredwg-0.13/
test/
unit-testing/
material.c
       1  // unstable
       2  #define DWG_TYPE DWG_TYPE_MATERIAL
       3  #include "common.c"
       4  
       5  void
       6  api_process (dwg_object *obj)
       7  {
       8    int error, isnew;
       9    BITCODE_T name;
      10    BITCODE_T description;
      11    Dwg_MATERIAL_color ambient_color;
      12    Dwg_MATERIAL_color diffuse_color;
      13    Dwg_MATERIAL_mapper diffusemap;
      14    BITCODE_BD specular_gloss_factor;
      15    Dwg_MATERIAL_color specular_color;
      16    Dwg_MATERIAL_mapper specularmap;
      17    Dwg_MATERIAL_mapper reflectionmap;
      18    BITCODE_BD opacity_percent;
      19    Dwg_MATERIAL_mapper opacitymap;
      20    Dwg_MATERIAL_mapper bumpmap;
      21    BITCODE_BD refraction_index;
      22    Dwg_MATERIAL_mapper refractionmap;
      23    BITCODE_BD color_bleed_scale;
      24    BITCODE_BD indirect_bump_scale;
      25    BITCODE_BD reflectance_scale;
      26    BITCODE_BD transmittance_scale;
      27    BITCODE_B two_sided_material;
      28    BITCODE_BD luminance;
      29    BITCODE_BS luminance_mode;
      30    BITCODE_BD translucence;
      31    BITCODE_BD self_illumination;
      32    BITCODE_BD reflectivity;
      33    BITCODE_BL illumination_model;
      34    BITCODE_BL channel_flags;
      35    BITCODE_BL mode;
      36    BITCODE_T genprocname;
      37    BITCODE_BS genproctype;
      38  
      39    Dwg_Version_Type dwg_version = obj->parent->header.version;
      40    dwg_obj_material *_obj = dwg_object_to_MATERIAL (obj);
      41  
      42    CHK_ENTITY_UTF8TEXT (_obj, MATERIAL, name);
      43    CHK_ENTITY_UTF8TEXT (_obj, MATERIAL, description);
      44  
      45  #define CHK_MATERIAL_COLOR(ambient_color)                                     \
      46    if (!dwg_dynapi_entity_value (_obj, "MATERIAL", #ambient_color,             \
      47                                  &ambient_color, NULL))                        \
      48      fail (#ambient_color);                                                    \
      49    CHK_SUBCLASS_TYPE (ambient_color, MATERIAL_color, flag, RC);                \
      50    CHK_SUBCLASS_TYPE (ambient_color, MATERIAL_color, factor, BD);              \
      51    if (ambient_color.flag == 1)                                                \
      52    CHK_SUBCLASS_TYPE (ambient_color, MATERIAL_color, rgb, BLx)
      53  
      54    CHK_MATERIAL_COLOR (ambient_color);
      55    CHK_MATERIAL_COLOR (diffuse_color);
      56  
      57  #define CHK_MATERIAL_MAP(diffusemap)                                          \
      58    if (!dwg_dynapi_entity_value (_obj, "MATERIAL", #diffusemap, &diffusemap,   \
      59                                  NULL))                                        \
      60      fail (#diffusemap);                                                       \
      61    CHK_SUBCLASS_TYPE (diffusemap, MATERIAL_mapper, blendfactor, BD);           \
      62    CHK_SUBCLASS_TYPE (diffusemap, MATERIAL_mapper, projection, RC);            \
      63    CHK_SUBCLASS_TYPE (diffusemap, MATERIAL_mapper, tiling, RC);                \
      64    CHK_SUBCLASS_TYPE (diffusemap, MATERIAL_mapper, autotransform, RC);         \
      65    CHK_SUBCLASS_VECTOR_TYPE (diffusemap, MATERIAL_mapper, transmatrix, 16,     \
      66                              BD);                                              \
      67    CHK_SUBCLASS_TYPE (diffusemap, MATERIAL_mapper, source, RC);                \
      68    if (diffusemap.source == 1)                                                 \
      69      CHK_SUBCLASS_UTF8TEXT (diffusemap, MATERIAL_mapper, filename);            \
      70    if (diffusemap.source == 2)                                                 \
      71      {                                                                         \
      72        CHK_SUBCLASS_TYPE (diffusemap, MATERIAL_mapper, texturemode, BS);       \
      73        if (diffusemap.texturemode < 2) /* not procedural */                    \
      74          {                                                                     \
      75            CHK_SUBCLASS_TYPE (diffusemap.color1, MATERIAL_color, flag, RC);    \
      76            CHK_SUBCLASS_TYPE (diffusemap.color1, MATERIAL_color, factor, BD);  \
      77            if (_obj->diffusemap.color1.flag == 1)                              \
      78              CHK_SUBCLASS_TYPE (diffusemap.color1, MATERIAL_color, rgb, BLx);  \
      79            CHK_SUBCLASS_TYPE (diffusemap.color2, MATERIAL_color, flag, RC);    \
      80            CHK_SUBCLASS_TYPE (diffusemap.color2, MATERIAL_color, factor, BD);  \
      81            if (_obj->diffusemap.color2.flag == 1)                              \
      82              CHK_SUBCLASS_TYPE (diffusemap.color2, MATERIAL_color, rgb, BLx);  \
      83          }                                                                     \
      84        else                                                                    \
      85          {                                                                     \
      86            CHK_ENTITY_TYPE (_obj, MATERIAL, genproctype, BS);                  \
      87            /* TODO procedural...*/                                             \
      88          }                                                                     \
      89      }
      90  
      91    CHK_MATERIAL_MAP (diffusemap)
      92    CHK_MATERIAL_COLOR (specular_color);
      93    CHK_ENTITY_TYPE (_obj, MATERIAL, specular_gloss_factor, BD);
      94    CHK_MATERIAL_MAP (specularmap)
      95    CHK_MATERIAL_MAP (reflectionmap)
      96    CHK_ENTITY_TYPE (_obj, MATERIAL, opacity_percent, BD);
      97    CHK_MATERIAL_MAP (opacitymap)
      98    CHK_MATERIAL_MAP (bumpmap)
      99    CHK_ENTITY_TYPE (_obj, MATERIAL, refraction_index, BD);
     100    CHK_MATERIAL_MAP (refractionmap)
     101  
     102  #if 0
     103    CHK_ENTITY_TYPE (_obj, MATERIAL, color_bleed_scale, BD);
     104    CHK_ENTITY_TYPE (_obj, MATERIAL, indirect_bump_scale, BD);
     105    CHK_ENTITY_TYPE (_obj, MATERIAL, reflectance_scale, BD);
     106    CHK_ENTITY_TYPE (_obj, MATERIAL, transmittance_scale, BD);
     107    CHK_ENTITY_TYPE (_obj, MATERIAL, two_sided_material, B);
     108    CHK_ENTITY_TYPE (_obj, MATERIAL, luminance, BD);
     109    CHK_ENTITY_TYPE (_obj, MATERIAL, luminance_mode, BS);
     110    CHK_ENTITY_TYPE (_obj, MATERIAL, normalmap_method, BS);
     111    CHK_ENTITY_TYPE (_obj, MATERIAL, normalmap_strength, BD);
     112    CHK_ENTITY_TYPE (_obj, MATERIAL, normalmap_source, BS);
     113    CHK_ENTITY_UTF8TEXT (_obj, MATERIAL, normalmap_filename);
     114    CHK_ENTITY_TYPE (_obj, MATERIAL, normalmap_blendfactor, BD);
     115    CHK_ENTITY_TYPE (_obj, MATERIAL, normalmap_projection, BS);
     116    CHK_ENTITY_TYPE (_obj, MATERIAL, normalmap_tiling, BS);
     117    CHK_ENTITY_TYPE (_obj, MATERIAL, normalmap_autotransform, BS);
     118    if (!dwg_dynapi_entity_value (_obj, "MATERIAL", "normalmap_transmatrix",
     119                                  &normalmap_transmatrix, NULL) || !normalmap_transmatrix)
     120      fail ("MATERIAL.normalmap_transmatrix");
     121    else
     122      for (int i = 0; i < 16; i++)
     123        {
     124          ok ("MATERIAL.normalmap_transmatrix[%d]: %f", i,
     125              normalmap_transmatrix[i]);
     126        }
     127    CHK_ENTITY_TYPE (_obj, MATERIAL, is_anonymous, B);
     128    CHK_ENTITY_TYPE (_obj, MATERIAL, global_illumination_mode, BS, global_illumination);
     129    CHK_ENTITY_TYPE (_obj, MATERIAL, final_gather_mode, BS, final_gather);
     130    CHK_ENTITY_UTF8TEXT (_obj, MATERIAL, genprocname);
     131    CHK_ENTITY_TYPE (_obj, MATERIAL, genprocvalbool, B);
     132    CHK_ENTITY_TYPE (_obj, MATERIAL, genprocvalint, BS);
     133    CHK_ENTITY_TYPE (_obj, MATERIAL, genprocvalreal, BD);
     134    CHK_ENTITY_UTF8TEXT (_obj, MATERIAL, genprocvaltext);
     135    CHK_ENTITY_TYPE (_obj, MATERIAL, genproctableend, B);
     136    CHK_ENTITY_CMC (_obj, MATERIAL, genprocvalcolorindex);
     137    CHK_ENTITY_TYPE (_obj, MATERIAL, genprocvalcolorrgb, BS);
     138    CHK_ENTITY_UTF8TEXT (_obj, MATERIAL, genprocvalcolorname);
     139  #endif
     140  
     141    SINCE (R_2007)
     142    {
     143      CHK_ENTITY_TYPE (_obj, MATERIAL, translucence, BD);
     144      CHK_ENTITY_TYPE (_obj, MATERIAL, self_illumination, BD);
     145      CHK_ENTITY_TYPE (_obj, MATERIAL, reflectivity, BD);
     146      CHK_ENTITY_TYPE (_obj, MATERIAL, illumination_model, BL);
     147      CHK_ENTITY_TYPE (_obj, MATERIAL, channel_flags, BL);
     148      CHK_ENTITY_TYPE (_obj, MATERIAL, mode, BL);
     149    }
     150  }