Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/freestyle/style_modules/parameter_editor.py3
-rw-r--r--source/blender/freestyle/intern/python/Interface1D/BPy_Stroke.cpp25
-rwxr-xr-xsource/blender/freestyle/intern/stroke/BasicStrokeShaders.cpp8
-rwxr-xr-xsource/blender/freestyle/intern/stroke/Stroke.cpp31
-rwxr-xr-xsource/blender/freestyle/intern/stroke/Stroke.h3
5 files changed, 46 insertions, 24 deletions
diff --git a/release/scripts/freestyle/style_modules/parameter_editor.py b/release/scripts/freestyle/style_modules/parameter_editor.py
index dc98b968acf..97df74c8a0c 100644
--- a/release/scripts/freestyle/style_modules/parameter_editor.py
+++ b/release/scripts/freestyle/style_modules/parameter_editor.py
@@ -449,6 +449,7 @@ class SinusDisplacementShader(StrokeShader):
u = v.u()
n = n * self._amplitude * math.cos(distance / self._wavelength * 2 * math.pi + self._phase)
v.setPoint(p + n)
+ stroke.UpdateLength()
class PerlinNoise1DShader(StrokeShader):
def __init__(self, freq = 10, amp = 10, oct = 4, angle = 45, seed = -1):
@@ -468,6 +469,7 @@ class PerlinNoise1DShader(StrokeShader):
nres = self.__noise.turbulence1(v.u(), self.__freq, self.__amp, self.__oct)
v.setPoint(v.getPoint() + nres * self.__dir)
it.increment()
+ stroke.UpdateLength()
class PerlinNoise2DShader(StrokeShader):
def __init__(self, freq = 10, amp = 10, oct = 4, angle = 45, seed = -1):
@@ -488,6 +490,7 @@ class PerlinNoise2DShader(StrokeShader):
nres = self.__noise.turbulence2(vec, self.__freq, self.__amp, self.__oct)
v.setPoint(v.getPoint() + nres * self.__dir)
it.increment()
+ stroke.UpdateLength()
# Predicates and helper functions
diff --git a/source/blender/freestyle/intern/python/Interface1D/BPy_Stroke.cpp b/source/blender/freestyle/intern/python/Interface1D/BPy_Stroke.cpp
index 7edfde7e8f6..fe215588275 100644
--- a/source/blender/freestyle/intern/python/Interface1D/BPy_Stroke.cpp
+++ b/source/blender/freestyle/intern/python/Interface1D/BPy_Stroke.cpp
@@ -223,6 +223,29 @@ static PyObject * Stroke_RemoveVertex( BPy_Stroke *self, PyObject *args ) {
Py_RETURN_NONE;
}
+static char Stroke_UpdateLength___doc__[] =
+".. method:: UpdateLength()\n"
+"\n"
+" Updates the 2D length of the Stroke.\n";
+
+static PyObject * Stroke_UpdateLength( BPy_Stroke *self ) {
+ self->s->UpdateLength();
+
+ Py_RETURN_NONE;
+}
+
+static char Stroke_getLength2D___doc__[] =
+".. method:: getLength2D()\n"
+"\n"
+" Returns the 2D length of the Stroke.\n"
+"\n"
+" :return: the 2D length of the Stroke.\n"
+" :rtype: float\n";
+
+static PyObject * Stroke_getLength2D( BPy_Stroke *self ) {
+ return PyFloat_FromDouble( self->s->getLength2D() );
+}
+
static char Stroke_getMediumType___doc__[] =
".. method:: getMediumType()\n"
"\n"
@@ -415,6 +438,8 @@ static PyMethodDef BPy_Stroke_methods[] = {
{"Resample", ( PyCFunction ) Stroke_Resample, METH_VARARGS, Stroke_Resample___doc__},
{"RemoveVertex", ( PyCFunction ) Stroke_RemoveVertex, METH_VARARGS, Stroke_RemoveVertex___doc__},
{"InsertVertex", ( PyCFunction ) Stroke_InsertVertex, METH_VARARGS, Stroke_InsertVertex___doc__},
+ {"UpdateLength", ( PyCFunction ) Stroke_UpdateLength, METH_NOARGS, Stroke_UpdateLength___doc__},
+ {"getLength2D", ( PyCFunction ) Stroke_getLength2D, METH_NOARGS, Stroke_getLength2D___doc__},
{"getMediumType", ( PyCFunction ) Stroke_getMediumType, METH_NOARGS, Stroke_getMediumType___doc__},
{"getTextureId", ( PyCFunction ) Stroke_getTextureId, METH_NOARGS, Stroke_getTextureId___doc__},
{"hasTips", ( PyCFunction ) Stroke_hasTips, METH_NOARGS, Stroke_hasTips___doc__},
diff --git a/source/blender/freestyle/intern/stroke/BasicStrokeShaders.cpp b/source/blender/freestyle/intern/stroke/BasicStrokeShaders.cpp
index bc9edcef057..ec9f887d533 100755
--- a/source/blender/freestyle/intern/stroke/BasicStrokeShaders.cpp
+++ b/source/blender/freestyle/intern/stroke/BasicStrokeShaders.cpp
@@ -586,6 +586,8 @@ namespace StrokeShaders {
(v0)->setPoint(newFirst[0], newFirst[1]);
Vec2d newLast(last+_amount*dn);
(vn)->setPoint(newLast[0], newLast[1]);
+
+ stroke.UpdateLength();
return 0;
}
@@ -611,6 +613,7 @@ namespace StrokeShaders {
sv->setPoint(newPoint[0], newPoint[1]);
++it;
}
+ stroke.UpdateLength();
return 0;
}
@@ -726,6 +729,7 @@ namespace StrokeShaders {
++it;
++n;
}
+ stroke.UpdateLength();
return 0;
}
@@ -844,6 +848,7 @@ namespace StrokeShaders {
++p;
++n;
}
+ stroke.UpdateLength();
// Deal with extra vertices:
if(nExtraVertex == 0)
@@ -931,6 +936,7 @@ namespace StrokeShaders {
sv->setPoint(newPoint[0], newPoint[1]);
++it;
}
+ stroke.UpdateLength();
return 0;
}
@@ -1038,6 +1044,7 @@ namespace StrokeShaders {
// u.normalize();
// (*a)->setPoint((*a)->x()-u.x()*10, (*a)->y()-u.y()*10);
}
+ stroke.UpdateLength();
// delete stuff
for(cp=_results.begin(), cpend=_results.end();
@@ -1076,6 +1083,7 @@ namespace StrokeShaders {
{
v->setPoint(piece.A.x()+v->u()*u.x()+n.x()*offset, piece.A.y()+v->u()*u.y()+n.y()*offset);
}
+ stroke.UpdateLength();
return 0;
}
diff --git a/source/blender/freestyle/intern/stroke/Stroke.cpp b/source/blender/freestyle/intern/stroke/Stroke.cpp
index f6cefdfee34..0c852d0e209 100755
--- a/source/blender/freestyle/intern/stroke/Stroke.cpp
+++ b/source/blender/freestyle/intern/stroke/Stroke.cpp
@@ -674,28 +674,7 @@ void Stroke::RemoveVertex(StrokeVertex *iVertex)
break;
}
}
- // recompute various values (length, curvilign abscissa)
- float curvabsc = 0.f;
- it=_Vertices.begin();
- itend=_Vertices.end();
- vertex_container::iterator previous=it;
- for(;
- (it!=itend);
- ++it)
- {
- if(it != previous)
- curvabsc += ((*it)->point2d()-(*previous)->point2d()).norm();
- (*it)->setCurvilinearAbscissa(curvabsc);
- previous = it;
- }
- _Length = curvabsc;
- it=_Vertices.begin();
- for(;
- (it!=itend);
- ++it)
- {
- (*it)->setStrokeLength(_Length);
- }
+ UpdateLength();
}
void Stroke::InsertVertex(StrokeVertex *iVertex, StrokeInternal::StrokeVertexIterator next)
@@ -704,10 +683,14 @@ void Stroke::InsertVertex(StrokeVertex *iVertex, StrokeInternal::StrokeVertexIte
vertex_container::iterator itnext = next.getIt();
_Vertices.insert(itnext, iVertex);
+ UpdateLength();
+}
+
+void Stroke::UpdateLength()
+{
// recompute various values (length, curvilign abscissa)
float curvabsc = 0.f;
- it=_Vertices.begin();
- itend=_Vertices.end();
+ vertex_container::iterator it=_Vertices.begin(), itend=_Vertices.end();
vertex_container::iterator previous=it;
for(;
(it!=itend);
diff --git a/source/blender/freestyle/intern/stroke/Stroke.h b/source/blender/freestyle/intern/stroke/Stroke.h
index 5e0974edea7..1b1084b54c2 100755
--- a/source/blender/freestyle/intern/stroke/Stroke.h
+++ b/source/blender/freestyle/intern/stroke/Stroke.h
@@ -466,6 +466,9 @@ public:
*/
void InsertVertex(StrokeVertex *iVertex, StrokeInternal::StrokeVertexIterator next);
+ /*! Updates the 2D length of the Stroke */
+ void UpdateLength();
+
/* Render method */
void Render(const StrokeRenderer *iRenderer );
void RenderBasic(const StrokeRenderer *iRenderer );