LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/cad/libopencad - cadobjects.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 21 60 35.0 %
Date: 2024-11-21 22:18:42 Functions: 32 107 29.9 %

          Line data    Source code
       1             : /*******************************************************************************
       2             :  *  Project: libopencad
       3             :  *  Purpose: OpenSource CAD formats support library
       4             :  *  Author: Alexandr Borzykh, mush3d at gmail.com
       5             :  *  Author: Dmitry Baryshnikov, bishop.dev@gmail.com
       6             :  *  Language: C++
       7             :  *******************************************************************************
       8             :  *  The MIT License (MIT)
       9             :  *
      10             :  *  Copyright (c) 2016 Alexandr Borzykh
      11             :  *  Copyright (c) 2016-2018 NextGIS, <info@nextgis.com>
      12             :  *
      13             :   * SPDX-License-Identifier: MIT
      14             :  *******************************************************************************/
      15             : 
      16             : #ifndef CADOBJECTS_H
      17             : #define CADOBJECTS_H
      18             : 
      19             : #include "cadheader.h"
      20             : 
      21             : #ifndef CPL_NON_FINAL
      22             : #define CPL_NON_FINAL
      23             : #endif
      24             : 
      25             : /*
      26             :  * @brief Class which basically implements implements 3D vertex
      27             :  */
      28             : class OCAD_EXTERN CADVector
      29             : {
      30             : public:
      31             :     CADVector();
      32             :     CADVector( double dx, double dy );
      33             :     CADVector( double dx, double dy, double dz );
      34             :     CADVector( const CADVector& other );
      35             :     friend bool operator==( const CADVector& first, const CADVector& second );
      36             :     CADVector& operator=( const CADVector& second );
      37             :     double getX() const;
      38             :     void   setX( double value );
      39             : 
      40             :     double getY() const;
      41             :     void   setY( double value );
      42             : 
      43             :     double getZ() const;
      44             :     void   setZ( double value );
      45             : 
      46             :     bool getBHasZ() const;
      47             :     void setBHasZ( bool value );
      48             : 
      49             : protected:
      50             :     inline static bool fcmp( double x, double y );
      51             : protected:
      52             :     double X;
      53             :     double Y;
      54             :     double Z;
      55             :     bool   bHasZ;
      56             : };
      57             : 
      58             : typedef struct _Eed
      59             : {
      60             :     short                 dLength = 0;
      61             :     CADHandle             hApplication;
      62             :     std::vector<unsigned char> acData;
      63             : } CADEed;
      64             : 
      65             : typedef std::vector<CADHandle> CADHandleArray;
      66             : typedef std::vector<CADEed>    CADEedArray;
      67             : 
      68             : /**
      69             :  * @brief The base CAD object class
      70             :  */
      71             : class OCAD_EXTERN CADObject
      72             : {
      73             : public:
      74             :     enum ObjectType
      75             :     {
      76             :         UNUSED               = 0x0,  // 0
      77             :         TEXT                 = 0x1,  // 1
      78             :         ATTRIB               = 0x2,  // 2
      79             :         ATTDEF               = 0x3,  // 3
      80             :         BLOCK                = 0x4,  // 4
      81             :         ENDBLK               = 0x5,  // 5
      82             :         SEQEND               = 0x6,  // 6
      83             :         INSERT               = 0x7,  // 7
      84             :         MINSERT1             = 0x8,  // 8
      85             :         MINSERT2             = 0x9,  // 9
      86             :         VERTEX2D             = 0x0A, // 10
      87             :         VERTEX3D             = 0x0B, // 11
      88             :         VERTEX_MESH          = 0x0C, // 12
      89             :         VERTEX_PFACE         = 0x0D, // 13
      90             :         VERTEX_PFACE_FACE    = 0x0E, // 14
      91             :         POLYLINE2D           = 0x0F, // 15
      92             :         POLYLINE3D           = 0x10, // 16
      93             :         ARC                  = 0x11, // 17
      94             :         CIRCLE               = 0x12, // 18
      95             :         LINE                 = 0x13, // 19
      96             :         DIMENSION_ORDINATE   = 0x14, // 20
      97             :         DIMENSION_LINEAR     = 0x15, // 21
      98             :         DIMENSION_ALIGNED    = 0x16, // 22
      99             :         DIMENSION_ANG_3PT    = 0x17, // 23
     100             :         DIMENSION_ANG_2LN    = 0x18, // 24
     101             :         DIMENSION_RADIUS     = 0x19, // 25
     102             :         DIMENSION_DIAMETER   = 0x1A, // 26
     103             :         POINT                = 0x1B, // 27
     104             :         FACE3D               = 0x1C, // 28
     105             :         POLYLINE_PFACE       = 0x1D, // 29
     106             :         POLYLINE_MESH        = 0x1E, // 30
     107             :         SOLID                = 0x1F, // 31
     108             :         TRACE                = 0x20, // 32
     109             :         SHAPE                = 0x21, // 33
     110             :         VIEWPORT             = 0x22, // 34
     111             :         ELLIPSE              = 0x23, // 35
     112             :         SPLINE               = 0x24, // 36
     113             :         REGION               = 0x25, // 37
     114             :         SOLID3D              = 0x26, // 38
     115             :         BODY                 = 0x27, // 39
     116             :         RAY                  = 0x28, // 40
     117             :         XLINE                = 0x29, // 41
     118             :         DICTIONARY           = 0x2A, // 42
     119             :         OLEFRAME             = 0x2B, // 43
     120             :         MTEXT                = 0x2C, // 44
     121             :         LEADER               = 0x2D, // 45
     122             :         TOLERANCE            = 0x2E, // 46
     123             :         MLINE                = 0x2F, // 47
     124             :         BLOCK_CONTROL_OBJ    = 0x30, // 48
     125             :         BLOCK_HEADER         = 0x31, // 49
     126             :         LAYER_CONTROL_OBJ    = 0x32, // 50
     127             :         LAYER                = 0x33, // 51
     128             :         STYLE_CONTROL_OBJ    = 0x34, // 52
     129             :         STYLE1               = 0x35, // 53
     130             :         STYLE2               = 0x36, // 54
     131             :         STYLE3               = 0x37, // 55
     132             :         LTYPE_CONTROL_OBJ    = 0x38, // 56
     133             :         LTYPE1               = 0x39, // 57
     134             :         LTYPE2               = 0x3A, // 58
     135             :         LTYPE3               = 0x3B, // 59
     136             :         VIEW_CONTROL_OBJ     = 0x3C, // 60
     137             :         VIEW                 = 0x3D, // 61
     138             :         UCS_CONTROL_OBJ      = 0x3E, // 62
     139             :         UCS                  = 0x3F, // 63
     140             :         VPORT_CONTROL_OBJ    = 0x40, // 64
     141             :         VPORT                = 0x41, // 65
     142             :         APPID_CONTROL_OBJ    = 0x42, // 66
     143             :         APPID                = 0x43, // 67
     144             :         DIMSTYLE_CONTROL_OBJ = 0x44, // 68
     145             :         DIMSTYLE             = 0x45, // 69
     146             :         VP_ENT_HDR_CTRL_OBJ  = 0x46, // 70
     147             :         VP_ENT_HDR           = 0x47, // 71
     148             :         GROUP                = 0x48, // 72
     149             :         MLINESTYLE           = 0x49, // 73
     150             :         OLE2FRAME            = 0x4A, // 74
     151             :         DUMMY                = 0x4B, // 75
     152             :         LONG_TRANSACTION     = 0x4C, // 76
     153             :         LWPOLYLINE           = 0x4D, // 77
     154             :         HATCH                = 0x4E, // 78
     155             :         XRECORD              = 0x4F, // 79
     156             :         ACDBPLACEHOLDER      = 0x50, // 80
     157             :         VBA_PROJECT          = 0x51, // 81
     158             :         LAYOUT               = 0x52, // 82
     159             :         // Codes below aren't fixed, libopencad uses it for reading, in writing it will be different!
     160             :         CELLSTYLEMAP         = 0x53, // 83
     161             :         DBCOLOR              = 0x54, // 84
     162             :         DICTIONARYVAR        = 0x55, // 85
     163             :         DICTIONARYWDFLT      = 0x56, // 86
     164             :         FIELD                = 0x57, // 87
     165             :         GROUP_UNFIXED        = 0x58, // 88
     166             :         HATCH_UNFIXED        = 0x59, // 89
     167             :         IDBUFFER             = 0x5A, // 90
     168             :         IMAGE                = 0x5B, // 91
     169             :         IMAGEDEF             = 0x5C, // 92
     170             :         IMAGEDEFREACTOR      = 0x5D, // 93
     171             :         LAYER_INDEX          = 0x5E, // 94
     172             :         LAYOUT_UNFIXED       = 0x5F, // 95
     173             :         LWPOLYLINE_UNFIXED   = 0x60, // 96
     174             :         MATERIAL             = 0x61, // 97
     175             :         MLEADER              = 0x62, // 98
     176             :         MLEADERSTYLE         = 0x63, // 99
     177             :         OLE2FRAME_UNFIXED    = 0x64, // 100
     178             :         PLACEHOLDER          = 0x65, // 101
     179             :         PLOTSETTINGS         = 0x66, // 102
     180             :         RASTERVARIABLES      = 0x67, // 103
     181             :         SCALE                = 0x68, // 104
     182             :         SORTENTSTABLE        = 0x69, // 105
     183             :         SPATIAL_FILTER       = 0x6A, // 106
     184             :         SPATIAL_INDEX        = 0x6B, // 107
     185             :         TABLEGEOMETRY        = 0x6C, // 108
     186             :         TABLESTYLES          = 0x6D, // 109
     187             :         VBA_PROJECT_UNFIXED  = 0x6E, // 110
     188             :         VISUALSTYLE          = 0x6F, // 111
     189             :         WIPEOUTVARIABLE      = 0x70, // 112
     190             :         XRECORD_UNFIXED      = 0x71, // 113
     191             :         WIPEOUT              = 0x72  // 114
     192             :     };
     193             : 
     194         205 :     virtual ~CADObject(){}
     195             : 
     196             :     ObjectType getType() const;
     197             :     long       getSize() const;
     198             : 
     199             :     void setSize( long value );
     200             : 
     201             :     short getCRC() const;
     202             :     void  setCRC(unsigned short value );
     203             : 
     204             : protected:
     205             :     long       size;
     206             :     ObjectType type;
     207             :     unsigned short CRC;
     208             : 
     209         205 :     explicit CADObject(ObjectType typeIn) : size(0), type(typeIn), CRC(0) {}
     210             : };
     211             : 
     212             : std::string getNameByType( CADObject::ObjectType eType );
     213             : bool   isCommonEntityType( short nType );
     214             : bool   isSupportedGeometryType( short nType );
     215             : 
     216             : /**
     217             :  * @brief The CADCommonED struct
     218             :  */
     219             : struct CADCommonED
     220             : {
     221             :     long        nObjectSizeInBits;
     222             :     CADHandle   hObjectHandle;
     223             :     CADEedArray aEED;
     224             : 
     225             :     bool         bGraphicsPresented;
     226             :     std::vector<char> abyGraphicsData;
     227             : 
     228             :     unsigned char bbEntMode;
     229             :     long          nNumReactors;
     230             : 
     231             :     bool bNoXDictionaryHandlePresent;
     232             :     bool bBinaryDataPresent;
     233             : 
     234             :     bool bIsByLayerLT; // R13-14 only
     235             : 
     236             :     bool  bNoLinks;
     237             :     short nCMColor;
     238             : 
     239             :     double        dfLTypeScale;
     240             :     unsigned char bbLTypeFlags;
     241             :     unsigned char bbPlotStyleFlags;
     242             :     char          bbMaterialFlags;
     243             :     char          nShadowFlags;
     244             : 
     245             :     short         nInvisibility;
     246             :     unsigned char nLineWeight;
     247             : 
     248          70 :     CADCommonED() :
     249             :         nObjectSizeInBits(0),
     250             :         bGraphicsPresented(false),
     251             :         bbEntMode(0),
     252             :         nNumReactors(0),
     253             :         bNoXDictionaryHandlePresent(false),
     254             :         bBinaryDataPresent(false),
     255             :         bIsByLayerLT(false),
     256             :         bNoLinks(false),
     257             :         nCMColor(0),
     258             :         dfLTypeScale(0.0),
     259             :         bbLTypeFlags(0),
     260             :         bbPlotStyleFlags(0),
     261             :         bbMaterialFlags(0),
     262             :         nShadowFlags(0),
     263             :         nInvisibility(0),
     264          70 :         nLineWeight(0)
     265             :     {
     266          70 :     }
     267             : };
     268             : 
     269             : /**
     270             :  * @brief The CADCommonEHD struct
     271             :  */
     272             : struct CADCommonEHD
     273             : {
     274             :     CADHandle      hOwner; // depends on entmode.
     275             :     CADHandleArray hReactors;
     276             :     CADHandle      hXDictionary;
     277             :     CADHandle      hLayer;
     278             :     CADHandle      hLType;
     279             : 
     280             :     CADHandle hPrevEntity;
     281             :     CADHandle hNextEntity;
     282             : 
     283             :     CADHandle hColorBookHandle;
     284             : 
     285             :     CADHandle hMaterial;
     286             :     CADHandle hPlotStyle;
     287             : 
     288             :     CADHandle hFullVisualStyle;
     289             :     CADHandle hFaceVisualStyle;
     290             :     CADHandle hEdgeVisualStyle;
     291             : };
     292             : 
     293             : /*
     294             :  * @brief The abstract class, which contains data common to all entities
     295             :  */
     296             : class CADEntityObject CPL_NON_FINAL: public CADObject
     297             : {
     298             : public:
     299          35 :     explicit CADEntityObject(ObjectType typeIn): CADObject(typeIn) {}
     300             : 
     301          53 :     virtual ~CADEntityObject(){}
     302             :     struct CADCommonED  stCed;
     303             :     struct CADCommonEHD stChed;
     304             : };
     305             : 
     306             : /**
     307             :  * @brief The CAD Text Object class
     308             :  */
     309             : class CADTextObject final: public CADEntityObject
     310             : {
     311             : public:
     312             :     CADTextObject();
     313           8 :     virtual ~CADTextObject(){}
     314             :     unsigned char DataFlags;
     315             :     double        dfElevation;
     316             :     CADVector     vertInsetionPoint;
     317             :     CADVector     vertAlignmentPoint;
     318             :     CADVector     vectExtrusion;
     319             :     double        dfThickness;
     320             :     double        dfObliqueAng;
     321             :     double        dfRotationAng;
     322             :     double        dfHeight;
     323             :     double        dfWidthFactor;
     324             :     std::string   sTextValue;
     325             :     short         dGeneration;
     326             :     short         dHorizAlign;
     327             :     short         dVertAlign;
     328             : 
     329             :     CADHandle hStyle;
     330             : };
     331             : 
     332             : /**
     333             :  * @brief The CAD Attribute Object class
     334             :  */
     335             : class CADAttribObject CPL_NON_FINAL: public CADEntityObject
     336             : {
     337             : public:
     338             :     explicit CADAttribObject( ObjectType typeIn = ATTRIB );
     339           5 :     virtual ~CADAttribObject(){}
     340             :     unsigned char DataFlags;
     341             :     double        dfElevation;
     342             :     CADVector     vertInsetionPoint;
     343             :     CADVector     vertAlignmentPoint;
     344             :     CADVector     vectExtrusion;
     345             :     double        dfThickness;
     346             :     double        dfObliqueAng;
     347             :     double        dfRotationAng;
     348             :     double        dfHeight;
     349             :     double        dfWidthFactor;
     350             :     std::string   sTextValue;
     351             :     short         dGeneration;
     352             :     short         dHorizAlign;
     353             :     short         dVertAlign;
     354             :     char          dVersion; // R2010+
     355             :     std::string   sTag;
     356             :     short         nFieldLength;
     357             :     unsigned char nFlags;
     358             :     bool          bLockPosition;
     359             : 
     360             :     CADHandle hStyle;
     361             : };
     362             : 
     363             : /**
     364             :  * @brief The CAD Attribute definition Object class
     365             :  */
     366             : class CADAttdefObject final: public CADAttribObject
     367             : {
     368             : public:
     369             :     CADAttdefObject();
     370          10 :     virtual ~CADAttdefObject(){}
     371             :     std::string sPrompt;
     372             : };
     373             : 
     374             : /**
     375             :  * @brief The CAD Block Object class
     376             :  */
     377             : class CADBlockObject final: public CADEntityObject
     378             : {
     379             : public:
     380             :     CADBlockObject();
     381           0 :     virtual ~CADBlockObject(){}
     382             :     std::string sBlockName;
     383             : };
     384             : 
     385             : /**
     386             :  * @brief The CAD End block Object class
     387             :  */
     388             : //TODO: do we need this class? Maybe CADEntityObject is enough?
     389             : class CADEndblkObject final: public CADEntityObject
     390             : {
     391             : public:
     392             :     CADEndblkObject();
     393           0 :     virtual ~CADEndblkObject(){}
     394             :     // it actually has nothing more than CED and CEHD.
     395             : };
     396             : 
     397             : /**
     398             :  * @brief The CADSeqendObject class
     399             :  */
     400             : //TODO: do we need this class? Maybe CADEntityObject is enough?
     401             : class CADSeqendObject final: public CADEntityObject
     402             : {
     403             : public:
     404             :     CADSeqendObject();
     405           0 :     virtual ~CADSeqendObject(){}
     406             :     // it actually has nothing more than CED and CEHD.
     407             : };
     408             : 
     409             : /**
     410             :  * @brief The CADInsertObject class
     411             :  */
     412             : class CADInsertObject final: public CADEntityObject
     413             : {
     414             : public:
     415             :     explicit CADInsertObject( ObjectType typeIn = INSERT );
     416           0 :     virtual ~CADInsertObject(){}
     417             :     CADVector vertInsertionPoint;
     418             :     CADVector vertScales;
     419             :     double    dfRotation;
     420             :     CADVector vectExtrusion;
     421             :     bool      bHasAttribs;
     422             :     long      nObjectsOwned;
     423             : 
     424             :     CADHandle      hBlockHeader;
     425             :     CADHandleArray hAttribs;
     426             :     CADHandle      hSeqend; // if bHasAttribs == true
     427             : };
     428             : 
     429             : /**
     430             :  * @brief The CADMInsertObject class
     431             :  */
     432             : class CADMInsertObject final: public CADEntityObject
     433             : {
     434             : public:
     435             :     CADMInsertObject();
     436           0 :     virtual ~CADMInsertObject(){}
     437             :     CADVector vertInsertionPoint;
     438             :     CADVector vertScales;
     439             :     double    dfRotation;
     440             :     CADVector vectExtrusion;
     441             :     bool      bHasAttribs;
     442             :     long      nObjectsOwned;
     443             : 
     444             :     short nNumCols;
     445             :     short nNumRows;
     446             :     short nColSpacing;
     447             :     short nRowSpacing;
     448             : 
     449             :     CADHandle      hBlockHeader;
     450             :     CADHandleArray hAtrribs;
     451             :     CADHandle      hSeqend; // if bHasAttribs == true
     452             : };
     453             : 
     454             : /**
     455             :  * @brief The CADVertex2DObject class
     456             :  */
     457             : class CADVertex2DObject final: public CADEntityObject
     458             : {
     459             : public:
     460             :     CADVertex2DObject();
     461           0 :     virtual ~CADVertex2DObject(){}
     462             :     CADVector vertPosition; // Z must be taken from 2d polyline elevation.
     463             :     double    dfStartWidth;
     464             :     double    dfEndWidth;
     465             :     double    dfBulge;
     466             :     long      nVertexID;
     467             :     double    dfTangentDir;
     468             : 
     469             : /* NOTES: Neither elevation nor thickness are present in the 2D VERTEX data.
     470             :  * Both should be taken from the 2D POLYLINE entity (15)
     471             :  */
     472             : };
     473             : 
     474             : /**
     475             :  * @brief The CADVertex3DObject class
     476             :  */
     477             : // TODO: do we need so many identical classes. Maybe CADVector(enum ObjectType eType)
     478             : // for all cases?
     479             : class CADVertex3DObject final: public CADEntityObject
     480             : {
     481             : public:
     482             :     CADVertex3DObject();
     483           0 :     virtual ~CADVertex3DObject(){}
     484             :     CADVector vertPosition;
     485             : };
     486             : 
     487             : /**
     488             :  * @brief The CADVertexMesh class
     489             :  */
     490             : class CADVertexMeshObject final: public CADEntityObject
     491             : {
     492             : public:
     493             :     CADVertexMeshObject();
     494           0 :     virtual ~CADVertexMeshObject(){}
     495             :     CADVector vertPosition;
     496             : };
     497             : 
     498             : /**
     499             :  * @brief The CADVertexPFaceObject class
     500             :  */
     501             : class CADVertexPFaceObject final: public CADEntityObject
     502             : {
     503             : public:
     504             :     CADVertexPFaceObject();
     505           0 :     virtual ~CADVertexPFaceObject(){}
     506             :     CADVector vertPosition;
     507             : };
     508             : 
     509             : /**
     510             :  * @brief The CADVertexPFaceFaceObject class
     511             :  */
     512             : class CADVertexPFaceFaceObject final: public CADEntityObject
     513             : {
     514             : public:
     515             :     CADVertexPFaceFaceObject();
     516           0 :     virtual ~CADVertexPFaceFaceObject(){}
     517             :     // TODO: check DXF ref to get info what does it mean.
     518             :     short iVertexIndex1;
     519             :     short iVertexIndex2;
     520             :     short iVertexIndex3;
     521             :     short iVertexIndex4;
     522             : };
     523             : 
     524             : /**
     525             :  * @brief The CADPolyline2DObject class
     526             :  */
     527             : class CADPolyline2DObject final: public CADEntityObject
     528             : {
     529             : public:
     530             :     CADPolyline2DObject();
     531           0 :     virtual ~CADPolyline2DObject(){}
     532             :     short     dFlags;
     533             :     short     dCurveNSmoothSurfType;
     534             :     double    dfStartWidth;
     535             :     double    dfEndWidth;
     536             :     double    dfThickness;
     537             :     double    dfElevation;
     538             :     CADVector vectExtrusion;
     539             : 
     540             :     long nObjectsOwned;
     541             : 
     542             :     CADHandleArray hVertices; // content really depends on DWG version.
     543             : 
     544             :     CADHandle hSeqend;
     545             : };
     546             : 
     547             : /**
     548             :  * @brief The CADPolyline3DObject class
     549             :  */
     550             : class CADPolyline3DObject final: public CADEntityObject
     551             : {
     552             : public:
     553             :     CADPolyline3DObject();
     554           0 :     virtual ~CADPolyline3DObject(){}
     555             :     unsigned char SplinedFlags;
     556             :     unsigned char ClosedFlags;
     557             : 
     558             :     long nObjectsOwned;
     559             : 
     560             :     CADHandleArray hVertices; // content really depends on DWG version.
     561             : 
     562             :     CADHandle hSeqend;
     563             : };
     564             : 
     565             : /**
     566             :  * @brief The CADArc class
     567             :  */
     568             : class CADArcObject final: public CADEntityObject
     569             : {
     570             : public:
     571             :     CADArcObject();
     572           0 :     virtual ~CADArcObject(){}
     573             :     CADVector vertPosition;
     574             :     double    dfRadius;
     575             :     double    dfThickness;
     576             :     CADVector vectExtrusion;
     577             :     double    dfStartAngle;
     578             :     double    dfEndAngle;
     579             : };
     580             : 
     581             : /**
     582             :  * @brief The CADCircleObject class
     583             :  */
     584             : class CADCircleObject final: public CADEntityObject
     585             : {
     586             : public:
     587             :     CADCircleObject();
     588           6 :     virtual ~CADCircleObject(){}
     589             :     CADVector vertPosition;
     590             :     double    dfRadius;
     591             :     double    dfThickness;
     592             :     CADVector vectExtrusion;
     593             : };
     594             : 
     595             : /**
     596             :  * @brief The CADLineObject class
     597             :  */
     598             : class CADLineObject final: public CADEntityObject
     599             : {
     600             : public:
     601             :     CADLineObject();
     602           2 :     virtual ~CADLineObject(){}
     603             :     CADVector vertStart;
     604             :     CADVector vertEnd;
     605             :     double    dfThickness;
     606             :     CADVector vectExtrusion;
     607             : };
     608             : 
     609             : /**
     610             :  * @brief The CADBaseControlObject class
     611             :  */
     612             : class CADBaseControlObject CPL_NON_FINAL: public CADObject
     613             : {
     614             : public:
     615         170 :     virtual ~CADBaseControlObject(){}
     616             :     long           nObjectSizeInBits;
     617             :     CADHandle      hObjectHandle;
     618             :     CADEedArray    aEED;
     619             :     long           nNumReactors;
     620             :     bool           bNoXDictionaryPresent;
     621             : 
     622             : protected:
     623             :     explicit CADBaseControlObject(ObjectType typeIn);
     624             : };
     625             : 
     626             : /**
     627             :  * @brief The CADBlockControlObject class
     628             :  */
     629             : class CADBlockControlObject final: public CADBaseControlObject
     630             : {
     631             : public:
     632             :     CADBlockControlObject();
     633           0 :     virtual ~CADBlockControlObject(){}
     634             :     long           nNumEntries; // doesn't count MODELSPACE and PAPERSPACE
     635             :     CADHandle      hNull;
     636             :     CADHandle      hXDictionary;
     637             :     CADHandleArray hBlocks; // ends with modelspace and paperspace handles.
     638             : };
     639             : 
     640             : /**
     641             :  * @brief The CADBlockHeaderObject class
     642             :  */
     643             : class CADBlockHeaderObject final: public CADBaseControlObject
     644             : {
     645             : public:
     646             :     CADBlockHeaderObject();
     647          16 :     virtual ~CADBlockHeaderObject(){}
     648             :     std::string           sEntryName;
     649             :     bool                  b64Flag;
     650             :     short                 dXRefIndex;
     651             :     bool                  bXDep;
     652             :     bool                  bAnonymous;
     653             :     bool                  bHasAtts;
     654             :     bool                  bBlkisXRef;
     655             :     bool                  bXRefOverlaid;
     656             :     bool                  bLoadedBit;
     657             :     long                  nOwnedObjectsCount;
     658             :     CADVector             vertBasePoint;
     659             :     std::string           sXRefPName;
     660             :     std::vector<unsigned char> adInsertCount; // TODO: ???
     661             :     std::string           sBlockDescription;
     662             :     long                  nSizeOfPreviewData;
     663             :     std::vector<unsigned char> abyBinaryPreviewData;
     664             :     short                 nInsertUnits;
     665             :     bool                  bExplodable;
     666             :     char                  dBlockScaling;
     667             :     CADHandle             hBlockControl;
     668             :     std::vector<CADHandle> hReactors;
     669             :     CADHandle             hXDictionary;
     670             :     CADHandle             hNull;
     671             :     CADHandle             hBlockEntity;
     672             :     CADHandleArray        hEntities;
     673             :     CADHandle             hEndBlk;
     674             :     CADHandleArray        hInsertHandles;
     675             :     CADHandle             hLayout;
     676             : };
     677             : 
     678             : /**
     679             :  * @brief The CADLayerControlObject class
     680             :  */
     681             : class CADLayerControlObject final: public CADBaseControlObject
     682             : {
     683             : public:
     684             :     CADLayerControlObject();
     685          16 :     virtual ~CADLayerControlObject(){}
     686             : 
     687             :     long           nNumEntries; // counts layer "0"
     688             :     CADHandle      hNull;
     689             :     CADHandle      hXDictionary;
     690             :     CADHandleArray hLayers;
     691             : };
     692             : 
     693             : /**
     694             :  * @brief The CADLayerObject class
     695             :  */
     696             : class CADLayerObject final: public CADBaseControlObject
     697             : {
     698             : public:
     699             :     CADLayerObject();
     700          20 :     virtual ~CADLayerObject(){}
     701             : 
     702             :     std::string sLayerName;
     703             :     bool        b64Flag;
     704             :     short       dXRefIndex;
     705             :     bool        bXDep;
     706             :     bool        bFrozen;
     707             :     bool        bOn;
     708             :     bool        bFrozenInNewVPORT;
     709             :     bool        bLocked;
     710             :     bool        bPlottingFlag;
     711             :     short       dLineWeight;
     712             :     short       dCMColor;
     713             : 
     714             :     CADHandle      hLayerControl;
     715             :     CADHandleArray hReactors;
     716             :     CADHandle      hXDictionary;
     717             :     CADHandle      hExternalRefBlockHandle;
     718             :     CADHandle      hPlotStyle;
     719             :     CADHandle      hMaterial;
     720             :     CADHandle      hLType;
     721             :     CADHandle      hUnknownHandle;
     722             : };
     723             : 
     724             : /**
     725             :  * @brief The CADLineTypeControlObject class
     726             :  */
     727             : class CADLineTypeControlObject final: public CADBaseControlObject
     728             : {
     729             : public:
     730             :     CADLineTypeControlObject();
     731           0 :     virtual ~CADLineTypeControlObject(){}
     732             : 
     733             :     long           nNumEntries; // doesn't count BYBLOCK / BYLAYER.
     734             :     CADHandle      hNull;
     735             :     CADHandle      hXDictionary;
     736             :     CADHandleArray hLTypes;
     737             : };
     738             : 
     739             : typedef struct _dash
     740             : {
     741             :     double dfLength;
     742             :     short  dComplexShapecode;
     743             :     double dfXOffset;
     744             :     double dfYOffset;
     745             :     double dfScale;
     746             :     double dfRotation;
     747             :     short  dShapeflag;
     748             : } CADDash;
     749             : 
     750             : /**
     751             :  * @brief The CADLineTypeObject class
     752             :  */
     753             : class CADLineTypeObject final: public CADBaseControlObject
     754             : {
     755             : public:
     756             :     CADLineTypeObject();
     757           0 :     virtual ~CADLineTypeObject(){}
     758             : 
     759             :     std::string           sEntryName;
     760             :     bool                  b64Flag;
     761             :     short                 dXRefIndex;
     762             :     bool                  bXDep;
     763             :     std::string           sDescription;
     764             :     double                dfPatternLen;
     765             :     unsigned char         dAlignment;
     766             :     unsigned char         nNumDashes;
     767             :     std::vector<CADDash>  astDashes;
     768             :     std::vector<unsigned char> abyTextArea; // TODO: what is it?
     769             :     CADHandle             hLTControl;
     770             :     CADHandleArray        hReactors;
     771             :     CADHandle             hXDictionary;
     772             :     CADHandle             hXRefBlock;
     773             :     CADHandleArray        hShapefiles; // TODO: one for each dash?
     774             : };
     775             : 
     776             : /**
     777             :  * @brief The CADPointObject class
     778             :  */
     779             : class CADPointObject final: public CADEntityObject
     780             : {
     781             : public:
     782             :     CADPointObject();
     783           2 :     virtual ~CADPointObject(){}
     784             : 
     785             :     CADVector vertPosition;
     786             :     double    dfThickness;
     787             :     CADVector vectExtrusion;
     788             :     double    dfXAxisAng;
     789             : };
     790             : 
     791             : /**
     792             :  * @brief The CADSolidObject class
     793             :  */
     794             : class CADSolidObject final: public CADEntityObject
     795             : {
     796             : public:
     797             :     CADSolidObject();
     798           0 :     virtual ~CADSolidObject(){}
     799             : 
     800             :     double            dfThickness;
     801             :     double            dfElevation;
     802             :     std::vector<CADVector> avertCorners;
     803             :     CADVector         vectExtrusion;
     804             : };
     805             : 
     806             : /**
     807             :  * @brief The CADEllipseObject class
     808             :  */
     809             : class CADEllipseObject final: public CADEntityObject
     810             : {
     811             : public:
     812             :     CADEllipseObject();
     813           2 :     virtual ~CADEllipseObject(){}
     814             : 
     815             :     CADVector vertPosition;
     816             :     CADVector vectSMAxis;
     817             :     CADVector vectExtrusion;
     818             :     double    dfAxisRatio;
     819             :     double    dfBegAngle;
     820             :     double    dfEndAngle;
     821             : };
     822             : 
     823             : /**
     824             :  * @brief The CADRayObject class
     825             :  */
     826             : class CADRayObject final: public CADEntityObject
     827             : {
     828             : public:
     829             :     CADRayObject();
     830           0 :     virtual ~CADRayObject(){}
     831             : 
     832             :     CADVector vertPosition;
     833             :     CADVector vectVector;
     834             : };
     835             : 
     836             : /**
     837             :  * @brief The CADXLineObject class
     838             :  */
     839             : class CADXLineObject final: public CADEntityObject
     840             : {
     841             : public:
     842             :     CADXLineObject();
     843           0 :     virtual ~CADXLineObject(){}
     844             : 
     845             :     CADVector vertPosition;
     846             :     CADVector vectVector;
     847             : };
     848             : 
     849             : /**
     850             :  * @brief The CADDictionaryObject class
     851             :  */
     852             : class CADDictionaryObject final: public CADBaseControlObject
     853             : {
     854             : public:
     855             :     CADDictionaryObject();
     856         240 :     virtual ~CADDictionaryObject(){}
     857             : 
     858             :     long          nNumItems;
     859             :     short         dCloningFlag;
     860             :     unsigned char dHardOwnerFlag;
     861             : 
     862             :     std::vector<std::string> sItemNames;
     863             : 
     864             :     CADHandle      hParentHandle;
     865             :     CADHandleArray hReactors;
     866             :     CADHandle      hXDictionary;
     867             :     CADHandleArray hItemHandles;
     868             : };
     869             : 
     870             : /**
     871             :  * @brief The CADLWPolylineObject class
     872             :  */
     873             : class CADLWPolylineObject final: public CADEntityObject
     874             : {
     875             : public:
     876             :     CADLWPolylineObject();
     877           0 :     virtual ~CADLWPolylineObject(){}
     878             : 
     879             :     bool                         bClosed;
     880             :     double                       dfConstWidth;
     881             :     double                       dfElevation;
     882             :     double                       dfThickness;
     883             :     CADVector                    vectExtrusion;
     884             :     std::vector<CADVector>            avertVertices;
     885             :     std::vector<double>               adfBulges;
     886             :     std::vector<short>                adVerticesID;
     887             :     std::vector<std::pair<double, double>> astWidths; // start, end.
     888             : };
     889             : 
     890             : /**
     891             :  * @brief The CADSplineObject class
     892             :  */
     893             : class CADSplineObject final: public CADEntityObject
     894             : {
     895             : public:
     896             :     CADSplineObject();
     897           0 :     virtual ~CADSplineObject(){}
     898             : 
     899             :     long dScenario;
     900             :     long dSplineFlags; // 2013+
     901             :     long dKnotParameter; // 2013+
     902             : 
     903             :     long      dDegree;
     904             :     double    dfFitTol;
     905             :     CADVector vectBegTangDir;
     906             :     CADVector vectEndTangDir;
     907             :     long      nNumFitPts;
     908             : 
     909             :     bool   bRational;
     910             :     bool   bClosed;
     911             :     bool   bPeriodic;
     912             :     double dfKnotTol;
     913             :     double dfCtrlTol;
     914             :     long   nNumKnots;
     915             :     long   nNumCtrlPts;
     916             :     bool   bWeight;
     917             : 
     918             :     std::vector<double>    adfKnots;
     919             :     std::vector<double>    adfCtrlPointsWeight;
     920             :     std::vector<CADVector> avertCtrlPoints;
     921             :     std::vector<CADVector> averFitPoints;
     922             : };
     923             : 
     924             : /**
     925             :  * @brief Common Dimensional Data structure
     926             :  */
     927             : struct CADCommonDimensionData
     928             : {
     929             :     char          dVersion;
     930             :     CADVector     vectExtrusion;
     931             :     CADVector     vertTextMidPt;
     932             :     double        dfElevation;
     933             :     unsigned char dFlags;
     934             :     std::string   sUserText;
     935             :     double        dfTextRotation;
     936             :     double        dfHorizDir;
     937             :     double        dfInsXScale;
     938             :     double        dfInsYScale;
     939             :     double        dfInsZScale;
     940             :     double        dfInsRotation;
     941             : 
     942             :     short  dAttachmentPoint;
     943             :     short  dLineSpacingStyle;
     944             :     double dfLineSpacingFactor;
     945             :     double dfActualMeasurement;
     946             : 
     947             :     bool bUnknown;
     948             :     bool bFlipArrow1;
     949             :     bool bFlipArrow2;
     950             : 
     951             :     CADVector vert12Pt;
     952             : 
     953           0 :     CADCommonDimensionData() :
     954             :         dVersion(0),
     955             :         dfElevation(0.0),
     956             :         dFlags(0),
     957             :         dfTextRotation(0.0),
     958             :         dfHorizDir(0.0),
     959             :         dfInsXScale(0.0),
     960             :         dfInsYScale(0.0),
     961             :         dfInsZScale(0.0),
     962             :         dfInsRotation(0.0),
     963             :         dAttachmentPoint(0),
     964             :         dLineSpacingStyle(0),
     965             :         dfLineSpacingFactor(0.0),
     966             :         dfActualMeasurement(0.0),
     967             :         bUnknown(false),
     968             :         bFlipArrow1(false),
     969           0 :         bFlipArrow2(false)
     970             :     {
     971           0 :     }
     972             : };
     973             : 
     974             : /**
     975             :  * @brief The CADDimensionObject class
     976             :  */
     977             : class CADDimensionObject CPL_NON_FINAL: public CADEntityObject
     978             : {
     979             : public:
     980           0 :     explicit CADDimensionObject( ObjectType typeIn ) : CADEntityObject(typeIn) {}
     981           0 :     virtual ~CADDimensionObject(){}
     982             :     CADCommonDimensionData cdd;
     983             :     CADVector              vert10pt;
     984             :     CADHandle              hDimstyle;
     985             :     CADHandle              hAnonymousBlock;
     986             : };
     987             : 
     988             : /**
     989             :  * @brief The CADDimensionOrdinateObject class
     990             :  */
     991             : class CADDimensionOrdinateObject final: public CADDimensionObject
     992             : {
     993             : public:
     994             :     CADDimensionOrdinateObject();
     995           0 :     virtual ~CADDimensionOrdinateObject(){}
     996             :     CADVector     vert13pt, vert14pt;
     997             :     unsigned char Flags2;
     998             : };
     999             : 
    1000             : /**
    1001             :  * @brief The CADDimensionLinearObject class
    1002             :  */
    1003             : class CADDimensionLinearObject final: public CADDimensionObject
    1004             : {
    1005             : public:
    1006             :     CADDimensionLinearObject();
    1007           0 :     virtual ~CADDimensionLinearObject(){}
    1008             :     CADVector vert13pt, vert14pt;
    1009             : 
    1010             :     double dfExtLnRot;
    1011             :     double dfDimRot;
    1012             : };
    1013             : 
    1014             : /**
    1015             :  * @brief The CADDimensionAlignedObject class
    1016             :  */
    1017             : class CADDimensionAlignedObject final: public CADDimensionObject
    1018             : {
    1019             : public:
    1020             :     CADDimensionAlignedObject();
    1021           0 :     virtual ~CADDimensionAlignedObject(){}
    1022             :     CADVector vert13pt, vert14pt;
    1023             : 
    1024             :     double dfExtLnRot;
    1025             : };
    1026             : 
    1027             : /**
    1028             :  * @brief The CADDimensionAngular3PtObject class
    1029             :  */
    1030             : class CADDimensionAngular3PtObject CPL_NON_FINAL: public CADDimensionObject
    1031             : {
    1032             : public:
    1033             :     explicit CADDimensionAngular3PtObject(ObjectType typeIn = DIMENSION_ANG_3PT);
    1034           0 :     virtual ~CADDimensionAngular3PtObject(){}
    1035             :     CADVector vert13pt, vert14pt;
    1036             :     CADVector vert15pt;
    1037             : };
    1038             : 
    1039             : /**
    1040             :  * @brief The CADDimensionAngular2LnObject class
    1041             :  */
    1042             : class CADDimensionAngular2LnObject final: public CADDimensionAngular3PtObject
    1043             : {
    1044             : public:
    1045             :     CADDimensionAngular2LnObject();
    1046           0 :     virtual ~CADDimensionAngular2LnObject(){}
    1047             : 
    1048             :     CADVector vert16pt;
    1049             : };
    1050             : 
    1051             : /**
    1052             :  * @brief The CADDimensionRadiusObject class
    1053             :  */
    1054             : class CADDimensionRadiusObject CPL_NON_FINAL: public CADDimensionObject
    1055             : {
    1056             : public:
    1057             :     explicit CADDimensionRadiusObject(ObjectType typeIn = DIMENSION_RADIUS);
    1058           0 :     virtual ~CADDimensionRadiusObject(){}
    1059             : 
    1060             :     CADVector vert15pt;
    1061             :     double    dfLeaderLen;
    1062             : };
    1063             : 
    1064             : /**
    1065             :  * @brief The CADDimensionDiameterObject class
    1066             :  */
    1067             : class CADDimensionDiameterObject final: public CADDimensionRadiusObject
    1068             : {
    1069             : public:
    1070             :     CADDimensionDiameterObject();
    1071           0 :     virtual ~CADDimensionDiameterObject(){}
    1072             : };
    1073             : 
    1074             : /**
    1075             :  * @brief The CADImageObject class
    1076             :  */
    1077             : class CADImageObject final: public CADEntityObject
    1078             : {
    1079             : public:
    1080             :     CADImageObject();
    1081           0 :     virtual ~CADImageObject(){}
    1082             : 
    1083             :     long      dClassVersion;
    1084             :     CADVector vertInsertion;
    1085             :     CADVector vectUDirection;
    1086             :     CADVector vectVDirection;
    1087             :     double    dfSizeX;
    1088             :     double    dfSizeY;
    1089             :     /*  display properties (bit coded), 1==show image,
    1090             :         2==show image when not aligned with screen, 4==use
    1091             :         clipping boundary, 8==transparency on */
    1092             :     short     dDisplayProps;
    1093             : 
    1094             :     bool          bClipping;
    1095             :     unsigned char dBrightness;
    1096             :     unsigned char dContrast;
    1097             :     unsigned char dFade;
    1098             :     bool          bClipMode; // R2010+
    1099             : 
    1100             :     short dClipBoundaryType;
    1101             : 
    1102             :     long              nNumberVerticesInClipPolygon;
    1103             :     std::vector<CADVector> avertClippingPolygonVertices;
    1104             : 
    1105             :     CADHandle hImageDef;
    1106             :     CADHandle hImageDefReactor;
    1107             : };
    1108             : 
    1109             : /**
    1110             :  * @brief The CADImageDefReactorObject class
    1111             :  */
    1112             : class CADImageDefReactorObject CPL_NON_FINAL: public CADBaseControlObject
    1113             : {
    1114             : public:
    1115             :     explicit CADImageDefReactorObject(ObjectType typeIn = IMAGEDEFREACTOR);
    1116           0 :     virtual ~CADImageDefReactorObject(){}
    1117             : 
    1118             :     long              dClassVersion;
    1119             :     CADHandle         hParentHandle;
    1120             :     std::vector<CADHandle> hReactors;
    1121             :     CADHandle         hXDictionary;
    1122             : };
    1123             : 
    1124             : /**
    1125             :  * @brief The CADImageDefObject class
    1126             :  */
    1127             : class CADImageDefObject final: public CADImageDefReactorObject
    1128             : {
    1129             : public:
    1130             :     CADImageDefObject();
    1131           0 :     virtual ~CADImageDefObject(){}
    1132             : 
    1133             :     double        dfXImageSizeInPx;
    1134             :     double        dfYImageSizeInPx;
    1135             :     std::string   sFilePath;
    1136             :     bool          bIsLoaded;
    1137             :     unsigned char dResUnits; // 0 == none, 2 == centimeters, 5 == inches
    1138             :     double        dfXPixelSize; // size of 1 pixel in autocad units
    1139             :     double        dfYPixelSize;
    1140             : };
    1141             : 
    1142             : /**
    1143             :  * @brief The CADMTextObject class
    1144             :  */
    1145             : class CADMTextObject final: public CADEntityObject
    1146             : {
    1147             : public:
    1148             :     CADMTextObject();
    1149           4 :     virtual ~CADMTextObject(){}
    1150             : 
    1151             :     CADVector vertInsertionPoint;
    1152             :     CADVector vectExtrusion;
    1153             :     CADVector vectXAxisDir;
    1154             :     double    dfRectWidth;
    1155             :     double    dfTextHeight;
    1156             :     short     dAttachment; // TODO: meaning unknown
    1157             :     short     dDrawingDir;
    1158             :     double    dfExtents; // TODO: meaning unknown
    1159             :     double    dfExtentsWidth; // TODO: meaning unknown
    1160             :     std::string sTextValue;
    1161             :     short     dLineSpacingStyle;
    1162             :     double    dLineSpacingFactor;
    1163             :     bool      bUnknownBit;
    1164             :     long      dBackgroundFlags;
    1165             :     long      dBackgroundScaleFactor;
    1166             :     short     dBackgroundColor;
    1167             :     long      dBackgroundTransparency;
    1168             :     CADHandle hStyle;
    1169             : };
    1170             : 
    1171             : /**
    1172             :  * @brief Linestyle data structure
    1173             :  */
    1174             : typedef struct _linestyle
    1175             : {
    1176             :     short          nNumSegParams;
    1177             :     std::vector<double> adfSegparms;
    1178             :     short          nAreaFillParams;
    1179             :     std::vector<double> adfAreaFillParameters;
    1180             : } CADLineStyle;
    1181             : 
    1182             : /**
    1183             :  * @brief MLine vertex data structure
    1184             :  */
    1185             : typedef struct _mlinevertex
    1186             : {
    1187             :     CADVector            vertPosition;
    1188             :     CADVector            vectDirection;
    1189             :     CADVector            vectMIterDirection;
    1190             :     std::vector<CADLineStyle> astLStyles;
    1191             : } CADMLineVertex;
    1192             : 
    1193             : /**
    1194             :  * @brief The CADMLineObject class
    1195             :  */
    1196             : class CADMLineObject final: public CADEntityObject
    1197             : {
    1198             : public:
    1199             :     CADMLineObject();
    1200           0 :     virtual ~CADMLineObject(){}
    1201             : 
    1202             :     double        dfScale;
    1203             :     unsigned char dJust;
    1204             :     CADVector     vertBasePoint;
    1205             :     CADVector     vectExtrusion;
    1206             :     short         dOpenClosed; // 1 open, 3 closed
    1207             :     unsigned char nLinesInStyle;
    1208             :     short         nNumVertices;
    1209             : 
    1210             :     std::vector<CADMLineVertex> avertVertices;
    1211             : 
    1212             :     CADHandle hMLineStyle;
    1213             : };
    1214             : 
    1215             : /**
    1216             :  * @brief The CAD3DFaceObject class
    1217             :  */
    1218             : class CAD3DFaceObject final: public CADEntityObject
    1219             : {
    1220             : public:
    1221             :     CAD3DFaceObject();
    1222           0 :     virtual ~CAD3DFaceObject(){}
    1223             : 
    1224             :     bool              bHasNoFlagInd; // 2000+
    1225             :     bool              bZZero;
    1226             :     std::vector<CADVector> avertCorners;
    1227             :     short             dInvisFlags;
    1228             : };
    1229             : 
    1230             : /**
    1231             :  * @brief The CADPolylinePFaceObject class
    1232             :  */
    1233             : class CADPolylinePFaceObject final: public CADEntityObject
    1234             : {
    1235             : public:
    1236             :     CADPolylinePFaceObject();
    1237           0 :     virtual ~CADPolylinePFaceObject(){}
    1238             : 
    1239             :     short             nNumVertices;
    1240             :     short             nNumFaces;
    1241             :     long              nObjectsOwned;
    1242             :     std::vector<CADHandle> hVertices; // content really depends on DWG version.
    1243             :     CADHandle         hSeqend;
    1244             : };
    1245             : 
    1246             : #ifdef TODO
    1247             : /**
    1248             :  * @brief The CADHatchObject class TODO: not completed
    1249             :  */
    1250             : class CADHatchObject final: public CADEntityObject
    1251             : {
    1252             : public:
    1253             :     typedef struct
    1254             :     {
    1255             :         double dfUnknowndouble;
    1256             :         short  dUnknownshort;
    1257             :         long   dRGBColor;
    1258             :         char   dIgnoredColorByte;
    1259             :     } _gradient_color;
    1260             : 
    1261             :     CADHatchObject();
    1262             :     virtual ~CADHatchObject(){}
    1263             : 
    1264             :     long                    dIsGradientFill; // 2004+
    1265             :     long                    dReserved;
    1266             :     double                  dfGradientAngle;
    1267             :     double                  dfGradientShift;
    1268             :     long                    dSingleColorGrad;
    1269             :     double                  dfGradientTint;
    1270             :     long                    nGradientColors;
    1271             :     std::vector<_gradient_color> astGradientColors;
    1272             : 
    1273             :     std::string sGradientName;
    1274             : 
    1275             :     double    dfZCoord; // always X = Y = 0.0
    1276             :     CADVector vectExtrusion;
    1277             :     std::string    sHatchName;
    1278             :     bool      bSolidFill;
    1279             :     bool      bAssociative;
    1280             :     long      nNumPaths;
    1281             : 
    1282             :     typedef struct
    1283             :     {
    1284             :         char      dPathTypeStatus;
    1285             :         CADVector vectPt0;
    1286             :         CADVector vectPt1;
    1287             :     } _path_segment;
    1288             : };
    1289             : #endif
    1290             : 
    1291             : /**
    1292             :  * @brief The CADXRecordObject class
    1293             :  */
    1294             : class CADXRecordObject final: public CADBaseControlObject
    1295             : {
    1296             : public:
    1297             :     CADXRecordObject();
    1298          48 :     virtual ~CADXRecordObject(){}
    1299             : 
    1300             :     long                                nNumDataBytes;
    1301             :     std::vector<char>                   abyDataBytes;
    1302             :     short                               dCloningFlag;
    1303             :     std::vector<std::pair<short, std::vector<char> > > astXRecordData;
    1304             :     CADHandle                           hParentHandle;
    1305             :     std::vector<CADHandle>              hReactors;
    1306             :     CADHandle                           hXDictionary;
    1307             :     std::vector<CADHandle>              hObjIdHandles;
    1308             : };
    1309             : 
    1310             : #endif //CADOBJECTS_H

Generated by: LCOV version 1.14