(root)/
libredwg-0.13/
test/
unit-testing/
region.c
       1  #define DWG_TYPE DWG_TYPE_REGION
       2  #include "common.c"
       3  
       4  void
       5  api_process (dwg_object *obj)
       6  {
       7    int error;
       8    BITCODE_BL i;
       9    _3DSOLID_FIELDS;
      10  
      11    dwg_ent_region *region = dwg_object_to_REGION (obj);
      12    Dwg_Version_Type dwg_version = obj->parent->header.version;
      13  
      14    CHK_ENTITY_TYPE_W_OLD (region, REGION, acis_empty, B);
      15    CHK_ENTITY_TYPE_W_OLD (region, REGION, version, BS);
      16    CHK_ENTITY_TYPE (region, REGION, num_blocks, BL);
      17    CHK_ENTITY_TYPE (region, REGION, acis_data, TV);
      18  #ifdef USE_DEPRECATED_API
      19    if ((acis_data
      20         && strcmp ((char *)dwg_ent_region_get_acis_data (region, &error),
      21                    (char *)acis_data))
      22        || error)
      23      {
      24        fail ("old API dwg_ent_region_get_acis_data");
      25      }
      26  #endif
      27  
      28    CHK_ENTITY_TYPE_W_OLD (region, REGION, wireframe_data_present, B);
      29    CHK_ENTITY_TYPE_W_OLD (region, REGION, point_present, B);
      30    CHK_ENTITY_3RD_W_OLD (region, REGION, point);
      31    CHK_ENTITY_TYPE_W_OLD (region, REGION, isoline_present, B);
      32    CHK_ENTITY_TYPE_W_OLD (region, REGION, isolines, BL);
      33    CHK_ENTITY_TYPE_W_OLD (region, REGION, num_wires, BL);
      34    CHK_ENTITY_TYPE_W_OLD (region, REGION, num_silhouettes, BL);
      35  
      36  #ifdef USE_DEPRECATED_API
      37    wires = dwg_ent_region_get_wires (region, &error);
      38  #else
      39    wires = region->wires;
      40    error = 0;
      41  #endif
      42    if (!error)
      43      {
      44        for (i = 0; i < num_wires; i++)
      45          {
      46            CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, type, RC);
      47            CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, selection_marker, BLd);
      48            CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, color, BL);
      49            CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, acis_index, BLd);
      50            CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, num_points, BL);
      51            CHK_SUBCLASS_3DPOINTS (wires[i], 3DSOLID_wire, points,
      52                                   wires[i].num_points);
      53            CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, transform_present, B);
      54            if (wires[i].transform_present)
      55              {
      56                CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_x);
      57                CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_y);
      58                CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_z);
      59                CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, translation);
      60                CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, scale);
      61                CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, has_rotation, B);
      62                CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, has_reflection, B);
      63                CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, has_shear, B);
      64              }
      65          }
      66  #ifdef USE_DEPRECATED_API
      67        free (wires);
      68  #endif
      69      }
      70    else
      71      fail ("dwg_ent_region_get_wires");
      72  
      73  #ifdef USE_DEPRECATED_API
      74    silhouettes = dwg_ent_region_get_silhouettes (region, &error);
      75  #else
      76    silhouettes = region->silhouettes;
      77  #endif
      78    if (!error)
      79      {
      80        for (i = 0; i < num_silhouettes; i++)
      81          {
      82            CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, vp_id, BL);
      83            CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette, vp_target);
      84            CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette,
      85                              vp_dir_from_target);
      86            CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette, vp_up_dir);
      87            CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette,
      88                               vp_perspective, B);
      89            CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, has_wires, B);
      90            if (silhouettes[i].has_wires)
      91              {
      92                wires = silhouettes[i].wires;
      93                CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, num_wires,
      94                                   BL);
      95                for (unsigned j = 0; j < silhouettes[i].num_wires; j++)
      96                  {
      97                    CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, type, RC);
      98                    CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, selection_marker,
      99                                       BLd);
     100                    CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, color, BL);
     101                    CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, acis_index, BLd);
     102                    CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, num_points, BL);
     103                    CHK_SUBCLASS_3DPOINTS (wires[j], 3DSOLID_wire, points,
     104                                           wires[i].num_points);
     105                    CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, transform_present,
     106                                       B);
     107                    if (wires[j].transform_present)
     108                      {
     109                        CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_x);
     110                        CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_y);
     111                        CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_z);
     112                        CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, translation);
     113                        CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, scale);
     114                        CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, has_rotation,
     115                                           B);
     116                        CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire,
     117                                           has_reflection, B);
     118                        CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, has_shear, B);
     119                      }
     120                  }
     121              }
     122          }
     123  #ifdef USE_DEPRECATED_API
     124        free (silhouettes);
     125  #endif
     126      }
     127    else
     128      fail ("dwg_ent_body_get_silhouettes");
     129  
     130    if (version > 1)
     131      {
     132        CHK_ENTITY_TYPE (region, REGION, num_materials, BL);
     133        SINCE (R_2007)
     134        {
     135          if (!dwg_dynapi_entity_value (region, "REGION", "materials",
     136                                        &materials, NULL))
     137            fail ("REGION.materials");
     138          else
     139            {
     140              for (i = 0; i < num_materials; i++)
     141                {
     142                  CHK_SUBCLASS_TYPE (materials[i], 3DSOLID_material, array_index,
     143                                     BL);
     144                  CHK_SUBCLASS_TYPE (materials[i], 3DSOLID_material, mat_absref,
     145                                     BL);
     146                  CHK_SUBCLASS_H (materials[i], 3DSOLID_material,
     147                                  material_handle);
     148                }
     149            }
     150        }
     151      }
     152    CHK_ENTITY_TYPE (region, REGION, has_revision_guid, B);
     153    if (has_revision_guid)
     154      {
     155        CHK_ENTITY_TYPE (region, REGION, revision_major, BL);
     156        CHK_ENTITY_TYPE (region, REGION, revision_minor1, BS);
     157        CHK_ENTITY_TYPE (region, REGION, revision_minor2, BS);
     158        CHK_ENTITY_TYPE (region, REGION, revision_bytes, TV);
     159        CHK_ENTITY_TYPE (region, REGION, end_marker, BL);
     160      }
     161  
     162    SINCE (R_2007)
     163    {
     164      CHK_ENTITY_H (region, REGION, history_id);
     165    }
     166  }