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