Newer
Older
/*
* Copyright (c) 2015 Tricoire Sebastien 3dsman@free.fr
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*
*/
#include "OE_thread.h"
#include <iostream>
float OE_thread::defaultWidth = 1;
unsigned char OE_thread::defaultColor[] = {20,20,20,255};
OE_thread::OE_thread()
{
this->width = defaultWidth;
this->color[0] = defaultColor[0];
this->color[1] = defaultColor[1];
this->color[2] = defaultColor[2];
this->color[3] = defaultColor[3];
}
OE_thread::OE_thread(unsigned char color[], float width)
{
this->color[0] = color[0];
this->color[1] = color[1];
this->color[2] = color[2];
this->color[3] = color[3];
this->width = width;
}
OE_thread::OE_thread(unsigned char r, unsigned char g, unsigned char b, float width)
{
setColor( r, g, b);
this->width = width;
}
OE_thread::~OE_thread()
{
}
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
OE_ofstream& operator<< (OE_ofstream& stream, const OE_thread& thread)
{
char sCol[16];
sprintf(sCol, "#%02x%02x%02x%02x", thread.color[0], thread.color[1], thread.color[2], thread.color[3]);
stream << "width=" << thread.width << " ";
stream << "color=" << sCol << " ";
}
unsigned strhex2unsigned(const char* s, unsigned len)
{
unsigned u = 0;
while (len--)
{
if (!isxdigit(*s))
return 0;
if (*s<='9')
u = (u<<4)+*s++-'0';
else if(*s<='F')
u = (u<<4)+*s++-'A'+10;
else
u = (u<<4)+*s++-'a'+10;
}
return u;
}
OE_ifstream& operator>> (OE_ifstream& stream, OE_thread& thread)
{
std::string sWidth, sCol;
stream >> sWidth;
if (!sWidth.substr(0, 6).compare("width=") && sWidth.size()>=7)
thread.width = atoi(sWidth.c_str()+6);
stream >> sCol;
if (!sCol.substr(0, 7).compare("color=#") && sCol.size()==15)
{
// TODO find better conv
thread.color[0] = strhex2unsigned(sCol.c_str()+7, 2);
thread.color[1] = strhex2unsigned(sCol.c_str()+7+2, 2);
thread.color[2] = strhex2unsigned(sCol.c_str()+7+4, 2);
thread.color[3] = strhex2unsigned(sCol.c_str()+7+6, 2);
}
}
unsigned char * OE_thread::getColor(){return color;}
void OE_thread::setColor(unsigned char r, unsigned char g, unsigned char b)
{
this->color[0] = r;
this->color[1] = g;
this->color[2] = b;
this->color[3] = 255;
}
void OE_thread::setWidth(float width){this->width = width;}
float OE_thread::getWidth(){return width;}