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

Generated by: LCOV version 1.14