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