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