46 for (i = 0; i < 3; ++i) {
50 _userAttributesReal =
nullptr;
51 _userAttributesVec2f =
nullptr;
52 _userAttributesVec3f =
nullptr;
58 _alpha = iBrother._alpha;
59 _thickness[0] = iBrother._thickness[0];
60 _thickness[1] = iBrother._thickness[1];
61 for (
int i = 0; i < 3; ++i) {
62 _color[i] = iBrother._color[i];
64 _visible = iBrother._visible;
65 if (iBrother._userAttributesReal) {
66 _userAttributesReal =
new realMap(*iBrother._userAttributesReal);
69 _userAttributesReal =
nullptr;
71 if (iBrother._userAttributesVec2f) {
72 _userAttributesVec2f =
new Vec2fMap(*iBrother._userAttributesVec2f);
75 _userAttributesVec2f =
nullptr;
77 if (iBrother._userAttributesVec3f) {
78 _userAttributesVec3f =
new Vec3fMap(*iBrother._userAttributesVec3f);
81 _userAttributesVec3f =
nullptr;
98 _thickness[0] = iRThickness;
99 _thickness[1] = iLThickness;
103 _userAttributesReal =
nullptr;
104 _userAttributesVec2f =
nullptr;
105 _userAttributesVec3f =
nullptr;
110 _alpha = (1 -
t) * a1._alpha +
t * a2._alpha;
111 _thickness[0] = (1 -
t) * a1._thickness[0] +
t * a2._thickness[0];
112 _thickness[1] = (1 -
t) * a1._thickness[1] +
t * a2._thickness[1];
113 for (
int i = 0; i < 3; ++i) {
114 _color[i] = (1 -
t) * a1._color[i] +
t * a2._color[i];
120 if ((a1._userAttributesReal) && (a2._userAttributesReal)) {
121 if (a1._userAttributesReal->size() == a2._userAttributesReal->size()) {
122 _userAttributesReal =
new realMap;
123 realMap::iterator it1 = a1._userAttributesReal->begin(),
124 it1end = a1._userAttributesReal->end();
125 realMap::iterator it2 = a2._userAttributesReal->begin();
126 for (; it1 != it1end; ++it1, ++it2) {
127 (*_userAttributesReal)[(*it1).first] = ((1 -
t) * (*it1).second +
t * (*it2).second);
132 _userAttributesReal =
nullptr;
134 if ((a1._userAttributesVec2f) && (a2._userAttributesVec2f)) {
135 if (a1._userAttributesVec2f->size() == a2._userAttributesVec2f->size()) {
136 _userAttributesVec2f =
new Vec2fMap;
137 Vec2fMap::iterator it1 = a1._userAttributesVec2f->begin(),
138 it1end = a1._userAttributesVec2f->end();
139 Vec2fMap::iterator it2 = a2._userAttributesVec2f->begin();
140 for (; it1 != it1end; ++it1, ++it2) {
141 (*_userAttributesVec2f)[(*it1).first] = ((1 -
t) * (*it1).second +
t * (*it2).second);
146 _userAttributesVec2f =
nullptr;
148 if ((a1._userAttributesVec3f) && (a2._userAttributesVec3f)) {
149 if (a1._userAttributesVec3f->size() == a2._userAttributesVec3f->size()) {
150 _userAttributesVec3f =
new Vec3fMap;
151 Vec3fMap::iterator it1 = a1._userAttributesVec3f->begin(),
152 it1end = a1._userAttributesVec3f->end();
153 Vec3fMap::iterator it2 = a2._userAttributesVec3f->begin();
154 for (; it1 != it1end; ++it1, ++it2) {
155 (*_userAttributesVec3f)[(*it1).first] = ((1 -
t) * (*it1).second +
t * (*it2).second);
160 _userAttributesVec3f =
nullptr;
166 if (_userAttributesReal) {
167 _userAttributesReal->clear();
168 delete _userAttributesReal;
170 if (_userAttributesVec2f) {
171 _userAttributesVec2f->clear();
172 delete _userAttributesVec2f;
174 if (_userAttributesVec3f) {
175 _userAttributesVec3f->clear();
176 delete _userAttributesVec3f;
183 _alpha = iBrother._alpha;
184 _thickness[0] = iBrother._thickness[0];
185 _thickness[1] = iBrother._thickness[1];
186 for (i = 0; i < 3; ++i) {
187 _color[i] = iBrother._color[i];
189 _visible = iBrother._visible;
190 if (iBrother._userAttributesReal) {
191 if (!_userAttributesReal) {
192 _userAttributesReal =
new realMap;
194 _userAttributesReal =
new realMap(*(iBrother._userAttributesReal));
197 _userAttributesReal =
nullptr;
199 if (iBrother._userAttributesVec2f) {
200 if (!_userAttributesVec2f) {
201 _userAttributesVec2f =
new Vec2fMap;
203 _userAttributesVec2f =
new Vec2fMap(*(iBrother._userAttributesVec2f));
206 _userAttributesVec2f =
nullptr;
208 if (iBrother._userAttributesVec3f) {
209 if (!_userAttributesVec3f) {
210 _userAttributesVec3f =
new Vec3fMap;
212 _userAttributesVec3f =
new Vec3fMap(*(iBrother._userAttributesVec3f));
215 _userAttributesVec3f =
nullptr;
222 if (!_userAttributesReal) {
224 cout <<
"StrokeAttribute warning: no real attribute was defined" << endl;
228 realMap::iterator
a = _userAttributesReal->find(iName);
229 if (
a == _userAttributesReal->end()) {
231 cout <<
"StrokeAttribute warning: no real attribute was added with the name " << iName
241 if (!_userAttributesVec2f) {
243 cout <<
"StrokeAttribute warning: no Vec2f attribute was defined" << endl;
247 Vec2fMap::iterator
a = _userAttributesVec2f->find(iName);
248 if (
a == _userAttributesVec2f->end()) {
250 cout <<
"StrokeAttribute warning: no Vec2f attribute was added with the name " << iName
260 if (!_userAttributesVec3f) {
262 cout <<
"StrokeAttribute warning: no Vec3f attribute was defined" << endl;
266 Vec3fMap::iterator
a = _userAttributesVec3f->find(iName);
267 if (
a == _userAttributesVec3f->end()) {
269 cout <<
"StrokeAttribute warning: no Vec3f attribute was added with the name " << iName
279 if (!_userAttributesReal) {
282 realMap::iterator
a = _userAttributesReal->find(iName);
283 if (
a == _userAttributesReal->end()) {
291 if (!_userAttributesVec2f) {
294 Vec2fMap::iterator
a = _userAttributesVec2f->find(iName);
295 if (
a == _userAttributesVec2f->end()) {
303 if (!_userAttributesVec3f) {
306 Vec3fMap::iterator
a = _userAttributesVec3f->find(iName);
307 if (
a == _userAttributesVec3f->end()) {
315 if (!_userAttributesReal) {
316 _userAttributesReal =
new realMap;
318 (*_userAttributesReal)[iName] = att;
323 if (!_userAttributesVec2f) {
324 _userAttributesVec2f =
new Vec2fMap;
326 (*_userAttributesVec2f)[iName] = att;
331 if (!_userAttributesVec3f) {
332 _userAttributesVec3f =
new Vec3fMap;
334 (*_userAttributesVec3f)[iName] = att;
347 _CurvilignAbscissa = 0.0f;
348 _StrokeLength = 0.0f;
353 _Attribute = iBrother._Attribute;
354 _CurvilignAbscissa = 0.0f;
355 _StrokeLength = 0.0f;
360 _CurvilignAbscissa = 0.0f;
361 _StrokeLength = 0.0f;
366 _CurvilignAbscissa = 0.0f;
367 _StrokeLength = 0.0f;
381 _Attribute = iAttribute;
382 _CurvilignAbscissa = 0.0f;
383 _StrokeLength = 0.0f;
389 _Attribute = iBrother._Attribute;
391 _CurvilignAbscissa = 0.0f;
393 _StrokeLength = 0.0f;
424 for (vertex_container::const_iterator
v = iBrother._Vertices.begin(),
425 vend = iBrother._Vertices.end();
428 _Vertices.push_back(*
v);
432 _ViewEdges = iBrother._ViewEdges;
433 _sampling = iBrother._sampling;
434 _mediumType = iBrother._mediumType;
435 _textureId = iBrother._textureId;
436 _textureStep = iBrother._textureStep;
438 _mtex[
a] = iBrother._mtex[
a];
440 _nodeTree = iBrother._nodeTree;
441 _tips = iBrother._tips;
452 if (!_Vertices.empty()) {
453 for (vertex_container::iterator
v = _Vertices.begin(), vend = _Vertices.end();
v != vend;
469 if (!_Vertices.empty()) {
473 for (vertex_container::const_iterator
v = iBrother._Vertices.begin(),
474 vend = iBrother._Vertices.end();
477 _Vertices.push_back(*
v);
479 _Length = iBrother._Length;
481 _ViewEdges = iBrother._ViewEdges;
482 _sampling = iBrother._sampling;
496 for (vertex_container::iterator
v = _Vertices.begin(), vend = _Vertices.end();
v != vend; ++
v) {
497 (*v)->setStrokeLength(iLength);
503 if (iNVertices <= (
int)_Vertices.size()) {
507 float sampling = _Length / (
float)(iNVertices - _Vertices.size() + 1);
538 if (NPointsToAdd <= 0) {
550 vector<StrokeSegment> strokeSegments;
552 float meanlength = 0;
554 while ((it != itend) && (
next != itend)) {
555 Vec2r a((it)->getPoint());
559 int numberOfPointsToAdd = (int)
floor(NPointsToAdd * norm_var / _Length);
560 float csampling = norm_var / (
float)(numberOfPointsToAdd + 1);
561 strokeSegments.emplace_back(it,
next, norm_var, numberOfPointsToAdd, csampling);
562 N += numberOfPointsToAdd;
563 meanlength += norm_var;
568 meanlength /= (
float)nsegments;
571 bool checkEveryone =
false;
573 while (
N < NPointsToAdd) {
575 for (vector<StrokeSegment>::iterator s = strokeSegments.begin(), send = strokeSegments.end();
578 if (s->_sampling == 0.0f) {
582 if (s->_resampled ==
false) {
583 if ((!checkEveryone) && (s->_length < meanlength)) {
588 s->_sampling = s->_length / (
float)(s->_n + 1);
589 s->_resampled = resampled =
true;
591 if (
N == NPointsToAdd) {
596 if (checkEveryone && !resampled) {
599 checkEveryone =
true;
601 if (
N < NPointsToAdd) {
607 for (vector<StrokeSegment>::iterator s = strokeSegments.begin(), send = strokeSegments.end();
610 newVertices.push_back(&(*(s->_begin)));
611 if (s->_sampling < _sampling) {
612 _sampling = s->_sampling;
615 t = s->_sampling / s->_length;
616 for (
int i = 0; i < s->_n; ++i) {
617 newVertex =
new StrokeVertex(&(*(s->_begin)), &(*(s->_end)),
t);
618 newVertices.push_back(newVertex);
619 t += s->_sampling / s->_length;
628 if ((it != itend) && (
next == itend) ) {
629 newVertices.push_back(&(*it));
632 int newsize = newVertices.size();
633 if (newsize != iNPoints) {
634 cerr <<
"Warning: incorrect points number" << endl;
638 _Vertices = newVertices;
647 if (iSampling == 0) {
650 if (iSampling >= _sampling) {
654 _sampling = iSampling;
659 const real limit = 0.99;
665 while ((it != itend) && (
next != itend)) {
666 newVertices.push_back(&(*it));
667 Vec2r a((it)->getPoint());
671 if (norm_var <= _sampling) {
679 t = _sampling / norm_var;
683 newVertices.push_back(newVertex);
684 t =
t + _sampling / norm_var;
690 if ((it != itend) && (
next == itend) ) {
691 newVertices.push_back(&(*it));
695 _Vertices = newVertices;
703 vertex_container::iterator it = _Vertices.begin(), itend = _Vertices.end();
704 for (; it != itend; ++it) {
713 vertex_container::iterator it = _Vertices.begin(), itend = _Vertices.end();
714 for (; it != itend; ++it) {
715 if ((*it) == iVertex) {
717 it = _Vertices.erase(it);
726 vertex_container::iterator itnext =
next.getIt();
727 _Vertices.insert(itnext, iVertex);
734 float curvabsc = 0.0f;
735 vertex_container::iterator it = _Vertices.begin(), itend = _Vertices.end();
736 vertex_container::iterator previous = it;
737 for (; it != itend; ++it) {
738 curvabsc += ((*it)->getPoint() - (*previous)->getPoint()).
norm();
739 (*it)->setCurvilinearAbscissa(curvabsc);
743 for (it = _Vertices.begin(); it != itend; ++it) {
744 (*it)->setStrokeLength(_Length);
761 return vertex_iterator(_Vertices.end(), _Vertices.begin(), _Vertices.end());
766 if ((
t != 0) && (
t < _sampling)) {
770 this->_Vertices.begin(), this->_Vertices.begin(), this->_Vertices.end());
776 this->_Vertices.end(), this->_Vertices.begin(), this->_Vertices.end());
782 this->_Vertices.begin(), this->_Vertices.begin(), this->_Vertices.end()));
789 this->_Vertices.end(), this->_Vertices.begin(), this->_Vertices.end()));
805 for (vertex_container::iterator it = _Vertices.begin(), itend = _Vertices.end(); it != itend;
831 if ((sampling != 0) && (sampling < _sampling)) {
834 return vertex_iterator(_Vertices.begin(), _Vertices.begin(), _Vertices.end());
844 while (!
next.end()) {
856 while (!
next.end()) {
863 Stroke::vertex_container::reverse_iterator Stroke::vertices_last(
float sampling)
866 if (sampling < _sampling) {
869 return _Vertices.rbegin();
872 inline Vec3r shaded_color(
int iCombination = 0)
const;
874 inline Vec<3, real> Stroke::orientation2d(const_vertex_iterator it)
const
876 return iterator_edge_orientation2d_function<Stroke, const_vertex_iterator>(
this, it);
879 Vec3r Stroke::orientation2d(
int iCombination)
const
881 return edge_orientation2d_function<Stroke>(*
this, iCombination);
884 inline Vec3r Stroke::orientation3d(const_vertex_iterator it)
const
886 return iterator_edge_orientation3d_function<Stroke, const_vertex_iterator>(*
this, it);
889 Vec3r Stroke::orientation3d(
int iCombination)
const
891 return edge_orientation3d_function<Stroke>(*
this, iCombination);
898 for (;
v != vend; ++
v) {
899 if (mat != (*v)->material()) {
906 int Stroke::qi()
const
909 int qi_ = (*v)->qi();
910 for (;
v != vend; ++
v) {
911 if ((*v)->qi() != qi_) {
918 inline occluder_container::const_iterator occluders_begin()
const
920 return _FEdgeA->occluders().begin();
923 inline occluder_container::const_iterator occluders_end()
const
925 return _FEdgeA->occluders().end();
928 int Stroke::occluders_size()
const
933 bool Stroke::occluders_empty()
const
936 bool empty = (*v)->occluders_empty();
937 for (;
v != vend; ++
v) {
938 if ((*v)->occluders_empty() != empty) {
946 inline const polygon3d& occludee()
const
948 return *(_FEdgeA->aFace());
952 const SShape *Stroke::occluded_shape()
const
955 const SShape *sshape = (*v)->occluded_shape();
956 for (;
v != vend; ++
v) {
957 if ((*v)->occluded_shape() != sshape) {
964 const bool Stroke::occludee_empty()
const
967 bool empty = (*v)->occludee_empty();
968 for (;
v != vend; ++
v) {
969 if ((*v)->occludee_empty() != empty) {
976 const SShape *Stroke::shape()
const
979 const SShape *sshape = (*v)->shape();
980 for (;
v != vend; ++
v) {
981 if ((*v)->shape() != sshape) {
988 real Stroke::z_discontinuity(
int iCombination)
const
990 return z_discontinuity_edge_function<Stroke>(*
this, iCombination);
993 Vec3r Stroke::curvature2d_as_vector(
int iCombination)
const
995 return curvature2d_as_vector_edge_function<Stroke>(*
this, iCombination);
998 real Stroke::curvature2d_as_angle(
int iCombination)
const
1000 return curvature2d_as_angle_edge_function<Stroke>(*
this, iCombination);
1003 float Stroke::shape_importance(
int iCombination)
const
1005 return shape_importance_edge_function<Stroke>(*
this, iCombination);
1008 float Stroke::local_average_depth(
int iCombination)
const
1010 return local_average_depth_edge_function<Stroke>(*
this, iCombination);
1013 float Stroke::local_depth_variance(
int iCombination)
const
1015 return local_depth_variance_edge_function<Stroke>(*
this, iCombination);
1018 real Stroke::local_average_density(
float sigma,
int iCombination)
const
1020 return density_edge_function<Stroke>(*
this, iCombination);
typedef float(TangentPoint)[2]
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
Iterators used to iterate over the elements of the Stroke. Can't be used in python.
Iterators used to iterate over the elements of the Stroke.
Classes to render a stroke with OpenGL.
Classes to define a stroke.
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE btScalar norm() const
Return the norm (length) of the vector.
static int raiseException(exception_type exception=UNDEFINED)
virtual ~StrokeAttribute()
bool isAttributeAvailableVec3f(const char *iName) const
void setThickness(float tr, float tl)
Vec3f getAttributeVec3f(const char *iName) const
void setAttributeReal(const char *iName, float att)
const float getThicknessR() const
void setAttributeVec3f(const char *iName, const Vec3f &att)
const float getThicknessL() const
bool isAttributeAvailableVec2f(const char *iName) const
Vec2f getAttributeVec2f(const char *iName) const
void setAttributeVec2f(const char *iName, const Vec2f &att)
StrokeAttribute & operator=(const StrokeAttribute &iBrother)
bool isAttributeAvailableReal(const char *iName) const
float getAttributeReal(const char *iName) const
virtual void RenderStrokeRep(StrokeRep *iStrokeRep) const =0
StrokeInternal::StrokeVertexIterator _end
StrokeSegment(StrokeInternal::StrokeVertexIterator ibegin, StrokeInternal::StrokeVertexIterator iend, float ilength, int in, float isampling)
StrokeInternal::StrokeVertexIterator _begin
float curvilinearAbscissa() const
const StrokeAttribute & attribute() const
float strokeLength() const
StrokeVertex & operator=(const StrokeVertex &iBrother)
virtual Interface0DIterator pointsEnd(float t=0.0f)
const_vertex_iterator vertices_begin() const
embedding vertex iterator
void ScaleThickness(float iFactor)
virtual Interface0DIterator verticesBegin()
StrokeInternal::vertex_iterator_base< StrokeInternal::vertex_nonconst_traits > vertex_iterator
StrokeInternal::vertex_iterator_base< StrokeInternal::vertex_const_traits > const_vertex_iterator
void RemoveVertex(StrokeVertex *iVertex)
void InsertVertex(StrokeVertex *iVertex, StrokeInternal::StrokeVertexIterator next)
const_vertex_iterator vertices_end() const
std::deque< StrokeVertex * > vertex_container
virtual Interface0DIterator verticesEnd()
void Render(const StrokeRenderer *iRenderer)
virtual Interface0DIterator pointsBegin(float t=0.0f)
void RenderBasic(const StrokeRenderer *iRenderer)
Stroke & operator=(const Stroke &iBrother)
void setLength(float iLength)
float ComputeSampling(int iNVertices)
StrokeInternal::StrokeVertexIterator strokeVerticesEnd()
StrokeInternal::StrokeVertexIterator strokeVerticesBegin(float t=0.0f)
int Resample(int iNPoints)
unsigned int strokeVerticesSize() const
VecMat::Vec3< real > Vec3r
ccl_device_inline float2 floor(const float2 &a)