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