32 for (i = 0; i < 3; ++i) {
36 _userAttributesReal =
nullptr;
37 _userAttributesVec2f =
nullptr;
38 _userAttributesVec3f =
nullptr;
44 _alpha = iBrother._alpha;
45 _thickness[0] = iBrother._thickness[0];
46 _thickness[1] = iBrother._thickness[1];
47 for (
int i = 0; i < 3; ++i) {
48 _color[i] = iBrother._color[i];
50 _visible = iBrother._visible;
51 if (iBrother._userAttributesReal) {
52 _userAttributesReal =
new realMap(*iBrother._userAttributesReal);
55 _userAttributesReal =
nullptr;
57 if (iBrother._userAttributesVec2f) {
58 _userAttributesVec2f =
new Vec2fMap(*iBrother._userAttributesVec2f);
61 _userAttributesVec2f =
nullptr;
63 if (iBrother._userAttributesVec3f) {
64 _userAttributesVec3f =
new Vec3fMap(*iBrother._userAttributesVec3f);
67 _userAttributesVec3f =
nullptr;
84 _thickness[0] = iRThickness;
85 _thickness[1] = iLThickness;
89 _userAttributesReal =
nullptr;
90 _userAttributesVec2f =
nullptr;
91 _userAttributesVec3f =
nullptr;
96 _alpha = (1 -
t) * a1._alpha +
t * a2._alpha;
97 _thickness[0] = (1 -
t) * a1._thickness[0] +
t * a2._thickness[0];
98 _thickness[1] = (1 -
t) * a1._thickness[1] +
t * a2._thickness[1];
99 for (
int i = 0; i < 3; ++i) {
100 _color[i] = (1 -
t) * a1._color[i] +
t * a2._color[i];
106 if ((a1._userAttributesReal) && (a2._userAttributesReal)) {
107 if (a1._userAttributesReal->size() == a2._userAttributesReal->size()) {
108 _userAttributesReal =
new realMap;
109 realMap::iterator it1 = a1._userAttributesReal->begin(),
110 it1end = a1._userAttributesReal->end();
111 realMap::iterator it2 = a2._userAttributesReal->begin();
112 for (; it1 != it1end; ++it1, ++it2) {
113 (*_userAttributesReal)[(*it1).first] = ((1 -
t) * (*it1).second +
t * (*it2).second);
118 _userAttributesReal =
nullptr;
120 if ((a1._userAttributesVec2f) && (a2._userAttributesVec2f)) {
121 if (a1._userAttributesVec2f->size() == a2._userAttributesVec2f->size()) {
122 _userAttributesVec2f =
new Vec2fMap;
123 Vec2fMap::iterator it1 = a1._userAttributesVec2f->begin(),
124 it1end = a1._userAttributesVec2f->end();
125 Vec2fMap::iterator it2 = a2._userAttributesVec2f->begin();
126 for (; it1 != it1end; ++it1, ++it2) {
127 (*_userAttributesVec2f)[(*it1).first] = ((1 -
t) * (*it1).second +
t * (*it2).second);
132 _userAttributesVec2f =
nullptr;
134 if ((a1._userAttributesVec3f) && (a2._userAttributesVec3f)) {
135 if (a1._userAttributesVec3f->size() == a2._userAttributesVec3f->size()) {
136 _userAttributesVec3f =
new Vec3fMap;
137 Vec3fMap::iterator it1 = a1._userAttributesVec3f->begin(),
138 it1end = a1._userAttributesVec3f->end();
139 Vec3fMap::iterator it2 = a2._userAttributesVec3f->begin();
140 for (; it1 != it1end; ++it1, ++it2) {
141 (*_userAttributesVec3f)[(*it1).first] = ((1 -
t) * (*it1).second +
t * (*it2).second);
146 _userAttributesVec3f =
nullptr;
152 if (_userAttributesReal) {
153 _userAttributesReal->clear();
154 delete _userAttributesReal;
156 if (_userAttributesVec2f) {
157 _userAttributesVec2f->clear();
158 delete _userAttributesVec2f;
160 if (_userAttributesVec3f) {
161 _userAttributesVec3f->clear();
162 delete _userAttributesVec3f;
169 _alpha = iBrother._alpha;
170 _thickness[0] = iBrother._thickness[0];
171 _thickness[1] = iBrother._thickness[1];
172 for (i = 0; i < 3; ++i) {
173 _color[i] = iBrother._color[i];
175 _visible = iBrother._visible;
176 if (iBrother._userAttributesReal) {
177 if (!_userAttributesReal) {
178 _userAttributesReal =
new realMap;
180 _userAttributesReal =
new realMap(*(iBrother._userAttributesReal));
183 _userAttributesReal =
nullptr;
185 if (iBrother._userAttributesVec2f) {
186 if (!_userAttributesVec2f) {
187 _userAttributesVec2f =
new Vec2fMap;
189 _userAttributesVec2f =
new Vec2fMap(*(iBrother._userAttributesVec2f));
192 _userAttributesVec2f =
nullptr;
194 if (iBrother._userAttributesVec3f) {
195 if (!_userAttributesVec3f) {
196 _userAttributesVec3f =
new Vec3fMap;
198 _userAttributesVec3f =
new Vec3fMap(*(iBrother._userAttributesVec3f));
201 _userAttributesVec3f =
nullptr;
208 if (!_userAttributesReal) {
210 cout <<
"StrokeAttribute warning: no real attribute was defined" << endl;
214 realMap::iterator
a = _userAttributesReal->find(iName);
215 if (
a == _userAttributesReal->end()) {
217 cout <<
"StrokeAttribute warning: no real attribute was added with the name " << iName
227 if (!_userAttributesVec2f) {
229 cout <<
"StrokeAttribute warning: no Vec2f attribute was defined" << endl;
233 Vec2fMap::iterator
a = _userAttributesVec2f->find(iName);
234 if (
a == _userAttributesVec2f->end()) {
236 cout <<
"StrokeAttribute warning: no Vec2f attribute was added with the name " << iName
246 if (!_userAttributesVec3f) {
248 cout <<
"StrokeAttribute warning: no Vec3f attribute was defined" << endl;
252 Vec3fMap::iterator
a = _userAttributesVec3f->find(iName);
253 if (
a == _userAttributesVec3f->end()) {
255 cout <<
"StrokeAttribute warning: no Vec3f attribute was added with the name " << iName
265 if (!_userAttributesReal) {
268 realMap::iterator
a = _userAttributesReal->find(iName);
269 if (
a == _userAttributesReal->end()) {
277 if (!_userAttributesVec2f) {
280 Vec2fMap::iterator
a = _userAttributesVec2f->find(iName);
281 if (
a == _userAttributesVec2f->end()) {
289 if (!_userAttributesVec3f) {
292 Vec3fMap::iterator
a = _userAttributesVec3f->find(iName);
293 if (
a == _userAttributesVec3f->end()) {
301 if (!_userAttributesReal) {
302 _userAttributesReal =
new realMap;
304 (*_userAttributesReal)[iName] = att;
309 if (!_userAttributesVec2f) {
310 _userAttributesVec2f =
new Vec2fMap;
312 (*_userAttributesVec2f)[iName] = att;
317 if (!_userAttributesVec3f) {
318 _userAttributesVec3f =
new Vec3fMap;
320 (*_userAttributesVec3f)[iName] = att;
333 _CurvilignAbscissa = 0.0f;
334 _StrokeLength = 0.0f;
339 _Attribute = iBrother._Attribute;
340 _CurvilignAbscissa = 0.0f;
341 _StrokeLength = 0.0f;
346 _CurvilignAbscissa = 0.0f;
347 _StrokeLength = 0.0f;
352 _CurvilignAbscissa = 0.0f;
353 _StrokeLength = 0.0f;
367 _Attribute = iAttribute;
368 _CurvilignAbscissa = 0.0f;
369 _StrokeLength = 0.0f;
375 _Attribute = iBrother._Attribute;
377 _CurvilignAbscissa = 0.0f;
379 _StrokeLength = 0.0f;
410 for (vertex_container::const_iterator
v = iBrother._Vertices.begin(),
411 vend = iBrother._Vertices.end();
414 _Vertices.push_back(*
v);
418 _ViewEdges = iBrother._ViewEdges;
419 _sampling = iBrother._sampling;
420 _mediumType = iBrother._mediumType;
421 _textureId = iBrother._textureId;
422 _textureStep = iBrother._textureStep;
424 _mtex[
a] = iBrother._mtex[
a];
426 _nodeTree = iBrother._nodeTree;
427 _tips = iBrother._tips;
438 if (!_Vertices.empty()) {
439 for (vertex_container::iterator
v = _Vertices.begin(), vend = _Vertices.end();
v != vend;
455 if (!_Vertices.empty()) {
459 for (vertex_container::const_iterator
v = iBrother._Vertices.begin(),
460 vend = iBrother._Vertices.end();
463 _Vertices.push_back(*
v);
465 _Length = iBrother._Length;
467 _ViewEdges = iBrother._ViewEdges;
468 _sampling = iBrother._sampling;
482 for (vertex_container::iterator
v = _Vertices.begin(), vend = _Vertices.end();
v != vend; ++
v) {
483 (*v)->setStrokeLength(iLength);
489 if (iNVertices <= (
int)_Vertices.size()) {
493 float sampling = _Length / (
float)(iNVertices - _Vertices.size() + 1);
524 if (NPointsToAdd <= 0) {
536 vector<StrokeSegment> strokeSegments;
538 float meanlength = 0;
540 while ((it != itend) && (
next != itend)) {
541 Vec2r a((it)->getPoint());
545 int numberOfPointsToAdd = (int)
floor(NPointsToAdd * norm_var / _Length);
546 float csampling = norm_var / (
float)(numberOfPointsToAdd + 1);
547 strokeSegments.emplace_back(it,
next, norm_var, numberOfPointsToAdd, csampling);
548 N += numberOfPointsToAdd;
549 meanlength += norm_var;
554 meanlength /= (
float)nsegments;
557 bool checkEveryone =
false;
559 while (
N < NPointsToAdd) {
561 for (vector<StrokeSegment>::iterator s = strokeSegments.begin(), send = strokeSegments.end();
564 if (s->_sampling == 0.0f) {
568 if (s->_resampled ==
false) {
569 if ((!checkEveryone) && (s->_length < meanlength)) {
574 s->_sampling = s->_length / (
float)(s->_n + 1);
575 s->_resampled = resampled =
true;
577 if (
N == NPointsToAdd) {
582 if (checkEveryone && !resampled) {
585 checkEveryone =
true;
587 if (
N < NPointsToAdd) {
593 for (vector<StrokeSegment>::iterator s = strokeSegments.begin(), send = strokeSegments.end();
596 newVertices.push_back(&(*(s->_begin)));
597 if (s->_sampling < _sampling) {
598 _sampling = s->_sampling;
601 t = s->_sampling / s->_length;
602 for (
int i = 0; i < s->_n; ++i) {
603 newVertex =
new StrokeVertex(&(*(s->_begin)), &(*(s->_end)),
t);
604 newVertices.push_back(newVertex);
605 t += s->_sampling / s->_length;
614 if ((it != itend) && (
next == itend) ) {
615 newVertices.push_back(&(*it));
618 int newsize = newVertices.size();
619 if (newsize != iNPoints) {
620 cerr <<
"Warning: incorrect points number" << endl;
624 _Vertices = newVertices;
633 if (iSampling == 0) {
636 if (iSampling >= _sampling) {
640 _sampling = iSampling;
645 const real limit = 0.99;
651 while ((it != itend) && (
next != itend)) {
652 newVertices.push_back(&(*it));
653 Vec2r a((it)->getPoint());
657 if (norm_var <= _sampling) {
665 t = _sampling / norm_var;
669 newVertices.push_back(newVertex);
670 t =
t + _sampling / norm_var;
676 if ((it != itend) && (
next == itend) ) {
677 newVertices.push_back(&(*it));
681 _Vertices = newVertices;
689 vertex_container::iterator it = _Vertices.begin(), itend = _Vertices.end();
690 for (; it != itend; ++it) {
699 vertex_container::iterator it = _Vertices.begin(), itend = _Vertices.end();
700 for (; it != itend; ++it) {
701 if ((*it) == iVertex) {
703 it = _Vertices.erase(it);
712 vertex_container::iterator itnext =
next.getIt();
713 _Vertices.insert(itnext, iVertex);
720 float curvabsc = 0.0f;
721 vertex_container::iterator it = _Vertices.begin(), itend = _Vertices.end();
722 vertex_container::iterator previous = it;
723 for (; it != itend; ++it) {
724 curvabsc += ((*it)->getPoint() - (*previous)->getPoint()).
norm();
725 (*it)->setCurvilinearAbscissa(curvabsc);
729 for (it = _Vertices.begin(); it != itend; ++it) {
730 (*it)->setStrokeLength(_Length);
747 return vertex_iterator(_Vertices.end(), _Vertices.begin(), _Vertices.end());
752 if ((
t != 0) && (
t < _sampling)) {
756 this->_Vertices.begin(), this->_Vertices.begin(), this->_Vertices.end());
762 this->_Vertices.end(), this->_Vertices.begin(), this->_Vertices.end());
768 this->_Vertices.begin(), this->_Vertices.begin(), this->_Vertices.end()));
775 this->_Vertices.end(), this->_Vertices.begin(), this->_Vertices.end()));
791 for (vertex_container::iterator it = _Vertices.begin(), itend = _Vertices.end(); it != itend;
817 if ((sampling != 0) && (sampling < _sampling)) {
820 return vertex_iterator(_Vertices.begin(), _Vertices.begin(), _Vertices.end());
830 while (!
next.end()) {
842 while (!
next.end()) {
849 Stroke::vertex_container::reverse_iterator Stroke::vertices_last(
float sampling)
852 if (sampling < _sampling) {
855 return _Vertices.rbegin();
858 inline Vec3r shaded_color(
int iCombination = 0)
const;
860 inline Vec<3, real> Stroke::orientation2d(const_vertex_iterator it)
const
862 return iterator_edge_orientation2d_function<Stroke, const_vertex_iterator>(
this, it);
865 Vec3r Stroke::orientation2d(
int iCombination)
const
867 return edge_orientation2d_function<Stroke>(*
this, iCombination);
870 inline Vec3r Stroke::orientation3d(const_vertex_iterator it)
const
872 return iterator_edge_orientation3d_function<Stroke, const_vertex_iterator>(*
this, it);
875 Vec3r Stroke::orientation3d(
int iCombination)
const
877 return edge_orientation3d_function<Stroke>(*
this, iCombination);
884 for (;
v != vend; ++
v) {
885 if (mat != (*v)->material()) {
892 int Stroke::qi()
const
895 int qi_ = (*v)->qi();
896 for (;
v != vend; ++
v) {
897 if ((*v)->qi() != qi_) {
904 inline occluder_container::const_iterator occluders_begin()
const
906 return _FEdgeA->occluders().begin();
909 inline occluder_container::const_iterator occluders_end()
const
911 return _FEdgeA->occluders().end();
914 int Stroke::occluders_size()
const
919 bool Stroke::occluders_empty()
const
922 bool empty = (*v)->occluders_empty();
923 for (;
v != vend; ++
v) {
924 if ((*v)->occluders_empty() != empty) {
932 inline const polygon3d& occludee()
const
934 return *(_FEdgeA->aFace());
938 const SShape *Stroke::occluded_shape()
const
941 const SShape *sshape = (*v)->occluded_shape();
942 for (;
v != vend; ++
v) {
943 if ((*v)->occluded_shape() != sshape) {
950 const bool Stroke::occludee_empty()
const
953 bool empty = (*v)->occludee_empty();
954 for (;
v != vend; ++
v) {
955 if ((*v)->occludee_empty() != empty) {
962 const SShape *Stroke::shape()
const
965 const SShape *sshape = (*v)->shape();
966 for (;
v != vend; ++
v) {
967 if ((*v)->shape() != sshape) {
974 real Stroke::z_discontinuity(
int iCombination)
const
976 return z_discontinuity_edge_function<Stroke>(*
this, iCombination);
979 Vec3r Stroke::curvature2d_as_vector(
int iCombination)
const
981 return curvature2d_as_vector_edge_function<Stroke>(*
this, iCombination);
984 real Stroke::curvature2d_as_angle(
int iCombination)
const
986 return curvature2d_as_angle_edge_function<Stroke>(*
this, iCombination);
989 float Stroke::shape_importance(
int iCombination)
const
991 return shape_importance_edge_function<Stroke>(*
this, iCombination);
994 float Stroke::local_average_depth(
int iCombination)
const
996 return local_average_depth_edge_function<Stroke>(*
this, iCombination);
999 float Stroke::local_depth_variance(
int iCombination)
const
1001 return local_depth_variance_edge_function<Stroke>(*
this, iCombination);
1004 real Stroke::local_average_density(
float sigma,
int iCombination)
const
1006 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
static const pxr::TfToken b("b", pxr::TfToken::Immortal)