QCAD
Open Source 2D CAD
dl_codes.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2001-2013 RibbonSoft, GmbH. All rights reserved.
3 ** Copyright (C) 2001 Robert J. Campbell Jr.
4 **
5 ** This file is part of the dxflib project.
6 **
7 ** This file is free software; you can redistribute it and/or modify
8 ** it under the terms of the GNU General Public License as published by
9 ** the Free Software Foundation; either version 2 of the License, or
10 ** (at your option) any later version.
11 **
12 ** Licensees holding valid dxflib Professional Edition licenses may use
13 ** this file in accordance with the dxflib Commercial License
14 ** Agreement provided with the Software.
15 **
16 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
17 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18 **
19 ** See http://www.ribbonsoft.com for further details.
20 **
21 ** Contact info@ribbonsoft.com if any conditions of this licensing are
22 ** not clear to you.
23 **
24 **********************************************************************/
25 
30 #ifndef DXF_CODES_H
31 #define DXF_CODES_H
32 
33 #include "dl_global.h"
34 
35 #if _MSC_VER > 1000
36 #pragma once
37 #endif // _MSC_VER > 1000
38 
39 #if defined(__OS2__)||defined(__EMX__)
40 #define strcasecmp(s,t) stricmp(s,t)
41 #endif
42 
43 #if defined(_WIN32)
44 #define strcasecmp(s,t) _stricmp(s,t)
45 #endif
46 
47 
48 #ifdef _WIN32
49 #undef M_PI
50 #define M_PI 3.14159265358979323846
51 #pragma warning(disable : 4800)
52 #endif
53 
54 #ifndef M_PI
55 #define M_PI 3.1415926535897932384626433832795
56 #endif
57 
58 #define DL_DXF_MAXLINE 1024
59 #define DL_DXF_MAXGROUPCODE 1100
60 
61 // used to mark invalid vectors:
62 //#define DL_DXF_MAXDOUBLE 1.0E+10
63 
68 public:
72  enum color {
73  black = 250,
74  green = 3,
75  red = 1,
76  brown = 15,
77  yellow = 2,
78  cyan = 4,
79  magenta = 6,
80  gray = 8,
81  blue = 5,
82  l_blue = 163,
83  l_green = 121,
84  l_cyan = 131,
85  l_red = 23,
86  l_magenta = 221,
87  l_gray = 252,
88  white = 7,
89  bylayer = 256,
90  byblock = 0
91  };
92 
96  enum version {
97  AC1009_MIN, // R12, minimalistic
98  AC1009, // R12
101  AC1015 // R2000
102  };
103 };
104 
105 
106 // Extended color palette:
107 // The first entry is only for direct indexing starting with [1]
108 // Color 1 is red (1,0,0)
109 const double dxfColors[][3] = {
110  {0,0,0}, // unused
111  {1,0,0}, // 1
112  {1,1,0},
113  {0,1,0},
114  {0,1,1},
115  {0,0,1},
116  {1,0,1},
117  {1,1,1}, // black or white
118  {0.5,0.5,0.5},
119  {0.75,0.75,0.75},
120  {1,0,0}, // 10
121  {1,0.5,0.5},
122  {0.65,0,0},
123  {0.65,0.325,0.325},
124  {0.5,0,0},
125  {0.5,0.25,0.25},
126  {0.3,0,0},
127  {0.3,0.15,0.15},
128  {0.15,0,0},
129  {0.15,0.075,0.075},
130  {1,0.25,0}, // 20
131  {1,0.625,0.5},
132  {0.65,0.1625,0},
133  {0.65,0.4063,0.325},
134  {0.5,0.125,0},
135  {0.5,0.3125,0.25},
136  {0.3,0.075,0},
137  {0.3,0.1875,0.15},
138  {0.15,0.0375,0},
139  {0.15,0.0938,0.075},
140  {1,0.5,0}, // 30
141  {1,0.75,0.5},
142  {0.65,0.325,0},
143  {0.65,0.4875,0.325},
144  {0.5,0.25,0},
145  {0.5,0.375,0.25},
146  {0.3,0.15,0},
147  {0.3,0.225,0.15},
148  {0.15,0.075,0},
149  {0.15,0.1125,0.075},
150  {1,0.75,0}, // 40
151  {1,0.875,0.5},
152  {0.65,0.4875,0},
153  {0.65,0.5688,0.325},
154  {0.5,0.375,0},
155  {0.5,0.4375,0.25},
156  {0.3,0.225,0},
157  {0.3,0.2625,0.15},
158  {0.15,0.1125,0},
159  {0.15,0.1313,0.075},
160  {1,1,0}, // 50
161  {1,1,0.5},
162  {0.65,0.65,0},
163  {0.65,0.65,0.325},
164  {0.5,0.5,0},
165  {0.5,0.5,0.25},
166  {0.3,0.3,0},
167  {0.3,0.3,0.15},
168  {0.15,0.15,0},
169  {0.15,0.15,0.075},
170  {0.75,1,0}, // 60
171  {0.875,1,0.5},
172  {0.4875,0.65,0},
173  {0.5688,0.65,0.325},
174  {0.375,0.5,0},
175  {0.4375,0.5,0.25},
176  {0.225,0.3,0},
177  {0.2625,0.3,0.15},
178  {0.1125,0.15,0},
179  {0.1313,0.15,0.075},
180  {0.5,1,0}, // 70
181  {0.75,1,0.5},
182  {0.325,0.65,0},
183  {0.4875,0.65,0.325},
184  {0.25,0.5,0},
185  {0.375,0.5,0.25},
186  {0.15,0.3,0},
187  {0.225,0.3,0.15},
188  {0.075,0.15,0},
189  {0.1125,0.15,0.075},
190  {0.25,1,0}, // 80
191  {0.625,1,0.5},
192  {0.1625,0.65,0},
193  {0.4063,0.65,0.325},
194  {0.125,0.5,0},
195  {0.3125,0.5,0.25},
196  {0.075,0.3,0},
197  {0.1875,0.3,0.15},
198  {0.0375,0.15,0},
199  {0.0938,0.15,0.075},
200  {0,1,0}, // 90
201  {0.5,1,0.5},
202  {0,0.65,0},
203  {0.325,0.65,0.325},
204  {0,0.5,0},
205  {0.25,0.5,0.25},
206  {0,0.3,0},
207  {0.15,0.3,0.15},
208  {0,0.15,0},
209  {0.075,0.15,0.075},
210  {0,1,0.25}, // 100
211  {0.5,1,0.625},
212  {0,0.65,0.1625},
213  {0.325,0.65,0.4063},
214  {0,0.5,0.125},
215  {0.25,0.5,0.3125},
216  {0,0.3,0.075},
217  {0.15,0.3,0.1875},
218  {0,0.15,0.0375},
219  {0.075,0.15,0.0938},
220  {0,1,0.5}, // 110
221  {0.5,1,0.75},
222  {0,0.65,0.325},
223  {0.325,0.65,0.4875},
224  {0,0.5,0.25},
225  {0.25,0.5,0.375},
226  {0,0.3,0.15},
227  {0.15,0.3,0.225},
228  {0,0.15,0.075},
229  {0.075,0.15,0.1125},
230  {0,1,0.75}, // 120
231  {0.5,1,0.875},
232  {0,0.65,0.4875},
233  {0.325,0.65,0.5688},
234  {0,0.5,0.375},
235  {0.25,0.5,0.4375},
236  {0,0.3,0.225},
237  {0.15,0.3,0.2625},
238  {0,0.15,0.1125},
239  {0.075,0.15,0.1313},
240  {0,1,1}, // 130
241  {0.5,1,1},
242  {0,0.65,0.65},
243  {0.325,0.65,0.65},
244  {0,0.5,0.5},
245  {0.25,0.5,0.5},
246  {0,0.3,0.3},
247  {0.15,0.3,0.3},
248  {0,0.15,0.15},
249  {0.075,0.15,0.15},
250  {0,0.75,1}, // 140
251  {0.5,0.875,1},
252  {0,0.4875,0.65},
253  {0.325,0.5688,0.65},
254  {0,0.375,0.5},
255  {0.25,0.4375,0.5},
256  {0,0.225,0.3},
257  {0.15,0.2625,0.3},
258  {0,0.1125,0.15},
259  {0.075,0.1313,0.15},
260  {0,0.5,1}, // 150
261  {0.5,0.75,1},
262  {0,0.325,0.65},
263  {0.325,0.4875,0.65},
264  {0,0.25,0.5},
265  {0.25,0.375,0.5},
266  {0,0.15,0.3},
267  {0.15,0.225,0.3},
268  {0,0.075,0.15},
269  {0.075,0.1125,0.15},
270  {0,0.25,1}, // 160
271  {0.5,0.625,1},
272  {0,0.1625,0.65},
273  {0.325,0.4063,0.65},
274  {0,0.125,0.5},
275  {0.25,0.3125,0.5},
276  {0,0.075,0.3},
277  {0.15,0.1875,0.3},
278  {0,0.0375,0.15},
279  {0.075,0.0938,0.15},
280  {0,0,1}, // 170
281  {0.5,0.5,1},
282  {0,0,0.65},
283  {0.325,0.325,0.65},
284  {0,0,0.5},
285  {0.25,0.25,0.5},
286  {0,0,0.3},
287  {0.15,0.15,0.3},
288  {0,0,0.15},
289  {0.075,0.075,0.15},
290  {0.25,0,1}, // 180
291  {0.625,0.5,1},
292  {0.1625,0,0.65},
293  {0.4063,0.325,0.65},
294  {0.125,0,0.5},
295  {0.3125,0.25,0.5},
296  {0.075,0,0.3},
297  {0.1875,0.15,0.3},
298  {0.0375,0,0.15},
299  {0.0938,0.075,0.15},
300  {0.5,0,1}, // 190
301  {0.75,0.5,1},
302  {0.325,0,0.65},
303  {0.4875,0.325,0.65},
304  {0.25,0,0.5},
305  {0.375,0.25,0.5},
306  {0.15,0,0.3},
307  {0.225,0.15,0.3},
308  {0.075,0,0.15},
309  {0.1125,0.075,0.15},
310  {0.75,0,1}, // 200
311  {0.875,0.5,1},
312  {0.4875,0,0.65},
313  {0.5688,0.325,0.65},
314  {0.375,0,0.5},
315  {0.4375,0.25,0.5},
316  {0.225,0,0.3},
317  {0.2625,0.15,0.3},
318  {0.1125,0,0.15},
319  {0.1313,0.075,0.15},
320  {1,0,1}, // 210
321  {1,0.5,1},
322  {0.65,0,0.65},
323  {0.65,0.325,0.65},
324  {0.5,0,0.5},
325  {0.5,0.25,0.5},
326  {0.3,0,0.3},
327  {0.3,0.15,0.3},
328  {0.15,0,0.15},
329  {0.15,0.075,0.15},
330  {1,0,0.75}, // 220
331  {1,0.5,0.875},
332  {0.65,0,0.4875},
333  {0.65,0.325,0.5688},
334  {0.5,0,0.375},
335  {0.5,0.25,0.4375},
336  {0.3,0,0.225},
337  {0.3,0.15,0.2625},
338  {0.15,0,0.1125},
339  {0.15,0.075,0.1313},
340  {1,0,0.5}, // 230
341  {1,0.5,0.75},
342  {0.65,0,0.325},
343  {0.65,0.325,0.4875},
344  {0.5,0,0.25},
345  {0.5,0.25,0.375},
346  {0.3,0,0.15},
347  {0.3,0.15,0.225},
348  {0.15,0,0.075},
349  {0.15,0.075,0.1125},
350  {1,0,0.25}, // 240
351  {1,0.5,0.625},
352  {0.65,0,0.1625},
353  {0.65,0.325,0.4063},
354  {0.5,0,0.125},
355  {0.5,0.25,0.3125},
356  {0.3,0,0.075},
357  {0.3,0.15,0.1875},
358  {0.15,0,0.0375},
359  {0.15,0.075,0.0938},
360  {0.33,0.33,0.33}, // 250
361  {0.464,0.464,0.464},
362  {0.598,0.598,0.598},
363  {0.732,0.732,0.732},
364  {0.866,0.866,0.866},
365  {1,1,1} // 255
366  }
367  ;
368 
369 
370 // AutoCAD VERSION aliases
371 #define DL_VERSION_R12 DL_Codes::AC1009
372 #define DL_VERSION_LT2 DL_Codes::AC1009
373 #define DL_VERSION_R13 DL_Codes::AC1012 // not supported yet
374 #define DL_VERSION_LT95 DL_Codes::AC1012 // not supported yet
375 #define DL_VERSION_R14 DL_Codes::AC1014 // not supported yet
376 #define DL_VERSION_LT97 DL_Codes::AC1014 // not supported yet
377 #define DL_VERSION_LT98 DL_Codes::AC1014 // not supported yet
378 #define DL_VERSION_2000 DL_Codes::AC1015
379 #define DL_VERSION_2002 DL_Codes::AC1015
380 
381 
382 // DXF Group Codes:
383 
384 // Strings
385 #define DL_STRGRP_START 0
386 #define DL_STRGRP_END 9
387 
388 // Coordinates
389 #define DL_CRDGRP_START 10
390 #define DL_CRDGRP_END 19
391 
392 // Real values
393 #define DL_RLGRP_START 38
394 #define DL_RLGRP_END 59
395 
396 // Short integer values
397 #define DL_SHOGRP_START 60
398 #define DL_SHOGRP_END 79
399 
400 // New in Release 13,
401 #define DL_SUBCLASS 100
402 
403 // More coordinates
404 #define DL_CRD2GRP_START 210
405 #define DL_CRD2GRP_END 239
406 
407 // Extended data strings
408 #define DL_ESTRGRP_START 1000
409 #define DL_ESTRGRP_END 1009
410 
411 // Extended data reals
412 #define DL_ERLGRP_START 1010
413 #define DL_ERLGRP_END 1059
414 
415 
416 #define DL_Y8_COORD_CODE 28
417 #define DL_Z0_COORD_CODE 30
418 #define DL_Z8_COORD_CODE 38
419 
420 #define DL_POINT_COORD_CODE 10
421 #define DL_INSERT_COORD_CODE 10
422 
423 #define DL_CRD2GRP_START 210
424 #define DL_CRD2GRP_END 239
425 
426 #define DL_THICKNESS 39
427 #define DL_FIRST_REAL_CODE THICKNESS
428 #define DL_LAST_REAL_CODE 59
429 #define DL_FIRST_INT_CODE 60
430 #define DL_ATTFLAGS_CODE 70
431 #define DL_PLINE_FLAGS_CODE 70
432 #define DL_LAYER_FLAGS_CODE 70
433 #define DL_FLD_LEN_CODE 73 // Inside ATTRIB resbuf
434 #define DL_LAST_INT_CODE 79
435 #define DL_X_EXTRU_CODE 210
436 #define DL_Y_EXTRU_CODE 220
437 #define DL_Z_EXTRU_CODE 230
438 #define DL_COMMENT_CODE 999
439 
440 // Start and endpoints of a line
441 #define DL_LINE_START_CODE 10 // Followed by x coord
442 #define DL_LINE_END_CODE 11 // Followed by x coord
443 
444 // Some codes used by blocks
445 #define DL_BLOCK_FLAGS_CODE 70 // An int containing flags
446 #define DL_BLOCK_BASE_CODE 10 // Origin of block definition
447 #define DL_XREF_DEPENDENT 16 // If a block contains an XREF
448 #define DL_XREF_RESOLVED 32 // If a XREF resolved ok
449 #define DL_REFERENCED 64 // If a block is ref'd in DWG
450 
451 #define DL_XSCALE_CODE 41
452 #define DL_YSCALE_CODE 42
453 #define DL_ANGLE_CODE 50
454 #define DL_INS_POINT_CODE 10 // Followed by x of ins pnt
455 #define DL_NAME2_CODE 3 // Second appearance of name
456 
457 // Some codes used by circle entities
458 #define DL_CENTER_CODE 10 // Followed by x of center
459 #define DL_RADIUS_CODE 40 // Followd by radius of circle
460 
461 #define DL_COND_OP_CODE -4 // Conditional op,ads_ssget
462 
463 // When using ads_buildlist you MUST use RTDXF0 instead of these
464 #define DL_ENTITY_TYPE_CODE 0 // Then there is LINE, 3DFACE..
465 #define DL_SES_CODE 0 // Start End String Code
466 #define DL_FILE_SEP_CODE 0 // File separator
467 #define DL_SOT_CODE 0 // Start Of Table
468 #define DL_TEXTVAL_CODE 1
469 #define DL_NAME_CODE 2
470 #define DL_BLOCK_NAME_CODE 2
471 #define DL_SECTION_NAME_CODE 2
472 #define DL_ENT_HAND_CODE 5 // What follows is hexa string
473 #define DL_TXT_STYLE_CODE 7 // Inside attributes
474 #define DL_LAYER_NAME_CODE 8 // What follows is layer name
475 #define DL_FIRST_XCOORD_CODE 10 // Group code x of 1st coord
476 #define DL_FIRST_YCOORD_CODE 20 // Group code y of 1st coord
477 #define DL_FIRST_ZCOORD_CODE 30 // Group code z of 1st coord
478 #define DL_L_START_CODE 10
479 #define DL_L_END_CODE 11
480 #define DL_TXTHI_CODE 40
481 #define DL_SCALE_X_CODE 41
482 #define DL_SCALE_Y_CODE 42
483 #define DL_SCALE_Z_CODE 43
484 #define DL_BULGE_CODE 42 // Used in PLINE verts for arcs
485 #define DL_ROTATION_CODE 50
486 #define DL_COLOUR_CODE 62 // What follows is a color int
487 #define DL_LTYPE_CODE 6 // What follows is a linetype
488 
489 
490 // Attribute flags
491 #define DL_ATTS_FOLLOW_CODE 66
492 #define DL_ATT_TAG_CODE 2
493 #define DL_ATT_VAL_CODE 1
494 #define DL_ATT_FLAGS_CODE 70 // 4 1 bit flags as follows...
495 #define DL_ATT_INVIS_FLAG 1
496 #define DL_ATT_CONST_FLAG 2
497 #define DL_ATT_VERIFY_FLAG 4 // Prompt and verify
498 #define DL_ATT_PRESET_FLAG 8 // No prompt and no verify
499 
500 // PLINE defines
501 // Flags
502 #define DL_OPEN_PLINE 0x00
503 #define DL_CLOSED_PLINE 0x01
504 #define DL_POLYLINE3D 0x80
505 #define DL_PFACE_MESH 0x40
506 #define DL_PGON_MESH 0x10
507 // Vertices follow entity, required in POLYLINES
508 #define DL_VERTS_FOLLOW_CODE 66 // Value should always be 1
509 #define DL_VERTEX_COORD_CODE 10
510 
511 
512 // LAYER flags
513 #define DL_FROZEN 1
514 #define DL_FROZEN_BY_DEF 2
515 #define DL_LOCKED 4
516 #define DL_OBJECT_USED 64 // Object is ref'd in the dwg
517 
518 #define DL_BLOCK_EN_CODE -2 // Block entity definition
519 #define DL_E_NAME -1 // Entity name
520 
521 // Extended data codes
522 #define DL_EXTD_SENTINEL (-3)
523 #define DL_EXTD_STR 1000
524 #define DL_EXTD_APP_NAME 1001
525 #define DL_EXTD_CTL_STR 1002
526 #define DL_EXTD_LYR_STR 1003
527 #define DL_EXTD_CHUNK 1004
528 #define DL_EXTD_HANDLE 1005
529 #define DL_EXTD_POINT 1010
530 #define DL_EXTD_POS 1011
531 #define DL_EXTD_DISP 1012
532 #define DL_EXTD_DIR 1013
533 #define DL_EXTD_FLOAT 1040
534 #define DL_EXTD_DIST 1041
535 #define DL_EXTD_SCALE 1042
536 #define DL_EXTD_INT16 1070
537 #define DL_EXTD_INT32 1071
538 
539 // UCS codes for use in ads_trans
540 #define DL_WCS_TRANS_CODE 0
541 #define DL_UCS_TRANS_CODE 1
542 #define DL_DCS_TRANS_CODE 2
543 #define DL_PCS_TRANS_CODE 3
544 
545 #endif
546 
Definition: dl_codes.h:99
#define DXFLIB_EXPORT
Definition: dl_global.h:12
Codes for colors and DXF versions.
Definition: dl_codes.h:67
color
Standard DXF colors.
Definition: dl_codes.h:72
Definition: dl_codes.h:98
Definition: dl_codes.h:97
const double dxfColors[][3]
Definition: dl_codes.h:109
version
Version numbers for the DXF Format.
Definition: dl_codes.h:96
Definition: dl_codes.h:100