<?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; Miscellaneous</title>
	<atom:link href="http://www.macouno.com/category/miscellaneous/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>List of all Capital Cities</title>
		<link>http://www.macouno.com/2011/07/17/list-of-all-capital-cities/</link>
		<comments>http://www.macouno.com/2011/07/17/list-of-all-capital-cities/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 13:19:39 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[Other]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=1579</guid>
		<description><![CDATA[Might be usefull sometime (used for the entoforms). Tirana, Andorra la Vella, Vienna, Minsk, Brussels, Sarajevo, Sofia, Zagreb, Nicosia, Prague, Copenhagen, London, Tallinn, Helsinki, Paris, Tbilisi, Berlin, Athens, Budapest, Reykjavik, Dublin, Rome, Pristina, Riga, Vaduz, Vilnius, Luxembourg, Skopje, Valletta, Chisinau, Monaco, Podgorica, Amsterdam, Belfast, Oslo, Warsaw, Lisbon, Bucharest, Moscow, San Marino, Edinburgh, Belgrade, Bratislava, Ljubljana, [...]]]></description>
			<content:encoded><![CDATA[<p>Might be usefull sometime (used for the entoforms).</p>
<p>Tirana, Andorra la Vella, Vienna, Minsk, Brussels, Sarajevo, Sofia, Zagreb, Nicosia, Prague, Copenhagen, London, Tallinn, Helsinki, Paris, Tbilisi, Berlin, Athens, Budapest, Reykjavik, Dublin, Rome, Pristina, Riga, Vaduz, Vilnius, Luxembourg, Skopje, Valletta, Chisinau, Monaco, Podgorica, Amsterdam, Belfast, Oslo, Warsaw, Lisbon, Bucharest, Moscow, San Marino, Edinburgh, Belgrade, Bratislava, Ljubljana, Madrid, Stockholm, Bern, Kiev, Cardiff,  Algiers, Luanda, Porto-Novo, Gaborone, Ouagadougou, Bujumbura, Yaounde, Praia, Bangu, N&#8217;Djamena, Moroni, Brazzaville, Kinshasa, Yamoussoukro, Djibouti, Cairo, Malabo, Asmara, Addis Ababa, Libreville, Banjul, Accra, Conakry, Bissau, Nairobi, Maseru, Monrovia, Tripoli, Antananarivo, Lilongwe, Bamako, Nouakchott, Port Louis, Rabat, Maputo, Windhoek, Niamey, Abuja, Kigali, Sao Tome, Dakar, Victoria, Freetown, Mogadishu, Pretoria, Khartoum, Mbabane, Dar es Salaam, Lome, Tunis, Kampala, El Aaiun, Lusaka, Harare, Kabul, Yerevan, Baku, Manama, Dhaka, Thimphu, Bandar Seri Begawan, Rangoon, Phnom Penh, Beijing, Dili, New Delhi, Jakarta, Teheran, Baghdad, Jerusalem, Tokyo, Amman, Astana, Pyongyang, Seoul, Kuwait City, Bishkek, Vientiane, Beirut, Kuala Lumpur, Male, Ulan Bator, Kathmandu, Muscat, Islamabad, Manila, Doha, Riyadh, Singapore, Colombo, Sri Jayawardenepura-Kotte, Damascus, Taipei, Dushanbe, Bangkok, Ankara, Ashgabat, Abu Dhabi, Tashkent, Hanoi, Sana,  St. John&#8217;s, Nassau, Bridgetown, Belmopan, Ottawa &#8211; Ontario, San Jose, Havana, Roseau, Santo Domingo, San Salvador, Nuuk, St. George&#8217;s, Guatemala City, Port-au-Prince, Tegucigalpa, Kingston, Mexico City, Managua, Panama City, Basseterre, Castries, Kingstown, Port-of-Spain, Washington D.C.,  Canberra, Suva, Tarawa, Majuro, Palikir, Yaren, Wellington, Koror, Port Moresby, Apia, Honiara, Nuku&#8217;alofa, Funafuti, Port Vila,  Buenos Aires, La Paz, Sucre, Brasilia, Santiago, Bogota, Quito, Georgetown, Asuncion, Lima, Paramaribo, Montevideo, Caracas</p>
]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2011/07/17/list-of-all-capital-cities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>Making a category based menu with posts in wordpress 2.9.2</title>
		<link>http://www.macouno.com/2010/05/23/making-a-category-based-menu-with-posts-in-wordpress-2-9-2/</link>
		<comments>http://www.macouno.com/2010/05/23/making-a-category-based-menu-with-posts-in-wordpress-2-9-2/#comments</comments>
		<pubDate>Sun, 23 May 2010 09:07:32 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=800</guid>
		<description><![CDATA[I was not entirely happy with the way wordpress handles menus for this (my own) website. I like the idea of making all the content posts so they&#8217;re bound to a date and such. Then I&#8217;d like to see them in the menu based on the category they&#8217;re in. There are category menus, and even [...]]]></description>
			<content:encoded><![CDATA[<p>I was not entirely happy with the way wordpress handles menus for this (my own) website. I like the idea of making all the content posts so they&#8217;re bound to a date and such. Then I&#8217;d like to see them in the menu based on the category they&#8217;re in. There are category menus, and even nice folding ones, but I couldn&#8217;t find one that displays all the posts per category in a nice way.</p>
<p>So I decided to hack one in myself. It&#8217;s a very nasty hack&#8230; and I just put a bunch of code in the sidebar.php of my template. But that said&#8230; it works and I now have a menu that does what I want.</p>
<p><strong>If you&#8217;d like to use this&#8230; just remember it&#8217;s a great big bad hack and very inefficient!</strong></p>
<p>Here&#8217;s the html/php code I added to my template&#8217;s sidebar.php:</p>
<div class="code"><pre class="php"><ol><li class="li1"><div class="de1"><span class="co1">// Get the id of the current post so we can give it a &quot;current&quot; class later.</span></div></li><li class="li1"><div class="de1"><span class="re0">$postid</span> = <span class="re0">$post</span>-&gt;<span class="me1">ID</span>;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1">// Arguments for getting all the categories</span></div></li><li class="li1"><div class="de1"><span class="re0">$args</span> = <span class="kw3">array</span><span class="br0">&#40;</span></div></li><li class="li1"><div class="de1"><span class="st0">'show_option_all'</span> &nbsp; &nbsp;=&gt; <span class="st0">''</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'orderby'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span class="st0">'name'</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'order'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span class="st0">'ASC'</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'show_last_update'</span> &nbsp; =&gt; <span class="nu0">0</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'style'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span class="st0">'list'</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'show_count'</span> &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="nu0">0</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'hide_empty'</span> &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="nu0">1</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'use_desc_for_title'</span> =&gt; <span class="nu0">0</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'child_of'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="nu0">0</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'feed'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="st0">''</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'feed_type'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span class="st0">''</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'feed_image'</span> &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="st0">''</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'exclude'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span class="st0">''</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'exclude_tree'</span> &nbsp; &nbsp; &nbsp; =&gt; <span class="st0">''</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'include'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span class="st0">''</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'hierarchical'</span> &nbsp; &nbsp; &nbsp; =&gt; <span class="kw2">true</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'title_li'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="st0">''</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'number'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="kw2">NULL</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'echo'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="nu0">0</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'depth'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&gt; <span class="nu0">0</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'current_category'</span> &nbsp; =&gt; <span class="nu0">1</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'pad_counts'</span> &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="nu0">0</span>,</div></li><li class="li1"><div class="de1"><span class="st0">'taxonomy'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; <span class="st0">'category'</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">// Get all categories (in a silly html menu)</span></div></li><li class="li1"><div class="de1"><span class="re0">$catmenu</span> = wp_list_categories<span class="br0">&#40;</span> <span class="re0">$args</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">// Split the menu to get all categories sepparately</span></div></li><li class="li1"><div class="de1"><span class="re0">$cats</span> = <span class="kw3">split</span><span class="br0">&#40;</span><span class="st0">'</span></div></li><li class="li1"><div class="de1"><span class="st0">&lt;li class=&quot;cat-item cat-item-'</span>, <span class="re0">$catmenu</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="re0">$catmenu</span> = <span class="st0">''</span>;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="co1">// Loop through the categories.</span></div></li><li class="li1"><div class="de1"><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$cats</span> <span class="kw1">as</span> <span class="re0">$key</span> =&gt; <span class="re0">$cat</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$current</span> = <span class="st0">''</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 code and html sepparately</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">list</span><span class="br0">&#40;</span><span class="re0">$id</span>, <span class="re0">$code</span><span class="br0">&#41;</span> = <span class="kw3">split</span><span class="br0">&#40;</span><span class="st0">'&quot;&gt;&lt;a'</span>, <span class="re0">$cat</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 they're there.</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$id</span> &amp;&amp; <span class="re0">$code</span><span class="br0">&#41;</span><span class="br0">&#123;</span></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="co1">// If this is the current category, then remove that text and remember for later</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">strpos</span><span class="br0">&#40;</span><span class="re0">$id</span>, <span class="st0">' current-cat'</span><span class="br0">&#41;</span> !== <span class="kw2">False</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$current</span> = <span class="st0">' current-cat'</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$id</span> = <span class="kw3">str_replace</span><span class="br0">&#40;</span><span class="st0">' current-cat'</span>, <span class="st0">''</span>, <span class="re0">$id</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;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// In case we got an id... and this category doesn't have sub categories.</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">is_numeric</span><span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span> &amp;&amp; <span class="kw3">strpos</span><span class="br0">&#40;</span><span class="re0">$code</span>, <span class="st0">&quot;</span></div></li><li class="li1"><div class="de1"><span class="st0">&lt;ul class='children'&gt;&quot;</span><span class="br0">&#41;</span> === <span class="kw2">False</span><span class="br0">&#41;</span><span class="br0">&#123;</span></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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Arguments for getting the categorie's posts</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$args</span> = <span class="kw3">array</span><span class="br0">&#40;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'post_type'</span> =&gt; <span class="st0">'post'</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'post_status'</span> =&gt; <span class="st0">'published'</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'numberposts'</span> =&gt; <span class="nu0">-1</span>,</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'category'</span> =&gt; <span class="re0">$id</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Get the posts</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$myposts</span> = get_posts<span class="br0">&#40;</span><span class="re0">$args</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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// If we got any posts returned</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re0">$myposts</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Start a nice html post list</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$postlist</span> = <span class="st0">&quot;<span class="es0">\n</span>&quot;</span>.<span class="st0">'</span></div></li><li class="li1"><div class="de1"><span class="st0">&lt;ul class=&quot;posts&quot;&gt;'</span>;</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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Check east post to see if it's current and add to the html</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$myposts</span> <span class="kw1">as</span> <span class="re0">$post</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$current_post</span> = <span class="st0">''</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$postid</span> == <span class="re0">$post</span>-&gt;<span class="me1">ID</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$current_post</span> = <span class="st0">' class=&quot;current-post&quot;'</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$current</span> = <span class="st0">' current-cat'</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$postlist</span> .= <span class="st0">&quot;<span class="es0">\n</span>&quot;</span>.<span class="st0">'</span></div></li><li class="li1"><div class="de1"><span class="st0">&lt;li'</span>.<span class="re0">$current_post</span>.<span class="st0">'&gt;&lt;a href=&quot;'</span>.get_permalink<span class="br0">&#40;</span><span class="re0">$post</span>-&gt;<span class="me1">ID</span><span class="br0">&#41;</span>.<span class="st0">'&quot;&gt;'</span>.<span class="re0">$post</span>-&gt;<span class="me1">post_title</span>.<span class="st0">'&lt;/a&gt;&lt;/li&gt;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="st0">'</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$postlist</span> .= <span class="st0">&quot;<span class="es0">\n</span>&quot;</span>.<span class="st0">'&lt;/ul&gt;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="st0">'</span>;</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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Add the post list to the code of the current category</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$code</span> = <span class="kw3">str_replace</span><span class="br0">&#40;</span><span class="st0">'&lt;/a&gt;'</span>, <span class="st0">'&lt;/a&gt;'</span>.<span class="re0">$postlist</span>, <span class="re0">$code</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; &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; &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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Put everything that was split before back together</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$cat</span> = <span class="st0">'</span></div></li><li class="li1"><div class="de1"><span class="st0">&lt;li class=&quot;cat-item cat-item-'</span>.<span class="re0">$id</span>.<span class="re0">$current</span>.<span class="st0">'&quot;&gt;&lt;a'</span>.<span class="re0">$code</span>;</div></li><li class="li1"><div class="de1">&nbsp;</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">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Add back into the complete category menu</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$catmenu</span> .= <span class="re0">$cat</span>;</div></li><li class="li1"><div class="de1"><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">// Print out the category menu</span></div></li><li class="li1"><div class="de1"><span class="kw3">echo</span> <span class="st0">'</span></div></li><li class="li1"><div class="de1"><span class="st0">&lt;li id=&quot;menu&quot;&gt;</span></div></li><li class="li1"><div class="de1"><span class="st0">&lt;ul&gt;'</span>.<span class="re0">$catmenu</span>.<span class="st0">'&lt;/ul&gt;</span></div></li><li class="li1"><div class="de1"><span class="st0">&lt;/li&gt;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="st0">'</span>;</div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean php code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">// Get the id of the current post so we can give it a "current" class later.
$postid = $post->ID;

// Arguments for getting all the categories
$args = array(
'show_option_all'    => '',
'orderby'            => 'name',
'order'              => 'ASC',
'show_last_update'   => 0,
'style'              => 'list',
'show_count'         => 0,
'hide_empty'         => 1,
'use_desc_for_title' => 0,
'child_of'           => 0,
'feed'               => '',
'feed_type'          => '',
'feed_image'         => '',
'exclude'            => '',
'exclude_tree'       => '',
'include'            => '',
'hierarchical'       => true,
'title_li'           => '',
'number'             => NULL,
'echo'               => 0,
'depth'              => 0,
'current_category'   => 1,
'pad_counts'         => 0,
'taxonomy'           => 'category' );

// Get all categories (in a silly html menu)
$catmenu = wp_list_categories( $args );

// Split the menu to get all categories sepparately
$cats = split('
<li class="cat-item cat-item-', $catmenu);

$catmenu = '';

// Loop through the categories.
foreach($cats as $key => $cat){

	$current = '';

	// Get the code and html sepparately
	list($id, $code) = split('"><a', $cat);

	// Make sure they're there.
	if($id &#038;&#038; $code){

		// If this is the current category, then remove that text and remember for later
		if(strpos($id, ' current-cat') !== False){
			$current = ' current-cat';
			$id = str_replace(' current-cat', '', $id);
		}

		// In case we got an id... and this category doesn't have sub categories.
		if(is_numeric($id) &#038;&#038; strpos($code, "
<ul class='children'>") === False){

			// Arguments for getting the categorie's posts
			$args = array(
				'post_type' => 'post',
				'post_status' => 'published',
				'numberposts' => -1,
				'category' => $id
				); 

			// Get the posts
			 $myposts = get_posts($args);

			 // If we got any posts returned
			 if(count($myposts)){

				// Start a nice html post list
				$postlist = "\n".'
<ul class="posts">';

				// Check east post to see if it's current and add to the html
				 foreach($myposts as $post) {
					$current_post = '';
					if($postid == $post->ID){
						$current_post = ' class="current-post"';
						$current = ' current-cat';
					}
					$postlist .= "\n".'
<li'.$current_post.'><a href="'.get_permalink($post->ID).'">'.$post->post_title.'</a></li>

';
				 }

				 $postlist .= "\n".'</ul>

';

				// Add the post list to the code of the current category
				$code = str_replace('</a>', '</a>'.$postlist, $code);

			}

		}

		// Put everything that was split before back together
		$cat = '
<li class="cat-item cat-item-'.$id.$current.'"><a'.$code;

	}

	// Add back into the complete category menu
	$catmenu .= $cat;
}

// Print out the category menu
echo '
<li id="menu">
<ul>'.$catmenu.'</ul>
</li>

';</textarea><pre class="php">// Get the id of the current post so we can give it a "current" class later.
$postid = $post->ID;

// Arguments for getting all the categories
$args = array(
'show_option_all'    => '',
'orderby'            => 'name',
'order'              => 'ASC',
'show_last_update'   => 0,
'style'              => 'list',
'show_count'         => 0,
'hide_empty'         => 1,
'use_desc_for_title' => 0,
'child_of'           => 0,
'feed'               => '',
'feed_type'          => '',
'feed_image'         => '',
'exclude'            => '',
'exclude_tree'       => '',
'include'            => '',
'hierarchical'       => true,
'title_li'           => '',
'number'             => NULL,
'echo'               => 0,
'depth'              => 0,
'current_category'   => 1,
'pad_counts'         => 0,
'taxonomy'           => 'category' );

// Get all categories (in a silly html menu)
$catmenu = wp_list_categories( $args );

// Split the menu to get all categories sepparately
$cats = split('
<li class="cat-item cat-item-', $catmenu);

$catmenu = '';

// Loop through the categories.
foreach($cats as $key => $cat){

	$current = '';

	// Get the code and html sepparately
	list($id, $code) = split('"><a', $cat);

	// Make sure they're there.
	if($id &#038;&#038; $code){

		// If this is the current category, then remove that text and remember for later
		if(strpos($id, ' current-cat') !== False){
			$current = ' current-cat';
			$id = str_replace(' current-cat', '', $id);
		}

		// In case we got an id... and this category doesn't have sub categories.
		if(is_numeric($id) &#038;&#038; strpos($code, "
<ul class='children'>") === False){

			// Arguments for getting the categorie's posts
			$args = array(
				'post_type' => 'post',
				'post_status' => 'published',
				'numberposts' => -1,
				'category' => $id
				); 

			// Get the posts
			 $myposts = get_posts($args);

			 // If we got any posts returned
			 if(count($myposts)){

				// Start a nice html post list
				$postlist = "\n".'
<ul class="posts">';

				// Check east post to see if it's current and add to the html
				 foreach($myposts as $post) {
					$current_post = '';
					if($postid == $post->ID){
						$current_post = ' class="current-post"';
						$current = ' current-cat';
					}
					$postlist .= "\n".'
<li'.$current_post.'><a href="'.get_permalink($post->ID).'">'.$post->post_title.'</a></li>

';
				 }

				 $postlist .= "\n".'</ul>

';

				// Add the post list to the code of the current category
				$code = str_replace('</a>', '</a>'.$postlist, $code);

			}

		}

		// Put everything that was split before back together
		$cat = '
<li class="cat-item cat-item-'.$id.$current.'"><a'.$code;

	}

	// Add back into the complete category menu
	$catmenu .= $cat;
}

// Print out the category menu
echo '
<li id="menu">
<ul>'.$catmenu.'</ul>
</li>

';</pre>
<p>And here is the javascript code I added to my template&#8217;s header.php:</p>
<div class="code"><pre class="javascript"><ol><li class="li1"><div class="de1"><span class="co1">// Initialise javascript functions using jquery</span></div></li><li class="li1"><div class="de1">jQuery<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; initMenu<span class="br0">&#40;</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="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"><span class="co1">// Start the menu functionality</span></div></li><li class="li1"><div class="de1"><span class="kw2">function</span> initMenu<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Hide all the submenus by default</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="st0">'#menu ul ul'</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</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 the current post and make sure all the categories it's in are also &quot;current&quot;, then show their kids.</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="st0">'#menu .current-post'</span><span class="br0">&#41;</span>.<span class="me1">parents</span><span class="br0">&#40;</span><span class="st0">'li[id!=menu]'</span><span class="br0">&#41;</span>.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">'current-cat'</span><span class="br0">&#41;</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="st0">'ul'</span><span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</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">// Replace the click event of all category menu items except for &quot;news&quot;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// In stead make them fold down and up the sub menu</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="st0">'#menu a'</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span><span class="br0">&#123;</span></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; thisItem = jQuery<span class="br0">&#40;</span><span class="kw1">this</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; &nbsp; &nbsp; &nbsp; &nbsp; childList = thisItem.<span class="me1">siblings</span><span class="br0">&#40;</span><span class="st0">'ul'</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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>childList.<span class="me1">length</span><span class="br0">&#41;</span><span class="br0">&#123;</span></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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!<span class="br0">&#40;</span>thisItem.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == <span class="st0">'News'</span> &amp;&amp; childList.<span class="kw1">is</span><span class="br0">&#40;</span><span class="st0">':hidden'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; event.<span class="me1">preventDefault</span><span class="br0">&#40;</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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>childList.<span class="kw1">is</span><span class="br0">&#40;</span><span class="st0">':hidden'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; thisItem.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">'clicked'</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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; childList.<span class="me1">slideDown</span><span class="br0">&#40;</span><span class="st0">'fast'</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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="st0">'#menu ul:visible'</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!<span class="br0">&#40;</span>jQuery<span class="br0">&#40;</span><span class="st0">'.clicked'</span>, <span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">length</span> || jQuery<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">siblings</span><span class="br0">&#40;</span><span class="st0">'.clicked'</span><span class="br0">&#41;</span>.<span class="me1">length</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; jQuery<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">slideUp</span><span class="br0">&#40;</span><span class="st0">'fast'</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; &nbsp; &nbsp; &nbsp; &nbsp; &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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; thisItem.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">'clicked'</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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; childList.<span class="me1">slideUp</span><span class="br0">&#40;</span><span class="st0">'fast'</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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &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; &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="br0">&#125;</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean javascript code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">// Initialise javascript functions using jquery
jQuery(document).ready(function(){

	initMenu();

});

// Start the menu functionality
function initMenu(){
	// Hide all the submenus by default
	jQuery('#menu ul ul').hide();

	// Find the current post and make sure all the categories it's in are also "current", then show their kids.
	jQuery('#menu .current-post').parents('li[id!=menu]').addClass('current-cat').children('ul').show();

	// Replace the click event of all category menu items except for "news"
	// In stead make them fold down and up the sub menu
	jQuery('#menu a').click(function(event){

		thisItem = jQuery(this);

		childList = thisItem.siblings('ul');

		if(childList.length){

			if(!(thisItem.html() == 'News' &#038;&#038; childList.is(':hidden'))){

				event.preventDefault();

				if(childList.is(':hidden')){

					thisItem.addClass('clicked');

					childList.slideDown('fast');

					jQuery('#menu ul:visible').each(function(){

						if(!(jQuery('.clicked', this).length || jQuery(this).siblings('.clicked').length)){
							jQuery(this).slideUp('fast');
						}

					});

					thisItem.removeClass('clicked');

				}else{
					childList.slideUp('fast');
				}
			}

		}

	});
}</textarea><pre class="javascript">// Initialise javascript functions using jquery
jQuery(document).ready(function(){

	initMenu();

});

// Start the menu functionality
function initMenu(){
	// Hide all the submenus by default
	jQuery('#menu ul ul').hide();

	// Find the current post and make sure all the categories it's in are also "current", then show their kids.
	jQuery('#menu .current-post').parents('li[id!=menu]').addClass('current-cat').children('ul').show();

	// Replace the click event of all category menu items except for "news"
	// In stead make them fold down and up the sub menu
	jQuery('#menu a').click(function(event){

		thisItem = jQuery(this);

		childList = thisItem.siblings('ul');

		if(childList.length){

			if(!(thisItem.html() == 'News' &#038;&#038; childList.is(':hidden'))){

				event.preventDefault();

				if(childList.is(':hidden')){

					thisItem.addClass('clicked');

					childList.slideDown('fast');

					jQuery('#menu ul:visible').each(function(){

						if(!(jQuery('.clicked', this).length || jQuery(this).siblings('.clicked').length)){
							jQuery(this).slideUp('fast');
						}

					});

					thisItem.removeClass('clicked');

				}else{
					childList.slideUp('fast');
				}
			}

		}

	});
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2010/05/23/making-a-category-based-menu-with-posts-in-wordpress-2-9-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Teaching UV unwrapping</title>
		<link>http://www.macouno.com/2010/03/18/teaching-uv-unwrapping/</link>
		<comments>http://www.macouno.com/2010/03/18/teaching-uv-unwrapping/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 23:17:31 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=691</guid>
		<description><![CDATA[Getting to grips with 2D to 3D This is a simple little exercise I came up with for showing students how to convert 2D to 3D and vise versa. The idea is to not go straight to 3D, but in stead give them a hands-on task that gets the idea into their heads. It&#8217;s not [...]]]></description>
			<content:encoded><![CDATA[<h3>Getting to grips with 2D to 3D</h3>
<p>This is a simple little exercise I came up with for showing students how to convert 2D to 3D and vise versa. The idea is to not go straight to 3D, but in stead give them a hands-on task that gets the idea into their heads. It&#8217;s not a completely new thing for most students, but the relation to UV unwrapping is. And of course it is fun to try to make it challenging as well.</p>
<hr />
<h3>The example</h3>
<p>To give my students some idea of what I expected them to do I showed them an example I made the night before class. It&#8217;s a basic svg I made in Inkscape that I printed on A4 paper.</p>
<p><img src="http://www.macouno.com/wp-content/uploads/2010/03/paper_cubes.jpg" alt="" width="640" height="453" /></p>
<p>I could have just made a single T shape to make a single cube, but since I was teaching university level students that was a bit too simple. In stead I made this, which turns into 2 cubes that are connected at a corner. The real world result that I glued together the night before class, and showed my students in the morning is below here.</p>
<p><img src="http://www.macouno.com/wp-content/uploads/2010/03/paper_design.jpg" alt="" width="640" height="426" /></p>
<hr />
<h3>The task</h3>
<p>After showing the students my example, I provided them all with paper, rulers, pencils, glue or tape, and scissors. Then put them right to work. The task I gave them was was rather simple&#8230;</p>
<p><strong>Make something more complicated than a single cube!</strong></p>
<p><img src="http://www.macouno.com/wp-content/uploads/2010/03/getting_to_work.jpg" alt="" width="640" height="350" /></p>
<hr />
<h3>The results</h3>
<p>As usual my students surprised me with their inventiveness. The range of designs they came up with was really nice. Especially the surprises and &#8220;misinterpretations&#8221; that I really didn&#8217;t see coming. All I did during the class was walk around and give some pointers.</p>
<p><img src="http://www.macouno.com/wp-content/uploads/2010/03/results.jpg" alt="" width="640" height="201" /></p>
<hr />
<h3>Round up</h3>
<p>That&#8217;s basicly all this class was. After finishing the exercise we got stuck in in Blender 3D to UV unwrap the models they had made the day before. It was a lot easier for me to teach them that technique after they had done exactly the opposite with paper (which is what this exercise is). All in all this was a fun hour to break up the week of staring at computer screens, and I&#8217;ll definitely repeat it in future.</p>
<p>I hope this helps you, and if you have similar fun ways of teaching your students, please let me know. I&#8217;m always looking for novel ways of getting these complex ideas into students heads.</p>
<p>Dolf</p>
<div class="gallery"><ul><li><a href="http://www.macouno.com/wp-content/uploads/2010/03/getting_to_work.jpg" class="thumb" title="getting_to_work" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2010/03/getting_to_work-100x54.jpg" alt="getting_to_work" title="getting_to_work" /></a></li><li><a href="http://www.macouno.com/wp-content/uploads/2010/03/paper_cubes.jpg" class="thumb" title="paper_cubes" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2010/03/paper_cubes-100x70.jpg" alt="paper_cubes" title="paper_cubes" /></a></li><li><a href="http://www.macouno.com/wp-content/uploads/2010/03/paper_design.jpg" class="thumb" title="paper_design" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2010/03/paper_design-100x66.jpg" alt="paper_design" title="paper_design" /></a></li><li><a href="http://www.macouno.com/wp-content/uploads/2010/03/results.jpg" class="thumb" title="results" rel="lightbox[thumbs]"><img src="http://www.macouno.com/wp-content/uploads/2010/03/results-100x31.jpg" alt="results" title="results" /></a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2010/03/18/teaching-uv-unwrapping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting python to work on Xampp</title>
		<link>http://www.macouno.com/2010/03/17/getting-python-to-work-on-xampp/</link>
		<comments>http://www.macouno.com/2010/03/17/getting-python-to-work-on-xampp/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 20:21:27 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=560</guid>
		<description><![CDATA[I spent most of today (Dec 14 2009) messing around trying to get xampp to interpret python scripts. Usually xampp only works with php, at least on my windows system (windows 32 bit vista). But since I&#8217;m developing something for a python server I needed to get it to work. I read a lot, found [...]]]></description>
			<content:encoded><![CDATA[<p>I spent most of today (<em>Dec 14 2009</em>) messing around trying to get <a href="http://www.apachefriends.org/en/xampp.html" target="_blank">xampp</a> to interpret python scripts. Usually xampp only works with php, at least on my windows system (windows 32 bit vista). But since I&#8217;m developing something for a python server I needed to get it to work.</p>
<p>I read a lot, found a heap of documentation about mod_python (mod_python.so), and only after half a day found out that that&#8217;s really not a very nice solution. And I already had python 2.5 installed as well. mod_python seems nice, and has a lot of links to it on google, but it&#8217;s overkill/weird and rarely needed.</p>
<p>So, if you&#8217;re like me, and have python &amp; xampp installed on your system (and your pythonpath set in the environment variables), and need .py files to work&#8230; just do this.</p>
<hr />
<h3>Configuring the server</h3>
<p>In the httpd.conf file for your apache installation (part of xampp) add the following all the way at the bottom. In my case the httpd.conf can be found here: <em>C:\xampp\apache\conf</em></p>
<div class="code"><pre class="text"><ol><li class="li1"><div class="de1">#</div></li><li class="li1"><div class="de1"># For Python</div></li><li class="li1"><div class="de1">#</div></li><li class="li1"><div class="de1">AddHandler cgi-script .py</div></li><li class="li1"><div class="de1">ScriptInterpreterSource Registry-Strict</div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean text code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">#
# For Python
#
AddHandler cgi-script .py
ScriptInterpreterSource Registry-Strict</textarea><pre class="text">#
# For Python
#
AddHandler cgi-script .py
ScriptInterpreterSource Registry-Strict</pre>
<hr />
<h3 class="text">Configuring the python script</h3>
<p class="text">Then in the top of the python script on your server, it already knows it should be python, but it doesn&#8217;t know yet where the python program is. So as the very first line in your python scripts on the server you have to say where python is installed. In my case that looks like this</p>
<div class="code"><pre class="python"><ol><li class="li1"><div class="de1"><span class="co1">#!C:/Python25/python.exe</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;">#!C:/Python25/python.exe</textarea><pre class="python">#!C:/Python25/python.exe</pre>
<hr />
<h3>Enabling index.py</h3>
<p>Of course it&#8217;s nice to have index.py files work just like index.php ones as well. So I added index.py to the following bit in the httpd.conf</p>
<div class="code"><pre class="text"><ol><li class="li1"><div class="de1">#</div></li><li class="li1"><div class="de1"># DirectoryIndex: sets the file that Apache will serve if a directory</div></li><li class="li1"><div class="de1"># is requested.</div></li><li class="li1"><div class="de1">#</div></li><li class="li1"><div class="de1">&lt;IfModule dir_module&gt;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; DirectoryIndex index.php index.php4 index.php3 index.cgi index.pl index.html index.htm index.shtml index.phtml index.py</div></li><li class="li1"><div class="de1">&lt;/IfModule&gt;</div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean text code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
&lt;IfModule dir_module&gt;
    DirectoryIndex index.php index.php4 index.php3 index.cgi index.pl index.html index.htm index.shtml index.phtml index.py
&lt;/IfModule&gt;</textarea><pre class="text">#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
&lt;IfModule dir_module&gt;
    DirectoryIndex index.php index.php4 index.php3 index.cgi index.pl index.html index.htm index.shtml index.phtml index.py
&lt;/IfModule&gt;</pre>
<hr />
<h3>That&#8217;s it</h3>
<p>Now .py files are also interpreted by python on a xampp installed apache server, just like .php. I hope that helps you as much as it dit me, and maybe saves you some time.</p>
<p>Dolf</p>
]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2010/03/17/getting-python-to-work-on-xampp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shorten text</title>
		<link>http://www.macouno.com/2010/03/17/shorten-text/</link>
		<comments>http://www.macouno.com/2010/03/17/shorten-text/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 19:44:10 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=523</guid>
		<description><![CDATA[This is a small function that shortens a string.It looks if the string is longer than a preset length, and if so cuts the text there.Then it removes the last word from the string (so your string ends neatly at a space), and adds three dots. // Shorten a text if nessecaryfunction shortenText&#40;$txt='', $len=0&#41;&#123;&#160;&#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>This is a small function that shortens a string.<br />It looks if the string is longer than a preset length, and if so cuts the text there.<br />Then it removes the last word from the string (so your string ends neatly at a space), and adds three dots.</p>
<div class="code"><pre class="php"><ol><li class="li1"><div class="de1"><span class="co1">// Shorten a text if nessecary</span></div></li><li class="li1"><div class="de1"><span class="kw2">function</span> shortenText<span class="br0">&#40;</span><span class="re0">$txt</span>=<span class="st0">''</span>, <span class="re0">$len</span>=<span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</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><span class="br0">&#40;</span><span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re0">$txt</span><span class="br0">&#41;</span> &gt; <span class="re0">$len</span><span class="br0">&#41;</span><span class="br0">&#123;</span></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="re0">$txt</span> = <span class="kw3">substr</span><span class="br0">&#40;</span><span class="re0">$txt</span>, <span class="nu0">0</span>, <span class="re0">$len</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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$t</span> = <span class="kw3">split</span><span class="br0">&#40;</span><span class="st0">&quot;[<span class="es0">\n</span><span class="es0">\r</span><span class="es0">\t</span> ]+&quot;</span>, <span class="re0">$txt</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$t</span> = <span class="kw3">array_slice</span><span class="br0">&#40;</span><span class="re0">$t</span>, <span class="nu0">0</span>, <span class="nu0">-1</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$txt</span> = <span class="kw3">join</span><span class="br0">&#40;</span><span class="st0">' '</span>, <span class="re0">$t</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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$txt</span> .= <span class="st0">'...'</span>;</div></li><li class="li1"><div class="de1">&nbsp;</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">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$txt</span>;</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean php code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">// Shorten a text if nessecary
function shortenText($txt='', $len=0){

	if(strlen($txt) &gt; $len){

		$txt = substr($txt, 0, $len);

		$t = split(&quot;[&#92;n&#92;r&#92;t ]+&quot;, $txt);
		$t = array_slice($t, 0, -1);
		$txt = join(' ', $t);

		$txt .= '...';

	}

	return $txt;
}</textarea><pre class="php">// Shorten a text if nessecary
function shortenText($txt='', $len=0){

	if(strlen($txt) &gt; $len){

		$txt = substr($txt, 0, $len);

		$t = split(&quot;[&#92;n&#92;r&#92;t ]+&quot;, $txt);
		$t = array_slice($t, 0, -1);
		$txt = join(' ', $t);

		$txt .= '...';

	}

	return $txt;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2010/03/17/shorten-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rot13</title>
		<link>http://www.macouno.com/2010/03/17/rot13/</link>
		<comments>http://www.macouno.com/2010/03/17/rot13/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 19:42:58 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=521</guid>
		<description><![CDATA[Basic rot13 function for PHP (remember that this is NOT secure encryption!).It&#8217;s built into php nowadays, but if you have an old version you may not. // Rot 13 function for older php versionsfunction rot13&#40;$text&#41;&#123;&#160; &#160; &#160; &#160; $length = strlen&#40;$text&#41;;&#160; &#160; &#160; &#160; $newtext = '';&#160; &#160; &#160; &#160; &#160;for&#40;$i = 0; $i &#60; [...]]]></description>
			<content:encoded><![CDATA[<p>Basic rot13 function for PHP (remember that this is NOT secure encryption!).<br />It&#8217;s built into php nowadays, but if you have an old version you may not.</p>
<div class="code"><pre class="php"><ol><li class="li1"><div class="de1"><span class="co1">// Rot 13 function for older php versions</span></div></li><li class="li1"><div class="de1"><span class="kw2">function</span> rot13<span class="br0">&#40;</span><span class="re0">$text</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$length</span> = <span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re0">$text</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$newtext</span> = <span class="st0">''</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">for</span><span class="br0">&#40;</span><span class="re0">$i</span> = <span class="nu0">0</span>; <span class="re0">$i</span> &lt; <span class="re0">$length</span>; <span class="re0">$i</span>++<span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$index</span> = <span class="kw3">ord</span><span class="br0">&#40;</span><span class="re0">$text</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// Rotate upper case.</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$index</span> &gt; <span class="nu0">64</span> &amp;&amp; <span class="re0">$index</span> &lt; <span class="nu0">91</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$index</span> += <span class="nu0">13</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$index</span> &gt; <span class="nu0">90</span><span class="br0">&#41;</span> <span class="re0">$index</span> -= <span class="nu0">26</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$newtext</span> .= <span class="kw3">chr</span><span class="br0">&#40;</span><span class="re0">$index</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Rotate lower case.</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">elseif</span><span class="br0">&#40;</span><span class="re0">$index</span> &gt; <span class="nu0">96</span> &amp;&amp; <span class="re0">$index</span> &lt; <span class="nu0">123</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$index</span> += <span class="nu0">13</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$index</span> &gt; <span class="nu0">122</span><span class="br0">&#41;</span> <span class="re0">$index</span> -= <span class="nu0">26</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$newtext</span> .= <span class="kw3">chr</span><span class="br0">&#40;</span><span class="re0">$index</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span> <span class="re0">$newtext</span> .= <span class="re0">$text</span><span class="br0">&#91;</span><span class="re0">$i</span><span class="br0">&#93;</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="re0">$newtext</span>;</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean php code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">// Rot 13 function for older php versions
function rot13($text){
	$length = strlen($text);
	$newtext = '';
	 for($i = 0; $i &lt; $length; $i++){
		 $index = ord($text[$i]);
		 // Rotate upper case.
		 if($index &gt; 64 &amp;&amp; $index &lt; 91){
			 $index += 13;
			 if($index &gt; 90) $index -= 26;
			 $newtext .= chr($index);
		// Rotate lower case.
		}elseif($index &gt; 96 &amp;&amp; $index &lt; 123){
			$index += 13;
			if($index &gt; 122) $index -= 26;
			$newtext .= chr($index);
		 }else{ $newtext .= $text[$i]; }
	 }
	 return $newtext;
}</textarea><pre class="php">// Rot 13 function for older php versions
function rot13($text){
	$length = strlen($text);
	$newtext = '';
	 for($i = 0; $i &lt; $length; $i++){
		 $index = ord($text[$i]);
		 // Rotate upper case.
		 if($index &gt; 64 &amp;&amp; $index &lt; 91){
			 $index += 13;
			 if($index &gt; 90) $index -= 26;
			 $newtext .= chr($index);
		// Rotate lower case.
		}elseif($index &gt; 96 &amp;&amp; $index &lt; 123){
			$index += 13;
			if($index &gt; 122) $index -= 26;
			$newtext .= chr($index);
		 }else{ $newtext .= $text[$i]; }
	 }
	 return $newtext;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2010/03/17/rot13/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make a random string</title>
		<link>http://www.macouno.com/2010/03/17/make-a-random-string/</link>
		<comments>http://www.macouno.com/2010/03/17/make-a-random-string/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 19:41:56 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=519</guid>
		<description><![CDATA[This is a tiny function that makes a random string of predefined length.It does not use letters and numbers that could be confusing, like O and 0. // Make a random stringfunction makeRandomString&#40;$length&#41;&#123;&#160; &#160; &#160; &#160; $str = array&#40;'a', 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'w', [...]]]></description>
			<content:encoded><![CDATA[<p>This is a tiny function that makes a random string of predefined length.<br />It does not use letters and numbers that could be confusing, like O and 0.</p>
<div class="code"><pre class="php"><ol><li class="li1"><div class="de1"><span class="co1">// Make a random string</span></div></li><li class="li1"><div class="de1"><span class="kw2">function</span> makeRandomString<span class="br0">&#40;</span><span class="re0">$length</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$str</span> = <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">'a'</span>, <span class="st0">'b'</span>, <span class="st0">'c'</span>, <span class="st0">'d'</span>, <span class="st0">'f'</span>, <span class="st0">'g'</span>, <span class="st0">'h'</span>, <span class="st0">'j'</span>, <span class="st0">'k'</span>, <span class="st0">'m'</span>, <span class="st0">'n'</span>, <span class="st0">'p'</span>, <span class="st0">'q'</span>, <span class="st0">'r'</span>, <span class="st0">'s'</span>, <span class="st0">'t'</span>, <span class="st0">'w'</span>, <span class="st0">'x'</span>, <span class="st0">'y'</span>, <span class="st0">'z'</span>, <span class="st0">'A'</span>, <span class="st0">'B'</span>, <span class="st0">'C'</span>, <span class="st0">'D'</span>, <span class="st0">'E'</span>, <span class="st0">'F'</span>, <span class="st0">'G'</span>, <span class="st0">'H'</span>, <span class="st0">'J'</span>, <span class="st0">'K'</span>, <span class="st0">'M'</span>, <span class="st0">'N'</span>, <span class="st0">'P'</span>, <span class="st0">'Q'</span>, <span class="st0">'R'</span>, <span class="st0">'S'</span>, <span class="st0">'T'</span>, <span class="st0">'W'</span>, <span class="st0">'X'</span>, <span class="st0">'Y'</span>, <span class="st0">'Z'</span>, <span class="st0">'2'</span>, <span class="st0">'4'</span>, <span class="st0">'5'</span>, <span class="st0">'6'</span>, <span class="st0">'7'</span>, <span class="st0">'8'</span>, <span class="st0">'9'</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$nkeys</span> = <span class="kw3">array_rand</span><span class="br0">&#40;</span><span class="re0">$str</span>, <span class="re0">$length</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$nstr</span> = <span class="st0">''</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$nkeys</span> <span class="kw1">as</span> <span class="re0">$key</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="re0">$nstr</span> .= <span class="re0">$str</span><span class="br0">&#91;</span><span class="re0">$key</span><span class="br0">&#93;</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$nstr</span>;</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean php code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">// Make a random string
function makeRandomString($length){
	$str = array('a', 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'W', 'X', 'Y', 'Z', '2', '4', '5', '6', '7', '8', '9');
	$nkeys = array_rand($str, $length);
	$nstr = '';
	foreach($nkeys as $key){ $nstr .= $str[$key]; }
	return $nstr;
}</textarea><pre class="php">// Make a random string
function makeRandomString($length){
	$str = array('a', 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'W', 'X', 'Y', 'Z', '2', '4', '5', '6', '7', '8', '9');
	$nkeys = array_rand($str, $length);
	$nstr = '';
	foreach($nkeys as $key){ $nstr .= $str[$key]; }
	return $nstr;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2010/03/17/make-a-random-string/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make image version</title>
		<link>http://www.macouno.com/2010/03/17/make-image-version/</link>
		<comments>http://www.macouno.com/2010/03/17/make-image-version/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 19:40:02 +0000</pubDate>
		<dc:creator>macouno</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://www.macouno.com/?p=517</guid>
		<description><![CDATA[This is a function I use to make multiple versions such as thumbnails of uploaded images.There&#8217;s three methods for resizing available in it (mask, fit &#38; limit). // Function for making a new resized copy of a file// mask makes the shortest edge match the mask, so it will be bigger than the mask, always [...]]]></description>
			<content:encoded><![CDATA[<p>This is a function I use to make multiple versions such as thumbnails of uploaded images.<br />There&#8217;s three methods for resizing available in it (mask, fit &amp; limit).</p>
<div class="code"><pre class="php"><ol><li class="li1"><div class="de1"><span class="co1">// Function for making a new resized copy of a file</span></div></li><li class="li1"><div class="de1"><span class="co1">// mask makes the shortest edge match the mask, so it will be bigger than the mask, always resizes!</span></div></li><li class="li1"><div class="de1"><span class="co1">// fit makes the longest edge match, always resizes!</span></div></li><li class="li1"><div class="de1"><span class="co1">// limit makes the image fit, but won't stretch if it's smaller.</span></div></li><li class="li1"><div class="de1"><span class="kw2">function</span> makeImageVersion<span class="br0">&#40;</span><span class="re0">$newWidth</span>, <span class="re0">$newHeight</span>, <span class="re0">$filePath</span>, <span class="re0">$newName</span>, <span class="re0">$fileExtension</span>, <span class="re0">$method</span><span class="br0">&#41;</span><span class="br0">&#123;</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 original size of the image</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">list</span><span class="br0">&#40;</span><span class="re0">$wO</span>, <span class="re0">$hO</span><span class="br0">&#41;</span> = <span class="kw3">getimagesize</span><span class="br0">&#40;</span><span class="re0">$filePath</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 ratios it would take to resize</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$wR</span> = <span class="re0">$newWidth</span> / <span class="re0">$wO</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$hR</span> = <span class="re0">$newHeight</span> / <span class="re0">$hO</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">// Figure out which ratio we need</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span><span class="br0">&#40;</span><span class="re0">$method</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">'mask'</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$wR</span> &gt; <span class="re0">$hR</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="re0">$ratio</span> = <span class="re0">$wR</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><span class="br0">&#123;</span> <span class="re0">$ratio</span> = <span class="re0">$hR</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">'limit'</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$wR</span> &lt; <span class="nu0">1</span> &amp;&amp; <span class="re0">$wR</span> &lt; <span class="re0">$hR</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="re0">$ratio</span> = <span class="re0">$wR</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elseif</span><span class="br0">&#40;</span><span class="re0">$hR</span> &lt; <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="re0">$ratio</span> = <span class="re0">$hR</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><span class="br0">&#123;</span> <span class="re0">$ratio</span> = <span class="nu0">1</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">'fit'</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span>:</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$wR</span> &gt; <span class="re0">$hR</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="re0">$ratio</span> = <span class="re0">$hR</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><span class="br0">&#123;</span> <span class="re0">$ratio</span> = <span class="re0">$wR</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</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">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$wN</span> = <span class="kw3">round</span><span class="br0">&#40;</span><span class="re0">$wO</span> * <span class="re0">$ratio</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$hN</span> = <span class="kw3">round</span><span class="br0">&#40;</span><span class="re0">$hO</span> * <span class="re0">$ratio</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="re0">$iP</span> = imagecreatetruecolor<span class="br0">&#40;</span><span class="re0">$wN</span>, <span class="re0">$hN</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; imageAlphaBlending<span class="br0">&#40;</span><span class="re0">$iP</span>, <span class="kw2">false</span><span class="br0">&#41;</span>;</div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; imageSaveAlpha<span class="br0">&#40;</span><span class="re0">$iP</span>, <span class="kw2">true</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><span class="br0">&#40;</span><span class="re0">$fileExtension</span> == <span class="st0">'jpg'</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="re0">$iI</span> = imagecreatefromjpeg<span class="br0">&#40;</span><span class="re0">$filePath</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elseif</span><span class="br0">&#40;</span><span class="re0">$fileExtension</span> == <span class="st0">'png'</span><span class="br0">&#41;</span><span class="br0">&#123;</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$iI</span> = imagecreatefrompng<span class="br0">&#40;</span><span class="re0">$filePath</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><span class="br0">&#123;</span> <span class="re0">$iI</span> = imagecreatefromgif<span class="br0">&#40;</span><span class="re0">$filePath</span><span class="br0">&#41;</span>; <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; imagecopyresampled<span class="br0">&#40;</span><span class="re0">$iP</span>, <span class="re0">$iI</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">0</span>, <span class="re0">$wN</span>, <span class="re0">$hN</span>, <span class="re0">$wO</span>, <span class="re0">$hO</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><span class="br0">&#40;</span><span class="re0">$fileExtension</span> == <span class="st0">'jpg'</span><span class="br0">&#41;</span><span class="br0">&#123;</span> imagejpeg<span class="br0">&#40;</span><span class="re0">$iP</span>, <span class="re0">$newName</span>, <span class="nu0">90</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elseif</span><span class="br0">&#40;</span><span class="re0">$fileExtension</span> == <span class="st0">'png'</span><span class="br0">&#41;</span><span class="br0">&#123;</span> imagepng<span class="br0">&#40;</span><span class="re0">$iP</span>, <span class="re0">$newName</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><span class="br0">&#123;</span> imagegif<span class="br0">&#40;</span><span class="re0">$iP</span>, <span class="re0">$newName</span><span class="br0">&#41;</span>; <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></pre></div><p><a href="javascript: void(0);" class="showpre">Display clean php code for copying</a></p><textarea style="display: none; width: 100%; height: 120px;">// Function for making a new resized copy of a file
// mask makes the shortest edge match the mask, so it will be bigger than the mask, always resizes!
// fit makes the longest edge match, always resizes!
// limit makes the image fit, but won't stretch if it's smaller.
function makeImageVersion($newWidth, $newHeight, $filePath, $newName, $fileExtension, $method){

	// Find out the original size of the image
	list($wO, $hO) = getimagesize($filePath);

	// Get the ratios it would take to resize
	$wR = $newWidth / $wO;
	$hR = $newHeight / $hO;

	// Figure out which ratio we need
	switch($method){
		case 'mask':
			if($wR &gt; $hR){ $ratio = $wR; }
			else{ $ratio = $hR; }
			break;
		case 'limit':
			if($wR &lt; 1 &amp;&amp; $wR &lt; $hR){ $ratio = $wR; }
			elseif($hR &lt; 1){ $ratio = $hR; }
			else{ $ratio = 1; }
			break;
		case 'fit':
		default:
			if($wR &gt; $hR){ $ratio = $hR; }
			else{ $ratio = $wR; }
			break;
	}

	$wN = round($wO * $ratio);
	$hN = round($hO * $ratio);

	$iP = imagecreatetruecolor($wN, $hN);
	imageAlphaBlending($iP, false);
	imageSaveAlpha($iP, true);

	if($fileExtension == 'jpg'){ $iI = imagecreatefromjpeg($filePath); }
	elseif($fileExtension == 'png'){	$iI = imagecreatefrompng($filePath); }
	else{ $iI = imagecreatefromgif($filePath); }

	imagecopyresampled($iP, $iI, 0, 0, 0, 0, $wN, $hN, $wO, $hO);

	if($fileExtension == 'jpg'){ imagejpeg($iP, $newName, 90); }
	elseif($fileExtension == 'png'){ imagepng($iP, $newName); }
	else{ imagegif($iP, $newName); }
}</textarea><pre class="php">// Function for making a new resized copy of a file
// mask makes the shortest edge match the mask, so it will be bigger than the mask, always resizes!
// fit makes the longest edge match, always resizes!
// limit makes the image fit, but won't stretch if it's smaller.
function makeImageVersion($newWidth, $newHeight, $filePath, $newName, $fileExtension, $method){

	// Find out the original size of the image
	list($wO, $hO) = getimagesize($filePath);

	// Get the ratios it would take to resize
	$wR = $newWidth / $wO;
	$hR = $newHeight / $hO;

	// Figure out which ratio we need
	switch($method){
		case 'mask':
			if($wR &gt; $hR){ $ratio = $wR; }
			else{ $ratio = $hR; }
			break;
		case 'limit':
			if($wR &lt; 1 &amp;&amp; $wR &lt; $hR){ $ratio = $wR; }
			elseif($hR &lt; 1){ $ratio = $hR; }
			else{ $ratio = 1; }
			break;
		case 'fit':
		default:
			if($wR &gt; $hR){ $ratio = $hR; }
			else{ $ratio = $wR; }
			break;
	}

	$wN = round($wO * $ratio);
	$hN = round($hO * $ratio);

	$iP = imagecreatetruecolor($wN, $hN);
	imageAlphaBlending($iP, false);
	imageSaveAlpha($iP, true);

	if($fileExtension == 'jpg'){ $iI = imagecreatefromjpeg($filePath); }
	elseif($fileExtension == 'png'){	$iI = imagecreatefrompng($filePath); }
	else{ $iI = imagecreatefromgif($filePath); }

	imagecopyresampled($iP, $iI, 0, 0, 0, 0, $wN, $hN, $wO, $hO);

	if($fileExtension == 'jpg'){ imagejpeg($iP, $newName, 90); }
	elseif($fileExtension == 'png'){ imagepng($iP, $newName); }
	else{ imagegif($iP, $newName); }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.macouno.com/2010/03/17/make-image-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

