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;
|