LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/cad/libopencad - cadobjects.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 93 217 42.9 %
Date: 2025-07-06 19:57:03 Functions: 30 71 42.3 %

          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             : #include "cadobjects.h"
      17             : 
      18             : #include <limits>
      19             : #include <math.h>
      20             : #include <algorithm>
      21             : 
      22             : //------------------------------------------------------------------------------
      23             : // CADVector
      24             : //------------------------------------------------------------------------------
      25             : #define EPSILON std::numeric_limits<double>::epsilon() * 16
      26             : 
      27             : CADObject::~CADObject() = default;
      28             : CADEntityObject::~CADEntityObject() = default;
      29             : 
      30           9 : CADVector::CADVector( double x, double y ) :
      31             :     X( x ),
      32             :     Y( y ),
      33             :     Z( 0.0 ),
      34           9 :     bHasZ( false )
      35             : {
      36             : 
      37           9 : }
      38             : 
      39          35 : CADVector::CADVector( double x, double y, double z ) :
      40             :     X( x ),
      41             :     Y( y ),
      42             :     Z( z ),
      43          35 :     bHasZ( true )
      44             : {
      45             : 
      46          35 : }
      47             : 
      48          51 : CADVector::CADVector( const CADVector& other )
      49             : {
      50          51 :     X     = other.X;
      51          51 :     Y     = other.Y;
      52          51 :     Z     = other.Z;
      53          51 :     bHasZ = other.bHasZ;
      54          51 : }
      55             : 
      56           0 : bool operator==( const CADVector& first, const CADVector& second )
      57             : {
      58           0 :     return ( CADVector::fcmp( first.X, second.X ) &&
      59           0 :              CADVector::fcmp( first.Y, second.Y ) &&
      60           0 :              CADVector::fcmp( first.Z, second.Z ) );
      61             : }
      62             : 
      63          79 : CADVector& CADVector::operator=( const CADVector& second )
      64             : {
      65          79 :     if( &second != this )
      66             :     {
      67          79 :         X     = second.X;
      68          79 :         Y     = second.Y;
      69          79 :         Z     = second.Z;
      70          79 :         bHasZ = second.bHasZ;
      71             :     }
      72          79 :     return * this;
      73             : }
      74             : 
      75           0 : bool CADVector::fcmp( double x, double y )
      76             : {
      77           0 :     return fabs( x - y ) < EPSILON ? true : false;
      78             : }
      79             : 
      80           0 : bool CADVector::getBHasZ() const
      81             : {
      82           0 :     return bHasZ;
      83             : }
      84             : 
      85           0 : void CADVector::setBHasZ( bool value )
      86             : {
      87           0 :     bHasZ = value;
      88           0 : }
      89             : 
      90          26 : double CADVector::getZ() const
      91             : {
      92          26 :     return Z;
      93             : }
      94             : 
      95           0 : void CADVector::setZ( double value )
      96             : {
      97           0 :     if( !bHasZ )
      98           0 :         bHasZ = true;
      99           0 :     Z         = value;
     100           0 : }
     101             : 
     102          28 : double CADVector::getY() const
     103             : {
     104          28 :     return Y;
     105             : }
     106             : 
     107           2 : void CADVector::setY( double value )
     108             : {
     109           2 :     Y = value;
     110           2 : }
     111             : 
     112          30 : double CADVector::getX() const
     113             : {
     114          30 :     return X;
     115             : }
     116             : 
     117           2 : void CADVector::setX( double value )
     118             : {
     119           2 :     X = value;
     120           2 : }
     121             : 
     122          97 : CADVector::CADVector() : X( .0 ), Y( .0 ), Z( .0 ), bHasZ( true )
     123             : {
     124             : 
     125          97 : }
     126             : 
     127             : //------------------------------------------------------------------------------
     128             : // CADText
     129             : //------------------------------------------------------------------------------
     130             : 
     131           4 : CADTextObject::CADTextObject() :
     132             :     CADEntityObject(TEXT),
     133             :     DataFlags(0),
     134             :     dfElevation(0.0),
     135             :     dfThickness(0.0),
     136             :     dfObliqueAng(0.0),
     137             :     dfRotationAng(0.0),
     138             :     dfHeight(0.0),
     139             :     dfWidthFactor(0.0),
     140             :     dGeneration(0),
     141             :     dHorizAlign(0),
     142           4 :     dVertAlign(0)
     143             : {
     144           4 : }
     145             : 
     146             : CADTextObject::~CADTextObject() = default;
     147             : 
     148             : //------------------------------------------------------------------------------
     149             : // CADAttribObject
     150             : //------------------------------------------------------------------------------
     151             : 
     152           5 : CADAttribObject::CADAttribObject(ObjectType typeIn) :
     153             :     CADEntityObject(typeIn),
     154             :     DataFlags( 0 ),
     155             :     dfElevation(0.0),
     156             :     dfThickness(0.0),
     157             :     dfObliqueAng(0.0),
     158             :     dfRotationAng(0.0),
     159             :     dfHeight(0.0),
     160             :     dfWidthFactor(0.0),
     161             :     dGeneration(0),
     162             :     dHorizAlign(0),
     163             :     dVertAlign(0),
     164             :     dVersion(0),
     165             :     nFieldLength(0),
     166             :     nFlags(0),
     167           5 :     bLockPosition(false)
     168             : {
     169           5 : }
     170             : 
     171             : CADAttribObject::~CADAttribObject() = default;
     172             : 
     173             : //------------------------------------------------------------------------------
     174             : // CADAttdef
     175             : //------------------------------------------------------------------------------
     176             : 
     177           5 : CADAttdefObject::CADAttdefObject() :
     178           5 :     CADAttribObject(ATTDEF)
     179             : {
     180           5 : }
     181             : 
     182             : CADAttdefObject::~CADAttdefObject() = default;
     183             : 
     184             : //------------------------------------------------------------------------------
     185             : // CADBlockObject
     186             : //------------------------------------------------------------------------------
     187             : 
     188           0 : CADBlockObject::CADBlockObject() :
     189           0 :     CADEntityObject(BLOCK)
     190             : {
     191           0 : }
     192             : 
     193             : CADBlockObject::~CADBlockObject() = default;
     194             : 
     195             : //------------------------------------------------------------------------------
     196             : // CADEndblkObject
     197             : //------------------------------------------------------------------------------
     198             : 
     199           0 : CADEndblkObject::CADEndblkObject() :
     200           0 :     CADEntityObject(ENDBLK)
     201             : {
     202           0 : }
     203             : 
     204             : CADEndblkObject::~CADEndblkObject() = default;
     205             : 
     206             : 
     207             : //------------------------------------------------------------------------------
     208             : // CADSeqendObject
     209             : //------------------------------------------------------------------------------
     210             : 
     211           0 : CADSeqendObject::CADSeqendObject() :
     212           0 :     CADEntityObject(SEQEND)
     213             : {
     214           0 : }
     215             : 
     216             : CADSeqendObject::~CADSeqendObject() = default;
     217             : 
     218             : 
     219             : //------------------------------------------------------------------------------
     220             : // CADInsertObject
     221             : //------------------------------------------------------------------------------
     222             : 
     223           0 : CADInsertObject::CADInsertObject(ObjectType typeIn) :
     224             :     CADEntityObject(typeIn),
     225             :     dfRotation( 0.0 ),
     226             :     bHasAttribs( false ),
     227           0 :     nObjectsOwned( 0 )
     228             : {
     229           0 : }
     230             : 
     231             : CADInsertObject::~CADInsertObject() = default;
     232             : 
     233             : //------------------------------------------------------------------------------
     234             : // CADMInsertObject
     235             : //------------------------------------------------------------------------------
     236             : 
     237           0 : CADMInsertObject::CADMInsertObject() :
     238             :     CADEntityObject(MINSERT1), // TODO: it has 2 type codes?
     239             :     dfRotation( 0.0 ),
     240             :     bHasAttribs( false ),
     241             :     nObjectsOwned( 0 ),
     242             :     nNumCols( 0 ),
     243             :     nNumRows( 0 ),
     244             :     nColSpacing( 0 ),
     245           0 :     nRowSpacing( 0 )
     246             : {
     247           0 : }
     248             : 
     249             : CADMInsertObject::~CADMInsertObject() = default;
     250             : 
     251             : //------------------------------------------------------------------------------
     252             : // CADVertex2DObject
     253             : //------------------------------------------------------------------------------
     254             : 
     255           0 : CADVertex2DObject::CADVertex2DObject() :
     256             :     CADEntityObject(VERTEX2D),
     257             :     dfStartWidth( 0.0 ),
     258             :     dfEndWidth( 0.0 ),
     259             :     dfBulge( 0.0 ),
     260             :     nVertexID( 0 ),
     261           0 :     dfTangentDir( 0.0 )
     262             : {
     263           0 : }
     264             : 
     265             : CADVertex2DObject::~CADVertex2DObject() = default;
     266             : 
     267             : //------------------------------------------------------------------------------
     268             : // CADVertex3DObject
     269             : //------------------------------------------------------------------------------
     270             : 
     271           0 : CADVertex3DObject::CADVertex3DObject() :
     272           0 :     CADEntityObject(VERTEX3D)
     273             : {
     274           0 : }
     275             : 
     276             : CADVertex3DObject::~CADVertex3DObject() = default;
     277             : 
     278             : //------------------------------------------------------------------------------
     279             : // CADVertexMeshObject
     280             : //------------------------------------------------------------------------------
     281             : 
     282           0 : CADVertexMeshObject::CADVertexMeshObject() :
     283           0 :     CADEntityObject(VERTEX_MESH)
     284             : {
     285           0 : }
     286             : 
     287             : CADVertexMeshObject::~CADVertexMeshObject() = default;
     288             : 
     289             : //------------------------------------------------------------------------------
     290             : // CADVertexPFaceObject
     291             : //------------------------------------------------------------------------------
     292             : 
     293           0 : CADVertexPFaceObject::CADVertexPFaceObject() :
     294           0 :     CADEntityObject(VERTEX_PFACE)
     295             : {
     296           0 : }
     297             : 
     298             : CADVertexPFaceObject::~CADVertexPFaceObject() = default;
     299             : 
     300             : //------------------------------------------------------------------------------
     301             : // CADVertexPFaceFaceObject
     302             : //------------------------------------------------------------------------------
     303             : 
     304           0 : CADVertexPFaceFaceObject::CADVertexPFaceFaceObject() :
     305             :     CADEntityObject(VERTEX_PFACE_FACE),
     306             :     iVertexIndex1( 0 ),
     307             :     iVertexIndex2( 0 ),
     308             :     iVertexIndex3( 0 ),
     309           0 :     iVertexIndex4( 0 )
     310             : {
     311           0 : }
     312             : 
     313             : CADVertexPFaceFaceObject::~CADVertexPFaceFaceObject() = default;
     314             : 
     315             : //------------------------------------------------------------------------------
     316             : // CADPolyline2DObject
     317             : //------------------------------------------------------------------------------
     318             : 
     319           0 : CADPolyline2DObject::CADPolyline2DObject() :
     320             :     CADEntityObject(POLYLINE2D),
     321             :     dFlags( 0 ),
     322             :     dCurveNSmoothSurfType( 0 ),
     323             :     dfStartWidth( 0.0 ),
     324             :     dfEndWidth( 0.0 ),
     325             :     dfThickness( 0.0 ),
     326             :     dfElevation( 0.0 ),
     327           0 :     nObjectsOwned( 0 )
     328             : {
     329           0 : }
     330             : 
     331             : CADPolyline2DObject::~CADPolyline2DObject() = default;
     332             : 
     333             : //------------------------------------------------------------------------------
     334             : // CADPolyline3DObject
     335             : //------------------------------------------------------------------------------
     336             : 
     337           0 : CADPolyline3DObject::CADPolyline3DObject() :
     338             :     CADEntityObject(POLYLINE3D),
     339             :     SplinedFlags( 0 ),
     340             :     ClosedFlags( 0 ),
     341           0 :     nObjectsOwned( 0 )
     342             : {
     343           0 : }
     344             : 
     345             : CADPolyline3DObject::~CADPolyline3DObject() = default;
     346             : 
     347             : //------------------------------------------------------------------------------
     348             : // CADArcObject
     349             : //------------------------------------------------------------------------------
     350             : 
     351           0 : CADArcObject::CADArcObject() :
     352             :     CADEntityObject(ARC),
     353             :     dfRadius( 0.0 ),
     354             :     dfThickness( 0.0 ),
     355             :     dfStartAngle( 0.0 ),
     356           0 :     dfEndAngle( 0.0 )
     357             : {
     358           0 : }
     359             : 
     360             : CADArcObject::~CADArcObject() = default;
     361             : 
     362             : //------------------------------------------------------------------------------
     363             : // CADCircleObject
     364             : //------------------------------------------------------------------------------
     365             : 
     366           3 : CADCircleObject::CADCircleObject() :
     367             :     CADEntityObject(CIRCLE),
     368             :     dfRadius( 0.0 ),
     369           3 :     dfThickness( 0.0 )
     370             : {
     371           3 : }
     372             : 
     373             : CADCircleObject::~CADCircleObject() = default;
     374             : 
     375             : //------------------------------------------------------------------------------
     376             : // CADLineObject
     377             : //------------------------------------------------------------------------------
     378             : 
     379           1 : CADLineObject::CADLineObject() :
     380             :     CADEntityObject(LINE),
     381           1 :     dfThickness( 0.0 )
     382             : {
     383           1 : }
     384             : 
     385             : CADLineObject::~CADLineObject() = default;
     386             : 
     387             : //------------------------------------------------------------------------------
     388             : // CADBaseControlObject
     389             : //------------------------------------------------------------------------------
     390             : 
     391         170 : CADBaseControlObject::CADBaseControlObject(ObjectType typeIn) :
     392             :     CADObject(typeIn),
     393             :     nObjectSizeInBits( 0 ),
     394             :     nNumReactors( 0 ),
     395         170 :     bNoXDictionaryPresent( false )
     396             : {
     397         170 : }
     398             : 
     399             : CADBaseControlObject::~CADBaseControlObject() = default;
     400             : 
     401             : //------------------------------------------------------------------------------
     402             : // CADBlockControlObject
     403             : //------------------------------------------------------------------------------
     404             : 
     405           0 : CADBlockControlObject::CADBlockControlObject() :
     406             :     CADBaseControlObject(BLOCK_CONTROL_OBJ),
     407           0 :     nNumEntries( 0 )
     408             : {
     409           0 : }
     410             : 
     411             : CADBlockControlObject::~CADBlockControlObject() = default;
     412             : 
     413             : //------------------------------------------------------------------------------
     414             : // CADBlockHeaderObject
     415             : //------------------------------------------------------------------------------
     416             : 
     417           8 : CADBlockHeaderObject::CADBlockHeaderObject() :
     418             :     CADBaseControlObject(BLOCK_HEADER),
     419             :     b64Flag( false ),
     420             :     dXRefIndex( 0 ),
     421             :     bXDep( false ),
     422             :     bAnonymous( false ),
     423             :     bHasAtts( false ),
     424             :     bBlkisXRef( false ),
     425             :     bXRefOverlaid( false ),
     426             :     bLoadedBit( false ),
     427             :     nOwnedObjectsCount( 0 ),
     428             :     nSizeOfPreviewData( 0 ),
     429             :     nInsertUnits( 0 ),
     430             :     bExplodable( false ),
     431           8 :     dBlockScaling( 0 )
     432             : {
     433           8 : }
     434             : 
     435             : CADBlockHeaderObject::~CADBlockHeaderObject() = default;
     436             : 
     437             : //------------------------------------------------------------------------------
     438             : // CADLayerControlObject
     439             : //------------------------------------------------------------------------------
     440             : 
     441           8 : CADLayerControlObject::CADLayerControlObject() :
     442             :     CADBaseControlObject(LAYER_CONTROL_OBJ),
     443           8 :     nNumEntries( 0 )
     444             : {
     445           8 : }
     446             : 
     447             : CADLayerControlObject::~CADLayerControlObject() = default;
     448             : 
     449             : //------------------------------------------------------------------------------
     450             : // CADLayerObject
     451             : //------------------------------------------------------------------------------
     452             : 
     453          10 : CADLayerObject::CADLayerObject() :
     454             :     CADBaseControlObject(LAYER),
     455             :     b64Flag( 0 ),
     456             :     dXRefIndex( 0 ),
     457             :     bXDep( 0 ),
     458             :     bFrozen( false ),
     459             :     bOn( false ),
     460             :     bFrozenInNewVPORT( false ),
     461             :     bLocked( false ),
     462             :     bPlottingFlag( false ),
     463             :     dLineWeight( 0 ),
     464          10 :     dCMColor( 0 )
     465             : {
     466          10 : }
     467             : 
     468             : CADLayerObject::~CADLayerObject() = default;
     469             : 
     470             : //------------------------------------------------------------------------------
     471             : // CADLineTypeControlObject
     472             : //------------------------------------------------------------------------------
     473             : 
     474           0 : CADLineTypeControlObject::CADLineTypeControlObject() :
     475             :     CADBaseControlObject(LTYPE_CONTROL_OBJ),
     476           0 :     nNumEntries( 0 )
     477             : {
     478           0 : }
     479             : 
     480             : CADLineTypeControlObject::~CADLineTypeControlObject() = default;
     481             : 
     482             : //------------------------------------------------------------------------------
     483             : // CADLineTypeObject
     484             : //------------------------------------------------------------------------------
     485             : 
     486           0 : CADLineTypeObject::CADLineTypeObject() :
     487             :     CADBaseControlObject(LTYPE1),
     488             :     b64Flag( false ),
     489             :     dXRefIndex( 0 ),
     490             :     bXDep( false ),
     491             :     dfPatternLen( 0.0 ),
     492             :     dAlignment( 0 ),
     493           0 :     nNumDashes( 0 )
     494             : {
     495           0 : }
     496             : 
     497             : CADLineTypeObject::~CADLineTypeObject() = default;
     498             : 
     499             : //------------------------------------------------------------------------------
     500             : // CADPointObject
     501             : //------------------------------------------------------------------------------
     502             : 
     503           1 : CADPointObject::CADPointObject() :
     504             :     CADEntityObject(POINT),
     505             :     dfThickness( 0.0 ),
     506           1 :     dfXAxisAng( 0.0 )
     507             : {
     508           1 : }
     509             : 
     510             : CADPointObject::~CADPointObject() = default;
     511             : 
     512             : //------------------------------------------------------------------------------
     513             : // CADSolidObject
     514             : //------------------------------------------------------------------------------
     515             : 
     516           0 : CADSolidObject::CADSolidObject() :
     517             :     CADEntityObject(SOLID),
     518             :     dfThickness( 0.0 ),
     519           0 :     dfElevation( 0.0 )
     520             : {
     521           0 :     avertCorners.reserve( 4 );
     522           0 : }
     523             : 
     524             : CADSolidObject::~CADSolidObject() = default;
     525             : 
     526             : //------------------------------------------------------------------------------
     527             : // CADEllipseObject
     528             : //------------------------------------------------------------------------------
     529             : 
     530           1 : CADEllipseObject::CADEllipseObject() :
     531             :     CADEntityObject(ELLIPSE),
     532             :     dfAxisRatio( 0.0 ),
     533             :     dfBegAngle( 0.0 ),
     534           1 :     dfEndAngle( 0.0 )
     535             : {
     536           1 : }
     537             : 
     538             : CADEllipseObject::~CADEllipseObject() = default;
     539             : 
     540             : //------------------------------------------------------------------------------
     541             : // CADRayObject
     542             : //------------------------------------------------------------------------------
     543             : 
     544           0 : CADRayObject::CADRayObject() :
     545           0 :     CADEntityObject(RAY)
     546             : {
     547           0 : }
     548             : 
     549             : CADRayObject::~CADRayObject() = default;
     550             : 
     551             : //------------------------------------------------------------------------------
     552             : // CADXLineObject
     553             : //------------------------------------------------------------------------------
     554             : 
     555           0 : CADXLineObject::CADXLineObject() :
     556           0 :     CADEntityObject(XLINE)
     557             : {
     558           0 : }
     559             : 
     560             : CADXLineObject::~CADXLineObject() = default;
     561             : 
     562             : //------------------------------------------------------------------------------
     563             : // CADDictionaryObject
     564             : //------------------------------------------------------------------------------
     565             : 
     566         120 : CADDictionaryObject::CADDictionaryObject() :
     567             :     CADBaseControlObject(DICTIONARY),
     568             :     nNumItems( 0 ),
     569             :     dCloningFlag( 0 ),
     570         120 :     dHardOwnerFlag( 0 )
     571             : {
     572         120 : }
     573             : 
     574             : CADDictionaryObject::~CADDictionaryObject() = default;
     575             : 
     576             : //------------------------------------------------------------------------------
     577             : // CADLWPolylineObject
     578             : //------------------------------------------------------------------------------
     579             : 
     580           0 : CADLWPolylineObject::CADLWPolylineObject() :
     581             :     CADEntityObject(LWPOLYLINE),
     582             :     bClosed( false ),
     583             :     dfConstWidth( 0.0 ),
     584             :     dfElevation( 0.0 ),
     585           0 :     dfThickness( 0.0 )
     586             : {
     587           0 : }
     588             : 
     589             : CADLWPolylineObject::~CADLWPolylineObject() = default;
     590             : 
     591             : //------------------------------------------------------------------------------
     592             : // CADSplineObject
     593             : //------------------------------------------------------------------------------
     594             : 
     595           0 : CADSplineObject::CADSplineObject() :
     596             :     CADEntityObject( SPLINE ),
     597             :     dScenario( 0 ),
     598             :     dSplineFlags( 0 ),
     599             :     dKnotParameter( 0 ),
     600             :     dDegree( 0 ),
     601             :     dfFitTol( 0.0 ),
     602             :     nNumFitPts( 0 ),
     603             :     bRational( false ),
     604             :     bClosed( false ),
     605             :     bPeriodic( false ),
     606             :     dfKnotTol( 0.0 ),
     607             :     dfCtrlTol( 0.0 ),
     608             :     nNumKnots( 0 ),
     609             :     nNumCtrlPts( 0 ),
     610           0 :     bWeight( false )
     611             : {
     612           0 : }
     613             : 
     614             : CADSplineObject::~CADSplineObject() = default;
     615             : 
     616             : //------------------------------------------------------------------------------
     617             : 
     618             : const std::vector<char> CADCommonEntityObjectTypes{
     619             :     CADObject::POINT, CADObject::ARC, CADObject::TEXT, CADObject::ELLIPSE,
     620             :     CADObject::CIRCLE, CADObject::LINE, CADObject::LWPOLYLINE,
     621             :     CADObject::POLYLINE3D, CADObject::MLINE, CADObject::SPLINE, CADObject::SOLID,
     622             :     CADObject::MTEXT, CADObject::IMAGE, CADObject::XLINE, CADObject::RAY,
     623             :     CADObject::MLINE, CADObject::FACE3D, CADObject::POLYLINE_PFACE,
     624             :     CADObject::ATTRIB, CADObject::ATTDEF, CADObject::POLYLINE2D, CADObject::HATCH,
     625             :     CADObject::INSERT, CADObject::VERTEX3D, CADObject::VERTEX2D,
     626             :     CADObject::VERTEX_MESH, CADObject::VERTEX_PFACE, CADObject::VERTEX_PFACE_FACE,
     627             :     CADObject::TOLERANCE, CADObject::SOLID3D, CADObject::WIPEOUT, CADObject::TRACE
     628             : };
     629             : 
     630             : const std::vector<char> CADSupportedGeometryTypes{
     631             :     CADObject::POINT, CADObject::ARC, CADObject::TEXT, CADObject::ELLIPSE,
     632             :     CADObject::CIRCLE, CADObject::LINE, CADObject::LWPOLYLINE,
     633             :     CADObject::POLYLINE3D, CADObject::MLINE, CADObject::ATTRIB, CADObject::ATTDEF,
     634             :     CADObject::RAY, CADObject::SPLINE, CADObject::SOLID, CADObject::IMAGE,
     635             :     CADObject::MTEXT, CADObject::POLYLINE_PFACE, CADObject::XLINE,
     636             :     CADObject::FACE3D
     637             : };
     638             : 
     639         231 : bool isCommonEntityType( short nType )
     640             : {
     641         231 :     return std::find( CADCommonEntityObjectTypes.begin(),
     642             :                       CADCommonEntityObjectTypes.end(),
     643         231 :                       nType ) != CADCommonEntityObjectTypes.end();
     644             : }
     645             : 
     646          18 : bool isSupportedGeometryType( short nType )
     647             : {
     648          18 :     return std::find( CADSupportedGeometryTypes.begin(),
     649             :                       CADSupportedGeometryTypes.end(),
     650          18 :                       nType ) !=  CADSupportedGeometryTypes.end();
     651             : }
     652             : 
     653             : const std::map<char, std::string> CADObjectNames{
     654             :     { CADObject::UNUSED,               "UNUSED" },
     655             :     { CADObject::TEXT,                 "TEXT" },
     656             :     { CADObject::ATTRIB,               "ATTRIB" },
     657             :     { CADObject::ATTDEF,               "ATTDEF" },
     658             :     { CADObject::BLOCK,                "BLOCK" },
     659             :     { CADObject::ENDBLK,               "ENDBLK" },
     660             :     { CADObject::SEQEND,               "SEQEND" },
     661             :     { CADObject::INSERT,               "INSERT" },
     662             :     { CADObject::MINSERT1,             "MINSERT" },
     663             :     { CADObject::MINSERT2,             "MINSERT" },
     664             :     { CADObject::VERTEX2D,             "VERTEX 2D" },
     665             :     { CADObject::VERTEX3D,             "VERTEX 3D" },
     666             :     { CADObject::VERTEX_MESH,          "VERTEX MESH" },
     667             :     { CADObject::VERTEX_PFACE,         "VERTEX PFACE" },
     668             :     { CADObject::VERTEX_PFACE_FACE,    "VERTEX PFACE FACE" },
     669             :     { CADObject::POLYLINE2D,           "POLYLINE 2D" },
     670             :     { CADObject::POLYLINE3D,           "POLYLINE 3D" },
     671             :     { CADObject::ARC,                  "ARC" },
     672             :     { CADObject::CIRCLE,               "CIRCLE" },
     673             :     { CADObject::LINE,                 "LINE" },
     674             :     { CADObject::DIMENSION_ORDINATE,   "DIMENSION ORDINATE" },
     675             :     { CADObject::DIMENSION_LINEAR,     "DIMENSION LINEAR" },
     676             :     { CADObject::DIMENSION_ALIGNED,    "DIMENSION ALIGNED" },
     677             :     { CADObject::DIMENSION_ANG_3PT,    "DIMENSION ANG 3PT" },
     678             :     { CADObject::DIMENSION_ANG_2LN,    "DIMENSION AND 2LN" },
     679             :     { CADObject::DIMENSION_RADIUS,     "DIMENSION RADIUS" },
     680             :     { CADObject::DIMENSION_DIAMETER,   "DIMENSION DIAMETER" },
     681             :     { CADObject::POINT,                "POINT" },
     682             :     { CADObject::FACE3D,               "3DFACE" },
     683             :     { CADObject::POLYLINE_PFACE,       "POLYLINE PFACE" },
     684             :     { CADObject::POLYLINE_MESH,        "POLYLINE MESH" },
     685             :     { CADObject::SOLID,                "SOLID" },
     686             :     { CADObject::TRACE,                "TRACE" },
     687             :     { CADObject::SHAPE,                "SHAPE" },
     688             :     { CADObject::VIEWPORT,             "VIEWPORT" },
     689             :     { CADObject::ELLIPSE,              "ELLIPSE" },
     690             :     { CADObject::SPLINE,               "SPLINE" },
     691             :     { CADObject::REGION,               "REGION" },
     692             :     { CADObject::SOLID3D,              "3DSOLID" },
     693             :     { CADObject::BODY,                 "BODY" },
     694             :     { CADObject::RAY,                  "RAY" },
     695             :     { CADObject::XLINE,                "XLINE" },
     696             :     { CADObject::DICTIONARY,           "DICTIONARY" },
     697             :     { CADObject::OLEFRAME,             "OLEFRAME" },
     698             :     { CADObject::MTEXT,                "MTEXT" },
     699             :     { CADObject::LEADER,               "LEADER" },
     700             :     { CADObject::TOLERANCE,            "TOLERANCE" },
     701             :     { CADObject::MLINE,                "MLINE" },
     702             :     { CADObject::BLOCK_CONTROL_OBJ,    "BLOCK CONTROL OBJ" },
     703             :     { CADObject::BLOCK_HEADER,         "BLOCK HEADER" },
     704             :     { CADObject::LAYER_CONTROL_OBJ,    "LAYER CONTROL OBJ" },
     705             :     { CADObject::LAYER,                "LAYER" },
     706             :     { CADObject::STYLE_CONTROL_OBJ,    "STYLE CONTROL OBJ" },
     707             :     { CADObject::STYLE1,               "STYLE1" },
     708             :     { CADObject::STYLE2,               "STYLE2" },
     709             :     { CADObject::STYLE3,               "STYLE3" },
     710             :     { CADObject::LTYPE_CONTROL_OBJ,    "LTYPE CONTROL OBJ" },
     711             :     { CADObject::LTYPE1,               "LTYPE1" },
     712             :     { CADObject::LTYPE2,               "LTYPE2" },
     713             :     { CADObject::LTYPE3,               "LTYPE3" },
     714             :     { CADObject::VIEW_CONTROL_OBJ,     "VIEW CONTROL OBJ" },
     715             :     { CADObject::VIEW,                 "VIEW" },
     716             :     { CADObject::UCS_CONTROL_OBJ,      "UCS CONTROL OBJ" },
     717             :     { CADObject::UCS,                  "UCS" },
     718             :     { CADObject::VPORT_CONTROL_OBJ,    "VPORT CONTROL OBJ" },
     719             :     { CADObject::VPORT,                "VPORT" },
     720             :     { CADObject::APPID_CONTROL_OBJ,    "APPID CONTROL OBJ" },
     721             :     { CADObject::APPID,                "APPID" },
     722             :     { CADObject::DIMSTYLE_CONTROL_OBJ, "DIMSTYLE CONTROL OBJ" },
     723             :     { CADObject::DIMSTYLE,             "DIMSTYLE" },
     724             :     { CADObject::VP_ENT_HDR_CTRL_OBJ,  "VP ENT HDR CTRL OBJ" },
     725             :     { CADObject::VP_ENT_HDR,           "VP ENT HDR" },
     726             :     { CADObject::GROUP,                "GROUP" },
     727             :     { CADObject::MLINESTYLE,           "MLINESTYLE" },
     728             :     { CADObject::OLE2FRAME,            "OLE2FRAME" },
     729             :     { CADObject::DUMMY,                "DUMMY" },
     730             :     { CADObject::LONG_TRANSACTION,     "LONG TRANSACTION" },
     731             :     { CADObject::LWPOLYLINE,           "LWPOLYLINE" },
     732             :     { CADObject::HATCH,                "HATCH" },
     733             :     { CADObject::XRECORD,              "XRECORD" },
     734             :     { CADObject::ACDBPLACEHOLDER,      "ACDBPLACEHOLDER" },
     735             :     { CADObject::VBA_PROJECT,          "VBA PROJECT" },
     736             :     { CADObject::LAYOUT,               "LAYOUT" }
     737             : };
     738             : 
     739          18 : std::string getNameByType( CADObject::ObjectType eType )
     740             : {
     741          18 :     auto it = CADObjectNames.find( eType );
     742          18 :     if( it == CADObjectNames.end() )
     743           0 :         return "";
     744             : 
     745          18 :     return it->second;
     746             : }
     747             : //------------------------------------------------------------------------------
     748             : // CADObject
     749             : //------------------------------------------------------------------------------
     750             : 
     751         213 : CADObject::ObjectType CADObject::getType() const
     752             : {
     753         213 :     return type;
     754             : }
     755             : 
     756           0 : long CADObject::getSize() const
     757             : {
     758           0 :     return size;
     759             : }
     760             : 
     761         205 : void CADObject::setSize( long value )
     762             : {
     763         205 :     size = value;
     764         205 : }
     765             : 
     766           0 : short CADObject::getCRC() const
     767             : {
     768           0 :     return CRC;
     769             : }
     770             : 
     771         205 : void CADObject::setCRC( unsigned short value )
     772             : {
     773         205 :     CRC = value;
     774         205 : }
     775             : 
     776             : //------------------------------------------------------------------------------
     777             : // CADDimensionObject
     778             : //------------------------------------------------------------------------------
     779             : 
     780             : CADDimensionObject::~CADDimensionObject() = default;
     781             : 
     782             : //------------------------------------------------------------------------------
     783             : // CADDimensionOrdinateObject
     784             : //------------------------------------------------------------------------------
     785             : 
     786           0 : CADDimensionOrdinateObject::CADDimensionOrdinateObject() :
     787             :     CADDimensionObject(DIMENSION_ORDINATE),
     788           0 :     Flags2( 0 )
     789             : {
     790           0 : }
     791             : 
     792             : CADDimensionOrdinateObject::~CADDimensionOrdinateObject() = default;
     793             : 
     794             : //------------------------------------------------------------------------------
     795             : // CADDimensionLinearObject
     796             : //------------------------------------------------------------------------------
     797             : 
     798           0 : CADDimensionLinearObject::CADDimensionLinearObject() :
     799             :     CADDimensionObject(DIMENSION_LINEAR),
     800             :     dfExtLnRot( 0.0 ),
     801           0 :     dfDimRot( 0.0 )
     802             : {
     803           0 : }
     804             : 
     805             : CADDimensionLinearObject::~CADDimensionLinearObject() = default;
     806             : 
     807             : //------------------------------------------------------------------------------
     808             : // CADDimensionAlignedObject
     809             : //------------------------------------------------------------------------------
     810             : 
     811           0 : CADDimensionAlignedObject::CADDimensionAlignedObject() :
     812             :     CADDimensionObject(DIMENSION_ALIGNED),
     813           0 :     dfExtLnRot( 0.0 )
     814             : {
     815           0 : }
     816             : 
     817             : CADDimensionAlignedObject::~CADDimensionAlignedObject() = default;
     818             : 
     819             : //------------------------------------------------------------------------------
     820             : // CADDimensionAngular3PtObject
     821             : //------------------------------------------------------------------------------
     822             : 
     823           0 : CADDimensionAngular3PtObject::CADDimensionAngular3PtObject(ObjectType typeIn) :
     824           0 :     CADDimensionObject(typeIn)
     825             : {
     826           0 : }
     827             : 
     828             : CADDimensionAngular3PtObject::~CADDimensionAngular3PtObject() = default;
     829             : 
     830             : //------------------------------------------------------------------------------
     831             : // CADDimensionAngular2LnObject
     832             : //------------------------------------------------------------------------------
     833             : 
     834           0 : CADDimensionAngular2LnObject::CADDimensionAngular2LnObject() :
     835           0 :     CADDimensionAngular3PtObject(DIMENSION_ANG_2LN)
     836             : {
     837           0 : }
     838             : 
     839             : CADDimensionAngular2LnObject::~CADDimensionAngular2LnObject() = default;
     840             : 
     841             : //------------------------------------------------------------------------------
     842             : // CADDimensionRadiusObject
     843             : //------------------------------------------------------------------------------
     844             : 
     845           0 : CADDimensionRadiusObject::CADDimensionRadiusObject(ObjectType typeIn) :
     846             :     CADDimensionObject(typeIn),
     847           0 :     dfLeaderLen( 0.0 )
     848             : {
     849           0 : }
     850             : 
     851             : CADDimensionRadiusObject::~CADDimensionRadiusObject() = default;
     852             : 
     853             : //------------------------------------------------------------------------------
     854             : // CADDimensionDiameterObject
     855             : //------------------------------------------------------------------------------
     856             : 
     857           0 : CADDimensionDiameterObject::CADDimensionDiameterObject() :
     858           0 :     CADDimensionRadiusObject(DIMENSION_DIAMETER)
     859             : {
     860           0 : }
     861             : 
     862             : CADDimensionDiameterObject::~CADDimensionDiameterObject() = default;
     863             : 
     864             : //------------------------------------------------------------------------------
     865             : // CADImageObject
     866             : //------------------------------------------------------------------------------
     867             : 
     868           0 : CADImageObject::CADImageObject() :
     869             :     CADEntityObject(IMAGE),
     870             :     dClassVersion( 0 ),
     871             :     dfSizeX( 0.0 ),
     872             :     dfSizeY( 0.0 ),
     873             :     dDisplayProps( 0 ),
     874             :     bClipping( false ),
     875             :     dBrightness( 0 ),
     876             :     dContrast( 0 ),
     877             :     dFade( 0 ),
     878             :     bClipMode( false ),
     879             :     dClipBoundaryType( 0 ),
     880           0 :     nNumberVerticesInClipPolygon( 0 )
     881             : {
     882           0 : }
     883             : 
     884             : CADImageObject::~CADImageObject() = default;
     885             : 
     886             : //------------------------------------------------------------------------------
     887             : // CADImageDefObject
     888             : //------------------------------------------------------------------------------
     889             : 
     890           0 : CADImageDefObject::CADImageDefObject() :
     891             :     CADImageDefReactorObject(IMAGEDEF),
     892             :     dfXImageSizeInPx( 0.0 ),
     893             :     dfYImageSizeInPx( 0.0 ),
     894             :     bIsLoaded( false ),
     895             :     dResUnits( 0 ),
     896             :     dfXPixelSize( 0.0 ),
     897           0 :     dfYPixelSize( 0.0 )
     898             : {
     899           0 : }
     900             : 
     901             : CADImageDefObject::~CADImageDefObject() = default;
     902             : 
     903             : //------------------------------------------------------------------------------
     904             : // CADImageDefReactorObject
     905             : //------------------------------------------------------------------------------
     906             : 
     907           0 : CADImageDefReactorObject::CADImageDefReactorObject(ObjectType typeIn) :
     908             :     CADBaseControlObject(typeIn),
     909           0 :     dClassVersion( 0 )
     910             : {
     911           0 : }
     912             : 
     913             : CADImageDefReactorObject::~CADImageDefReactorObject() = default;
     914             : 
     915             : //------------------------------------------------------------------------------
     916             : // CADMTextObject
     917             : //------------------------------------------------------------------------------
     918             : 
     919           2 : CADMTextObject::CADMTextObject() :
     920             :     CADEntityObject(MTEXT),
     921             :     dfRectWidth( 0.0 ),
     922             :     dfTextHeight( 0.0 ),
     923             :     dAttachment( 0 ),
     924             :     dDrawingDir( 0 ),
     925             :     dfExtents( 0.0 ),
     926             :     dfExtentsWidth( 0.0 ),
     927             :     dLineSpacingStyle( 0 ),
     928             :     dLineSpacingFactor( 0 ),
     929             :     bUnknownBit( false),
     930             :     dBackgroundFlags( 0 ),
     931             :     dBackgroundScaleFactor( 0 ),
     932             :     dBackgroundColor( 0 ),
     933           2 :     dBackgroundTransparency( 0 )
     934             : {
     935           2 : }
     936             : 
     937             : CADMTextObject::~CADMTextObject() = default;
     938             : 
     939             : //------------------------------------------------------------------------------
     940             : // CADMLineObject
     941             : //------------------------------------------------------------------------------
     942             : 
     943           0 : CADMLineObject::CADMLineObject() :
     944             :     CADEntityObject(MLINE),
     945             :     dfScale( 0.0 ),
     946             :     dJust( 0 ),
     947             :     dOpenClosed( 0 ),
     948             :     nLinesInStyle( 0 ),
     949           0 :     nNumVertices( 0 )
     950             : {
     951           0 : }
     952             : 
     953             : CADMLineObject::~CADMLineObject() = default;
     954             : 
     955             : //------------------------------------------------------------------------------
     956             : // CAD3DFaceObject
     957             : //------------------------------------------------------------------------------
     958             : 
     959           0 : CAD3DFaceObject::CAD3DFaceObject() :
     960             :     CADEntityObject(FACE3D),
     961             :     bHasNoFlagInd( false ),
     962             :     bZZero( false ),
     963           0 :     dInvisFlags( 0 )
     964             : {
     965           0 : }
     966             : 
     967             : CAD3DFaceObject::~CAD3DFaceObject() = default;
     968             : 
     969             : //------------------------------------------------------------------------------
     970             : // CADPolylinePFaceObject
     971             : //------------------------------------------------------------------------------
     972             : 
     973           0 : CADPolylinePFaceObject::CADPolylinePFaceObject() :
     974             :     CADEntityObject(POLYLINE_PFACE),
     975             :     nNumVertices( 0 ),
     976             :     nNumFaces( 0 ),
     977           0 :     nObjectsOwned( 0 )
     978             : {
     979           0 : }
     980             : 
     981             : CADPolylinePFaceObject::~CADPolylinePFaceObject() = default;
     982             : 
     983             : //------------------------------------------------------------------------------
     984             : // CADXRecordObject
     985             : //------------------------------------------------------------------------------
     986             : 
     987          24 : CADXRecordObject::CADXRecordObject() :
     988             :     CADBaseControlObject(XRECORD),
     989             :     nNumDataBytes( 0 ),
     990          24 :     dCloningFlag( 0 )
     991             : {
     992          24 : }
     993             : 
     994             : CADXRecordObject::~CADXRecordObject() = default;

Generated by: LCOV version 1.14