phycylinder.h
1 /********************************************************************************
2  * WorldSim -- library for robot simulations *
3  * Copyright (C) 2008-2011 Gianluca Massera <emmegian@yahoo.it> *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the Free Software *
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
18  ********************************************************************************/
19 
20 #ifndef PHYCYLINDER_H
21 #define PHYCYLINDER_H
22 
23 #include "phyobject.h"
24 
25 namespace farsa {
26 
52 class FARSA_WSIM_API PhyCylinder : public PhyObject {
53  Q_OBJECT
54 public:
61  struct SegmentColor {
68  startingAngle(0.0),
69  color(Qt::white)
70  {
71  }
72 
79  SegmentColor(real s, QColor c) :
80  startingAngle(s),
81  color(c)
82  {
83  }
84 
92  bool operator<(const SegmentColor& other) const
93  {
94  return startingAngle < other.startingAngle;
95  }
96 
101 
105  QColor color;
106  };
107 
108 public:
115  PhyCylinder( real radius, real height, World* world, QString name="unamed", const wMatrix& tm = wMatrix::identity() );
117  virtual ~PhyCylinder();
119  real radius() const {
120  return radiusv;
121  };
123  real height() const {
124  return heightv;
125  };
126 
134  void setUpperBaseColor(QColor color);
135 
141  const QColor& upperBaseColor() const
142  {
143  return m_upperBaseColor;
144  }
145 
153  void setLowerBaseColor(QColor color);
154 
160  const QColor& lowerBaseColor() const
161  {
162  return m_lowerBaseColor;
163  }
164 
176  void setSegmentsColor(QList<SegmentColor> segmentsColor);
177 
184  const QList<SegmentColor>& segmentsColor() const
185  {
186  return m_segmentsColor;
187  }
188 
199  bool graphicalRepresentationNeedsUpdate();
200 
201 private:
202  real radiusv;
203  real heightv;
204 
208  QColor m_upperBaseColor;
209 
213  QColor m_lowerBaseColor;
214 
221  QList<SegmentColor> m_segmentsColor;
222 
228  bool m_graphicalRepresentationNeedsUpdate;
229 
237  QColor m_oldColorv;
238 
239 protected:
241  void createPrivateObject();
242 };
243 
244 } // end namespace farsa
245 
246 #endif