6 #ifndef CNOID_UTIL_SCENE_DRAWABLES_H 7 #define CNOID_UTIL_SCENE_DRAWABLES_H 11 #include <boost/shared_ptr.hpp> 12 #include <boost/variant.hpp> 27 template<
typename Derived>
void setDiffuseColor(
const Eigen::MatrixBase<Derived>& c) {
28 diffuseColor_ = c.template cast<Vector3f::Scalar>(); }
30 template<
typename Derived>
void setEmissiveColor(
const Eigen::MatrixBase<Derived>& c) {
31 emissiveColor_ = c.template cast<Vector3f::Scalar>(); }
35 template<
typename Derived>
void setSpecularColor(
const Eigen::MatrixBase<Derived>& c) {
36 specularColor_ = c.template cast<Vector3f::Scalar>(); }
41 Vector3f diffuseColor_;
42 Vector3f emissiveColor_;
43 Vector3f specularColor_;
44 float ambientIntensity_;
56 SgImage(boost::shared_ptr<Image> sharedImage);
64 bool empty()
const {
return image_->empty(); }
66 unsigned char* pixels();
67 const unsigned char*
pixels()
const {
return image_->pixels(); }
68 const unsigned char*
constPixels()
const {
return image_->pixels(); }
70 int width()
const {
return image_->width(); }
71 int height()
const {
return image_->height(); }
74 void setSize(
int width,
int height,
int nComponents);
75 void setSize(
int width,
int height);
78 boost::shared_ptr<Image> image_;
93 template<
typename Derived>
void setCenter(
const Eigen::MatrixBase<Derived>& c) {
94 center_ = c.template cast<Vector3::Scalar>(); }
98 template<
typename Derived>
void setScale(
const Eigen::MatrixBase<Derived>& c) {
99 scale_ = c.template cast<Vector2::Scalar>(); }
101 template<
typename Derived>
void setTranslation(
const Eigen::MatrixBase<Derived>& c) {
102 translation_ = c.template cast<Vector3::Scalar>(); }
119 virtual int numChildObjects()
const;
120 virtual SgObject* childObject(
int index);
129 void setRepeat(
bool s,
bool t) { repeatS_ = s; repeatT_ = t; }
137 SgTextureTransformPtr textureTransform_;
146 typedef std::vector<T> Container;
165 template<
class Element>
167 values.reserve(org.size());
168 for(
typename std::vector<Element>::const_iterator p = org.begin(); p != org.end(); ++p){
169 values.push_back(p->template cast<typename T::Scalar>());
181 iterator
begin() {
return values.begin(); }
182 const_iterator
begin()
const {
return values.begin(); }
183 iterator
end() {
return values.end(); }
184 const_iterator
end()
const {
return values.end(); }
185 size_type
size()
const {
return values.size(); }
186 void resize(size_type s) { values.resize(s); }
187 void resize(size_type s,
const T& v) { values.resize(s, v); }
188 bool empty()
const {
return values.empty(); }
189 void reserve(size_type s) { values.reserve(s); }
192 T&
at(size_type i) {
return values[i]; }
193 const T&
at(size_type i)
const {
return values[i]; }
194 T&
front() {
return values.front(); }
195 const T&
front()
const {
return values.front(); }
196 T&
back() {
return values.back(); }
197 const T&
back()
const {
return values.back(); }
198 Scalar*
data() {
return values.front().data(); }
199 const Scalar*
data()
const {
return values.front().data(); }
202 iterator
erase(iterator p) {
return values.erase(p); }
203 iterator
erase(iterator first, iterator last) {
return values.erase(first, last); }
232 virtual int numChildObjects()
const;
233 virtual SgObject* childObject(
int index);
235 virtual void updateBoundingBox();
237 bool hasVertices()
const {
return (vertices_ && !vertices_->empty()); }
239 const SgVertexArray*
vertices()
const {
return vertices_; }
240 SgVertexArray* setVertices(SgVertexArray* vertices);
241 SgVertexArray* getOrCreateVertices();
243 bool hasNormals()
const {
return (normals_ && !normals_->empty()); }
245 const SgNormalArray*
normals()
const {
return normals_; }
246 SgNormalArray* setNormals(SgNormalArray* normals);
247 SgNormalArray* getOrCreateNormals();
249 bool hasColors()
const {
return (colors_ && !colors_->empty()); }
250 SgColorArray*
colors() {
return colors_; }
251 const SgColorArray*
colors()
const {
return colors_; }
252 SgColorArray* setColors(SgColorArray* colors);
253 SgColorArray* getOrCreateColors();
255 bool hasTexCoords()
const {
return (texCoords_ && !texCoords_->empty()); }
257 const SgTexCoordArray*
texCoords()
const {
return texCoords_; }
258 SgTexCoordArray* setTexCoords(SgTexCoordArray* texCoords);
279 SgVertexArrayPtr vertices_;
280 SgNormalArrayPtr normals_;
281 SgIndexArray normalIndices_;
282 SgColorArrayPtr colors_;
283 SgIndexArray colorIndices_;
284 SgTexCoordArrayPtr texCoords_;
285 SgIndexArray texCoordIndices_;
297 virtual void updateBoundingBox();
311 return TriangleRef(&triangleVertices_[index * 3]);
316 return ConstTriangleRef(&triangleVertices_[index * 3]);
320 const int i = index * 3;
321 triangleVertices_[i+0] = v0;
322 triangleVertices_[i+1] = v1;
323 triangleVertices_[i+2] = v2;
327 const int s = triangleVertices_.size();
328 triangleVertices_.resize(s + 3);
329 return TriangleRef(&triangleVertices_[s]);
333 triangleVertices_.push_back(v0);
334 triangleVertices_.push_back(v1);
335 triangleVertices_.push_back(v2);
351 Sphere(
double radius) : radius(radius) { }
358 radius(radius), height(height), bottom(true), side(true), top(true) { }
368 Cone(
double radius,
double height) :
369 radius(radius), height(height), bottom(true), side(true) { }
376 typedef boost::variant<Mesh, Box, Sphere, Cylinder, Cone>
Primitive;
379 template<
class TPrimitive>
const TPrimitive&
primitive()
const {
return boost::get<TPrimitive>(primitive_); }
380 template<
class TPrimitive>
void setPrimitive(
const TPrimitive& prim) { primitive_ = prim; }
386 SgIndexArray triangleVertices_;
387 Primitive primitive_;
398 virtual void updateBoundingBox();
414 SgIndexArray polygonVertices_;
425 virtual int numChildObjects()
const;
426 virtual SgObject* childObject(
int index);
433 SgMesh* getOrCreateMesh();
450 SgMaterialPtr material_;
451 SgTexturePtr texture_;
461 virtual int numChildObjects()
const;
462 virtual SgObject* childObject(
int index);
464 void updateBoundingBox();
466 bool hasVertices()
const {
return (vertices_ && !vertices_->empty()); }
468 const SgVertexArray*
vertices()
const {
return vertices_; }
469 SgVertexArray* setVertices(SgVertexArray* vertices);
470 SgVertexArray* getOrCreateVertices();
476 bool hasNormals()
const {
return (normals_ && !normals_->empty()); }
478 const SgNormalArray*
normals()
const {
return normals_; }
479 SgNormalArray* setNormals(SgNormalArray* normals);
480 SgVertexArray* getOrCreateNormals();
485 bool hasColors()
const {
return (colors_ && !colors_->empty()); }
486 SgColorArray*
colors() {
return colors_; }
487 const SgColorArray*
colors()
const {
return colors_; }
488 SgColorArray* setColors(SgColorArray* colors);
489 SgColorArray* getOrCreateColors();
499 SgVertexArrayPtr vertices_;
500 SgNormalArrayPtr normals_;
501 SgIndexArray normalIndices_;
502 SgColorArrayPtr colors_;
503 SgIndexArray colorIndices_;
504 SgMaterialPtr material_;
542 int numLines()
const {
return lineVertices_.size() / 2; }
548 return LineRef(&lineVertices_[index * 2]);
552 ConstLineRef
line(
int index)
const {
553 return ConstLineRef(&lineVertices_[index * 2]);
557 const int i = index * 2;
558 lineVertices_[i+0] = v0;
559 lineVertices_[i+1] = v1;
563 const int s = lineVertices_.size();
564 lineVertices_.resize(s + 2);
565 return LineRef(&lineVertices_[s]);
569 lineVertices_.push_back(v0);
570 lineVertices_.push_back(v1);
584 SgIndexArray lineVertices_;
608 virtual void calcViewVolume(
double viewportWidth,
double viewportHeight,
ViewVolume& io_volume);
int numTriangles() const
Definition: SceneDrawables.h:305
SgVectorArray()
Definition: SceneDrawables.h:159
ref_ptr< SgPolygonMesh > SgPolygonMeshPtr
Definition: SceneDrawables.h:417
ref_ptr< SgMesh > SgMeshPtr
Definition: SceneDrawables.h:389
SgColorArray * colors()
Definition: SceneDrawables.h:486
double pointSize() const
Definition: SceneDrawables.h:521
void reserveNumLines(int n)
Definition: SceneDrawables.h:544
ref_ptr< SgMaterial > SgMaterialPtr
Definition: SceneDrawables.h:48
const SgIndexArray & polygonVertices() const
Definition: SceneDrawables.h:408
SgMaterial * material()
Definition: SceneDrawables.h:435
bool hasColors() const
Definition: SceneDrawables.h:485
ConstLineRef line(int index) const
Definition: SceneDrawables.h:552
float lineWidth() const
Definition: SceneDrawables.h:578
Container::value_type value_type
Definition: SceneDrawables.h:152
bool bottom
Definition: SceneDrawables.h:372
Definition: SceneDrawables.h:365
ref_ptr< SgColorArray > SgColorArrayPtr
Definition: SceneDrawables.h:217
const Vector3f & diffuseColor() const
Definition: SceneDrawables.h:26
const SgIndexArray & lineVertices() const
Definition: SceneDrawables.h:539
double radius
Definition: SceneDrawables.h:370
Definition: SceneDrawables.h:291
Definition: SceneGraph.h:142
const Image & image() const
Definition: SceneDrawables.h:61
Definition: SceneDrawables.h:113
std::vector< int > SgIndexArray
Definition: SceneDrawables.h:222
const Vector3f & emissiveColor() const
Definition: SceneDrawables.h:29
const SgIndexArray & triangleVertices() const
Definition: SceneDrawables.h:302
const unsigned char * constPixels() const
Definition: SceneDrawables.h:68
SgVectorArray(const SgVectorArray &org)
Definition: SceneDrawables.h:173
void setRotation(double rotation)
Definition: SceneDrawables.h:96
ref_ptr< SgTextureTransform > SgTextureTransformPtr
Definition: SceneDrawables.h:110
const SgIndexArray & colorIndices() const
Definition: SceneDrawables.h:491
bool side
Definition: SceneDrawables.h:362
Definition: SceneDrawables.h:456
Eigen::Map< const Array2i > ConstLineRef
Definition: SceneDrawables.h:551
double radius
Definition: SceneDrawables.h:352
Definition: SceneDrawables.h:354
Definition: SceneDrawables.h:17
float shininess() const
Definition: SceneDrawables.h:32
const Scalar * data() const
Definition: SceneDrawables.h:199
SgNormalArray * normals()
Definition: SceneDrawables.h:244
const SgImage * image() const
Definition: SceneDrawables.h:123
Definition: SceneDrawables.h:509
void setCenter(const Eigen::MatrixBase< Derived > &c)
Definition: SceneDrawables.h:93
iterator end()
Definition: SceneDrawables.h:183
bool bottom
Definition: SceneDrawables.h:361
Cone()
Definition: SceneDrawables.h:367
const SgColorArray * colors() const
Definition: SceneDrawables.h:487
bool hasVertices() const
Definition: SceneDrawables.h:466
Cone(double radius, double height)
Definition: SceneDrawables.h:368
ref_ptr< SgTexCoordArray > SgTexCoordArrayPtr
Definition: SceneDrawables.h:220
const SgColorArray * colors() const
Definition: SceneDrawables.h:251
SgVectorArray(const std::vector< T > &org)
Definition: SceneDrawables.h:163
SgColorArray * colors()
Definition: SceneDrawables.h:250
SgImage * image()
Definition: SceneDrawables.h:122
const SgNormalArray * normals() const
Definition: SceneDrawables.h:478
Definition: SceneDrawables.h:51
const Vector2 & translation() const
Definition: SceneDrawables.h:100
void setTriangle(int index, int v0, int v1, int v2)
Definition: SceneDrawables.h:319
ref_ptr< SgLineSet > SgLineSetPtr
Definition: SceneDrawables.h:587
const T & front() const
Definition: SceneDrawables.h:195
double right
Definition: SceneDrawables.h:601
const_iterator begin() const
Definition: SceneDrawables.h:182
bool isSolid() const
Definition: SceneDrawables.h:272
SgVertexArray * vertices()
Definition: SceneDrawables.h:238
T & back()
Definition: SceneDrawables.h:196
const T & back() const
Definition: SceneDrawables.h:197
Definition: SceneDrawables.h:599
bool top
Definition: SceneDrawables.h:363
const Vector2 & center() const
Definition: SceneDrawables.h:92
SgTexture * texture()
Definition: SceneDrawables.h:440
double height
Definition: SceneDrawables.h:371
Sphere()
Definition: SceneDrawables.h:350
ref_ptr< SgVertexArray > SgVertexArrayPtr
Definition: SceneDrawables.h:211
SgVectorArray(size_t size)
Definition: SceneDrawables.h:161
const int primitiveType() const
Definition: SceneDrawables.h:378
void setNumLines(int n)
Definition: SceneDrawables.h:543
bool repeatT() const
Definition: SceneDrawables.h:128
SgIndexArray & normalIndices()
Definition: SceneDrawables.h:264
const Vector3f & specularColor() const
Definition: SceneDrawables.h:34
const SgTexCoordArray * texCoords() const
Definition: SceneDrawables.h:257
SgIndexArray & texCoordIndices()
Definition: SceneDrawables.h:270
const T & at(size_type i) const
Definition: SceneDrawables.h:193
void setLineWidth(float width)
Definition: SceneDrawables.h:573
void setDiffuseColor(const Eigen::MatrixBase< Derived > &c)
Definition: SceneDrawables.h:27
Definition: SceneDrawables.h:144
SgTextureTransform * textureTransform()
Definition: SceneDrawables.h:131
Definition: BoundingBox.h:17
const unsigned char * pixels() const
Definition: SceneDrawables.h:67
ref_ptr< SgTexture > SgTexturePtr
Definition: SceneDrawables.h:141
int numLines() const
Definition: SceneDrawables.h:542
Definition: SceneGraph.h:56
TriangleRef addTriangle()
Definition: SceneDrawables.h:326
SgVectorArray< Vector3f > SgColorArray
Definition: SceneDrawables.h:216
Definition: SceneDrawables.h:225
const SgMaterial * material() const
Definition: SceneDrawables.h:436
void reserveNumTriangles(int n)
Definition: SceneDrawables.h:307
double zNear
Definition: SceneDrawables.h:604
Definition: SceneDrawables.h:392
TriangleRef triangle(int index)
Definition: SceneDrawables.h:310
void setPointSize(double size)
Definition: SceneDrawables.h:516
float ambientIntensity() const
Definition: SceneDrawables.h:24
double zFar
Definition: SceneDrawables.h:605
void pop_back()
Definition: SceneDrawables.h:201
double rotation() const
Definition: SceneDrawables.h:95
bool hasTexCoords() const
Definition: SceneDrawables.h:255
const TPrimitive & primitive() const
Definition: SceneDrawables.h:379
const SgMaterial * material() const
Definition: SceneDrawables.h:473
Cylinder()
Definition: SceneDrawables.h:356
T & operator[](size_type i)
Definition: SceneDrawables.h:190
ref_ptr< SgMeshBase > SgMeshBasePtr
Definition: SceneDrawables.h:288
const_iterator end() const
Definition: SceneDrawables.h:184
bool hasNormals() const
Definition: SceneDrawables.h:476
void push_back(const T &v)
Definition: SceneDrawables.h:200
BoundingBox bbox
Definition: SceneDrawables.h:276
void resize(size_type s)
Definition: SceneDrawables.h:186
Container::iterator iterator
Definition: SceneDrawables.h:149
const SgIndexArray & normalIndices() const
Definition: SceneDrawables.h:263
Eigen::Map< const Array3i > ConstTriangleRef
Definition: SceneDrawables.h:314
const Vector2 & scale() const
Definition: SceneDrawables.h:97
Definition: SceneDrawables.h:342
void addLine(int v0, int v1)
Definition: SceneDrawables.h:568
double bottom
Definition: SceneDrawables.h:602
T & front()
Definition: SceneDrawables.h:194
SgTexCoordArray * texCoords()
Definition: SceneDrawables.h:256
Eigen::Map< Array3i > TriangleRef
Definition: SceneDrawables.h:309
iterator erase(iterator first, iterator last)
Definition: SceneDrawables.h:203
void setShininess(float s)
Definition: SceneDrawables.h:33
ref_ptr< SgNormalArray > SgNormalArrayPtr
Definition: SceneDrawables.h:214
const Image & constImage() const
Definition: SceneDrawables.h:62
Box(Vector3 size)
Definition: SceneDrawables.h:345
SgMaterial * material()
Definition: SceneDrawables.h:472
float transparency() const
Definition: SceneDrawables.h:37
void setTransparency(float t)
Definition: SceneDrawables.h:38
ref_ptr< SgShape > SgShapePtr
Definition: SceneDrawables.h:453
Definition: SceneGraph.h:160
Vector3 size
Definition: SceneDrawables.h:346
bool hasColors() const
Definition: SceneDrawables.h:249
ref_ptr< SgPlot > SgPlotPtr
Definition: SceneDrawables.h:506
void setPrimitive(const TPrimitive &prim)
Definition: SceneDrawables.h:380
ref_ptr< SgPointSet > SgPointSetPtr
Definition: SceneDrawables.h:529
Definition: SceneDrawables.h:338
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
Box()
Definition: SceneDrawables.h:344
Definition: SceneDrawables.h:590
void clear()
Definition: SceneDrawables.h:204
Cylinder(double radius, double height)
Definition: SceneDrawables.h:357
Container::pointer pointer
Definition: SceneDrawables.h:155
double top
Definition: SceneDrawables.h:603
int numComponents() const
Definition: SceneDrawables.h:72
virtual SgObject * clone(SgCloneMap &cloneMap) const
Definition: SceneDrawables.h:175
bool repeatS() const
Definition: SceneDrawables.h:127
LineRef line(int index)
Definition: SceneDrawables.h:547
bool empty() const
Definition: SceneDrawables.h:188
SgIndexArray & triangleVertices()
Definition: SceneDrawables.h:303
SgVectorArray< Vector2f, Eigen::aligned_allocator< Vector2f > > SgTexCoordArray
Definition: SceneDrawables.h:219
Eigen::Vector2d Vector2
Definition: EigenTypes.h:56
SgIndexArray & polygonVertices()
Definition: SceneDrawables.h:407
SgVertexArray * vertices()
Definition: SceneDrawables.h:467
Container::size_type size_type
Definition: SceneDrawables.h:151
void setRepeat(bool s, bool t)
Definition: SceneDrawables.h:129
void resize(size_type s, const T &v)
Definition: SceneDrawables.h:187
SgVectorArray< T > & operator=(const SgVectorArray< T > &rhs)
Definition: SceneDrawables.h:177
const SgIndexArray & colorIndices() const
Definition: SceneDrawables.h:266
Definition: SceneDrawables.h:420
Container::const_reference const_reference
Definition: SceneDrawables.h:154
bool empty() const
Definition: SceneDrawables.h:64
ConstTriangleRef triangle(int index) const
Definition: SceneDrawables.h:315
SgIndexArray & lineVertices()
Definition: SceneDrawables.h:540
const SgVertexArray * vertices() const
Definition: SceneDrawables.h:468
void setTranslation(const Eigen::MatrixBase< Derived > &c)
Definition: SceneDrawables.h:101
SgNormalArray * normals()
Definition: SceneDrawables.h:477
Definition: SceneDrawables.h:348
Definition: SceneDrawables.h:340
SgIndexArray & normalIndices()
Definition: SceneDrawables.h:483
void setSolid(bool on)
Definition: SceneDrawables.h:273
int width() const
Definition: SceneDrawables.h:70
const T & operator[](size_type i) const
Definition: SceneDrawables.h:191
size_type size() const
Definition: SceneDrawables.h:185
PrimitiveType
Definition: SceneDrawables.h:338
const SgNormalArray * normals() const
Definition: SceneDrawables.h:245
Eigen::Vector3d Vector3
Definition: EigenTypes.h:58
Definition: SceneDrawables.h:83
void setLine(int index, int v0, int v1)
Definition: SceneDrawables.h:556
bool hasVertices() const
Definition: SceneDrawables.h:237
LineRef addLine()
Definition: SceneDrawables.h:562
Definition: SceneDrawables.h:532
void setAmbientIntensity(float intensity)
Definition: SceneDrawables.h:25
iterator erase(iterator p)
Definition: SceneDrawables.h:202
const SgIndexArray & normalIndices() const
Definition: SceneDrawables.h:482
double height
Definition: SceneDrawables.h:360
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
void setSpecularColor(const Eigen::MatrixBase< Derived > &c)
Definition: SceneDrawables.h:35
void setEmissiveColor(const Eigen::MatrixBase< Derived > &c)
Definition: SceneDrawables.h:30
Container::const_pointer const_pointer
Definition: SceneDrawables.h:156
void setScale(const Eigen::MatrixBase< Derived > &c)
Definition: SceneDrawables.h:98
void reserve(size_type s)
Definition: SceneDrawables.h:189
iterator begin()
Definition: SceneDrawables.h:181
double left
Definition: SceneDrawables.h:600
const SgMesh * mesh() const
Definition: SceneDrawables.h:431
Container::const_iterator const_iterator
Definition: SceneDrawables.h:150
const SgVertexArray * vertices() const
Definition: SceneDrawables.h:239
Sphere(double radius)
Definition: SceneDrawables.h:351
Eigen::Map< Array2i > LineRef
Definition: SceneDrawables.h:546
Container::reference reference
Definition: SceneDrawables.h:153
SgMesh * mesh()
Definition: SceneDrawables.h:430
bool hasNormals() const
Definition: SceneDrawables.h:243
SgVectorArray< Vector3f > SgNormalArray
Definition: SceneDrawables.h:213
const SgTextureTransform * textureTransform() const
Definition: SceneDrawables.h:132
T & at(size_type i)
Definition: SceneDrawables.h:192
Scalar * data()
Definition: SceneDrawables.h:198
Definition: SceneVisitor.h:15
void setNumTriangles(int n)
Definition: SceneDrawables.h:306
SgVectorArray< Vector3f > SgVertexArray
Definition: SceneDrawables.h:210
SgIndexArray & colorIndices()
Definition: SceneDrawables.h:267
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Definition: SceneDrawables.h:86
void addTriangle(int v0, int v1, int v2)
Definition: SceneDrawables.h:332
bool side
Definition: SceneDrawables.h:373
double radius
Definition: SceneDrawables.h:359
SgIndexArray & colorIndices()
Definition: SceneDrawables.h:492
int height() const
Definition: SceneDrawables.h:71
SgVectorArray(const std::vector< Element > &org)
Definition: SceneDrawables.h:166
boost::variant< Mesh, Box, Sphere, Cylinder, Cone > Primitive
Definition: SceneDrawables.h:376
const SgTexture * texture() const
Definition: SceneDrawables.h:441
const SgIndexArray & texCoordIndices() const
Definition: SceneDrawables.h:269
Definition: SceneGraph.h:79
ref_ptr< SgImage > SgImagePtr
Definition: SceneDrawables.h:80
T::Scalar Scalar
Definition: SceneDrawables.h:157