(root)/
libredwg-0.13/
test/
unit-testing/
3dsolid.c
       1  #define DWG_TYPE DWG_TYPE__3DSOLID
       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    dwg_point_3d pt3d;
      11  
      12    dwg_ent_3dsolid *_3dsolid = obj->tio.entity->tio._3DSOLID;
      13    Dwg_Version_Type dwg_version = obj->parent->header.version;
      14    error = 0;
      15  
      16    CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, acis_empty, B);
      17  #ifdef USE_DEPRECATED_API
      18    if (dwg_ent_3dsolid_get_acis_empty (_3dsolid, &error) != acis_empty || error)
      19      fail ("old API dwg_ent_3dsolid_get_acis_empty");
      20  #endif
      21    CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, version, BS);
      22  #ifdef USE_DEPRECATED_API
      23    if (dwg_ent_3dsolid_get_version (_3dsolid, &error) != version || error)
      24      fail ("old API dwg_ent_3dsolid_get_version");
      25  #endif
      26    CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, num_blocks, BL);
      27    CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, acis_data, TV);
      28  #ifdef USE_DEPRECATED_API
      29    if ((acis_data
      30         && strcmp ((char *)dwg_ent_3dsolid_get_acis_data (_3dsolid, &error),
      31                    (char *)acis_data))
      32        || error)
      33      fail ("old API dwg_ent_3dsolid_get_acis_data");
      34  #endif
      35  
      36    CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, wireframe_data_present, B);
      37  #ifdef USE_DEPRECATED_API
      38    if (dwg_ent_3dsolid_get_wireframe_data_present (_3dsolid, &error)
      39            != wireframe_data_present
      40        || error)
      41      fail ("old API dwg_ent_3dsolid_get_wireframe_data_present");
      42  #endif
      43    CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, point_present, B);
      44  #ifdef USE_DEPRECATED_API
      45    if (dwg_ent_3dsolid_get_point_present (_3dsolid, &error) != point_present
      46        || error)
      47      fail ("old API dwg_ent_3dsolid_get_point_present");
      48  #endif
      49  
      50    CHK_ENTITY_3RD (_3dsolid, 3DSOLID, point);
      51  #ifdef USE_DEPRECATED_API
      52    dwg_ent_3dsolid_get_point (_3dsolid, &pt3d, &error);
      53    if (error || memcmp (&point, &pt3d, sizeof (point)))
      54      fail ("old API dwg_ent_3dsolid_get_point");
      55  #endif
      56  
      57    CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, isoline_present, B);
      58  #ifdef USE_DEPRECATED_API
      59    if (dwg_ent_3dsolid_get_isoline_present (_3dsolid, &error) != isoline_present
      60        || error)
      61      fail ("old API dwg_ent_3dsolid_get_isoline_present");
      62  #endif
      63    CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, isolines, BL);
      64  #ifdef USE_DEPRECATED_API
      65    if (dwg_ent_3dsolid_get_isolines (_3dsolid, &error) != isolines || error)
      66      fail ("old API dwg_ent_3dsolid_get_isolines");
      67  #endif
      68    CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, num_wires, BL);
      69  #ifdef USE_DEPRECATED_API
      70    if (dwg_ent_3dsolid_get_num_wires (_3dsolid, &error) != num_wires || error)
      71      fail ("old API dwg_ent_3dsolid_get_num_wires");
      72  #endif
      73    CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, num_silhouettes, BL);
      74  #ifdef USE_DEPRECATED_API
      75    if (dwg_ent_3dsolid_get_num_silhouettes (_3dsolid, &error) != num_silhouettes
      76        || error)
      77      fail ("old API dwg_ent_3dsolid_get_num_sil");
      78  #endif
      79  
      80  #ifdef USE_DEPRECATED_API
      81    wires = dwg_ent_3dsolid_get_wires (_3dsolid, &error);
      82  #else
      83    wires = _3dsolid->wires;
      84  #endif
      85    if (!error)
      86      {
      87        for (i = 0; i < num_wires; i++)
      88          {
      89            CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, type, RC);
      90            CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, selection_marker, BLd);
      91            CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, color, BL);
      92            CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, acis_index, BLd);
      93            CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, num_points, BL);
      94            CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_x);
      95            CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_y);
      96            CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, axis_z);
      97            CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, translation);
      98            CHK_SUBCLASS_3RD (wires[i], 3DSOLID_wire, scale);
      99          }
     100  #ifdef USE_DEPRECATED_API
     101        free (wires);
     102  #endif
     103      }
     104    else
     105      fail ("wires");
     106  
     107  #ifdef USE_DEPRECATED_API
     108    silhouettes = dwg_ent_3dsolid_get_silhouettes (_3dsolid, &error);
     109  #else
     110    silhouettes = _3dsolid->silhouettes;
     111  #endif
     112    if (!error)
     113      {
     114        for (i = 0; i < num_silhouettes; i++)
     115          {
     116            CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, vp_id, BL);
     117            CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette, vp_target);
     118            CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette,
     119                              vp_dir_from_target);
     120            CHK_SUBCLASS_3RD (silhouettes[i], 3DSOLID_silhouette, vp_up_dir);
     121            CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette,
     122                               vp_perspective, B);
     123            CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, has_wires, B);
     124            if (silhouettes[i].has_wires)
     125              {
     126                wires = silhouettes[i].wires;
     127                CHK_SUBCLASS_TYPE (silhouettes[i], 3DSOLID_silhouette, num_wires,
     128                                   BL);
     129                for (unsigned j = 0; j < silhouettes[i].num_wires; j++)
     130                  {
     131                    CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, type, RC);
     132                    CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, selection_marker,
     133                                       BLd);
     134                    CHK_SUBCLASS_TYPE (wires[i], 3DSOLID_wire, color, BL);
     135                    CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, acis_index, BLd);
     136                    CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, num_points, BL);
     137                    CHK_SUBCLASS_3DPOINTS (wires[j], 3DSOLID_wire, points,
     138                                           wires[i].num_points);
     139                    CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, transform_present,
     140                                       B);
     141                    if (wires[j].transform_present)
     142                      {
     143                        CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_x);
     144                        CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_y);
     145                        CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, axis_z);
     146                        CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, translation);
     147                        CHK_SUBCLASS_3RD (wires[j], 3DSOLID_wire, scale);
     148                        CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, has_rotation,
     149                                           B);
     150                        CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire,
     151                                           has_reflection, B);
     152                        CHK_SUBCLASS_TYPE (wires[j], 3DSOLID_wire, has_shear, B);
     153                      }
     154                  }
     155              }
     156          }
     157  #ifdef USE_DEPRECATED_API
     158        free (silhouettes);
     159  #endif
     160      }
     161    else
     162      fail ("silhouettes");
     163  
     164    SINCE (R_2007)
     165    {
     166      CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, num_materials, BL);
     167      if (!dwg_dynapi_entity_value (_3dsolid, "3DSOLID", "materials", &materials,
     168                                    NULL))
     169        fail ("3DSOLID.materials");
     170      else
     171        for (i = 0; i < num_materials; i++)
     172          {
     173            CHK_SUBCLASS_TYPE (_3dsolid->materials[i], 3DSOLID_material,
     174                               array_index, BL);
     175            CHK_SUBCLASS_TYPE (_3dsolid->materials[i], 3DSOLID_material,
     176                               mat_absref, BL);
     177            CHK_SUBCLASS_H (_3dsolid->materials[i], 3DSOLID_material,
     178                            material_handle);
     179          }
     180      CHK_ENTITY_H (_3dsolid, 3DSOLID, history_id);
     181    }
     182    SINCE (R_2013)
     183    {
     184      CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, has_revision_guid, B);
     185      if (has_revision_guid)
     186        {
     187          CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, revision_guid, TF);
     188          CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, revision_major, BL);
     189          CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, revision_minor1, BS);
     190          CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, revision_minor2, BS);
     191          CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, revision_bytes, TF);
     192        }
     193      CHK_ENTITY_TYPE (_3dsolid, 3DSOLID, end_marker, BL);
     194    }
     195  }