summaryrefslogtreecommitdiff
path: root/lib_dxf/drw_objects.h
blob: 46c9a3ca1d039d94f92c46820314af99a6b7eb16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
/******************************************************************************
**  libDXFrw - Library to read/write DXF files (ascii & binary)              **
**                                                                           **
**  Copyright (C) 2011 Rallaz, rallazz@gmail.com                             **
**                                                                           **
**  This library is free software, licensed under the terms of the GNU       **
**  General Public License as published by the Free Software Foundation,     **
**  either version 2 of the License, or (at your option) any later version.  **
**  You should have received a copy of the GNU General Public License        **
**  along with this program.  If not, see <http://www.gnu.org/licenses/>.    **
******************************************************************************/

#ifndef DRW_OBJECTS_H
#define DRW_OBJECTS_H


#include <string>
#include <vector>
#include <map>
#include "drw_base.h"

class dxfReader;
class dxfWriter;

namespace DRW {
// ! Table entries type.
enum TTYPE
{
    UNKNOWNT,
    LTYPE,
    LAYER,
    STYLE,
    DIMSTYLE,
    VPORT,
    BLOCK_RECORD,
    APPID
};
}

// ! Base class for tables entries
/*!
 *  Base class for tables entries
 *  @author Rallaz
 */
class DRW_TableEntry
{
public:
    // initializes default values
    DRW_TableEntry()
    {
        tType   = DRW::UNKNOWNT;
        flags   = 0;
        curr    = NULL;
        handle  = 0;
        handleBlock = 0;
    }

    virtual ~DRW_TableEntry()
    {
        for( std::vector<DRW_Variant*>::iterator it = extData.begin(); it!=extData.end(); ++it )
            delete *it;

        extData.clear();
    }

protected:
    void parseCode( int code, dxfReader* reader );

    void reset()
    {
        flags = 0;

        for( std::vector<DRW_Variant*>::iterator it = extData.begin(); it!=extData.end(); ++it )
            delete *it;

        extData.clear();
    }

public:
    enum DRW::TTYPE tType;              /*!< enum: entity type, code 0 */
    int handle;                         /*!< entity identifier, code 5 */
    int handleBlock;                    /*!< Soft-pointer ID/handle to owner BLOCK_RECORD object, code 330 */
    UTF8STRING name;                    /*!< entry name, code 2 */
    int flags;                          /*!< Flags relevant to entry, code 70 */
    std::vector<DRW_Variant*> extData;  /*!< FIFO list of extended data, codes 1000 to 1071*/

private:
    DRW_Variant* curr;
};


// ! Class to handle dimstyle entries
/*!
 *  Class to handle dim style symbol table entries
 *  @author Rallaz
 */
class DRW_Dimstyle : public DRW_TableEntry
{
public:
    DRW_Dimstyle() { reset(); }

    void reset()
    {
        tType   = DRW::DIMSTYLE;
        dimasz  = dimtxt = dimexe = 0.18;
        dimexo  = 0.0625;
        dimgap  = dimcen = 0.09;
        dimtxsty    = "Standard";
        dimscale    = dimlfac = dimtfac = 1.0;
        dimdli  = 0.38;
        dimrnd  = dimdle = dimtp = dimtm = dimtsz = dimtvp = 0.0;
        dimaltf = 25.4;
        dimtol  = dimlim = dimse1 = dimse2 = dimtad = dimzin = 0;
        dimtoh  = dimtolj = 1;
        dimalt  = dimtofl = dimsah = dimtix = dimsoxd = 0;
        dimaltd = dimunit = dimaltu = dimalttd = dimlunit = 2;
        dimclrd = dimclre = dimclrt = dimjust = dimupt = 0;
        dimazin = dimaltz = dimaltttz = dimtzin = dimfrac = 0;
        dimtih  = dimadec = dimaunit = dimsd1 = dimsd2 = dimtmove = 0;
        dimaltrnd = 0.0;
        dimdec  = dimtdec = 4;
        dimfit  = dimatfit = 3;
        dimdsep = '.';
        dimlwd  = dimlwe = -2;
        DRW_TableEntry::reset();
    }

    void parseCode( int code, dxfReader* reader );

public:
    // V12
    UTF8STRING  dimpost;        /*!< code 3 */
    UTF8STRING  dimapost;       /*!< code 4 */
/* handle are code 105 */
    UTF8STRING  dimblk;         /*!< code 5, code 342 V2000+ */
    UTF8STRING  dimblk1;        /*!< code 6, code 343 V2000+ */
    UTF8STRING  dimblk2;        /*!< code 7, code 344 V2000+ */
    double  dimscale;           /*!< code 40 */
    double  dimasz;             /*!< code 41 */
    double  dimexo;             /*!< code 42 */
    double  dimdli;             /*!< code 43 */
    double  dimexe;             /*!< code 44 */
    double  dimrnd;             /*!< code 45 */
    double  dimdle;             /*!< code 46 */
    double  dimtp;              /*!< code 47 */
    double  dimtm;              /*!< code 48 */
    double  dimtxt;             /*!< code 140 */
    double  dimcen;             /*!< code 141 */
    double  dimtsz;             /*!< code 142 */
    double  dimaltf;            /*!< code 143 */
    double  dimlfac;            /*!< code 144 */
    double  dimtvp;             /*!< code 145 */
    double  dimtfac;            /*!< code 146 */
    double  dimgap;             /*!< code 147 */
    double  dimaltrnd;          /*!< code 148 V2000+ */
    int dimtol;                 /*!< code 71 */
    int dimlim;                 /*!< code 72 */
    int dimtih;                 /*!< code 73 */
    int dimtoh;                 /*!< code 74 */
    int dimse1;                 /*!< code 75 */
    int dimse2;                 /*!< code 76 */
    int dimtad;                 /*!< code 77 */
    int dimzin;                 /*!< code 78 */
    int dimazin;                /*!< code 79 V2000+ */
    int dimalt;                 /*!< code 170 */
    int dimaltd;                /*!< code 171 */
    int dimtofl;                /*!< code 172 */
    int dimsah;                 /*!< code 173 */
    int dimtix;                 /*!< code 174 */
    int dimsoxd;                /*!< code 175 */
    int dimclrd;                /*!< code 176 */
    int dimclre;                /*!< code 177 */
    int dimclrt;                /*!< code 178 */
    int dimadec;                /*!< code 179 V2000+ */
    int dimunit;                /*!< code 270 R13+ (obsolete 2000+, use dimlunit & dimfrac) */
    int dimdec;                 /*!< code 271 R13+ */
    int dimtdec;                /*!< code 272 R13+ */
    int dimaltu;                /*!< code 273 R13+ */
    int dimalttd;               /*!< code 274 R13+ */
    int dimaunit;               /*!< code 275 R13+ */
    int dimfrac;                /*!< code 276 V2000+ */
    int dimlunit;               /*!< code 277 V2000+ */
    int dimdsep;                /*!< code 278 V2000+ */
    int dimtmove;               /*!< code 279 V2000+ */
    int dimjust;                /*!< code 280 R13+ */
    int dimsd1;                 /*!< code 281 R13+ */
    int dimsd2;                 /*!< code 282 R13+ */
    int dimtolj;                /*!< code 283 R13+ */
    int dimtzin;                /*!< code 284 R13+ */
    int dimaltz;                /*!< code 285 R13+ */
    int dimaltttz;              /*!< code 286 R13+ */
    int dimfit;                 /*!< code 287 R13+  (obsolete 2000+, use dimatfit & dimtmove)*/
    int dimupt;                 /*!< code 288 R13+ */
    int dimatfit;               /*!< code 289 V2000+ */
    UTF8STRING  dimtxsty;       /*!< code 340 R13+ */
    UTF8STRING  dimldrblk;      /*!< code 341 V2000+ */
    int dimlwd;                 /*!< code 371 V2000+ */
    int dimlwe;                 /*!< code 372 V2000+ */
};


// ! Class to handle line type entries
/*!
 *  Class to handle line type symbol table entries
 *  @author Rallaz
 */
/*TODO: handle complex lineType*/
class DRW_LType : public DRW_TableEntry
{
public:
    DRW_LType() { reset(); }

    void reset()
    {
        tType   = DRW::LTYPE;
        desc    = "";
        size    = 0;
        length  = 0.0;
        pathIdx = 0;
        DRW_TableEntry::reset();
    }

    void    parseCode( int code, dxfReader* reader );
    void    update();

public:
    UTF8STRING desc;            /*!< descriptive string, code 3 */
// int align;               /*!< align code, always 65 ('A') code 72 */
    int size;                   /*!< element number, code 73 */
    double length;              /*!< total length of pattern, code 40 */
// int haveShape;      /*!< complex linetype type, code 74 */
    std::vector<double> path;   /*!< trace, point or space length sequence, code 49 */

private:
    int pathIdx;
};


// ! Class to handle layer entries
/*!
 *  Class to handle layer symbol table entries
 *  @author Rallaz
 */
class DRW_Layer : public DRW_TableEntry
{
public:
    DRW_Layer() { reset(); }

    void reset()
    {
        tType = DRW::LAYER;
        lineType = "CONTINUOUS";
        color   = 7;                            // default BYLAYER (256)
        plotF   = true;                         // default TRUE (plot yes)
        lWeight = DRW_LW_Conv::widthDefault;    // default BYDEFAULT (dxf -3, dwg 31)
        color24 = -1;                           // default -1 not set
        DRW_TableEntry::reset();
    }

    void parseCode( int code, dxfReader* reader );

public:
    UTF8STRING lineType;                    /*!< line type, code 6 */
    int color;                              /*!< layer color, code 62 */
    int color24;                            /*!< 24-bit color, code 420 */
    bool plotF;                             /*!< Plot flag, code 290 */
    enum DRW_LW_Conv::lineWidth lWeight;    /*!< layer lineweight, code 370 */
    std::string handlePlotS;                /*!< Hard-pointer ID/handle of plotstyle, code 390 */
    std::string handlePlotM;                /*!< Hard-pointer ID/handle of materialstyle, code 347 */
};

// ! Class to handle text style entries
/*!
 *  Class to handle text style symbol table entries
 *  @author Rallaz
 */
class DRW_Textstyle : public DRW_TableEntry
{
public:
    DRW_Textstyle() { reset(); }

    void reset()
    {
        tType   = DRW::STYLE;
        height  = oblique = 0.0;
        width   = lastHeight = 1.0;
        font = "txt";
        genFlag = 0;    // 2= X mirror, 4= Y mirror
        fontFamily = 0;
        DRW_TableEntry::reset();
    }

    void parseCode( int code, dxfReader* reader );

public:
    double  height;         /*!< Fixed text height (0 not set), code 40 */
    double  width;          /*!< Width factor, code 41 */
    double  oblique;        /*!< Oblique angle, code 50 */
    int genFlag;            /*!< Text generation flags, code 71 */
    double lastHeight;      /*!< Last height used, code 42 */
    UTF8STRING  font;       /*!< primary font file name, code 3 */
    UTF8STRING  bigFont;    /*!< bigfont file name or blank if none, code 4 */
    int fontFamily;         /*!< ttf font family, italic and bold flags, code 1071 */
};

// ! Class to handle vport entries
/*!
 *  Class to handle vport symbol table entries
 *  @author Rallaz
 */
class DRW_Vport : public DRW_TableEntry
{
public:
    DRW_Vport() { reset(); }

    void reset()
    {
        UpperRight.x    = UpperRight.y = 1.0;
        snapSpacing.x   = snapSpacing.y = 10.0;
        gridSpacing = snapSpacing;
        center.x    = 0.651828;
        center.y    = -0.16;
        viewDir.z   = 1;
        height  = 5.13732;
        ratio   = 2.4426877;
        lensHeight  = 50;
        frontClip   = backClip = snapAngle = twistAngle = 0.0;
        viewMode    = snap = grid = snapStyle = snapIsopair = 0;
        fastZoom    = 1;
        circleZoom = 100;
        ucsIcon = 3;
        gridBehavior = 7;
        DRW_TableEntry::reset();
    }

    void parseCode( int code, dxfReader* reader );

public:
    DRW_Coord   lowerLeft;      /*!< Lower left corner, code 10 & 20 */
    DRW_Coord   UpperRight;     /*!< Upper right corner, code 11 & 21 */
    DRW_Coord   center;         /*!< center point in WCS, code 12 & 22 */
    DRW_Coord   snapBase;       /*!< snap base point in DCS, code 13 & 23 */
    DRW_Coord   snapSpacing;    /*!< snap Spacing, code 14 & 24 */
    DRW_Coord   gridSpacing;    /*!< grid Spacing, code 15 & 25 */
    DRW_Coord   viewDir;        /*!< view direction from target point, code 16, 26 & 36 */
    DRW_Coord   viewTarget;     /*!< view target point, code 17, 27 & 37 */
    double  height;             /*!< view height, code 40 */
    double  ratio;              /*!< viewport aspect ratio, code 41 */
    double  lensHeight;         /*!< lens height, code 42 */
    double  frontClip;          /*!< front clipping plane, code 43 */
    double  backClip;           /*!< back clipping plane, code 44 */
    double  snapAngle;          /*!< snap rotation angle, code 50 */
    double  twistAngle;         /*!< view twist angle, code 51 */
    int viewMode;               /*!< view mode, code 71 */
    int circleZoom;             /*!< circle zoom percent, code 72 */
    int fastZoom;               /*!< fast zoom setting, code 73 */
    int ucsIcon;                /*!< UCSICON setting, code 74 */
    int snap;                   /*!< snap on/off, code 75 */
    int grid;                   /*!< grid on/off, code 76 */
    int snapStyle;              /*!< snap style, code 77 */
    int snapIsopair;            /*!< snap isopair, code 78 */
    int gridBehavior;           /*!< grid behavior, code 60, undocummented */
    /** code 60, bit coded possible value are
     * bit 1 (1) show out of limits
     * bit 2 (2) adaptive grid
     * bit 3 (4) allow subdivision
     * bit 4 (8) follow dinamic SCP
     **/
};


// ! Class to handle imagedef entries
/*!
 *  Class to handle image definitions object entries
 *  @author Rallaz
 */
class DRW_ImageDef
{
public:
    DRW_ImageDef()
    {
        version = 0;
        u = v = up = vp = 0.0;
        loaded = 0;
        resolution = 0;
    }

    void parseCode( int code, dxfReader* reader );

public:
    std::string handle;         /*!< entity identifier, code 5 */
    UTF8STRING  name;           /*!< File name of image, code 1 */
    int version;                /*!< class version, code 90, 0=R14 version */
    double  u;                  /*!< image size in pixels U value, code 10 */
    double  v;                  /*!< image size in pixels V value, code 20 */
    double  up;                 /*!< default size of one pixel U value, code 11 */
    double  vp;                 /*!< default size of one pixel V value, code 12 really is 21*/
    int loaded;                 /*!< image is loaded flag, code 280, 0=unloaded, 1=loaded */
    int resolution;             /*!< resolution units, code 281, 0=no, 2=centimeters, 5=inch */

    std::map<std::string, std::string> reactors;
};


// ! Class to handle header entries
/*!
 *  Class to handle header vars, to read iterate over "std::map vars"
 *  to write add a DRW_Variant* into "std::map vars" (do not delete it, are cleared in dtor)
 *  or use add* helper functions.
 *  @author Rallaz
 */
class DRW_Header
{
public:
    DRW_Header()
    {
        version = 0;
        curr = 0;
    }

    ~DRW_Header()
    {
        for( std::map<std::string, DRW_Variant*>::iterator it = vars.begin(); it!=vars.end(); ++it )
            delete it->second;

        vars.clear();
    }

    void    addDouble( std::string key, double value, int code );
    void    addInt( std::string key, int value, int code );
    void    addStr( std::string key, std::string value, int code );
    void    addCoord( std::string key, DRW_Coord value, int code );

    std::string getComments() const { return comments; }

    void    parseCode( int code, dxfReader* reader );
    void    write( dxfWriter* writer, DRW::Version ver );
    void    addComment( std::string c );

private:
    bool    getDouble( std::string key, double* varDouble );
    bool    getInt( std::string key, int* varInt );
    bool    getStr( std::string key, std::string* varStr );
    bool    getCoord( std::string key, DRW_Coord* varStr );

public:
    std::map<std::string, DRW_Variant*> vars;

private:
    std::string comments;
    std::string name;
    DRW_Variant* curr;
    int version;    // to use on read
};

// ! Class to handle AppId entries
/*!
 *  Class to handle AppId symbol table entries
 *  @author Rallaz
 */
class DRW_AppId : public DRW_TableEntry
{
public:
    DRW_AppId() { reset(); }

    void reset()
    {
        tType   = DRW::APPID;
        flags   = 0;
        name    = "";
    }

    void parseCode( int code, dxfReader* reader ) { DRW_TableEntry::parseCode( code, reader ); }
};

namespace DRW {
// Extended color palette:
// The first entry is only for direct indexing starting with [1]
// Color 1 is red (1,0,0)
const unsigned char dxfColors[][3] =
{
    {   0,   0,   0 },  // unused
    { 255,   0,   0 },  // 1 red
    { 255, 255,   0 },  // 2 yellow
    {   0, 255,   0 },  // 3 green
    {   0, 255, 255 },  // 4 cyan
    {   0,   0, 255 },  // 5 blue
    { 255,   0, 255 },  // 6 magenta
    {   0,   0,   0 },  // 7 black or white
    { 128, 128, 128 },  // 8 50% gray
    { 192, 192, 192 },  // 9 75% gray
    { 255,   0,   0 },  // 10
    { 255, 127, 127 },
    { 204,   0,   0 },
    { 204, 102, 102 },
    { 153,   0,   0 },
    { 153,  76,  76 }, // 15
    { 127,   0,   0 },
    { 127,  63,  63 },
    {  76,   0,   0 },
    {  76,  38,  38 },
    { 255,  63,   0 }, // 20
    { 255, 159, 127 },
    { 204,  51,   0 },
    { 204, 127, 102 },
    { 153,  38,   0 },
    { 153,  95,  76 }, // 25
    { 127,  31,   0 },
    { 127,  79,  63 },
    {  76,  19,   0 },
    {  76,  47,  38 },
    { 255, 127,   0 }, // 30
    { 255, 191, 127 },
    { 204, 102,   0 },
    { 204, 153, 102 },
    { 153,  76,   0 },
    { 153, 114,  76 }, // 35
    { 127,  63,   0 },
    { 127,  95,  63 },
    {  76,  38,   0 },
    {  76,  57,  38 },
    { 255, 191,   0 }, // 40
    { 255, 223, 127 },
    { 204, 153,   0 },
    { 204, 178, 102 },
    { 153, 114,   0 },
    { 153, 133,  76 }, // 45
    { 127,  95,   0 },
    { 127, 111,  63 },
    {  76,  57,   0 },
    {  76,  66,  38 },
    { 255, 255,   0 }, // 50
    { 255, 255, 127 },
    { 204, 204,   0 },
    { 204, 204, 102 },
    { 153, 153,   0 },
    { 153, 153,  76 }, // 55
    { 127, 127,   0 },
    { 127, 127,  63 },
    {  76,  76,   0 },
    {  76,  76,  38 },
    { 191, 255,   0 }, // 60
    { 223, 255, 127 },
    { 153, 204,   0 },
    { 178, 204, 102 },
    { 114, 153,   0 },
    { 133, 153,  76 }, // 65
    {  95, 127,   0 },
    { 111, 127,  63 },
    {  57,  76,   0 },
    {  66,  76,  38 },
    { 127, 255,   0 }, // 70
    { 191, 255, 127 },
    { 102, 204,   0 },
    { 153, 204, 102 },
    {  76, 153,   0 },
    { 114, 153,  76 }, // 75
    {  63, 127,   0 },
    {  95, 127,  63 },
    {  38,  76,   0 },
    {  57,  76,  38 },
    {  63, 255,   0 }, // 80
    { 159, 255, 127 },
    {  51, 204,   0 },
    { 127, 204, 102 },
    {  38, 153,   0 },
    {  95, 153,  76 }, // 85
    {  31, 127,   0 },
    {  79, 127,  63 },
    {  19,  76,   0 },
    {  47,  76,  38 },
    {   0, 255,   0 }, // 90
    { 127, 255, 127 },
    {   0, 204,   0 },
    { 102, 204, 102 },
    {   0, 153,   0 },
    {  76, 153,  76 }, // 95
    {   0, 127,   0 },
    {  63, 127,  63 },
    {   0,  76,   0 },
    {  38,  76,  38 },
    {   0, 255,  63 }, // 100
    { 127, 255, 159 },
    {   0, 204,  51 },
    { 102, 204, 127 },
    {   0, 153,  38 },
    {  76, 153,  95 }, // 105
    {   0, 127,  31 },
    {  63, 127,  79 },
    {   0,  76,  19 },
    {  38,  76,  47 },
    {   0, 255, 127 }, // 110
    { 127, 255, 191 },
    {   0, 204, 102 },
    { 102, 204, 153 },
    {   0, 153,  76 },
    {  76, 153, 114 }, // 115
    {   0, 127,  63 },
    {  63, 127,  95 },
    {   0,  76,  38 },
    {  38,  76,  57 },
    {   0, 255, 191 }, // 120
    { 127, 255, 223 },
    {   0, 204, 153 },
    { 102, 204, 178 },
    {   0, 153, 114 },
    {  76, 153, 133 }, // 125
    {   0, 127,  95 },
    {  63, 127, 111 },
    {   0,  76,  57 },
    {  38,  76,  66 },
    {   0, 255, 255 }, // 130
    { 127, 255, 255 },
    {   0, 204, 204 },
    { 102, 204, 204 },
    {   0, 153, 153 },
    {  76, 153, 153 }, // 135
    {   0, 127, 127 },
    {  63, 127, 127 },
    {   0,  76,  76 },
    {  38,  76,  76 },
    {   0, 191, 255 }, // 140
    { 127, 223, 255 },
    {   0, 153, 204 },
    { 102, 178, 204 },
    {   0, 114, 153 },
    {  76, 133, 153 }, // 145
    {   0,  95, 127 },
    {  63, 111, 127 },
    {   0,  57,  76 },
    {  38,  66,  76 },
    {   0, 127, 255 }, // 150
    { 127, 191, 255 },
    {   0, 102, 204 },
    { 102, 153, 204 },
    {   0,  76, 153 },
    {  76, 114, 153 }, // 155
    {   0,  63, 127 },
    {  63,  95, 127 },
    {   0,  38,  76 },
    {  38,  57,  76 },
    {   0,  66, 255 }, // 160
    { 127, 159, 255 },
    {   0,  51, 204 },
    { 102, 127, 204 },
    {   0,  38, 153 },
    {  76,  95, 153 }, // 165
    {   0,  31, 127 },
    {  63,  79, 127 },
    {   0,  19,  76 },
    {  38,  47,  76 },
    {   0,   0, 255 }, // 170
    { 127, 127, 255 },
    {   0,   0, 204 },
    { 102, 102, 204 },
    {   0,   0, 153 },
    {  76,  76, 153 }, // 175
    {   0,   0, 127 },
    {  63,  63, 127 },
    {   0,   0,  76 },
    {  38,  38,  76 },
    {  63,   0, 255 }, // 180
    { 159, 127, 255 },
    {  50,   0, 204 },
    { 127, 102, 204 },
    {  38,   0, 153 },
    {  95,  76, 153 }, // 185
    {  31,   0, 127 },
    {  79,  63, 127 },
    {  19,   0,  76 },
    {  47,  38,  76 },
    { 127,   0, 255 }, // 190
    { 191, 127, 255 },
    { 102,   0, 204 },
    { 153, 102, 204 },
    {  76,   0, 153 },
    { 114,  76, 153 }, // 195
    {  63,   0, 127 },
    {  95,  63, 127 },
    {  38,   0,  76 },
    {  57,  38,  76 },
    { 191,   0, 255 }, // 200
    { 223, 127, 255 },
    { 153,   0, 204 },
    { 178, 102, 204 },
    { 114,   0, 153 },
    { 133,  76, 153 }, // 205
    {  95,   0, 127 },
    { 111,  63, 127 },
    {  57,   0,  76 },
    {  66,  38,  76 },
    { 255,   0, 255 }, // 210
    { 255, 127, 255 },
    { 204,   0, 204 },
    { 204, 102, 204 },
    { 153,   0, 153 },
    { 153,  76, 153 }, // 215
    { 127,   0, 127 },
    { 127,  63, 127 },
    {  76,   0,  76 },
    {  76,  38,  76 },
    { 255,   0, 191 }, // 220
    { 255, 127, 223 },
    { 204,   0, 153 },
    { 204, 102, 178 },
    { 153,   0, 114 },
    { 153,  76, 133 }, // 225
    { 127,   0,  95 },
    { 127,  63,  11 },
    {  76,   0,  57 },
    {  76,  38,  66 },
    { 255,   0, 127 }, // 230
    { 255, 127, 191 },
    { 204,   0, 102 },
    { 204, 102, 153 },
    { 153,   0,  76 },
    { 153,  76, 114 }, // 235
    { 127,   0,  63 },
    { 127,  63,  95 },
    {  76,   0,  38 },
    {  76,  38,  57 },
    { 255,   0,  63 }, // 240
    { 255, 127, 159 },
    { 204,   0,  51 },
    { 204, 102, 127 },
    { 153,   0,  38 },
    { 153,  76,  95 }, // 245
    { 127,   0,  31 },
    { 127,  63,  79 },
    {  76,   0,  19 },
    {  76,  38,  47 },
    {  51,  51,  51 }, // 250
    {  91,  91,  91 },
    { 132, 132, 132 },
    { 173, 173, 173 },
    { 214, 214, 214 },
    { 255, 255, 255 }    // 255
};
}

#endif

// EOF