Coverage Report

Created: 2026-02-14 09:00

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