1 /*********************************************************************
2 * Software License Agreement (BSD License)
3 *
4 *  Copyright (c) 2008, Willow Garage, Inc.
5 *  All rights reserved.
6 *
7 *  Redistribution and use in source and binary forms, with or without
8 *  modification, are permitted provided that the following conditions
9 *  are met:
10 *
11 *   * Redistributions of source code must retain the above copyright
12 *     notice, this list of conditions and the following disclaimer.
13 *   * Redistributions in binary form must reproduce the above
14 *     copyright notice, this list of conditions and the following
15 *     disclaimer in the documentation and/or other materials provided
16 *     with the distribution.
17 *   * Neither the name of the Willow Garage nor the names of its
18 *     contributors may be used to endorse or promote products derived
19 *     from this software without specific prior written permission.
20 *
21 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 *  POSSIBILITY OF SUCH DAMAGE.
33 *********************************************************************/
34 
35 /* Author: Josh Faust */
36 
37 #ifndef URDF_INTERFACE_COLOR_H
38 #define URDF_INTERFACE_COLOR_H
39 
40 #include <stdexcept>
41 #include <string>
42 #include <vector>
43 #include <math.h>
44 
45 #include <urdf_model/utils.h>
46 #include <urdf_exception/exception.h>
47 
48 namespace urdf
49 {
50 
51 class Color
52 {
53 public:
Color()54   Color() {this->clear();};
55   float r;
56   float g;
57   float b;
58   float a;
59 
clear()60   void clear()
61   {
62     r = g = b = 0.0f;
63     a = 1.0f;
64   }
init(const std::string & vector_str)65   bool init(const std::string &vector_str)
66   {
67     this->clear();
68     std::vector<std::string> pieces;
69     std::vector<float> rgba;
70     urdf::split_string( pieces, vector_str, " ");
71     for (unsigned int i = 0; i < pieces.size(); ++i)
72     {
73       if (!pieces[i].empty())
74       {
75         try
76         {
77           double piece = strToDouble(pieces[i].c_str());
78           if ((piece < 0) || (piece > 1))
79             throw ParseError("Component [" + pieces[i] + "] is outside the valid range for colors [0, 1]");
80           rgba.push_back(static_cast<float>(piece));
81         }
82         catch (std::runtime_error &/*e*/) {
83           throw ParseError("Unable to parse component [" + pieces[i] + "] to a double (while parsing a color value)");
84         }
85       }
86     }
87 
88     if (rgba.size() != 4)
89     {
90       return false;
91     }
92 
93     this->r = rgba[0];
94     this->g = rgba[1];
95     this->b = rgba[2];
96     this->a = rgba[3];
97 
98     return true;
99   };
100 };
101 
102 }
103 
104 #endif
105 
106