<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>macouno.com &#187; Math</title>
	<atom:link href="http://www.macouno.com/category/miscellaneous/math/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.macouno.com</link>
	<description>The shenanigans of Dolf J. Veenvliet</description>
	<lastBuildDate>Tue, 31 Jan 2012 13:37:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Using bezier math in Blender with python</title>
		<link>http://www.macouno.com/2011/01/31/using-bezier-math-in-blender-with-python/</link>
		<comments>http://www.macouno.com/2011/01/31/using-bezier-math-in-blender-with-python/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 09:59:15 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=1429</guid>
		<description><![CDATA[Ok, so once again, this is mostly here so I can remember&#8230; For my Entoforms project I&#8217;ve been using sine waves to calculate nice &#8220;increases&#8221; and &#8220;decreases&#8221;, but&#8230; a sine wave is only so flexible. Thus I had a look at using beziers in stead. Now&#8230; I am an artist, and not a math wizz, [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so once again, this is mostly here so I can remember&#8230;</p>
<p>For my Entoforms project I&#8217;ve been using sine waves to calculate nice &#8220;increases&#8221; and &#8220;decreases&#8221;, but&#8230; a sine wave is only so flexible. Thus I had a look at using beziers in stead. Now&#8230; I am an artist, and not a math wizz, so it was tricky to get my head around&#8230;</p>
<h3>The concept</h3>
<p>Because I&#8217;m just using this bit of math to calulate how much I want to transform stuff, I&#8217;m only doing it in 2D. And to keep it simple only with curves with a single segment (though you can combine multiple curves). Below here are a few nice ones.</p>
<p><a href="http://www.macouno.com/wp-content/uploads/2011/01/bezier_curves1.jpg"><img class="alignnone size-full wp-image-1431" title="bezier_curves" src="http://www.macouno.com/wp-content/uploads/2011/01/bezier_curves1.jpg" alt="" width="382" height="379" /></a></p>
<p>Now in my case I only care about the &#8220;inside&#8221; of the curve&#8230; so we&#8217;re ignoring the black (unselected) handles. This results in each curve being defined by 4 points&#8230; 2 nodes (where the curve starts and ends) and 2 handles (that define the shape of the curve). So we have <strong>p0 </strong>(the first node), <strong>p1 </strong>(the handle for the first node), <strong>p2 </strong>(the handle for the second node), <strong>p3 </strong>(the second node).</p>
<h3>The math</h3>
<p>I was lucky enough to find some very basic math for this on the net&#8230; I really don&#8217;t know much about what it actually does, but it works great! So here&#8217;s a simple script that places empties along a bezier curve.</p>
<div class="code"><pre class="python"><ol><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw5">bpy</span>, <span class="kw3">math</span>, <span class="kw6">mathutils</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Kappa is the position of the handle on a circular curve</span></div></li><li class="li1"><div class="de1">kappa = <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw3">math</span>.<span class="me1">sqrt</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="br0">&#41;</span>/<span class="nu0">3</span><span class="br0">&#41;</span>*<span class="nu0">4</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># A series of nice bezier curves</span></div></li><li class="li1"><div class="de1">beziers = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'linear'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.5</span>,<span class="nu0">0.5</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.5</span>,<span class="nu0">0.5</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'increasing'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span>kappa,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="br0">&#40;</span><span class="nu0">1.0</span>-kappa<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'decreasing'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,kappa<span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-kappa<span class="br0">&#41;</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'swoop'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.5</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.5</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Find a point along a bezier curve</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> findBezierPoint<span class="br0">&#40;</span>r, <span class="kw6">curve</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; c = <span class="nu0">3</span> * <span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b = <span class="nu0">3</span> * <span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> - c</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; a = <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span> - c - b</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; r2 = r * r</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; r3 = r2 * r</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a * r3 + b * r2 + c * r + <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Pick a bezier curve</span></div></li><li class="li1"><div class="de1">bezier = beziers<span class="br0">&#91;</span><span class="st0">'increasing'</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Loop through and find points along a bezier curve</span></div></li><li class="li1"><div class="de1"><span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">11</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b = findBezierPoint<span class="br0">&#40;</span><span class="br0">&#40;</span>i*<span class="nu0">0.1</span><span class="br0">&#41;</span>,bezier<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="br0">&#40;</span>i<span class="nu0">+1</span><span class="br0">&#41;</span>,b<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b*=<span class="nu0">10</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw5">bpy</span>.<span class="me1">ops</span>.<span class="kw2">object</span>.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">type</span>=<span class="st0">'EMPTY'</span>, view_align=<span class="kw2">False</span>, enter_editmode=<span class="kw2">False</span>, location=<span class="br0">&#40;</span>b<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="nu0">0</span>, b<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span>, rotation=<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, layers=<span class="br0">&#40;</span><span class="kw2">True</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean python code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">import bpy, math, mathutils

# Kappa is the position of the handle on a circular curve
kappa = ((math.sqrt(2)-1)/3)*4

# A series of nice bezier curves
beziers = {
	'linear': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.5,0.5)),
		'p2':mathutils.Vector((0.5,0.5)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'increasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector((1.0,(1.0-kappa))),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'decreasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.0,kappa)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'swoop': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.5,0.0)),
		'p2':mathutils.Vector((0.5,1.0)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	}

# Find a point along a bezier curve
def findBezierPoint(r, curve):
	c = 3 * (curve['p1'] - curve['p0'])
	b = 3 * (curve['p2'] - curve['p1']) - c
	a = curve['p3'] - curve['p0'] - c - b

	r2 = r * r
	r3 = r2 * r

	return a * r3 + b * r2 + c * r + curve['p0']

# Pick a bezier curve
bezier = beziers['increasing']

# Loop through and find points along a bezier curve
for i in range(11):

	b = findBezierPoint((i*0.1),bezier)

	print((i+1),b)

	b*=10

	bpy.ops.object.add(type='EMPTY', view_align=False, enter_editmode=False, location=(b[0], 0, b[1]), rotation=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))</textarea><pre class="python">import bpy, math, mathutils

# Kappa is the position of the handle on a circular curve
kappa = ((math.sqrt(2)-1)/3)*4

# A series of nice bezier curves
beziers = {
	'linear': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.5,0.5)),
		'p2':mathutils.Vector((0.5,0.5)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'increasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector((1.0,(1.0-kappa))),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'decreasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.0,kappa)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'swoop': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.5,0.0)),
		'p2':mathutils.Vector((0.5,1.0)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	}

# Find a point along a bezier curve
def findBezierPoint(r, curve):
	c = 3 * (curve['p1'] - curve['p0'])
	b = 3 * (curve['p2'] - curve['p1']) - c
	a = curve['p3'] - curve['p0'] - c - b

	r2 = r * r
	r3 = r2 * r

	return a * r3 + b * r2 + c * r + curve['p0']

# Pick a bezier curve
bezier = beziers['increasing']

# Loop through and find points along a bezier curve
for i in range(11):

	b = findBezierPoint((i*0.1),bezier)

	print((i+1),b)

	b*=10

	bpy.ops.object.add(type='EMPTY', view_align=False, enter_editmode=False, location=(b[0], 0, b[1]), rotation=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))</pre>
<h3>The use</h3>
<p>Now this gives us a nice series of numbers from 0.0 to 1.0. These can be used to calculate how strongly we want to affect something&#8230; it&#8217;s basically a falloff curve. The trick is not to use these as actual transformation values, but as a reference for how much of the &#8220;end&#8221; result should be reached. So if you&#8217;re translating something 20 units, and the value retrieved is 0.4&#8230; the selection should be translated 20 * 0.4 units at this point in time.</p>
<h3>Here&#8217;s a slightly usefull example</h3>
<div class="code"><pre class="python"><ol><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw5">bpy</span>, <span class="kw3">math</span>, <span class="kw6">mathutils</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Kappa is the position of the handle on a circular curve</span></div></li><li class="li1"><div class="de1">kappa = <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw3">math</span>.<span class="me1">sqrt</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="br0">&#41;</span>/<span class="nu0">3</span><span class="br0">&#41;</span>*<span class="nu0">4</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># A series of nice 2D bezier curves</span></div></li><li class="li1"><div class="de1">beziers = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'linear'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.5</span>,<span class="nu0">0.5</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.5</span>,<span class="nu0">0.5</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'increasing'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span>kappa,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="br0">&#40;</span><span class="nu0">1.0</span>-kappa<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'decreasing'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,kappa<span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-kappa<span class="br0">&#41;</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'swoop'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span>kappa,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-kappa<span class="br0">&#41;</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Find a point along a bezier curve</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> findBezierPoint<span class="br0">&#40;</span>r, <span class="kw6">curve</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; c = <span class="nu0">3</span> * <span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b = <span class="nu0">3</span> * <span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> - c</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; a = <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span> - c - b</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; r2 = r * r</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; r3 = r2 * r</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a * r3 + b * r2 + c * r + <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Now lets do something usefull!</span></div></li><li class="li1"><div class="de1"><span class="co1"># Lets say we want to scale something * 5.0 in 10 steps</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># So we add a cube to do this to</span></div></li><li class="li1"><div class="de1"><span class="kw5">bpy</span>.<span class="me1">ops</span>.<span class="kw6">mesh</span>.<span class="me1">primitive_cube_add</span><span class="br0">&#40;</span>view_align=<span class="kw2">False</span>, enter_editmode=<span class="kw2">False</span>, location=<span class="br0">&#40;</span><span class="nu0">0.0</span>, <span class="nu0">0.0</span>, <span class="nu0">0.0</span><span class="br0">&#41;</span>, rotation=<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, layers=<span class="br0">&#40;</span><span class="kw2">True</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Pick a bezier curve</span></div></li><li class="li1"><div class="de1">bezier = beziers<span class="br0">&#91;</span><span class="st0">'increasing'</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The number of steps we want to do this in</span></div></li><li class="li1"><div class="de1">iterations = <span class="nu0">10</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The stepsize is how far along the curve we move in each step</span></div></li><li class="li1"><div class="de1"><span class="co1"># This starts at 0.0 and ends at 1.0</span></div></li><li class="li1"><div class="de1">stepSize = <span class="br0">&#40;</span><span class="nu0">1.0</span> / iterations<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The size we start with is always 1 because we do it relative</span></div></li><li class="li1"><div class="de1">startSize = <span class="nu0">1.0</span> </div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The size at the end of the process should be the start multiplied by this</span></div></li><li class="li1"><div class="de1">scaleUp = <span class="nu0">5.0</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># We get the difference in scale so we can figure out each step</span></div></li><li class="li1"><div class="de1">scaleDif = scaleUp - startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># This is here to see if the progression is correct</span></div></li><li class="li1"><div class="de1">checkSize = startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Lets do 10 steps</span></div></li><li class="li1"><div class="de1"><span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Before we do anything we find out where we should be at this point in time</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; previousStep = i</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Before we do anything we find out where we should be at this point in time</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; previousPoint = stepSize * i</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Find the point on the curve for the previous iteration in the loop</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b = findBezierPoint<span class="br0">&#40;</span>previousPoint, bezier<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># This should tell us what the current size of the object is</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; currentSize = <span class="br0">&#40;</span>scaleDif * b<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span> + startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Now lets find out how much bigger we need to make it</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># We do i+1 because then we start with 1 and end with 10 (0 is nothing anyway)</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; step = <span class="br0">&#40;</span>i<span class="nu0">+1</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># The point along the curve is always a nr between 0.0 and 1.0</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># So we divide 1 by the number of iterations to find the stepsize</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; curvePoint = &nbsp;stepSize * step</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Find the point on the curve for this iteration in the loop</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b = findBezierPoint<span class="br0">&#40;</span>curvePoint, bezier<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># This should be the size we want to achieve</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; newSize = <span class="br0">&#40;</span>scaleDif * b<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span> + startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; scaleFactor = newSize / currentSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; checkSize *= scaleFactor</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Lets print out some values to check</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">'step'</span>,step<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;currentSize'</span>,currentSize<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;newSize'</span>, newSize<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;scaleFactor'</span>, scaleFactor<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;checkSize'</span>,checkSize<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># lets add some meshes so we can see the effect</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b*=<span class="nu0">20</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw5">bpy</span>.<span class="me1">ops</span>.<span class="kw2">object</span>.<span class="me1">duplicate_move</span><span class="br0">&#40;</span>OBJECT_OT_duplicate=<span class="br0">&#123;</span><span class="st0">&quot;linked&quot;</span>:<span class="kw2">True</span>, <span class="st0">&quot;mode&quot;</span>:<span class="nu0">1</span><span class="br0">&#125;</span>, TRANSFORM_OT_translate=<span class="br0">&#123;</span><span class="st0">&quot;value&quot;</span>:<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, <span class="st0">&quot;constraint_axis&quot;</span>:<span class="br0">&#40;</span><span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span><span class="br0">&#41;</span>, <span class="st0">&quot;constraint_orientation&quot;</span>:<span class="st0">'GLOBAL'</span>, <span class="st0">&quot;mirror&quot;</span>:<span class="kw2">False</span>, <span class="st0">&quot;proportional&quot;</span>:<span class="st0">'DISABLED'</span>, <span class="st0">&quot;proportional_edit_falloff&quot;</span>:<span class="st0">'SMOOTH'</span>, <span class="st0">&quot;proportional_size&quot;</span>:<span class="nu0">1</span>, <span class="st0">&quot;snap&quot;</span>:<span class="kw2">False</span>, <span class="st0">&quot;snap_target&quot;</span>:<span class="st0">'CLOSEST'</span>, <span class="st0">&quot;snap_point&quot;</span>:<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, <span class="st0">&quot;snap_align&quot;</span>:<span class="kw2">False</span>, <span class="st0">&quot;snap_normal&quot;</span>:<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, <span class="st0">&quot;release_confirm&quot;</span>:<span class="kw2">False</span><span class="br0">&#125;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw5">bpy</span>.<span class="me1">context</span>.<span class="me1">active_object</span>.<span class="me1">location</span> = <span class="br0">&#40;</span>b<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>,<span class="nu0">0.0</span>,b<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw5">bpy</span>.<span class="me1">ops</span>.<span class="me1">transform</span>.<span class="me1">resize</span><span class="br0">&#40;</span>value=<span class="br0">&#40;</span>scaleFactor, scaleFactor, scaleFactor<span class="br0">&#41;</span>, constraint_axis=<span class="br0">&#40;</span><span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span><span class="br0">&#41;</span>, constraint_orientation=<span class="st0">'GLOBAL'</span>, mirror=<span class="kw2">False</span>, proportional=<span class="st0">'DISABLED'</span>, proportional_edit_falloff=<span class="st0">'SMOOTH'</span>, proportional_size=<span class="nu0">1</span>, snap=<span class="kw2">False</span>, snap_target=<span class="st0">'CLOSEST'</span>, snap_point=<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, snap_align=<span class="kw2">False</span>, snap_normal=<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, release_confirm=<span class="kw2">False</span><span class="br0">&#41;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean python code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">import bpy, math, mathutils

# Kappa is the position of the handle on a circular curve
kappa = ((math.sqrt(2)-1)/3)*4

# A series of nice 2D bezier curves
beziers = {
	'linear': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.5,0.5)),
		'p2':mathutils.Vector((0.5,0.5)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'increasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector((1.0,(1.0-kappa))),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'decreasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.0,kappa)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'swoop': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	}

# Find a point along a bezier curve
def findBezierPoint(r, curve):
	c = 3 * (curve['p1'] - curve['p0'])
	b = 3 * (curve['p2'] - curve['p1']) - c
	a = curve['p3'] - curve['p0'] - c - b

	r2 = r * r
	r3 = r2 * r

	return a * r3 + b * r2 + c * r + curve['p0']

# Now lets do something usefull!
# Lets say we want to scale something * 5.0 in 10 steps

# So we add a cube to do this to
bpy.ops.mesh.primitive_cube_add(view_align=False, enter_editmode=False, location=(0.0, 0.0, 0.0), rotation=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

# Pick a bezier curve
bezier = beziers['increasing']

# The number of steps we want to do this in
iterations = 10

# The stepsize is how far along the curve we move in each step
# This starts at 0.0 and ends at 1.0
stepSize = (1.0 / iterations)

# The size we start with is always 1 because we do it relative
startSize = 1.0 

# The size at the end of the process should be the start multiplied by this
scaleUp = 5.0

# We get the difference in scale so we can figure out each step
scaleDif = scaleUp - startSize

# This is here to see if the progression is correct
checkSize = startSize

# Lets do 10 steps
for i in range(10):

	# Before we do anything we find out where we should be at this point in time
	previousStep = i

	# Before we do anything we find out where we should be at this point in time
	previousPoint = stepSize * i

	# Find the point on the curve for the previous iteration in the loop
	b = findBezierPoint(previousPoint, bezier)

	# This should tell us what the current size of the object is
	currentSize = (scaleDif * b[1]) + startSize

	# Now lets find out how much bigger we need to make it
	# We do i+1 because then we start with 1 and end with 10 (0 is nothing anyway)
	step = (i+1)

	# The point along the curve is always a nr between 0.0 and 1.0
	# So we divide 1 by the number of iterations to find the stepsize
	curvePoint =  stepSize * step

	# Find the point on the curve for this iteration in the loop
	b = findBezierPoint(curvePoint, bezier)

	# This should be the size we want to achieve
	newSize = (scaleDif * b[1]) + startSize

	scaleFactor = newSize / currentSize

	checkSize *= scaleFactor

	# Lets print out some values to check
	print('step',step)
	print('  currentSize',currentSize)
	print('  newSize', newSize)
	print('  scaleFactor', scaleFactor)
	print('  checkSize',checkSize)

	# lets add some meshes so we can see the effect
	b*=20
	bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":True, "mode":1}, TRANSFORM_OT_translate={"value":(0, 0, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "release_confirm":False})
	bpy.context.active_object.location = (b[0],0.0,b[1])
	bpy.ops.transform.resize(value=(scaleFactor, scaleFactor, scaleFactor), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), release_confirm=False)</textarea><pre class="python">import bpy, math, mathutils

# Kappa is the position of the handle on a circular curve
kappa = ((math.sqrt(2)-1)/3)*4

# A series of nice 2D bezier curves
beziers = {
	'linear': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.5,0.5)),
		'p2':mathutils.Vector((0.5,0.5)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'increasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector((1.0,(1.0-kappa))),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'decreasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.0,kappa)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	'swoop': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0))
		},
	}

# Find a point along a bezier curve
def findBezierPoint(r, curve):
	c = 3 * (curve['p1'] - curve['p0'])
	b = 3 * (curve['p2'] - curve['p1']) - c
	a = curve['p3'] - curve['p0'] - c - b

	r2 = r * r
	r3 = r2 * r

	return a * r3 + b * r2 + c * r + curve['p0']

# Now lets do something usefull!
# Lets say we want to scale something * 5.0 in 10 steps

# So we add a cube to do this to
bpy.ops.mesh.primitive_cube_add(view_align=False, enter_editmode=False, location=(0.0, 0.0, 0.0), rotation=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

# Pick a bezier curve
bezier = beziers['increasing']

# The number of steps we want to do this in
iterations = 10

# The stepsize is how far along the curve we move in each step
# This starts at 0.0 and ends at 1.0
stepSize = (1.0 / iterations)

# The size we start with is always 1 because we do it relative
startSize = 1.0 

# The size at the end of the process should be the start multiplied by this
scaleUp = 5.0

# We get the difference in scale so we can figure out each step
scaleDif = scaleUp - startSize

# This is here to see if the progression is correct
checkSize = startSize

# Lets do 10 steps
for i in range(10):

	# Before we do anything we find out where we should be at this point in time
	previousStep = i

	# Before we do anything we find out where we should be at this point in time
	previousPoint = stepSize * i

	# Find the point on the curve for the previous iteration in the loop
	b = findBezierPoint(previousPoint, bezier)

	# This should tell us what the current size of the object is
	currentSize = (scaleDif * b[1]) + startSize

	# Now lets find out how much bigger we need to make it
	# We do i+1 because then we start with 1 and end with 10 (0 is nothing anyway)
	step = (i+1)

	# The point along the curve is always a nr between 0.0 and 1.0
	# So we divide 1 by the number of iterations to find the stepsize
	curvePoint =  stepSize * step

	# Find the point on the curve for this iteration in the loop
	b = findBezierPoint(curvePoint, bezier)

	# This should be the size we want to achieve
	newSize = (scaleDif * b[1]) + startSize

	scaleFactor = newSize / currentSize

	checkSize *= scaleFactor

	# Lets print out some values to check
	print('step',step)
	print('  currentSize',currentSize)
	print('  newSize', newSize)
	print('  scaleFactor', scaleFactor)
	print('  checkSize',checkSize)

	# lets add some meshes so we can see the effect
	b*=20
	bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":True, "mode":1}, TRANSFORM_OT_translate={"value":(0, 0, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "release_confirm":False})
	bpy.context.active_object.location = (b[0],0.0,b[1])
	bpy.ops.transform.resize(value=(scaleFactor, scaleFactor, scaleFactor), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), release_confirm=False)</pre>
<h3>And another version that allows for stringing together multiple curves</h3>
<div class="code"><pre class="python"><ol><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw5">bpy</span>, <span class="kw3">math</span>, <span class="kw6">mathutils</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">'-- starting --'</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Kappa is the position of the handle on a circular curve</span></div></li><li class="li1"><div class="de1">kappa = <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw3">math</span>.<span class="me1">sqrt</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="br0">&#41;</span>/<span class="nu0">3</span><span class="br0">&#41;</span>*<span class="nu0">4</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># A series of nice 2D bezier curves</span></div></li><li class="li1"><div class="de1">beziers = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'linear'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.5</span>,<span class="nu0">0.5</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.5</span>,<span class="nu0">0.5</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'increasing'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span>kappa,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="br0">&#40;</span><span class="nu0">1.0</span>-kappa<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'decreasing'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,kappa<span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-kappa<span class="br0">&#41;</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'swoosh'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span>kappa,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-kappa<span class="br0">&#41;</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Find a point along a bezier curve</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> findBezierPoint<span class="br0">&#40;</span>r, <span class="kw6">curve</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; c = <span class="nu0">3</span> * <span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b = <span class="nu0">3</span> * <span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> - c</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; a = <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span> - c - b</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; r2 = r * r</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; r3 = r2 * r</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a * r3 + b * r2 + c * r + <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Lets make a curve go from 1.0 to 0.0</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> invertCurve<span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; bezier = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> bezier</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Make the intensity of a curve bigger or smaller</span></div></li><li class="li1"><div class="de1"><span class="co1"># Intensity has to be between 0.0 and 2.0 (1.0 is default)</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> intensifyCurve<span class="br0">&#40;</span><span class="kw6">curve</span>, intensity=<span class="nu0">1.0</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; bezier = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>: <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> intensity &gt; <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = <span class="nu0">1.0</span> - bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= <span class="br0">&#40;</span>intensity - <span class="nu0">1.0</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> += dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = <span class="nu0">1.0</span> - bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= <span class="br0">&#40;</span>intensity - <span class="nu0">1.0</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> += dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> != <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= <span class="br0">&#40;</span>intensity - <span class="nu0">1.0</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> -= dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> != <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= <span class="br0">&#40;</span>intensity - <span class="nu0">1.0</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> -= dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elif</span> intensity &lt; <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> *= intensity</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> *= intensity</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> != <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = <span class="nu0">1.0</span> - bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= intensity</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> += dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> != <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = <span class="nu0">1.0</span> - bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= intensity</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> += dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> bezier</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Now lets do something usefull!</span></div></li><li class="li1"><div class="de1"><span class="co1"># Lets say we want to scale something * 5.0 in 10 steps</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># So we add a cube to do this to</span></div></li><li class="li1"><div class="de1"><span class="kw5">bpy</span>.<span class="me1">ops</span>.<span class="kw6">mesh</span>.<span class="me1">primitive_cube_add</span><span class="br0">&#40;</span>view_align=<span class="kw2">False</span>, enter_editmode=<span class="kw2">False</span>, location=<span class="br0">&#40;</span><span class="nu0">0.0</span>, <span class="nu0">0.0</span>, <span class="nu0">0.0</span><span class="br0">&#41;</span>, rotation=<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, layers=<span class="br0">&#40;</span><span class="kw2">True</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># So now lets do multiple bezier curves</span></div></li><li class="li1"><div class="de1">curves = <span class="br0">&#91;</span>beziers<span class="br0">&#91;</span><span class="st0">'decreasing'</span><span class="br0">&#93;</span>,beziers<span class="br0">&#91;</span><span class="st0">'decreasing'</span><span class="br0">&#93;</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">intensities = <span class="br0">&#91;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The number of steps we want to do this in</span></div></li><li class="li1"><div class="de1">iterations = <span class="nu0">10</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The size we start with is always 1 because we do it relative</span></div></li><li class="li1"><div class="de1">startSize = <span class="nu0">1.0</span> </div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The size at the end of the process should be the start multiplied by this</span></div></li><li class="li1"><div class="de1">scaleUp = <span class="nu0">5.0</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># We get the difference in scale so we can figure out each step</span></div></li><li class="li1"><div class="de1">scaleDif = scaleUp - startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># This is here to see if the progression is correct</span></div></li><li class="li1"><div class="de1">checkSize = startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The number of iterations per curve</span></div></li><li class="li1"><div class="de1"><span class="kw8">split</span> = iterations / <span class="kw2">len</span><span class="br0">&#40;</span>curves<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">stepSize = <span class="br0">&#40;</span><span class="nu0">1.0</span>/iterations<span class="br0">&#41;</span> * <span class="kw2">len</span><span class="br0">&#40;</span>curves<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Lets do 10 steps</span></div></li><li class="li1"><div class="de1"><span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span>iterations<span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Before we do anything we find out where we should be at this point in time</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; step = i</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Figure out what curve we need to use</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; curveId = <span class="kw3">math</span>.<span class="me1">floor</span><span class="br0">&#40;</span>step/<span class="kw8">split</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw6">curve</span> = curves<span class="br0">&#91;</span>curveId<span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Set the intensity for a curve</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw6">curve</span> = intensifyCurve<span class="br0">&#40;</span><span class="kw6">curve</span>, intensities<span class="br0">&#91;</span>curveId<span class="br0">&#93;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Make sure each curve is interpreted start to finish</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; step -= <span class="br0">&#40;</span>curveId * <span class="kw8">split</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Find out if we're even or odd!</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># To make transistions nice we invert the even curves</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; odd = curveId % <span class="nu0">2</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> odd:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw6">curve</span> = invertCurve<span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Before we do anything we find out where we should be at this point in time</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; curvePoint = stepSize * step</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Find the point on the curve for the previous iteration in the loop</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; currentPoint = findBezierPoint<span class="br0">&#40;</span>curvePoint, <span class="kw6">curve</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># This should tell us what the current size of the object is</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; currentOffset = <span class="br0">&#40;</span>scaleDif * currentPoint<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span> + startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Now lets find out how much bigger we need to make it</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># We do i+1 because then we start with 1 and end with 10 (0 is nothing anyway)</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; step += <span class="nu0">1</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># The point along the curve is always a nr between 0.0 and 1.0</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># So we divide 1 by the number of iterations to find the stepsize</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; curvePoint = &nbsp;stepSize * step</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Find the point on the curve for this iteration in the loop</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; newPoint = findBezierPoint<span class="br0">&#40;</span>curvePoint, <span class="kw6">curve</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># This should be the size we want to achieve</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; newOffset = <span class="br0">&#40;</span>scaleDif * newPoint<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span> + startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; scaleFactor = newOffset / currentOffset</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; checkSize *= scaleFactor</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Lets print out some values to check</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">'step'</span>,step<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;stepSize'</span>,stepSize<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;curve'</span>,curveId<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;currentPoint'</span>, currentPoint<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;newPoint'</span>, newPoint<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;currentOffset'</span>,currentOffset<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;newOffset'</span>, newOffset<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;scaleFactor'</span>, scaleFactor<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;checkSize'</span>,checkSize<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># lets add some meshes so we can see the effect</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw5">bpy</span>.<span class="me1">ops</span>.<span class="kw2">object</span>.<span class="me1">duplicate_move</span><span class="br0">&#40;</span>OBJECT_OT_duplicate=<span class="br0">&#123;</span><span class="st0">&quot;linked&quot;</span>:<span class="kw2">True</span>, <span class="st0">&quot;mode&quot;</span>:<span class="nu0">1</span><span class="br0">&#125;</span>, TRANSFORM_OT_translate=<span class="br0">&#123;</span><span class="st0">&quot;value&quot;</span>:<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, <span class="st0">&quot;constraint_axis&quot;</span>:<span class="br0">&#40;</span><span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span><span class="br0">&#41;</span>, <span class="st0">&quot;constraint_orientation&quot;</span>:<span class="st0">'GLOBAL'</span>, <span class="st0">&quot;mirror&quot;</span>:<span class="kw2">False</span>, <span class="st0">&quot;proportional&quot;</span>:<span class="st0">'DISABLED'</span>, <span class="st0">&quot;proportional_edit_falloff&quot;</span>:<span class="st0">'SMOOTH'</span>, <span class="st0">&quot;proportional_size&quot;</span>:<span class="nu0">1</span>, <span class="st0">&quot;snap&quot;</span>:<span class="kw2">False</span>, <span class="st0">&quot;snap_target&quot;</span>:<span class="st0">'CLOSEST'</span>, <span class="st0">&quot;snap_point&quot;</span>:<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, <span class="st0">&quot;snap_align&quot;</span>:<span class="kw2">False</span>, <span class="st0">&quot;snap_normal&quot;</span>:<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, <span class="st0">&quot;release_confirm&quot;</span>:<span class="kw2">False</span><span class="br0">&#125;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw5">bpy</span>.<span class="me1">context</span>.<span class="me1">active_object</span>.<span class="me1">location</span> = <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span>newPoint<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>*iterations*<span class="nu0">2</span><span class="br0">&#41;</span>+<span class="br0">&#40;</span>curveId*iterations*<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,<span class="nu0">0.0</span>,<span class="br0">&#40;</span>newPoint<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>*iterations*<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw5">bpy</span>.<span class="me1">ops</span>.<span class="me1">transform</span>.<span class="me1">resize</span><span class="br0">&#40;</span>value=<span class="br0">&#40;</span>scaleFactor, scaleFactor, scaleFactor<span class="br0">&#41;</span>, constraint_axis=<span class="br0">&#40;</span><span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span><span class="br0">&#41;</span>, constraint_orientation=<span class="st0">'GLOBAL'</span>, mirror=<span class="kw2">False</span>, proportional=<span class="st0">'DISABLED'</span>, proportional_edit_falloff=<span class="st0">'SMOOTH'</span>, proportional_size=<span class="nu0">1</span>, snap=<span class="kw2">False</span>, snap_target=<span class="st0">'CLOSEST'</span>, snap_point=<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, snap_align=<span class="kw2">False</span>, snap_normal=<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, release_confirm=<span class="kw2">False</span><span class="br0">&#41;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean python code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">import bpy, math, mathutils

print('-- starting --')

# Kappa is the position of the handle on a circular curve
kappa = ((math.sqrt(2)-1)/3)*4

# A series of nice 2D bezier curves
beziers = {
	'linear': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.5,0.5)),
		'p2':mathutils.Vector((0.5,0.5)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'increasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector((1.0,(1.0-kappa))),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'decreasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.0,kappa)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'swoosh': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	}

# Find a point along a bezier curve
def findBezierPoint(r, curve):
	c = 3 * (curve['p1'] - curve['p0'])
	b = 3 * (curve['p2'] - curve['p1']) - c
	a = curve['p3'] - curve['p0'] - c - b

	r2 = r * r
	r3 = r2 * r

	return a * r3 + b * r2 + c * r + curve['p0']

# Lets make a curve go from 1.0 to 0.0
def invertCurve(curve):
	bezier = {
		'p0': mathutils.Vector(((1.0-curve['p3'][0]),curve['p3'][1])),
		'p1':mathutils.Vector(((1.0-curve['p2'][0]),curve['p2'][1])),
		'p2':mathutils.Vector(((1.0-curve['p1'][0]),curve['p1'][1])),
		'p3': mathutils.Vector(((1.0-curve['p0'][0]),curve['p0'][1])),
		}
	return bezier

# Make the intensity of a curve bigger or smaller
# Intensity has to be between 0.0 and 2.0 (1.0 is default)
def intensifyCurve(curve, intensity=1.0):

	bezier = {
		'p0': curve['p0'],
		'p1':curve['p1'],
		'p2':curve['p2'],
		'p3': curve['p3'],
		}

	if intensity > 1.0:
		if bezier['p1'][0]:
			dif = 1.0 - bezier['p1'][0]
			dif *= (intensity - 1.0)
			bezier['p1'][0] += dif

		if bezier['p1'][1]:
			dif = 1.0 - bezier['p1'][1]
			dif *= (intensity - 1.0)
			bezier['p1'][1] += dif

		if bezier['p2'][0] != 1.0:
			dif = bezier['p2'][0]
			dif *= (intensity - 1.0)
			bezier['p2'][0] -= dif

		if bezier['p2'][1] != 1.0:
			dif = bezier['p1'][1]
			dif *= (intensity - 1.0)
			bezier['p1'][1] -= dif

	elif intensity < 1.0:
		if bezier['p1'][0]:
			bezier['p1'][0] *= intensity

		if bezier['p1'][1]:
			bezier['p1'][1] *= intensity

		if bezier['p2'][0] != 1.0:
			dif = 1.0 - bezier['p2'][0]
			dif *= intensity
			bezier['p2'][0] += dif

		if bezier['p2'][1] != 1.0:
			dif = 1.0 - bezier['p2'][1]
			dif *= intensity
			bezier['p2'][1] += dif

	return bezier

# Now lets do something usefull!
# Lets say we want to scale something * 5.0 in 10 steps

# So we add a cube to do this to
bpy.ops.mesh.primitive_cube_add(view_align=False, enter_editmode=False, location=(0.0, 0.0, 0.0), rotation=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

# So now lets do multiple bezier curves
curves = [beziers['decreasing'],beziers['decreasing']]
intensities = [1.0,1.0]

# The number of steps we want to do this in
iterations = 10

# The size we start with is always 1 because we do it relative
startSize = 1.0 

# The size at the end of the process should be the start multiplied by this
scaleUp = 5.0

# We get the difference in scale so we can figure out each step
scaleDif = scaleUp - startSize

# This is here to see if the progression is correct
checkSize = startSize

# The number of iterations per curve
split = iterations / len(curves)
stepSize = (1.0/iterations) * len(curves)

# Lets do 10 steps
for i in range(iterations):

	# Before we do anything we find out where we should be at this point in time
	step = i

	# Figure out what curve we need to use
	curveId = math.floor(step/split)
	curve = curves[curveId]

	# Set the intensity for a curve
	curve = intensifyCurve(curve, intensities[curveId])

	# Make sure each curve is interpreted start to finish
	step -= (curveId * split)

	# Find out if we're even or odd!
	# To make transistions nice we invert the even curves
	odd = curveId % 2
	if odd:
		curve = invertCurve(curve)

	# Before we do anything we find out where we should be at this point in time
	curvePoint = stepSize * step

	# Find the point on the curve for the previous iteration in the loop
	currentPoint = findBezierPoint(curvePoint, curve)

	# This should tell us what the current size of the object is
	currentOffset = (scaleDif * currentPoint[1]) + startSize

	# Now lets find out how much bigger we need to make it
	# We do i+1 because then we start with 1 and end with 10 (0 is nothing anyway)
	step += 1

	# The point along the curve is always a nr between 0.0 and 1.0
	# So we divide 1 by the number of iterations to find the stepsize
	curvePoint =  stepSize * step

	# Find the point on the curve for this iteration in the loop
	newPoint = findBezierPoint(curvePoint, curve)

	# This should be the size we want to achieve
	newOffset = (scaleDif * newPoint[1]) + startSize

	scaleFactor = newOffset / currentOffset

	checkSize *= scaleFactor

	# Lets print out some values to check
	print('step',step)
	print('  stepSize',stepSize)
	print('  curve',curveId)
	print('  currentPoint', currentPoint[1])
	print('  newPoint', newPoint[1])
	print('  currentOffset',currentOffset)
	print('  newOffset', newOffset)
	print('  scaleFactor', scaleFactor)
	print('  checkSize',checkSize)

	# lets add some meshes so we can see the effect
	bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":True, "mode":1}, TRANSFORM_OT_translate={"value":(0, 0, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "release_confirm":False})
	bpy.context.active_object.location = (((newPoint[0]*iterations*2)+(curveId*iterations*2)),0.0,(newPoint[1]*iterations*2))
	bpy.ops.transform.resize(value=(scaleFactor, scaleFactor, scaleFactor), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), release_confirm=False)</textarea><pre class="python">import bpy, math, mathutils

print('-- starting --')

# Kappa is the position of the handle on a circular curve
kappa = ((math.sqrt(2)-1)/3)*4

# A series of nice 2D bezier curves
beziers = {
	'linear': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.5,0.5)),
		'p2':mathutils.Vector((0.5,0.5)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'increasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector((1.0,(1.0-kappa))),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'decreasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.0,kappa)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'swoosh': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	}

# Find a point along a bezier curve
def findBezierPoint(r, curve):
	c = 3 * (curve['p1'] - curve['p0'])
	b = 3 * (curve['p2'] - curve['p1']) - c
	a = curve['p3'] - curve['p0'] - c - b

	r2 = r * r
	r3 = r2 * r

	return a * r3 + b * r2 + c * r + curve['p0']

# Lets make a curve go from 1.0 to 0.0
def invertCurve(curve):
	bezier = {
		'p0': mathutils.Vector(((1.0-curve['p3'][0]),curve['p3'][1])),
		'p1':mathutils.Vector(((1.0-curve['p2'][0]),curve['p2'][1])),
		'p2':mathutils.Vector(((1.0-curve['p1'][0]),curve['p1'][1])),
		'p3': mathutils.Vector(((1.0-curve['p0'][0]),curve['p0'][1])),
		}
	return bezier

# Make the intensity of a curve bigger or smaller
# Intensity has to be between 0.0 and 2.0 (1.0 is default)
def intensifyCurve(curve, intensity=1.0):

	bezier = {
		'p0': curve['p0'],
		'p1':curve['p1'],
		'p2':curve['p2'],
		'p3': curve['p3'],
		}

	if intensity > 1.0:
		if bezier['p1'][0]:
			dif = 1.0 - bezier['p1'][0]
			dif *= (intensity - 1.0)
			bezier['p1'][0] += dif

		if bezier['p1'][1]:
			dif = 1.0 - bezier['p1'][1]
			dif *= (intensity - 1.0)
			bezier['p1'][1] += dif

		if bezier['p2'][0] != 1.0:
			dif = bezier['p2'][0]
			dif *= (intensity - 1.0)
			bezier['p2'][0] -= dif

		if bezier['p2'][1] != 1.0:
			dif = bezier['p1'][1]
			dif *= (intensity - 1.0)
			bezier['p1'][1] -= dif

	elif intensity < 1.0:
		if bezier['p1'][0]:
			bezier['p1'][0] *= intensity

		if bezier['p1'][1]:
			bezier['p1'][1] *= intensity

		if bezier['p2'][0] != 1.0:
			dif = 1.0 - bezier['p2'][0]
			dif *= intensity
			bezier['p2'][0] += dif

		if bezier['p2'][1] != 1.0:
			dif = 1.0 - bezier['p2'][1]
			dif *= intensity
			bezier['p2'][1] += dif

	return bezier

# Now lets do something usefull!
# Lets say we want to scale something * 5.0 in 10 steps

# So we add a cube to do this to
bpy.ops.mesh.primitive_cube_add(view_align=False, enter_editmode=False, location=(0.0, 0.0, 0.0), rotation=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

# So now lets do multiple bezier curves
curves = [beziers['decreasing'],beziers['decreasing']]
intensities = [1.0,1.0]

# The number of steps we want to do this in
iterations = 10

# The size we start with is always 1 because we do it relative
startSize = 1.0 

# The size at the end of the process should be the start multiplied by this
scaleUp = 5.0

# We get the difference in scale so we can figure out each step
scaleDif = scaleUp - startSize

# This is here to see if the progression is correct
checkSize = startSize

# The number of iterations per curve
split = iterations / len(curves)
stepSize = (1.0/iterations) * len(curves)

# Lets do 10 steps
for i in range(iterations):

	# Before we do anything we find out where we should be at this point in time
	step = i

	# Figure out what curve we need to use
	curveId = math.floor(step/split)
	curve = curves[curveId]

	# Set the intensity for a curve
	curve = intensifyCurve(curve, intensities[curveId])

	# Make sure each curve is interpreted start to finish
	step -= (curveId * split)

	# Find out if we're even or odd!
	# To make transistions nice we invert the even curves
	odd = curveId % 2
	if odd:
		curve = invertCurve(curve)

	# Before we do anything we find out where we should be at this point in time
	curvePoint = stepSize * step

	# Find the point on the curve for the previous iteration in the loop
	currentPoint = findBezierPoint(curvePoint, curve)

	# This should tell us what the current size of the object is
	currentOffset = (scaleDif * currentPoint[1]) + startSize

	# Now lets find out how much bigger we need to make it
	# We do i+1 because then we start with 1 and end with 10 (0 is nothing anyway)
	step += 1

	# The point along the curve is always a nr between 0.0 and 1.0
	# So we divide 1 by the number of iterations to find the stepsize
	curvePoint =  stepSize * step

	# Find the point on the curve for this iteration in the loop
	newPoint = findBezierPoint(curvePoint, curve)

	# This should be the size we want to achieve
	newOffset = (scaleDif * newPoint[1]) + startSize

	scaleFactor = newOffset / currentOffset

	checkSize *= scaleFactor

	# Lets print out some values to check
	print('step',step)
	print('  stepSize',stepSize)
	print('  curve',curveId)
	print('  currentPoint', currentPoint[1])
	print('  newPoint', newPoint[1])
	print('  currentOffset',currentOffset)
	print('  newOffset', newOffset)
	print('  scaleFactor', scaleFactor)
	print('  checkSize',checkSize)

	# lets add some meshes so we can see the effect
	bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":True, "mode":1}, TRANSFORM_OT_translate={"value":(0, 0, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "release_confirm":False})
	bpy.context.active_object.location = (((newPoint[0]*iterations*2)+(curveId*iterations*2)),0.0,(newPoint[1]*iterations*2))
	bpy.ops.transform.resize(value=(scaleFactor, scaleFactor, scaleFactor), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), release_confirm=False)</pre>
<h3>Another addition, having the 3rd and 4th curve go negative</h3>
<div class="code"><pre class="python"><ol><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw5">bpy</span>, <span class="kw3">math</span>, <span class="kw6">mathutils</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">'-- starting --'</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Kappa is the position of the handle on a circular curve</span></div></li><li class="li1"><div class="de1">kappa = <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw3">math</span>.<span class="me1">sqrt</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="br0">&#41;</span>/<span class="nu0">3</span><span class="br0">&#41;</span>*<span class="nu0">4</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># A series of nice 2D bezier curves</span></div></li><li class="li1"><div class="de1">beziers = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'linear'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.5</span>,<span class="nu0">0.5</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.5</span>,<span class="nu0">0.5</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'increasing'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span>kappa,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="br0">&#40;</span><span class="nu0">1.0</span>-kappa<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'decreasing'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,kappa<span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-kappa<span class="br0">&#41;</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'swoosh'</span>: <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0.0</span>,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span>kappa,<span class="nu0">0.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-kappa<span class="br0">&#41;</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>:<span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Find a point along a bezier curve</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> findBezierPoint<span class="br0">&#40;</span>r, <span class="kw6">curve</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; c = <span class="nu0">3</span> * <span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b = <span class="nu0">3</span> * <span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> - c</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; a = <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span> - <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span> - c - b</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; r2 = r * r</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; r3 = r2 * r</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> a * r3 + b * r2 + c * r + <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Lets make a curve go from 1.0 to 0.0</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> reverseCurve<span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; bezier = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1.0</span>-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> bezier</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Negate a curve</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> negateCurve<span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; bezier = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>,-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>,-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>,-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>: <span class="kw6">mathutils</span>.<span class="kw8">Vector</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>,-<span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> bezier</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Make the intensity of a curve bigger or smaller</span></div></li><li class="li1"><div class="de1"><span class="co1"># Intensity has to be between 0.0 and 2.0 (1.0 is default)</span></div></li><li class="li1"><div class="de1"><span class="kw1">def</span> intensifyCurve<span class="br0">&#40;</span><span class="kw6">curve</span>, intensity=<span class="nu0">1.0</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; bezier = <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p0'</span>: <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p0'</span><span class="br0">&#93;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p1'</span>: <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p2'</span>: <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'p3'</span>: <span class="kw6">curve</span><span class="br0">&#91;</span><span class="st0">'p3'</span><span class="br0">&#93;</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> intensity &gt; <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = <span class="nu0">1.0</span> - bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= <span class="br0">&#40;</span>intensity - <span class="nu0">1.0</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> += dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = <span class="nu0">1.0</span> - bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= <span class="br0">&#40;</span>intensity - <span class="nu0">1.0</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> += dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> != <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= <span class="br0">&#40;</span>intensity - <span class="nu0">1.0</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> -= dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> != <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= <span class="br0">&#40;</span>intensity - <span class="nu0">1.0</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> -= dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elif</span> intensity &lt; <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> *= intensity</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p1'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> *= intensity</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> != <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = <span class="nu0">1.0</span> - bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= intensity</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> += dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> != <span class="nu0">1.0</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif = <span class="nu0">1.0</span> - bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dif *= intensity</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bezier<span class="br0">&#91;</span><span class="st0">'p2'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> += dif</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> bezier</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Now lets do something usefull!</span></div></li><li class="li1"><div class="de1"><span class="co1"># Lets say we want to scale something * 5.0 in 10 steps</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># So we add a cube to do this to</span></div></li><li class="li1"><div class="de1"><span class="kw5">bpy</span>.<span class="me1">ops</span>.<span class="kw6">mesh</span>.<span class="me1">primitive_cube_add</span><span class="br0">&#40;</span>view_align=<span class="kw2">False</span>, enter_editmode=<span class="kw2">False</span>, location=<span class="br0">&#40;</span><span class="nu0">0.0</span>, <span class="nu0">0.0</span>, <span class="nu0">0.0</span><span class="br0">&#41;</span>, rotation=<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, layers=<span class="br0">&#40;</span><span class="kw2">True</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># So now lets do multiple bezier curves</span></div></li><li class="li1"><div class="de1">curves = <span class="br0">&#91;</span>beziers<span class="br0">&#91;</span><span class="st0">'swoosh'</span><span class="br0">&#93;</span>,beziers<span class="br0">&#91;</span><span class="st0">'decreasing'</span><span class="br0">&#93;</span>,beziers<span class="br0">&#91;</span><span class="st0">'increasing'</span><span class="br0">&#93;</span>,beziers<span class="br0">&#91;</span><span class="st0">'increasing'</span><span class="br0">&#93;</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">intensities = <span class="br0">&#91;</span><span class="nu0">1.0</span>,<span class="nu0">1.0</span>,<span class="nu0">1.0</span>,<span class="nu0">1.0</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The number of steps we want to do this in</span></div></li><li class="li1"><div class="de1">iterations = <span class="nu0">40</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The size we start with is always 1 because we do it relative</span></div></li><li class="li1"><div class="de1">startSize = <span class="nu0">1.0</span> </div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The size at the end of the process should be the start multiplied by this</span></div></li><li class="li1"><div class="de1">scaleUp = <span class="nu0">5.0</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># We get the difference in scale so we can figure out each step</span></div></li><li class="li1"><div class="de1">scaleDif = scaleUp - startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># This is here to see if the progression is correct</span></div></li><li class="li1"><div class="de1">checkSize = startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># The number of iterations per curve</span></div></li><li class="li1"><div class="de1"><span class="kw8">split</span> = iterations / <span class="kw2">len</span><span class="br0">&#40;</span>curves<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">stepSize = <span class="br0">&#40;</span><span class="nu0">1.0</span>/iterations<span class="br0">&#41;</span> * <span class="kw2">len</span><span class="br0">&#40;</span>curves<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Lets do 10 steps</span></div></li><li class="li1"><div class="de1"><span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span>iterations<span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Before we do anything we find out where we should be at this point in time</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; step = i</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Figure out what curve we need to use</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; curveId = <span class="kw3">math</span>.<span class="me1">floor</span><span class="br0">&#40;</span>step/<span class="kw8">split</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw6">curve</span> = curves<span class="br0">&#91;</span>curveId<span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Set the intensity for a curve</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw6">curve</span> = intensifyCurve<span class="br0">&#40;</span><span class="kw6">curve</span>, intensities<span class="br0">&#91;</span>curveId<span class="br0">&#93;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Make sure each curve is interpreted start to finish</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; step -= <span class="br0">&#40;</span>curveId * <span class="kw8">split</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># The current curve number for reversing and inversing should be 1-2-3-4</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># 1 is regular</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; curveNr = <span class="br0">&#40;</span>curveId <span class="nu0">+1</span><span class="br0">&#41;</span> - <span class="br0">&#40;</span>curveId//<span class="nu0">4</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># The second and third curves are reversed (the third makes things smaller)</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> curveNr <span class="kw1">is</span> <span class="nu0">2</span> <span class="kw1">or</span> curveNr <span class="kw1">is</span> <span class="nu0">3</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw6">curve</span> = reverseCurve<span class="br0">&#40;</span><span class="kw6">curve</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Before we do anything we find out where we should be at this point in time</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; curvePoint = stepSize * step</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Find the point on the curve for the previous iteration in the loop</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; currentPoint = findBezierPoint<span class="br0">&#40;</span>curvePoint, <span class="kw6">curve</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># This should tell us what the current size of the object is</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; currentOffset = <span class="br0">&#40;</span>scaleDif * currentPoint<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span> + startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Now lets find out how much bigger we need to make it</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># We do i+1 because then we start with 1 and end with 10 (0 is nothing anyway)</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; step += <span class="nu0">1</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># The point along the curve is always a nr between 0.0 and 1.0</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># So we divide 1 by the number of iterations to find the stepsize</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; curvePoint = &nbsp;stepSize * step</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Find the point on the curve for this iteration in the loop</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; newPoint = findBezierPoint<span class="br0">&#40;</span>curvePoint, <span class="kw6">curve</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># This should be the size we want to achieve</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; newOffset = <span class="br0">&#40;</span>scaleDif * newPoint<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span> + startSize</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; scaleFactor = newOffset / currentOffset</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; checkSize *= scaleFactor</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Lets print out some values to check</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">''</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="br0">&#40;</span>i<span class="nu0">+1</span><span class="br0">&#41;</span>,step,<span class="st0">'curve'</span>,curveNr<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#print(' &nbsp;stepSize',stepSize)</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;currentPoint'</span>, <span class="kw2">round</span><span class="br0">&#40;</span>currentPoint<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>,<span class="nu0">5</span><span class="br0">&#41;</span>,<span class="st0">'newPoint'</span>,<span class="kw2">round</span><span class="br0">&#40;</span>newPoint<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#print(' &nbsp;currentOffset',currentOffset)</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#print(' &nbsp;newOffset', newOffset)</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;scaleFactor'</span>, scaleFactor<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span><span class="st0">' &nbsp;checkSize'</span>,checkSize<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># lets add some meshes so we can see the effect</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw5">bpy</span>.<span class="me1">ops</span>.<span class="kw2">object</span>.<span class="me1">duplicate_move</span><span class="br0">&#40;</span>OBJECT_OT_duplicate=<span class="br0">&#123;</span><span class="st0">&quot;linked&quot;</span>:<span class="kw2">True</span>, <span class="st0">&quot;mode&quot;</span>:<span class="nu0">1</span><span class="br0">&#125;</span>, TRANSFORM_OT_translate=<span class="br0">&#123;</span><span class="st0">&quot;value&quot;</span>:<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, <span class="st0">&quot;constraint_axis&quot;</span>:<span class="br0">&#40;</span><span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span><span class="br0">&#41;</span>, <span class="st0">&quot;constraint_orientation&quot;</span>:<span class="st0">'GLOBAL'</span>, <span class="st0">&quot;mirror&quot;</span>:<span class="kw2">False</span>, <span class="st0">&quot;proportional&quot;</span>:<span class="st0">'DISABLED'</span>, <span class="st0">&quot;proportional_edit_falloff&quot;</span>:<span class="st0">'SMOOTH'</span>, <span class="st0">&quot;proportional_size&quot;</span>:<span class="nu0">1</span>, <span class="st0">&quot;snap&quot;</span>:<span class="kw2">False</span>, <span class="st0">&quot;snap_target&quot;</span>:<span class="st0">'CLOSEST'</span>, <span class="st0">&quot;snap_point&quot;</span>:<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, <span class="st0">&quot;snap_align&quot;</span>:<span class="kw2">False</span>, <span class="st0">&quot;snap_normal&quot;</span>:<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, <span class="st0">&quot;release_confirm&quot;</span>:<span class="kw2">False</span><span class="br0">&#125;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; xPos = <span class="br0">&#40;</span><span class="br0">&#40;</span>newPoint<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>*iterations*<span class="nu0">2</span><span class="br0">&#41;</span>+<span class="br0">&#40;</span>curveId*iterations*<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; zPos = <span class="br0">&#40;</span>newPoint<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>*iterations*<span class="nu0">2</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> curveNr == <span class="nu0">3</span> <span class="kw1">or</span> curveNr == <span class="nu0">4</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zPos -= iterations*<span class="nu0">2</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw5">bpy</span>.<span class="me1">context</span>.<span class="me1">active_object</span>.<span class="me1">location</span> = <span class="br0">&#40;</span>xPos,<span class="nu0">0.0</span>,zPos<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw5">bpy</span>.<span class="me1">ops</span>.<span class="me1">transform</span>.<span class="me1">resize</span><span class="br0">&#40;</span>value=<span class="br0">&#40;</span>scaleFactor, scaleFactor, scaleFactor<span class="br0">&#41;</span>, constraint_axis=<span class="br0">&#40;</span><span class="kw2">False</span>, <span class="kw2">False</span>, <span class="kw2">False</span><span class="br0">&#41;</span>, constraint_orientation=<span class="st0">'GLOBAL'</span>, mirror=<span class="kw2">False</span>, proportional=<span class="st0">'DISABLED'</span>, proportional_edit_falloff=<span class="st0">'SMOOTH'</span>, proportional_size=<span class="nu0">1</span>, snap=<span class="kw2">False</span>, snap_target=<span class="st0">'CLOSEST'</span>, snap_point=<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, snap_align=<span class="kw2">False</span>, snap_normal=<span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>, release_confirm=<span class="kw2">False</span><span class="br0">&#41;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean python code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">import bpy, math, mathutils

print('-- starting --')

# Kappa is the position of the handle on a circular curve
kappa = ((math.sqrt(2)-1)/3)*4

# A series of nice 2D bezier curves
beziers = {
	'linear': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.5,0.5)),
		'p2':mathutils.Vector((0.5,0.5)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'increasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector((1.0,(1.0-kappa))),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'decreasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.0,kappa)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'swoosh': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	}

# Find a point along a bezier curve
def findBezierPoint(r, curve):
	c = 3 * (curve['p1'] - curve['p0'])
	b = 3 * (curve['p2'] - curve['p1']) - c
	a = curve['p3'] - curve['p0'] - c - b

	r2 = r * r
	r3 = r2 * r

	return a * r3 + b * r2 + c * r + curve['p0']

# Lets make a curve go from 1.0 to 0.0
def reverseCurve(curve):
	bezier = {
		'p0': mathutils.Vector(((1.0-curve['p3'][0]),curve['p3'][1])),
		'p1': mathutils.Vector(((1.0-curve['p2'][0]),curve['p2'][1])),
		'p2': mathutils.Vector(((1.0-curve['p1'][0]),curve['p1'][1])),
		'p3': mathutils.Vector(((1.0-curve['p0'][0]),curve['p0'][1])),
		}
	return bezier

# Negate a curve
def negateCurve(curve):
	bezier = {
		'p0': mathutils.Vector((curve['p0'][0],-curve['p0'][1])),
		'p1': mathutils.Vector((curve['p1'][0],-curve['p1'][1])),
		'p2': mathutils.Vector((curve['p2'][0],-curve['p2'][1])),
		'p3': mathutils.Vector((curve['p3'][0],-curve['p3'][1])),
		}
	return bezier

# Make the intensity of a curve bigger or smaller
# Intensity has to be between 0.0 and 2.0 (1.0 is default)
def intensifyCurve(curve, intensity=1.0):

	bezier = {
		'p0': curve['p0'],
		'p1': curve['p1'],
		'p2': curve['p2'],
		'p3': curve['p3'],
		}

	if intensity > 1.0:
		if bezier['p1'][0]:
			dif = 1.0 - bezier['p1'][0]
			dif *= (intensity - 1.0)
			bezier['p1'][0] += dif

		if bezier['p1'][1]:
			dif = 1.0 - bezier['p1'][1]
			dif *= (intensity - 1.0)
			bezier['p1'][1] += dif

		if bezier['p2'][0] != 1.0:
			dif = bezier['p2'][0]
			dif *= (intensity - 1.0)
			bezier['p2'][0] -= dif

		if bezier['p2'][1] != 1.0:
			dif = bezier['p1'][1]
			dif *= (intensity - 1.0)
			bezier['p1'][1] -= dif

	elif intensity < 1.0:
		if bezier['p1'][0]:
			bezier['p1'][0] *= intensity

		if bezier['p1'][1]:
			bezier['p1'][1] *= intensity

		if bezier['p2'][0] != 1.0:
			dif = 1.0 - bezier['p2'][0]
			dif *= intensity
			bezier['p2'][0] += dif

		if bezier['p2'][1] != 1.0:
			dif = 1.0 - bezier['p2'][1]
			dif *= intensity
			bezier['p2'][1] += dif

	return bezier

# Now lets do something usefull!
# Lets say we want to scale something * 5.0 in 10 steps

# So we add a cube to do this to
bpy.ops.mesh.primitive_cube_add(view_align=False, enter_editmode=False, location=(0.0, 0.0, 0.0), rotation=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

# So now lets do multiple bezier curves
curves = [beziers['swoosh'],beziers['decreasing'],beziers['increasing'],beziers['increasing']]
intensities = [1.0,1.0,1.0,1.0]

# The number of steps we want to do this in
iterations = 40

# The size we start with is always 1 because we do it relative
startSize = 1.0 

# The size at the end of the process should be the start multiplied by this
scaleUp = 5.0

# We get the difference in scale so we can figure out each step
scaleDif = scaleUp - startSize

# This is here to see if the progression is correct
checkSize = startSize

# The number of iterations per curve
split = iterations / len(curves)
stepSize = (1.0/iterations) * len(curves)

# Lets do 10 steps
for i in range(iterations):

	# Before we do anything we find out where we should be at this point in time
	step = i

	# Figure out what curve we need to use
	curveId = math.floor(step/split)
	curve = curves[curveId]

	# Set the intensity for a curve
	curve = intensifyCurve(curve, intensities[curveId])

	# Make sure each curve is interpreted start to finish
	step -= (curveId * split)

	# The current curve number for reversing and inversing should be 1-2-3-4
	# 1 is regular
	curveNr = (curveId +1) - (curveId//4)

	# The second and third curves are reversed (the third makes things smaller)
	if curveNr is 2 or curveNr is 3:
		curve = reverseCurve(curve)

	# Before we do anything we find out where we should be at this point in time
	curvePoint = stepSize * step

	# Find the point on the curve for the previous iteration in the loop
	currentPoint = findBezierPoint(curvePoint, curve)

	# This should tell us what the current size of the object is
	currentOffset = (scaleDif * currentPoint[1]) + startSize

	# Now lets find out how much bigger we need to make it
	# We do i+1 because then we start with 1 and end with 10 (0 is nothing anyway)
	step += 1

	# The point along the curve is always a nr between 0.0 and 1.0
	# So we divide 1 by the number of iterations to find the stepsize
	curvePoint =  stepSize * step

	# Find the point on the curve for this iteration in the loop
	newPoint = findBezierPoint(curvePoint, curve)

	# This should be the size we want to achieve
	newOffset = (scaleDif * newPoint[1]) + startSize

	scaleFactor = newOffset / currentOffset

	checkSize *= scaleFactor

	# Lets print out some values to check
	print('')
	print((i+1),step,'curve',curveNr)
	#print('  stepSize',stepSize)
	print('  currentPoint', round(currentPoint[1],5),'newPoint',round(newPoint[1]))
	#print('  currentOffset',currentOffset)
	#print('  newOffset', newOffset)
	print('  scaleFactor', scaleFactor)
	print('  checkSize',checkSize)

	# lets add some meshes so we can see the effect
	bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":True, "mode":1}, TRANSFORM_OT_translate={"value":(0, 0, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "release_confirm":False})

	xPos = ((newPoint[0]*iterations*2)+(curveId*iterations*2))
	zPos = (newPoint[1]*iterations*2)

	if curveNr == 3 or curveNr == 4:
		zPos -= iterations*2

	bpy.context.active_object.location = (xPos,0.0,zPos)
	bpy.ops.transform.resize(value=(scaleFactor, scaleFactor, scaleFactor), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), release_confirm=False)</textarea><pre class="python">import bpy, math, mathutils

print('-- starting --')

# Kappa is the position of the handle on a circular curve
kappa = ((math.sqrt(2)-1)/3)*4

# A series of nice 2D bezier curves
beziers = {
	'linear': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.5,0.5)),
		'p2':mathutils.Vector((0.5,0.5)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'increasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector((1.0,(1.0-kappa))),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'decreasing': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((0.0,kappa)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	'swoosh': {
		'p0': mathutils.Vector((0.0,0.0)),
		'p1':mathutils.Vector((kappa,0.0)),
		'p2':mathutils.Vector(((1.0-kappa),1.0)),
		'p3':mathutils.Vector((1.0,1.0)),
		},
	}

# Find a point along a bezier curve
def findBezierPoint(r, curve):
	c = 3 * (curve['p1'] - curve['p0'])
	b = 3 * (curve['p2'] - curve['p1']) - c
	a = curve['p3'] - curve['p0'] - c - b

	r2 = r * r
	r3 = r2 * r

	return a * r3 + b * r2 + c * r + curve['p0']

# Lets make a curve go from 1.0 to 0.0
def reverseCurve(curve):
	bezier = {
		'p0': mathutils.Vector(((1.0-curve['p3'][0]),curve['p3'][1])),
		'p1': mathutils.Vector(((1.0-curve['p2'][0]),curve['p2'][1])),
		'p2': mathutils.Vector(((1.0-curve['p1'][0]),curve['p1'][1])),
		'p3': mathutils.Vector(((1.0-curve['p0'][0]),curve['p0'][1])),
		}
	return bezier

# Negate a curve
def negateCurve(curve):
	bezier = {
		'p0': mathutils.Vector((curve['p0'][0],-curve['p0'][1])),
		'p1': mathutils.Vector((curve['p1'][0],-curve['p1'][1])),
		'p2': mathutils.Vector((curve['p2'][0],-curve['p2'][1])),
		'p3': mathutils.Vector((curve['p3'][0],-curve['p3'][1])),
		}
	return bezier

# Make the intensity of a curve bigger or smaller
# Intensity has to be between 0.0 and 2.0 (1.0 is default)
def intensifyCurve(curve, intensity=1.0):

	bezier = {
		'p0': curve['p0'],
		'p1': curve['p1'],
		'p2': curve['p2'],
		'p3': curve['p3'],
		}

	if intensity > 1.0:
		if bezier['p1'][0]:
			dif = 1.0 - bezier['p1'][0]
			dif *= (intensity - 1.0)
			bezier['p1'][0] += dif

		if bezier['p1'][1]:
			dif = 1.0 - bezier['p1'][1]
			dif *= (intensity - 1.0)
			bezier['p1'][1] += dif

		if bezier['p2'][0] != 1.0:
			dif = bezier['p2'][0]
			dif *= (intensity - 1.0)
			bezier['p2'][0] -= dif

		if bezier['p2'][1] != 1.0:
			dif = bezier['p1'][1]
			dif *= (intensity - 1.0)
			bezier['p1'][1] -= dif

	elif intensity < 1.0:
		if bezier['p1'][0]:
			bezier['p1'][0] *= intensity

		if bezier['p1'][1]:
			bezier['p1'][1] *= intensity

		if bezier['p2'][0] != 1.0:
			dif = 1.0 - bezier['p2'][0]
			dif *= intensity
			bezier['p2'][0] += dif

		if bezier['p2'][1] != 1.0:
			dif = 1.0 - bezier['p2'][1]
			dif *= intensity
			bezier['p2'][1] += dif

	return bezier

# Now lets do something usefull!
# Lets say we want to scale something * 5.0 in 10 steps

# So we add a cube to do this to
bpy.ops.mesh.primitive_cube_add(view_align=False, enter_editmode=False, location=(0.0, 0.0, 0.0), rotation=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

# So now lets do multiple bezier curves
curves = [beziers['swoosh'],beziers['decreasing'],beziers['increasing'],beziers['increasing']]
intensities = [1.0,1.0,1.0,1.0]

# The number of steps we want to do this in
iterations = 40

# The size we start with is always 1 because we do it relative
startSize = 1.0 

# The size at the end of the process should be the start multiplied by this
scaleUp = 5.0

# We get the difference in scale so we can figure out each step
scaleDif = scaleUp - startSize

# This is here to see if the progression is correct
checkSize = startSize

# The number of iterations per curve
split = iterations / len(curves)
stepSize = (1.0/iterations) * len(curves)

# Lets do 10 steps
for i in range(iterations):

	# Before we do anything we find out where we should be at this point in time
	step = i

	# Figure out what curve we need to use
	curveId = math.floor(step/split)
	curve = curves[curveId]

	# Set the intensity for a curve
	curve = intensifyCurve(curve, intensities[curveId])

	# Make sure each curve is interpreted start to finish
	step -= (curveId * split)

	# The current curve number for reversing and inversing should be 1-2-3-4
	# 1 is regular
	curveNr = (curveId +1) - (curveId//4)

	# The second and third curves are reversed (the third makes things smaller)
	if curveNr is 2 or curveNr is 3:
		curve = reverseCurve(curve)

	# Before we do anything we find out where we should be at this point in time
	curvePoint = stepSize * step

	# Find the point on the curve for the previous iteration in the loop
	currentPoint = findBezierPoint(curvePoint, curve)

	# This should tell us what the current size of the object is
	currentOffset = (scaleDif * currentPoint[1]) + startSize

	# Now lets find out how much bigger we need to make it
	# We do i+1 because then we start with 1 and end with 10 (0 is nothing anyway)
	step += 1

	# The point along the curve is always a nr between 0.0 and 1.0
	# So we divide 1 by the number of iterations to find the stepsize
	curvePoint =  stepSize * step

	# Find the point on the curve for this iteration in the loop
	newPoint = findBezierPoint(curvePoint, curve)

	# This should be the size we want to achieve
	newOffset = (scaleDif * newPoint[1]) + startSize

	scaleFactor = newOffset / currentOffset

	checkSize *= scaleFactor

	# Lets print out some values to check
	print('')
	print((i+1),step,'curve',curveNr)
	#print('  stepSize',stepSize)
	print('  currentPoint', round(currentPoint[1],5),'newPoint',round(newPoint[1]))
	#print('  currentOffset',currentOffset)
	#print('  newOffset', newOffset)
	print('  scaleFactor', scaleFactor)
	print('  checkSize',checkSize)

	# lets add some meshes so we can see the effect
	bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":True, "mode":1}, TRANSFORM_OT_translate={"value":(0, 0, 0), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "release_confirm":False})

	xPos = ((newPoint[0]*iterations*2)+(curveId*iterations*2))
	zPos = (newPoint[1]*iterations*2)

	if curveNr == 3 or curveNr == 4:
		zPos -= iterations*2

	bpy.context.active_object.location = (xPos,0.0,zPos)
	bpy.ops.transform.resize(value=(scaleFactor, scaleFactor, scaleFactor), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), release_confirm=False)</pre>
<div class="gallery"><ul><li><a href="http://www.macouno.com/wp-content/uploads/2011/01/bezier_curves.jpg" class="thumb" title="bezier_curves" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2011/01/bezier_curves-80x320.jpg" alt="bezier_curves" title="bezier_curves" /></a></li><li><a href="http://www.macouno.com/wp-content/uploads/2011/01/bezier_curves1.jpg" class="thumb" title="bezier_curves" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2011/01/bezier_curves1-80x320.jpg" alt="bezier_curves" title="bezier_curves" /></a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2011/01/31/using-bezier-math-in-blender-with-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using sine waves</title>
		<link>http://www.macouno.com/2011/01/24/using-sine-waves/</link>
		<comments>http://www.macouno.com/2011/01/24/using-sine-waves/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 10:46:13 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=1418</guid>
		<description><![CDATA[I&#8217;ve recently been using some sine wave math to get nice and smooth results in python for Blender 3D. This page is merely here so I don&#8217;t forget what I did, and why. The basics The math itself is really simple&#8230; as you can see in the image above&#8230; the trick is to use this [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently been using some sine wave math to get nice and smooth results in python for Blender 3D. This page is merely here so I don&#8217;t forget what I did, and why.</p>
<h3>The basics</h3>
<p><a href="http://www.macouno.com/wp-content/uploads/2011/01/sine.png"><img class="alignnone size-full wp-image-1420" title="sine" src="http://www.macouno.com/wp-content/uploads/2011/01/sine.png" alt="" width="320" height="240" /></a></p>
<p>The math itself is really simple&#8230; as you can see in the image above&#8230; the trick is to use this stuff in a &#8220;math loop&#8221;.</p>
<h3>A basic loop moving through a sine wave</h3>
<div class="code"><pre class="python"><ol><li class="li1"><div class="de1"><span class="co1"># Get the math module</span></div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">math</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Loop twenty one times (21 because then it starts at 0 and ends with i as 20)</span></div></li><li class="li1"><div class="de1"><span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">21</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Make a value between 0.0 and 2.0</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; x = i * <span class="nu0">0.1</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Get the y value</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; y = <span class="kw3">math</span>.<span class="me1">sin</span><span class="br0">&#40;</span><span class="kw3">math</span>.<span class="me1">pi</span> * x<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Print it out</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span>y<span class="br0">&#41;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean python code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;"># Get the math module
import math

# Loop twenty one times (21 because then it starts at 0 and ends with i as 20)
for i in range(21):

	# Make a value between 0.0 and 2.0
	x = i * 0.1

	# Get the y value
	y = math.sin(math.pi * x)

	# Print it out
	print(y)</textarea><pre class="python"># Get the math module
import math

# Loop twenty one times (21 because then it starts at 0 and ends with i as 20)
for i in range(21):

	# Make a value between 0.0 and 2.0
	x = i * 0.1

	# Get the y value
	y = math.sin(math.pi * x)

	# Print it out
	print(y)</pre>
<h3>A nice increasing curve</h3>
<div class="code"><pre class="python"><ol><li class="li1"><div class="de1"><span class="co1"># Get the math module</span></div></li><li class="li1"><div class="de1"><span class="kw1">import</span> <span class="kw3">math</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Make a factor so we know how much of an increase each step is</span></div></li><li class="li1"><div class="de1"><span class="co1"># in this case we want to increase the x value 0.5 in ten steps</span></div></li><li class="li1"><div class="de1">factor = <span class="br0">&#40;</span><span class="nu0">0.5</span> / <span class="nu0">10</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1"># Loop twenty times (range should be 11 so we end up with i as 10)</span></div></li><li class="li1"><div class="de1"><span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">11</span><span class="br0">&#41;</span>:</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># find out the x position for this value</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; x = i * factor</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Multiply by pi</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; x = x * <span class="kw3">math</span>.<span class="me1">pi</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># but now we add 1.5 * pi because we want the last quarter of the curve</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; x = x + <span class="br0">&#40;</span><span class="nu0">1.5</span> * <span class="kw3">math</span>.<span class="me1">pi</span><span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Get the y value</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; y = <span class="kw3">math</span>.<span class="me1">sin</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># And because we don't want a curve from -1 to 0, but from 0 to 1 we add 1</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; y = y + <span class="nu0">1</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Print it out</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span><span class="br0">&#40;</span>y<span class="br0">&#41;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean python code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;"># Get the math module
import math

# Make a factor so we know how much of an increase each step is
# in this case we want to increase the x value 0.5 in ten steps
factor = (0.5 / 10)

# Loop twenty times (range should be 11 so we end up with i as 10)
for i in range(11):

	# find out the x position for this value
	x = i * factor

	# Multiply by pi
	x = x * math.pi

	# but now we add 1.5 * pi because we want the last quarter of the curve
	x = x + (1.5 * math.pi)

	# Get the y value
	y = math.sin(x)

	# And because we don't want a curve from -1 to 0, but from 0 to 1 we add 1
	y = y + 1

	# Print it out
	print(y)</textarea><pre class="python"># Get the math module
import math

# Make a factor so we know how much of an increase each step is
# in this case we want to increase the x value 0.5 in ten steps
factor = (0.5 / 10)

# Loop twenty times (range should be 11 so we end up with i as 10)
for i in range(11):

	# find out the x position for this value
	x = i * factor

	# Multiply by pi
	x = x * math.pi

	# but now we add 1.5 * pi because we want the last quarter of the curve
	x = x + (1.5 * math.pi)

	# Get the y value
	y = math.sin(x)

	# And because we don't want a curve from -1 to 0, but from 0 to 1 we add 1
	y = y + 1

	# Print it out
	print(y)</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2011/01/24/using-sine-waves/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Normal smooth method</title>
		<link>http://www.macouno.com/2010/03/17/normal-smooth-method/</link>
		<comments>http://www.macouno.com/2010/03/17/normal-smooth-method/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 20:33:56 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[Math]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=507</guid>
		<description><![CDATA[On this post I&#8217;ll try to explain how the method for the Normal Smooth script works. Concept The idea is to reposition verticles so your mesh ends up nice and smooth. Of course there is already a function in Blender that does it, but that doesn&#8217;t take the actual &#8220;surface&#8221; of the mesh into account. [...]]]></description>
			<content:encoded><![CDATA[<p>On this post I&#8217;ll try to explain how the method for the Normal Smooth script works.</p>
<hr />
<h3>Concept</h3>
<p>The idea is to reposition verticles so your mesh ends up nice and smooth. Of course there is already a function in Blender that does it, but that doesn&#8217;t take the actual &#8220;surface&#8221; of the mesh into account. So say you have a part of a perfect sphere selected, and you run the current internal function, it would flatten that selection, or even make it concave (hollow). That&#8217;s what we don&#8217;t want. In stead if you try to smooth a perfect sphere, it should not change anything. You can&#8217;t get smoother than a sphere!</p>
<p>See below here&#8230; that&#8217;s not nicely smoothed!<br />
<a href="http://www.macouno.com/wp-content/uploads/2010/03/wrongsmooth.jpg"><img class="alignnone size-full wp-image-509" title="wrongsmooth" src="http://www.macouno.com/wp-content/uploads/2010/03/wrongsmooth.jpg" alt="" width="410" height="275" /></a></p>
<hr />
<h3>Smoothing the normal way</h3>
<p>I&#8217;ll explain the concept in 2D. Lets say we want to smooth the position of vertex <strong>A </strong>and it&#8217;s connected to vertex <strong>B</strong> and <strong>C</strong>. Then we get the vertex normals for <strong>B</strong> and <strong>C</strong>. We then rotate those normal vectors 90 degrees towards <strong>A</strong> and make them half the length of the distance between that specific vert (<strong>B</strong> or <strong>C</strong>) and <strong>A</strong>. Once we have those, we find the points at the ends of those two vectors and place vert <strong>A</strong> at the midpoint between them.</p>
<p>But let me explain with a picture, which should help.</p>
<p><a href="http://www.macouno.com/wp-content/uploads/2010/03/diagram.png"><img class="alignnone size-full wp-image-508" title="diagram" src="http://www.macouno.com/wp-content/uploads/2010/03/diagram.png" alt="" width="640" height="300" /></a></p>
<hr />
<h3>That&#8217;s just the basics</h3>
<p>Of course there is a lot more that you can do with a script. Like looking further along the surface and using more normals. Also in 3d at times you have quads and you need to figure out what you want to do with the vert at the far end of the quad. Having non manifold meshes can be tricky too.</p>
<p>At least I hope this explains the idea a bit, and as ideas go&#8230;. it&#8217;s not too bad</p>
<p>Dolf</p>
<div class="gallery"><ul><li><a href="http://www.macouno.com/wp-content/uploads/2010/03/diagram.png" class="thumb" title="diagram" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2010/03/diagram-100x46.png" alt="diagram" title="diagram" /></a></li><li><a href="http://www.macouno.com/wp-content/uploads/2010/03/wrongsmooth.jpg" class="thumb" title="wrongsmooth" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2010/03/wrongsmooth-100x67.jpg" alt="wrongsmooth" title="wrongsmooth" /></a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2010/03/17/normal-smooth-method/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mechanics math</title>
		<link>http://www.macouno.com/2010/03/17/mechanics-math/</link>
		<comments>http://www.macouno.com/2010/03/17/mechanics-math/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 20:24:02 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=488</guid>
		<description><![CDATA[Here so I don&#8217;t have to search the internet to look for this stuff. I&#8217;m working on some physics things for my swarm AI&#8230; tricky since I haven&#8217;t done any of this for ehm&#8230; 15 years or so. Second law of Newton F = m * a a = F/m m = F/a F is force in newtons [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Here so I don&#8217;t have to search the internet to look for this stuff.</strong></p>
<p>I&#8217;m working on some physics things for my swarm AI&#8230; tricky since I haven&#8217;t done any of this for ehm&#8230; 15 years or so.</p>
<hr />
<h3>Second law of Newton</h3>
<p><strong>F = m * a<br />
a = F/m<br />
m = F/a</strong></p>
<p><strong>F</strong> is force in newtons<br />
<strong>m</strong> is mass in kilograms<br />
<strong>a</strong> is acceleration in meters per second</p>
]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2010/03/17/mechanics-math/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finding mesh angles</title>
		<link>http://www.macouno.com/2010/03/17/finding-mesh-angles/</link>
		<comments>http://www.macouno.com/2010/03/17/finding-mesh-angles/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 19:26:13 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[Math]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=410</guid>
		<description><![CDATA[Here I&#8217;ll try to explain a method for finding out the angle of a mesh at a specific point/edge in python. This method can for instance be used to create effects like with the ma baker or ma self scripts; Finding the angle between two faces in Blender Now this isn&#8217;t really complicated. Lets say you [...]]]></description>
			<content:encoded><![CDATA[<p>Here I&#8217;ll try to explain a method for finding out the angle of a mesh at a specific point/edge in python.</p>
<p>This method can for instance be used to create effects like with the ma baker or ma self scripts;</p>
<hr />
<h2>Finding the angle between two faces in Blender</h2>
<p>Now this isn&#8217;t really complicated.</p>
<p>Lets say you retrieve two faces from Blender&#8217;s python API that are connected by an edge.</p>
<p>Lets call them <strong>face1</strong> and <strong>face2</strong> and <strong>face1.no</strong> retrieves the face normal of <strong>face1</strong>.</p>
<p><a href="http://www.macouno.com/wp-content/uploads/2010/03/anglebetweenfaces.gif"><img class="alignnone size-full wp-image-411" title="anglebetweenfaces" src="http://www.macouno.com/wp-content/uploads/2010/03/anglebetweenfaces.gif" alt="" width="300" height="200" /></a></p>
<p>Then we can simply do the following to find the angle:</p>
<div class="code"><pre class="python"><ol><li class="li1"><div class="de1">myAngle = <span class="kw6">Mathutils</span>.<span class="kw8">AngleBetweenVecs</span><span class="br0">&#40;</span>face1.<span class="me1">no</span>, face2.<span class="me1">no</span><span class="br0">&#41;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean python code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">myAngle = Mathutils.AngleBetweenVecs(face1.no, face2.no)</textarea><pre class="python">myAngle = Mathutils.AngleBetweenVecs(face1.no, face2.no)</pre>
<p>The result though is only an angle between 0 and 90 degrees, to find out if that is positive or negative continue reading below.</p>
<hr />
<h2>Finding out whether the angle between two faces is convex or concave</h2>
<p>A lot of the time you also want to know whether the angle is concave or convex (positive or negative).</p>
<p>To get that we get the vector from the midpoint of <strong>face1</strong> to the midpoint of <strong>face2</strong>.</p>
<p>The midpoint of a face is retrieved by getting <strong>face1.cent</strong>.</p>
<p>Then we get the dot product of the face normal of <strong>face1</strong> and the vector we just retrieved.</p>
<p><a href="http://www.macouno.com/wp-content/uploads/2010/03/dotbetweenfaces.gif"><img class="alignnone size-full wp-image-412" title="dotbetweenfaces" src="http://www.macouno.com/wp-content/uploads/2010/03/dotbetweenfaces.gif" alt="" width="500" height="200" /></a></p>
<p>In python that could be:</p>
<div class="code"><pre class="python"><ol><li class="li1"><div class="de1">dotProduct = <span class="kw6">Mathutils</span>.<span class="kw8">DotVecs</span><span class="br0">&#40;</span>face1.<span class="me1">no</span>, <span class="br0">&#40;</span>face2.<span class="me1">cent</span> - face1.<span class="me1">cent</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean python code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">dotProduct = Mathutils.DotVecs(face1.no, (face2.cent - face1.cent))</textarea><pre class="python">dotProduct = Mathutils.DotVecs(face1.no, (face2.cent - face1.cent))</pre>
<p>The resulting dot product will be either positive or negative depending on whether the angle is concave or convex.</p>
<div class="gallery"><ul><li><a href="http://www.macouno.com/wp-content/uploads/2010/03/anglebetweenfaces.gif" class="thumb" title="anglebetweenfaces" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2010/03/anglebetweenfaces-100x66.gif" alt="anglebetweenfaces" title="anglebetweenfaces" /></a></li><li><a href="http://www.macouno.com/wp-content/uploads/2010/03/dotbetweenfaces.gif" class="thumb" title="dotbetweenfaces" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2010/03/dotbetweenfaces-100x40.gif" alt="dotbetweenfaces" title="dotbetweenfaces" /></a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2010/03/17/finding-mesh-angles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Angle math</title>
		<link>http://www.macouno.com/2010/03/17/angle-math/</link>
		<comments>http://www.macouno.com/2010/03/17/angle-math/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 13:00:21 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[Math]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=316</guid>
		<description><![CDATA[This is just here so I don&#8217;t forget ;) (small characters here refer to angles, capitals to lengths of sides) An oblique triangle A triangle without a 90 degree angle Python equivalents of the above math are for instance (untested): A = math.sin(a) / (math.sin(b)/B) B = math.sin(b) / (math.sin(c)/C) C = math.sin(c) / (math.sin(a)/A) [...]]]></description>
			<content:encoded><![CDATA[<p>This is just here so I don&#8217;t forget ;)</p>
<p>(small characters here refer to angles, capitals to lengths of sides)</p>
<hr />
<h3>An oblique triangle</h3>
<p>A triangle without a 90 degree angle</p>
<p><a href="http://www.macouno.com/wp-content/uploads/2010/03/math_oblique.gif"><img class="alignnone size-full wp-image-319" title="math_oblique" src="http://www.macouno.com/wp-content/uploads/2010/03/math_oblique.gif" alt="" width="500" height="180" /></a></p>
<p>Python equivalents of the above math are for instance (untested):</p>
<p>A = math.sin(a) / (math.sin(b)/B)</p>
<p>B = math.sin(b) / (math.sin(c)/C)</p>
<p>C = math.sin(c) / (math.sin(a)/A)</p>
<hr />
<h3>A right angle triangle</h3>
<p>A triangle with a single 90 degree angle (a in this case)</p>
<p><a href="http://www.macouno.com/wp-content/uploads/2010/03/math_right.gif"><img class="alignnone size-full wp-image-320" title="math_right" src="http://www.macouno.com/wp-content/uploads/2010/03/math_right.gif" alt="" width="500" height="211" /></a></p>
<p>Python equivalents of the above math are for instance:</p>
<p>c = math.asin(C/A)</p>
<p>c = math.acos(A/C)</p>
<p>c = math.atan(C/B)</p>
<p>A = math.sqrt(B*B+C*C)</p>
<p><strong>Remember soscastoa!</strong></p>
<div class="gallery"><ul><li><a href="http://www.macouno.com/wp-content/uploads/2010/03/math_oblique.gif" class="thumb" title="math_oblique" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2010/03/math_oblique-100x36.gif" alt="math_oblique" title="math_oblique" /></a></li><li><a href="http://www.macouno.com/wp-content/uploads/2010/03/math_right.gif" class="thumb" title="math_right" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2010/03/math_right-100x42.gif" alt="math_right" title="math_right" /></a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2010/03/17/angle-math/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

