<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0cMQX49eSp7ImA9WhRQFE8.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219</id><updated>2011-12-09T03:11:20.061-08:00</updated><category term="images" /><category term="rip tool" /><category term="2.5" /><category term="lighting" /><category term="3d" /><category term="free" /><category term="avatar" /><category term="ash" /><category term="Video Tutorial" /><category term="robot" /><category term="sketchup" /><category term="charles de gaulle" /><category term="cookbook" /><category term="2.49a" /><category term="delay" /><category term="2.5.3" /><category term="eye" /><category term="manufacturing" /><category term="multiple materials" /><category term="array" /><category term="snap" /><category term="softbody" /><category term="University" /><category term="window" /><category term="blender 2.5" /><category term="alpha 1" /><category term="yafaray" /><category term="video" /><category term="machines" /><category term="iceland" /><category term="strings" /><category term="tools menu" /><category term="scripting" /><category term="simulation" /><category term="visualization" /><category term="camera" /><category term="animated text" /><category term="local" /><category term="aircraft" /><category term="2.53" /><category term="bodies" /><category term="object" /><category term="changer" /><category term="kmz" /><category term="heathrow" /><category term="Tufts" /><category term="skybox" /><category term="extend" /><category term="cloud" /><category term="game" /><category term="blur" /><category term="beta" /><category term="split" /><category term="movie" /><category term="ui" /><category term="editor" /><category term="global" /><category term="edit" /><category term="ice" /><category term="tutorials" /><category term="color" /><category term="europe" /><category term="esa" /><category term="soft" /><category term="plume" /><category term="editing" /><category term="modeling" /><category term="armature" /><category term="project" /><category term="character" /><category term="satellite" /><category term="google" /><category term="sky" /><category term="radiosity" /><category term="points" /><category term="depth of field" /><category term="uv" /><category term="computer graphics" /><category term="bge" /><category term="web page" /><category term="schiphol" /><category term="modifier" /><category term="lists" /><category term="import" /><category term="flight" /><category term="blender" /><category term="ambient" /><category term="pivot" /><category term="imaging" /><category term="mesh" /><category term="forum" /><category term="katla" /><category term="particles" /><category term="picker" /><category term="pixar" /><category term="console" /><category term="blender. 2.49b" /><category term="composite" /><category term="edge loops" /><category term="panel" /><category term="blender game engine" /><category term="python" /><category term="occlusion" /><category term="animation" /><category term="user interface" /><category term="textures" /><category term="hd" /><category term="course" /><category term="blender 3d particle physics tutorial animation 2.49b" /><category term="class" /><category term="emitter" /><category term="python 3" /><category term="windows" /><category term="spacecraft" /><category term="orientation" /><category term="dof" /><category term="compositing" /><category term="3D Animation" /><category term="unwrap" /><category term="scripts" /><category term="farm" /><category term="default scene" /><category term="blender 2.49b" /><category term="0" /><category term="rendering" /><category term="hat" /><category term="eyjafjallajokull" /><category term="vector blur" /><category term="Script" /><category term="empty" /><category term="programming" /><category term="tutorial" /><category term="engine" /><category term="flights" /><category term="fluid" /><category term="2.50" /><category term="world" /><category term="volcano" /><category term="join" /><category term="add on" /><category term="book" /><category term="blender 3d kindle" /><category term="alpha" /><category term="melting" /><category term="slicing" /><category term="weapon" /><category term="2.49b" /><category term="expressions" /><category term="glacier" /><category term="google earth" /><category term="ira krakow" /><category term="nodes" /><category term="tool shelf" /><category term="face loop" /><category term="cg" /><title>Blender 3D Videos</title><subtitle type="html">This blog contains the scripts for my &lt;a href="http://www.youtube.com/irakrakow"&gt;Blender 3D YouTube videos&lt;/a&gt;.  They're published as follows:
&lt;br&gt;&lt;br&gt;
&lt;a href="http://bit.ly/so8tCH"&gt;Buy The Blender 3D Cookbook as a book!&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;a href="http://itunes.apple.com/us/book/the-blender-3d-cookbook-volume/id443230381"&gt;Buy the Blender 3D Cookbook for your iPad!&lt;/a&gt;
&lt;br&gt;&lt;br&gt;
&lt;a href="http://www.amazon.com/Blender-3D-Cookbook-ebook/dp/B0056N73B0"&gt;Buy the Blender 3D Cookbook for your Kindle!&lt;/a&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blender3dvideos.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blender3dvideos.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>79</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/zDOX" /><feedburner:info uri="blogspot/zdox" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C08ASX06eip7ImA9WhZbFE8.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-8090256115609268562</id><published>2011-06-18T10:57:00.000-07:00</published><updated>2011-06-18T11:30:48.312-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-18T11:30:48.312-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blender 3d kindle" /><title>Blender 3D Cookbook,  Kindle Edition</title><content type="html">I'm pleased to announce that The Blender 3D Cookbook, Volume 1, is now available on your Kindle.  You get the same content - all the scripts from my Blender 3D video tutorials, with links to them - delivered wirelessly to your Kindle.  &lt;br /&gt;&lt;br /&gt;You can read my Cookbook on your iPhone, iPad, Android phone, Blackberry, or Windows 7 phone. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/feature.html/ref=kcp_ipad_mkt_lnd?docId=1000493771"&gt;Download the Kindle Reader App for your mobile phone&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Blender-3D-Cookbook-ebook/dp/B0056N73B0/"&gt;Buy the Blender 3D Cookbook at the US Amazon Kindle Store&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.uk/Blender-3D-Cookbook-ebook/dp/B0056N73B0/"&gt;Buy the Blender 3D Cookbook at the UK Amazon Kindle Store&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.de/Blender-3D-Cookbook-ebook/dp/B0056N73B0/"&gt;Buy the Blender 3D Cookbook at the German Amazon Kindle Store&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-8090256115609268562?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/y42V9s8CtMRfRyu8nM0AqwbaIcg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y42V9s8CtMRfRyu8nM0AqwbaIcg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/y42V9s8CtMRfRyu8nM0AqwbaIcg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y42V9s8CtMRfRyu8nM0AqwbaIcg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/kC2f3m3MVXI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/8090256115609268562?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/8090256115609268562?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/kC2f3m3MVXI/blender-3d-cookbook-kindle-edition.html" title="Blender 3D Cookbook,  Kindle Edition" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2011/06/blender-3d-cookbook-kindle-edition.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQGRHc4cCp7ImA9WxFaGE8.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-2231786510550579501</id><published>2010-07-22T11:43:00.000-07:00</published><updated>2010-07-22T11:45:25.938-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-22T11:45:25.938-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="2.5.3" /><category scheme="http://www.blogger.com/atom/ns#" term="2.53" /><category scheme="http://www.blogger.com/atom/ns#" term="add on" /><category scheme="http://www.blogger.com/atom/ns#" term="3d" /><category scheme="http://www.blogger.com/atom/ns#" term="beta" /><category scheme="http://www.blogger.com/atom/ns#" term="blender 3d particle physics tutorial animation 2.49b" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><title>2.53 Beta Add Ons</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/DelgkX-oIV8&amp;amp;hl=en_US&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/DelgkX-oIV8&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;      Ira Krakow's Blender 2.53 Beta Add-Ons Tutorial&lt;br /&gt;&lt;br /&gt;Blender 2.53 Beta was officially released.  You can download this, the first Beta release of 2.5, at:&lt;br /&gt;&lt;br /&gt;&lt;a href=" http://www.blender.org/download/get-25-alpha/"&gt;&lt;br /&gt;http://www.blender.org/download/get-25-alpha/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's so new that the URL still says alpha!  Versions of 2.53 Beta can be downloaded for Windows 32bit, Windows 64 bit, Linux 32bit and 64 bit, Mac OS X, and Solaris.  As a beta version, the basic features should be in place, although bugs are still expected.  There are many bug fixes, some reorganization of window choices, and some new features.  You can read more about all the changes in Blender 2.5, at: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blender.org/development/release-logs/blender-250/"&gt;http://www.blender.org/development/release-logs/blender-250/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In this tutorial, I'm going to talk about the new Add-On repository, which is a way to extend Blender functionality by adding Python scripts.  A number of these scripts are shipped with 2.53 beta.  They are documented online in the Blender 2.5 Add-Ons Repository, at:&lt;br /&gt;&lt;a href=" http://wiki.blender.org/index.php/Extensions:2.5/Py/Scripts"&gt;&lt;br /&gt;http://wiki.blender.org/index.php/Extensions:2.5/Py/Scripts&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will show you where the add-on scripts are stored and how to install and run them.  I will also show you how to edit the source code of the installed scripts, which are a great resource for learning how to write add-ons.&lt;br /&gt;&lt;br /&gt;So without further ado, let's get started.  Note the new introductory screen, from the Sintel movie.  Pretty cool!   Here's the default scene, which hasn't changed.  However, the tool bar has been reorganized from 2.5.2 Alpha.  There's a new Origin button in the Transform group, that allows you to set the object origin.  If you press the N key in the 3D viewport to bring up the Properties window, you can see that the order of the panels has changed.  If you have played around with 2.5.2 Alpha, you should discover that the changes are relatively straightforward.  &lt;br /&gt;&lt;br /&gt;Let's get to the meat of this tutorial, Add-Ons.  To find out what Add-Ons can be installed, click on the Window Type button at the bottom left corner of the 3D Viewport, and change to the User Preferences window.  Click on the Add-Ons section.  The Add-Ons are grouped into different types:  All, Enabled, Disabled, 3D View, Add Curve, Add Mesh, Import/Export, Mesh, Object, and Render.  When Blender 2.53 beta is installed, all the Add-Ons are disabled.  You can enable just the ones you need from this window.&lt;br /&gt;&lt;br /&gt;Let's enable the first Add-On (they're in alphabetical order), Align Tools.  By clicking on the right arrow, you expand the entry.  The short description of this Add On tells you that this Add On aligns selected objects to the active object.  It also tells you where the Add-On will be installed, in this case, the Tool Shelf, as well as the Author and Version number.  For more detailed documentation, you can click on the Link to the Wiki page.  Here, we can read about the license, the version of Blender, external dependencies, usage, and, very importantly, the name of the Python script (space_view3d_align_tools.py ).  We'll need to remember that name.&lt;br /&gt;&lt;br /&gt;Going back to the Add-On install, to install Align Tools, click the little square check box at the upper right corner.  Then go to the bottom of the display and click Install Add-On.  You now need to find space_view3d_align_tools.py.  The location depends on the operating system that you're on, and how you installed Blender.  What you're looking for is the folder containing the add-ons.  On my Windows 32 system, it's at C:\Users\ira\AppData\Roaming\Blender Foundation\Blender\2.53\scripts\addons\.  Find the file and click Install Add-On.  Typically you will also want to click Save As Default to permanently install this add-on.&lt;br /&gt;&lt;br /&gt;Align Tools is now installed on the Tools menu.  Scroll to the bottom and you'll see the options.  To show how it works, we'll add a cone (SHIFT+A Mesh Cone), and rotate it.  Select the cube, then Shift-Select the cone.  Click the Align Location X button to align the X position of the cube to the X position of the cone.  Then click the Align Rotation Y button to align the Y rotation of the cube to the Y rotation of the cone.  I think you get the idea.&lt;br /&gt;&lt;br /&gt;Let's return to the User Preferences.  Click on Enabled and you see that Align Tools is now listed as enabled.  Click on Mesh.  There are add-on scripts to add 3D function surfaces, gears, gemstones, pipe joints, regular solids, and twisted torii.  Click Import/Export.  You can export camera animations, DirectX, and skeletal data, as well as import Makehuman files, skeletons, raw mesh, and STL format files.&lt;br /&gt;&lt;br /&gt;If you want to learn how to create Add Ons, looking at the add-ons that ship with Blender is a great place to start. Let's look at the source for Align Tools.  Click the Window Type button and change the window type to Text Editor.  Click on New.  From the Text menu, select Open.  Open the Align Tools file, the same one we just installed.  There's the code.  If you're so inclined, study the code and you can write your own add ons.&lt;br /&gt;&lt;br /&gt;I hope this gives you a good idea of how to run the add ons shipped with Blender 2.53 beta, and how to add your own custom functionality to Blender.  Happy Blendering.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-2231786510550579501?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Wgz6mGO8xN7i-_-Z2b4QeJkKw84/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wgz6mGO8xN7i-_-Z2b4QeJkKw84/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Wgz6mGO8xN7i-_-Z2b4QeJkKw84/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wgz6mGO8xN7i-_-Z2b4QeJkKw84/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/DZzhtEQiyXM" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2231786510550579501?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2231786510550579501?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/DZzhtEQiyXM/253-beta-add-ons.html" title="2.53 Beta Add Ons" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/07/253-beta-add-ons.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQFQX87fip7ImA9WxFaEUQ.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-7114339183807785580</id><published>2010-07-15T05:33:00.000-07:00</published><updated>2010-07-15T05:35:10.106-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-15T05:35:10.106-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="scripts" /><category scheme="http://www.blogger.com/atom/ns#" term="ira krakow" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorials" /><category scheme="http://www.blogger.com/atom/ns#" term="3d" /><category scheme="http://www.blogger.com/atom/ns#" term="cookbook" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><title>Blender 3D Cookbook, Volume 1</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2_mJzoZMdRI&amp;amp;hl=en_US&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/2_mJzoZMdRI&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt; I am pleased to announce the publication of Volume 1 of my Blender 3D Cookbook available from lulu.com, either as a book or a PDF download, at:&lt;br /&gt;&lt;a href=" http://www.lulu.com/product/paperback/the-blender-3d-cookbook-volume-1/11777448"&gt;&lt;br /&gt;http://www.lulu.com/product/paperback/the-blender-3d-cookbook-volume-1/11777448&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Blender 3D Cookbook consists of the scripts to 62 or my my Blender 3D tutorials, at http://www.youtube.com/irakrakow.  Each script has a link to the Youtube video, if you purchase the book as a PDF.  If you purchase the book, the URL is printed.  Many of you have requested such a book.  I called the book a “cookbook” because you can think of the scripts as “recipes” for producing a desired effect in Blender.&lt;br /&gt;&lt;br /&gt;I don't assume any particular level of Blender expertise.  My videos cover a wide variety of topics, from beginner to advanced, including some that I have not seen as tutorials anywhere else.  Like a cookbook, you can pick and choose those recipes you are interested in and skip the ones that you either know about or that you're not interested in.  I tried to include something for everyone, including  topics such as the Blender Game Engine and Python scripting that have  only been lightly covered in other tutorials.  If you have suggestions for future tutorials, please email me at ira.krakow@gmail.com.&lt;br /&gt;  &lt;br /&gt;As of this date, Blender is undergoing a massive rewrite and restructuring.  The current, production version, 2.49b, will eventually be replaced by version 2.5.  2.5 has a different user interface and has many improvements to old features, as well as many new features.  It is currently in alpha, which means that there could be some changes made until the day when 2.5 becomes the production version of Blender.  On my Blender 3D forum, at http://forum.irakrakow.com, I took a survey of who used what version.  I discovered that roughly half worked in Blender 2.4x (although 2.49b is the most current production version, some were working in earlier versions), and the other half worked in Blender 2.5.  I have written tutorials based on both versions.  For each tutorial, I note which version (2.49 or 2.5) I made it for.   Some of the 2.5 tutorials were done in different alpha versions, such as Alpha 0 or even pre Alpha.  For the most part, the effects I write about can be produced in any version.&lt;br /&gt;&lt;br /&gt;These tutorials are not intended to cover every conceivable Blender feature.  That would, in my opinion, be too thick a volume.  Note that I suffixed the title to this cookbook “Volume 1”.  Blender is too complex and rich a program, undergoing constant upgrading and changing, for that.  I plan on publishing many more volumes of the Blender 3D Cookbook, in the future, that will explore other amazing and unique Blender features.&lt;br /&gt;&lt;br /&gt;I welcome your feedback and hope you enjoy my cookbook.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-7114339183807785580?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UHNFtASpRpjT7fGuT8j5S3_EjaY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UHNFtASpRpjT7fGuT8j5S3_EjaY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UHNFtASpRpjT7fGuT8j5S3_EjaY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UHNFtASpRpjT7fGuT8j5S3_EjaY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/lM5UqZ4aOJo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/7114339183807785580?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/7114339183807785580?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/lM5UqZ4aOJo/blender-3d-cookbook-volume-1.html" title="Blender 3D Cookbook, Volume 1" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/07/blender-3d-cookbook-volume-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4ARHgyeCp7ImA9WxFbGE0.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-3588957585793980935</id><published>2010-07-10T16:34:00.000-07:00</published><updated>2010-07-10T16:35:45.690-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-10T16:35:45.690-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="orientation" /><category scheme="http://www.blogger.com/atom/ns#" term="mesh" /><category scheme="http://www.blogger.com/atom/ns#" term="2.5" /><category scheme="http://www.blogger.com/atom/ns#" term="global" /><category scheme="http://www.blogger.com/atom/ns#" term="object" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="local" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><title>2.5 Object Orientation</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/eP7G2dC6b4o&amp;amp;hl=en_US&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/eP7G2dC6b4o&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;The name of this tutorial is Blender 2.5 Global and Local Orientation.  Thank you to Near Hirsig (nhirsig@tufts.edu).  The tutorial on which is this based is at http://www.gryllus.net.  Blender uses 3 dimensions, X in red, Y in green, and Z in blue.  The default orientation is global.  The orientation remains constant, regardless of which object is selected or which view is active.&lt;br /&gt; &lt;br /&gt;Blender allows you to change the X, Y, and Z axis from global to local orientation.&lt;br /&gt;&lt;br /&gt;Start with the default Blender scene.  Add a torus (SHIFT+A Mesh Torus).  In global orientation, the Z axis runs up and down.  The Y axis, in green, runs towards and away from the front.  The X axis, in red, always runs horizontal to the front.&lt;br /&gt;&lt;br /&gt;Switch to Front view (NUM1).  Press R key and rotate the torus Y 45 degrees (R Y 45).  You can rotate the torus along the global X or Z axis as well.&lt;br /&gt;&lt;br /&gt;You can change the axis orientation from global to local by clicking on the Orientation dropdown box.  Change the orieentation from global to local.  The orientation is based on the object's axis.  Can rotate the torus along its X, Y, or Z axis, instead of the global X, Y, or Z axis.&lt;br /&gt;&lt;br /&gt;Select the cube.  We're still in local orientation.  However, since the cube was never rotated, the global and local orientations are the same.  Rotate the cube 45 degrees on Y axis  (R - Y - 45 - ENTER).  The Translate manipulator widget reflects the object's axes.&lt;br /&gt;&lt;br /&gt;Select the torus.  Switch from Translate manipulator widget to the Scale manipulator widget.  Scale the torus along local Z axis, or its local X axis.  &lt;br /&gt;&lt;br /&gt;Switch to the Rotate manipulator widget.  You can also rotate the torus along local Z axis and local X axis.  Since the rotation is initially around the Z axis and then the X axis, in Front view, we can see all 3 axes, local blue Z axis, local green Y axis, and the local red X axis.&lt;br /&gt;&lt;br /&gt;Switch to Translate manipulator widget.  Rotate the view to a dimensional user view.  With the cube object selected and with the orientation as local, it makes it easier to manipulate objects along its axes.  Press SHIFT+D to create a duplicate cube.  The duplicate cube moves along the same local axis. &lt;br /&gt;&lt;br /&gt;Blender also supports the View orientation, in which the orientation is the same as the view you are in, either Front, Side, Top, or User.  A new orientation for 2.5 is the Gimbal orientation which is specific to gyroscopic type objects like a top or a gyroscope.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-3588957585793980935?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DHWl0y4DutwAB6IJjcLzVRwkjmM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DHWl0y4DutwAB6IJjcLzVRwkjmM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DHWl0y4DutwAB6IJjcLzVRwkjmM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DHWl0y4DutwAB6IJjcLzVRwkjmM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/f4dCeqYuPls" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/3588957585793980935?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/3588957585793980935?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/f4dCeqYuPls/25-object-orientation.html" title="2.5 Object Orientation" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/07/25-object-orientation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8ERnY-eyp7ImA9WxFbFkU.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-977598468336487208</id><published>2010-07-09T06:05:00.000-07:00</published><updated>2010-07-09T06:06:47.853-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-09T06:06:47.853-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="empty" /><category scheme="http://www.blogger.com/atom/ns#" term="mesh" /><category scheme="http://www.blogger.com/atom/ns#" term="3d" /><category scheme="http://www.blogger.com/atom/ns#" term="object" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="modeling" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><title>2.5 Empty Object</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/eJ4gTOAN2V4&amp;amp;hl=en_US&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/eJ4gTOAN2V4&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;The name of this video tutorial is Empty Object.  A big Thank You to Neal Hirsig (nhirsig@tufts.edu), who created the tutorial on which this tutorial is based, at http://www.gryllus.net.   An Empty Object is a non renderable object that represents a point in space.  &lt;br /&gt;&lt;br /&gt;Start with the Blender default scene.  Delete the default cube by pressing the E key and confirming the delete.  Add a Tube object (SHIFT+A - Mesh - Tube).  Add a Monkey object (SHIFT+A - Mesh - Monkey).  Move it along the Y axis by pressing the G key, then the Y key, and dragging the monkey.  Duplicate the monkey (SHIFT+D) and move the duplicated monkey to the other side of the tube object, by pressing the G key, then the Y key, then dragging.  To add an Empty Object  press Shift+A and then select Empty from the Add menu.  Move the Empty object down a bit.&lt;br /&gt;&lt;br /&gt;An Empty Object is represented as an axis icon.  Turn of the Transform Widget to see this better.  Press the N key to bring up the Properties panel of the 3D Viewport.  Although it is non renderable, an Empty Object has a location, rotation, and scale.  Press the N key to hide the Properties panel of the 3D Viewport.  An empty object is often used as a placeholder or a proxy object.  In most cases it is used as a parent to other objects.  &lt;br /&gt;&lt;br /&gt;Select the monkey on the left.  Then SHIFT+RMB to add the tube to the selection.  Press SHIFT+RMB to add the monkey on the right to the selection. Press Shift+RMB to add the Empty object to the selection.  Press CTRL+P to make the Empty the parent of the other three objects.  Now we can select the Empty Object, press the G key, and move the three objects by moving just the Empty Object.  Undo the parenting of the Empty Object by pressing ALT+P and selecting Clear Parent.&lt;br /&gt;&lt;br /&gt;An Empty Object is also sometimes used as a reference point.  Select the Tube object.  Tab into Edit mode.  Deselect the vertices with the A key. Select the center vertex at the bottom of the tube.  You can reference the center vertex on bottom of the tube multiple times during modeling.  Press SHIFT+S and snap the cursor to the selected vertex.  Tab out of Edit mode.  Add an empty object with SHIFT+A to reference the vertex.  Now you can use the second Empty object to snap the cursor to the vertex, instead of having to go into Edit mode again to select the vertex.&lt;br /&gt;&lt;br /&gt;An Empty Object is often used as part of a constraint system.  We'll make the first Empty Object as the target of the constraint.  Select the Camera object. Add a Track To constraint. To: = -Z and Up: Y.  Make the first Empty object (Empty) the Target of the constraint.  The camera is now tracking the Empty object.  If the camera is moved, it still points to the empty object.  This is a convenient method of animating or focusing the camera or what the camera is focused on.  Moving the Empty object makes the camera move as well.&lt;br /&gt;&lt;br /&gt;Empty objects can be duplicated.   One Empty Object can be the parent of another Empty Object.  You'll discover many uses of the Empty Object as you grow and develop your Blender modeling skills.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-977598468336487208?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SElnu7jm468a6GFf_mi08nDDbac/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SElnu7jm468a6GFf_mi08nDDbac/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SElnu7jm468a6GFf_mi08nDDbac/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SElnu7jm468a6GFf_mi08nDDbac/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/kA8_a3DfL_8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/977598468336487208?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/977598468336487208?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/kA8_a3DfL_8/25-empty-object.html" title="2.5 Empty Object" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/07/25-empty-object.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYAQno6eip7ImA9WxFbFk4.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-2245041913614166839</id><published>2010-07-08T18:14:00.000-07:00</published><updated>2010-07-08T18:15:43.412-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-08T18:15:43.412-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="split" /><category scheme="http://www.blogger.com/atom/ns#" term="2.5" /><category scheme="http://www.blogger.com/atom/ns#" term="extend" /><category scheme="http://www.blogger.com/atom/ns#" term="editor" /><category scheme="http://www.blogger.com/atom/ns#" term="3d" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="join" /><category scheme="http://www.blogger.com/atom/ns#" term="ui" /><category scheme="http://www.blogger.com/atom/ns#" term="user interface" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><title>2.5 Splitting and Joining Windows</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AMBi1R7KB48&amp;amp;hl=en_US&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/AMBi1R7KB48&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;The name of this video is Splitting, Joining, and Expanding Editor Windows.  It is possible to expand an editor window by moving the cursor to the edge of the window until you see a double arrow.  Left click and drag the window open.  This can be done horizontally or vertically.&lt;br /&gt;&lt;br /&gt;You also can split an editor editor into multiple editor windows.  To split, place the cursor in the upper right hand corner of the editor window.  There's a splitter widget that looks like a ridged thumb grip.  When the cursor turns into a cross, left click and drag the cursor horizontally to create a vertical split.  You can also create a horizontal split by placing the cursor in the splitter widget until a cross appears, and left clicking and dragging the cursor vertically to create a horizontal split.  Each window has its own header window and an associated tool panel.&lt;br /&gt;&lt;br /&gt;You can click on the Type button at the far left of the window header menu line.  Can change this window to a text editor editor.&lt;br /&gt;&lt;br /&gt;You can join two vertical windows with the same width, or any two horizontal windows that have the same height.  To join, you can move the cursor on one of the splitter widgets, from one window to the other and make it a joined window.  Large grey arrow shows the direction of the change.  With the left mouse button pressed, you can drag into either of the windows to join to control the direction of the split.  Here I will join two vertical windows into one 3D window.&lt;br /&gt;&lt;br /&gt;Notice that each panel inside the editor window also contains a thumb grip splitter widget.  So you can join and split the windows you just created.  In the case of a panel, you can arrange the placement of the panel within the editor window.  Place the cursor on the splitter widget in Layers panel and drag to above the Render Panel.  Panels cannot be moved from one editor window to another editor window.&lt;br /&gt;&lt;br /&gt;You can also make any blender window full screen.  To do that, click in the window to give the cursor focus.  Then press CTRL+Down Arrow.  That makes it full screen.  To make it regular screen press CTRL+Down Arrow again.  CTRL+Up works as well.  It's a toggle.  We'll make the 3D Viewport full screen, and then make it regular screen.  We'll make the Outliner window full screen and then revert back to regular size.  Switching between full screen and regular size windows will make your modeling much more efficient.&lt;br /&gt;&lt;br /&gt;The new 2.5 user interface makes it easy for you to control the size and placement of your windows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-2245041913614166839?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ilwgOinyVWIFteR-l_WiYjlbKJY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ilwgOinyVWIFteR-l_WiYjlbKJY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ilwgOinyVWIFteR-l_WiYjlbKJY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ilwgOinyVWIFteR-l_WiYjlbKJY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/sSg9eQR5dBg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2245041913614166839?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2245041913614166839?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/sSg9eQR5dBg/25-splitting-and-joining-windows.html" title="2.5 Splitting and Joining Windows" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/07/25-splitting-and-joining-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4ARnwyfSp7ImA9WxFbFk0.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-1224259402200892200</id><published>2010-07-08T09:01:00.001-07:00</published><updated>2010-07-08T09:02:27.295-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-08T09:02:27.295-07:00</app:edited><title>2.5 Object Origin Center</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/wmCRTfa8YJk&amp;amp;hl=en_US&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/wmCRTfa8YJk&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The name of this tutorial is Blender 2.5 Object Origin Center Tutorial.   Each object in Blender has a center point.  In 2.5, this is called the Object Origin.  In Blender 2.49 the origin was called the Object Center, although the problem is that the object's origin is not always at the center, and this can cause problems.&lt;br /&gt;&lt;br /&gt;Add a monkey (Shift+A Mesh Monkey).  Move the monkey (G key) so that the monkey displays separately from the cube.  Select the cube object.  Make sure the cube is in Object Mode.  If it's not, press the tab key.  Turn off the translate manipulator widget.  Zoom in a bit.  The cube's center point, or origin, is the small dot in center of cube.  By default it's not visible unless the object is selected.  To see all the object origins, whether or not the object is selected, press the N key to bring up the properties panel of the 3D viewport.  Check the Display All Object Origins check box.  If the check box is not selected, only the object origin of the selected object displays.&lt;br /&gt;&lt;br /&gt;Press the Z key to go to wireframe mode.  Here is the object origin.  Turn on the translate manipulator widget.  The widget is located at the object origin when the object is selected.  You can move the cube along the X axis (red), the Y axis (green), or the Z axis (blue) using the translate manipulator.&lt;br /&gt;&lt;br /&gt;Hold the Shift key down and click on the rotate manipulator widget.  This adds the rotate manipulator to the translate manipulator.  The rotate manipulator is also located at object origin.  The object rotates relative to the position of the object origin, along the X, Y, or Z axis.&lt;br /&gt;&lt;br /&gt;Hold the Shift key down and click on the scale manipulator widget.  This adds the scale manipulator widget, which is also located at object origin.  The object scales relative to the X, Y, or Z axis.&lt;br /&gt;&lt;br /&gt;Switch back to translate manipulator widget.&lt;br /&gt;&lt;br /&gt;Tab into Edit mode.  Deselect all the vertices by pressing the A key.  Go to Front View (NUM1).  Box select all the vertices, move them to the right.  Object origin is now not in center of object.  This is what happens when you manipulate object subcomponents in edit mode.  Select all the vertices and move them all, in edit mode.  Tab into Object Mode.&lt;br /&gt;Now the object origin not even inside the object.&lt;br /&gt;&lt;br /&gt;There is no method to select the object origin.  However, there is a command to move the origin to the center of object.  From the Object menu, select Transform, then Origin to Geometry.  This commanbd moves the object's origin point to the center of object geometry.  The shortcut is Shift+Control+Alt+C.&lt;br /&gt;&lt;br /&gt;In 2.49 this command was called Center New and was activated by pressing a button.  It's good modeling practice to set the object's origin to the center of the object.    &lt;br /&gt;&lt;br /&gt;You can create a tool button to set the origin, similar to Center, Center New, and Center Cursor in 2.49.  Click the Add Tool button.  Type in Set Origin.  Select Set Origin from list.  Now there's a tool button to set the object's origin.  Then tab to edit mode, leaving the origin point behind.  Set origin tool button, now setting Origin to Geometry.  Now the origin is at the center of the object.&lt;br /&gt;&lt;br /&gt;To summarize, making sure that the origin point of your object is where you want it to be, usually at the object's center, can prevent you from getting unexpected results when you're modeling.  Happy Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-1224259402200892200?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MukGWEXLjdNNp_whrwERzZyl1v4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MukGWEXLjdNNp_whrwERzZyl1v4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MukGWEXLjdNNp_whrwERzZyl1v4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MukGWEXLjdNNp_whrwERzZyl1v4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/EP2B6zggl88" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/1224259402200892200?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/1224259402200892200?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/EP2B6zggl88/25-object-origin-center.html" title="2.5 Object Origin Center" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/07/25-object-origin-center.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4NQnY7fSp7ImA9WxFbFk0.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-2202715940788101849</id><published>2010-07-07T03:11:00.001-07:00</published><updated>2010-07-08T09:03:13.805-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-08T09:03:13.805-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mesh" /><category scheme="http://www.blogger.com/atom/ns#" term="2.5" /><category scheme="http://www.blogger.com/atom/ns#" term="3D Animation" /><category scheme="http://www.blogger.com/atom/ns#" term="default scene" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><title>2.5 Default Scene</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7cHzs0ga-DY&amp;amp;hl=en_US&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/7cHzs0ga-DY&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;The name of this video tutorial is Ira Krakow's Blender 2.5 Default Scene Tutorial.  I would like to give a big Thank You shoutout to Neal Hirsig, of Tufts University, at http://www.gryllus.net, who created the video on which my video is based.&lt;br /&gt;&lt;br /&gt;When you first open Blender a number of default windows, panels, and controls, are displayed.  At first you might be intimidated by it, but as you become more familiar with the Blender interface, you'll find that the layout is very well organized and provides an efficient interface for modeling and animation.  The default layout contains are 5 Blender windows, called editors.  Each of these editors contains a header and a menu line.  Sometimes the header is at the top, other times at the bottom.  Even though you might think of a header at the bottom as a footer, Blender calls it a header.  &lt;br /&gt;&lt;br /&gt;The first default editor window is called the Information Editor, located at the very top of the display.  This window contains just a header line with frequently used commands in menu form.  There is information about the scene, object or subobject elements, memory, and selection.&lt;br /&gt;&lt;br /&gt;The second editor window is the Outliner Editor, with a small header window, and a small window at the right, as a hierarchical display. &lt;br /&gt; &lt;br /&gt;The third editor window is called the Properties Editor. It's a cluster of context buttons, panels, and controls, which control texturing, rendering, lighting and scene objects.  I will move the cursor until I see a double arrow.  Left click and drag the window to the left to get a better look at it.  All Blender windows can be extended this way eiher horizontally or vertically.  The Properties Editor consists of context buttons, similar to tabs, that change panels and controls below depending on the context.  Below the context buttons are panels that open and close when you click on the  open/close arrows.  Inside the panels are controls, which manipulate the scene based based on context, These controls are typically either a function, option, or vzlue.  I'll resize this window based on the original size.  &lt;br /&gt;&lt;br /&gt;The fourth editor window is the Timeline editor, at the bottom of the display, which has a header window that contains animation or playback controls, and a running timeline that displays the position of the playback head, with keyframes that you have added to your animation.&lt;br /&gt;&lt;br /&gt;The fifth editor window, which comprises most of the default display, is the 3D Viewport editor window.  This is where you'll concentrate much of your modeling attention.  It consists of a header menu, located at the bottom of the window, that contains viewing and selecting controls.  On the far left of the 3D editor window are a number of tool panels for button controls for manipulating selected objects and adding keyframes.  On the right is a large viewing space for viewing, selecting, and transforming your 3D objects.  This 3D viewing space, which constitutes the visible Blender scene, contains the default cube object, a lamp object, and a camera object.  When I select any of the objects by right clicking on them, the various editor windows panels automatically change based on the object being selected.&lt;br /&gt;&lt;br /&gt;It's possible to change the type of the editor window.  Click on the Editor Type button located on the left end of every editor header menu.  For instance, here I will change the 3D editor window the the File Browser editor window.&lt;br /&gt;&lt;br /&gt;Now I will change it to the User Preferences editor window.&lt;br /&gt;&lt;br /&gt;Now I will change it back to the 3D Viewport.&lt;br /&gt;&lt;br /&gt;The default Blender window can be changed.  I suggest you make only minor changes until you become more familiar with the location of the editor panels, context buttons, and controls available in Blender.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-2202715940788101849?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UjPH5ax0lhutX2m2gZT40fbBj60/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UjPH5ax0lhutX2m2gZT40fbBj60/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UjPH5ax0lhutX2m2gZT40fbBj60/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UjPH5ax0lhutX2m2gZT40fbBj60/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/-xv2Wfjc53A" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2202715940788101849?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2202715940788101849?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/-xv2Wfjc53A/blender-25-default-scene.html" title="2.5 Default Scene" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/07/blender-25-default-scene.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04HRXw7fCp7ImA9WxFXEUw.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-234023176265127521</id><published>2010-05-17T10:03:00.000-07:00</published><updated>2010-05-17T10:05:34.204-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-17T10:05:34.204-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="blender 2.49b" /><category scheme="http://www.blogger.com/atom/ns#" term="yafaray" /><category scheme="http://www.blogger.com/atom/ns#" term="rendering" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="compositing" /><title>2.49b Yafaray Tutorial</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YrPZPLNKVg8&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/YrPZPLNKVg8&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;YafaRay is an external renderer (download it from www.yafaray.org) that is integrated with Blender 2.49 via Python scripts.  You can add many dramatic features, such as global illumination, caustics, enhanced ray tracing, and self illuminated objects, to your renders, with YafaRay.  YafaRay extends Blender's built in renderer with special types of lighting, new material options, and enhanced world settings.  It's not intuitive how to run YafaRay to get these features.  YafaRay works with the settings you set up in Blender, ignores some of them, and adds other features.  The goal of this tutorial is to show you an efficient workflow of Blender and YafaRay.  I can't cover all of the features in a short video.  Hopefully, there will be enough for you to get started and to explore more on your own.  There's no substitute for practice.  I am assuming that you have installed YafaRay correctly to work with Blender 2.49b.&lt;br /&gt;&lt;br /&gt;1)  Delete the default cube.  Go to Front View (Num1).  Add the monkey (Space - Add - Mesh - Monkey).  Give the monkey a red material by going to the Shading buttons (F5) and clicking Add New.  Set the diffuse color to R=1, G=0 and B=0.  Name the material MonkeyMat, so we can track it in YafaRay.  It's a good idea to name the material something that is associated with the object it's with, to track it in YafaRay.  Go to the Edit buttons (F9).  Press Set Smooth.  Add a plane below the monkey (Space - Add - Mesh - Plane).  Scale the plane up 10 times (S - 10 - ENTER).  Add a green material by pressing F5 (Shading), selecting Add New, and setting the diffuse color to R=0, G=1, and B=0.  Name the material PlaneMat.  Press F12 to render, using the Blender internal renderer.&lt;br /&gt;&lt;br /&gt;2)  Split the 3D window into two, one on the left and the other on the right.  Change the left window to a Scripts window.  Change the right window to an Outline window.  Click on the Scripts menu.  Select the Render menu item.  Then click YafaRay Export 0.1.1.  Press the RENDER button to see how YafaRay renders the same scene.  Everything looks grayish, including the background.  Neither the monkey's material, the plane's material, nor the background, is applied in the render.  The World background is not applied either.&lt;br /&gt;&lt;br /&gt;3)  Some Blender 3D settings are exported to YafaRay.  Others are not.  Let's fix the World setting first.  To fix that, click on World.  There are a number of background settings.  For a single color, click on Single Color and select the color.  Let's make it blue (R=0, G=0, B=1).  Click RENDER.  We now have a blue background.&lt;br /&gt;&lt;br /&gt;4)  We can also have a gradient.  Close the render window.  Click the World button again.  Select Gradient.  You can have a Horizon color, a Zenith color, a Horizon Ground color, and a Zenith Ground color.  Click RENDER.&lt;br /&gt;&lt;br /&gt;5  An intriguing World setting is Sun Sky, which gives a sunny background.  Again, close the render window and click the World button.  Click on Sun Sky.  Click on the Add Real Sun button.  Click RENDER.  Now the world looks sunny.  There are quite a number of options you can play with.&lt;br /&gt;&lt;br /&gt;6)  Let's fix the monkey and plane materials.  Click the Always Show Active Object button so that we can be sure we're working on the material for the active object (PlaneMat for the Plane, MonkeyMat for the Monkey).  Let's make the plane a green Shiny Diffuse material.  Change the Color to Green (R=0, G=1, B=0).  Press the RENDER button to see the change.  In the Outline window, click on Suzanne to change the active object to the monkey.  Make the monkey a Shiny Diffuse material as well.  Change its color to Red (R=1, G=0, B=0).  Press the RENDER button.  Now the monkey is red, the plane is green, and the background is blue, similar to the render from Blender's internal renderer.&lt;br /&gt;&lt;br /&gt;7)  An interesting built in YafaRay material is Coated Glossy.  Let's apply that material to Suzanne.  Change the Diffuse color to Red, and the Glossy color to Yellow (R=1, G=1, B=0).  Click the RENDER button.  There are many other material settings you can play with.&lt;br /&gt;&lt;br /&gt;8)  The Blender camera has additional capabilities in YafaRay.  Change the selected object to the Camera.  Click the Objects button.  The default mode is Perspective, as in Blender 3D.  A dramatic effect is Angular, which gives us a spherical, angular look when we render.  We can adjust the Max angle to change the diameter of the sphere, giving the render a fisheye effect.  The Mirrored effect gives the apparence of the scene as if from behind a mirror.  Click the Mirrored button.  You can adjust the mirror angle.  Orthographic gives results similar to Blender's orthographic camera.  Change the Scale to 15 and click the RENDER button.  Architect is similar to orthographic, except that the vertical lines are parallel.&lt;br /&gt;&lt;br /&gt;9)  If you want to save the render as an image file, you need to do it before you exit out of the render window.  Click the RENDER button.  From the Image button, click Save As.  YafaRay lets you save an image as a BMP file, a PNG file (which has an alpha channel), and an EXR file (for HDR images that include extra color information).&lt;br /&gt;&lt;br /&gt;10)  You can make any mesh a light source in YafaRay.  The light emanates from the face normals of the mesh.  To illustrate, let's make the monkey a mesh light.  Select Suzanne from the outliner.  Click on Object in YafaRay.  Then click Enable meshlight, and press RENDER.  Suzanne acts like a light bulb, even casting shadows of itself on the plane!  Neat!  Click Enable Meshlight again to turn off the monkey as a mesh light.&lt;br /&gt;&lt;br /&gt;11)  YafaRay adds more functionality to the different Blender lamps.  From the Outline window, select the Lamp.  In the Buttons window, change the Lamp type to Sun.  Click the RENDER button. The Sun lamp, when turned on, gives the effect of direct sunlight.  The light can project either as a cylinder or a cone.  &lt;br /&gt;&lt;br /&gt;12)  From the Buttons window, change the lamp to a Spot light.  In YafaRay, change the type to Spot.  Click the RENDER button.  Now we have a nice spot light.  We can adjust the Spot Size (angle) and the blurriness of the spot in the buttons window, in Blender 3D itself.&lt;br /&gt;&lt;br /&gt;13)  Go to 3D view.  Let's duplicate the lamp, move it to the left side of the monkey, and rotate the lamp to point at the monkey.  Change the lamp to an area lamp.  Go back to YafaRay by selecting Yafaray Export 0.1.1 from the Render menu.  Click the RENDER button.  Now you have shadows coming from the area and sot lamps.&lt;br /&gt;&lt;br /&gt;14)  Click on Settings.  You can turn on Ambient Occlusion under the Direct Lighting settings, with AO type shadows.  You can also try Photon Mapping, which produces the results you see.  Path Tracing gives you yet another option to customize your render.&lt;br /&gt;&lt;br /&gt;I hope this gives you some idea of the power of the combination of Blender and YafaRay.  It's a great combination.  There's certainly more you can explore.  If you liked this video, be sure to hit the Subscribe button on YouTube.  Also, please comment on this tutorial at my Blender 3D Forum, at http://forum.irakrakow.com.  Happy Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-234023176265127521?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/v81pZ16bAdZkNP0kuBgTvy3hYNM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v81pZ16bAdZkNP0kuBgTvy3hYNM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/v81pZ16bAdZkNP0kuBgTvy3hYNM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v81pZ16bAdZkNP0kuBgTvy3hYNM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/l6-Twlh5XuU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/234023176265127521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/234023176265127521?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/l6-Twlh5XuU/249b-yafaray-tutorial.html" title="2.49b Yafaray Tutorial" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/05/249b-yafaray-tutorial.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YBQH8zfSp7ImA9WxFQFEg.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-2647281809976501067</id><published>2010-05-09T17:24:00.001-07:00</published><updated>2010-05-09T17:25:51.185-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-09T17:25:51.185-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="mesh" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="hat" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><category scheme="http://www.blogger.com/atom/ns#" term="2.49b" /><title>2.49b Hat Creation</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-mPtxa_MEPA&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/-mPtxa_MEPA&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;This tutorial is based on the Blender 3D Noob to Pro Wikibook Hat Creation Tutorial, at: http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Creating_a_Simple_Hat.  Even though the hat is simple, creating it shows off an advanced Blender mesh feature, the Spin tool.  The wikibook actually creates the hat as one step in creating a simple person.  In this tutorial, I will just focus on how to create the hat object.  We will create the hat from a mesh circle.  Although I used Blender 2.49b, this tutorial should work in any Blender 2.4x version, because we will set up the user preferences explicitly.&lt;br /&gt;&lt;br /&gt;Steps:&lt;br /&gt;1)  Expand the User Preference window by dragging down on its bottom border.  In the Views &amp; Controls panel, enable View Name, so that we know what view we're working in.  Then click on Edit Methods.  In the Add New Objects section, click Aligned to View.  This will make Blender create new objects aligned to whatever view we're in.  After you have made these changes, drag up on the bottom border to contract the User Preferences to its original position.&lt;br /&gt;&lt;br /&gt;2)  Delete the default cube.  Right click to select, then press X and Enter to confirm.&lt;br /&gt;&lt;br /&gt;3)  The 3D View is in Top View, with orthographic projection.  Orthographic projection is best when modeling because the model's size is not affected by distance.  Press Num3 to go to Right Side view.&lt;br /&gt;&lt;br /&gt;4)  Press Shift-C to place the 3D cursor at 0,0,0.  We know the 3D cursor is there because it's at the intersection of the blue line (the Z axis) and the green line (the Y axis).&lt;br /&gt;Press the C key to center the view.&lt;br /&gt;&lt;br /&gt;5)  Add a circle mesh with 12 vertices, by pressing Space - Add - Mesh - Circle.  Change the number of vertices from the default to 12, from the default of 32 vertices.  Click OK.&lt;br /&gt;&lt;br /&gt;6)  Now we are going to make the outline of the hat.  It's this outline that we will spin to create the hat.  Press Tab to go into Edit Mode.  Then, switch to Edge Select mode by either pressing Control-Tab and selecting Edges, or clicking on the diagonal line icon that signifies an edge.  Delete the three bottom edges by right clicking the first edge, and shift right clicking to add the second and third edges to the section.  Then press the X key and select Edges.&lt;br /&gt;&lt;br /&gt;7)  We're going to move some vertices to create the hat outline.  Switch to Vertex Select mode by either pressing Control-Tab and selecting Vertices, or clicking on the icon with the little spots that indicate vertex select mode.  Disable the transform manipulator by clicking on the hand icon, or by pressing Control-Space Bar and selecting Disable.&lt;br /&gt;Right click on the 2 leftmost vertices, one at a time, and press the G key to move them so that they make a hat brim on the left.  Then do the same with the 2 rightmost vertices.  Move each of them, one at a time, so that they make a hat brim on the right.  This is our hat shape, the shape we are going to spin.&lt;br /&gt;&lt;br /&gt;8)  Before we use the Spin tool, we need to position the 3D cursor in the correct spot.  In this case, the 3D cursor needs to be at the rightmost vertex of the hat outline.  First select the rightmost vertex.  Then press Shift-S and choose Cursor -&gt; Selection.  The cursor snaps to the rightmost vertex.&lt;br /&gt;&lt;br /&gt;9)  Now select all the vertices of the outline by pressing the A key twice (the first time, to deselect the rightmost vertex, the second time to select all the vertices of the outline).&lt;br /&gt;&lt;br /&gt;10) Press Num7 to go into Top View.  Switch to the Editing panel (F9).  In the Mesh Tools tab, find the Spin, Spin Dup and Screw buttons.  We need to fill in the fields in the next line to get the Spin tool to create a complete hat.  Set Degr to 360 (a full circle rotation), Steps to 12, and Turns to 1 (we only need one turn).&lt;br /&gt;&lt;br /&gt;11) Now the magic happens.  Click the Spin button.  Something happened, but was a hat created.  Well, if we press Num3 to go to Right Side view, we see that indeed we did create a hat.  What happened was that the outline we created was spun around the Z axis to create the hat.  Press F12 to render.&lt;br /&gt;&lt;br /&gt;12) We have a hat, but there are is a seam.  The reason is that we have duplicate vertices.  The Spin actually created two copies of the outline, one at 0 degrees and another at 360 degrees.  To fix this problem, press the A key twice to select all the vertices.  Then press the W key to bring up the Specials menu.  Select Remove Doubles.&lt;br /&gt;&lt;br /&gt;13)  To make a back visor, go to Edge Select mode, and select the back 4 edges.  Press E to extrude the edges, then Z to extrude them in the Z direction, downwards, so it's really the -Z direction.  Press F12 to render.&lt;br /&gt;&lt;br /&gt;14) To smooth out the hat, to make it look less like a bunch of triangles, from the Edit Menu (F9), in the Links and Materials section, press Set Smooth.  Then, in the Modifiers tab, select Subsurf, at Level 3.  Then press F12 to render.&lt;br /&gt;&lt;br /&gt;There it is...your basic hat shape.  You can now add some nice materials and textures, maybe a feather, and shape the hat any way you want.  I hope you enjoyed this tutorial.  If you did, please hit the Youtube Subscribe button so you won't miss any more of my tutorials.  Also, please comment on my Blender form at http://forum.irakrakow.com.  Happy Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-2647281809976501067?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LQUH6fusaPJD1X0Jg_PVU11Fy8E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LQUH6fusaPJD1X0Jg_PVU11Fy8E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LQUH6fusaPJD1X0Jg_PVU11Fy8E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LQUH6fusaPJD1X0Jg_PVU11Fy8E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/zrS5QW_DEhA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2647281809976501067?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2647281809976501067?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/zrS5QW_DEhA/249b-hat-creation.html" title="2.49b Hat Creation" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/05/249b-hat-creation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IHRnwycSp7ImA9WxFSFkQ.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-8932390336323285289</id><published>2010-04-19T08:14:00.000-07:00</published><updated>2010-04-19T08:38:57.299-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-19T08:38:57.299-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="images" /><category scheme="http://www.blogger.com/atom/ns#" term="plume" /><category scheme="http://www.blogger.com/atom/ns#" term="charles de gaulle" /><category scheme="http://www.blogger.com/atom/ns#" term="ash" /><category scheme="http://www.blogger.com/atom/ns#" term="aircraft" /><category scheme="http://www.blogger.com/atom/ns#" term="volcano" /><category scheme="http://www.blogger.com/atom/ns#" term="esa" /><category scheme="http://www.blogger.com/atom/ns#" term="iceland" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="schiphol" /><category scheme="http://www.blogger.com/atom/ns#" term="satellite" /><category scheme="http://www.blogger.com/atom/ns#" term="heathrow" /><category scheme="http://www.blogger.com/atom/ns#" term="flights" /><title>Iceland Volcano Update April 19 2010</title><content type="html">This is an update on the status of the Iceland volcano, as of Monday, April 19, 2010.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.esa.int/esaCP/SEMGMZUZJND_index_0.html"&gt;Image of ash cloud&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This image, acquired on 15 April 2010 by Envisat's Medium Resolution Imaging Spectrometer (MERIS), shows the vast cloud of volcanic ash sweeping across the UK from the eruption in Iceland, more than 1000 km away. The ash, which can be seen as the large grey streak in the image, is drifting from west to east at a height of about 11 km above the surface Earth. Courtesy of the European Space Agency.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.universetoday.com/wp-content/uploads/2010/04/volcano-sn1.jpg"&gt;Incredible images from close up of volcano&lt;/a&gt;. Another view of Eyjafjallajokull volcano on April 17, 2010. Image courtesy Snaevarr Gudmundsson.  Radar image courtesy of Icelandic Coastal Patrol.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jardvis.hi.is/"&gt;Great pictures of volcano eruption&lt;/a&gt;.  Icelandic Institute of Earth Sciences.&lt;br /&gt;&lt;br /&gt;&lt;a href=" http://www.esa.int/esaCP/SEMGMZUZJND_index_0.html"&gt;From the European Space Agency (ESA):  Animation of Ash Plume from Icelandic Eruption&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.icenews.is/index.php/2010/04/17/iceland-volcano-coming-to-an-end/"&gt;A University of Iceland geophysicist says there are now clear signs that the Eyjafjallajokull volcano, which began erupting on Wednesday, is slowing down.&lt;/a&gt; Attention is now turning to the more violent Katla volcano which many fear will erupt next. However, there are no indications that Katla is reawakening at the moment.&lt;br /&gt;&lt;br /&gt;AFP reports Sigrun Hreinsdottir, a geophysicist with the University of Iceland, as saying that the lava flow has slowed and that the whole eruption could now slow dramatically as a result.&lt;br /&gt;&lt;br /&gt;&lt;a href=" http://news.bbc.co.uk/2/hi/science/nature/8629609.stm"&gt;Aviation authorities have now extended restrictions on UK airspace until 0100 BST on Tuesday.&lt;br /&gt;&lt;/a&gt;  According to the UK's Met Office, the eruption of the Eyjafjallajoekull volcano in Iceland is "weakening", but weather patterns, for the time being, continue to blow volcanic ash towards the UK.&lt;br /&gt;&lt;br /&gt;"We will continue to offer advice to Nats (the UK's air traffic control authority) about the spread of any residual ash," the Met Office said on its website. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.usatoday.com/travel/flights/2010-04-18-volcano_N.htm"&gt;From USAToday.com&lt;/a&gt;&lt;br /&gt;Also Monday, a senior Western diplomat said that several NATO F-16 fighters that flew through the ash cloud had suffered engine damage — evidence that the danger from the cloud is very real.  The official declined to provide more details on the military flights, except to say that glasslike deposits were found inside the planes' engines. He spoke on condition of anonymity due to the sensitivity of the information.&lt;br /&gt;&lt;br /&gt;Book your volcano flight at the &lt;a href=" http://www.hotelranga.is/"&gt;Hotel Ranga,&lt;/a&gt; about 25 miles from the volcano.  According to the Web site:  Hotel Rangá is safely outside the evacuation area and is open. The hotel is heavily booked due to interest in the volcanic eruption, so please make your bookings now!  Helicopters will continue to fly sightseeing tours from the hotel for a close-up view of the spectacular display. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nydailynews.com/news/world/2010/04/18/2010-04-18_wounded_troops_diverted_from_german_medical_center_after_volcano_shuts_down_airs.html"&gt;&lt;br /&gt;New York Daily News&lt;/a&gt;:  Wounded troops from Afghanistan and Iraq are being diverted from the Landstuhl medical center in Germany to Andrews Air Force Base in Maryland, and then will be treated at Walter Reed Hospital in Washington, DC.  The planes have to refuel in mid air over Italy to make the flight over to the USA.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.examiner.com/x-3122-Chicago-International-Travel-Examiner~y2010m4d18-Iceland-volcano-eruption-update-Some-positive-developments"&gt;Some positve developments&lt;/a&gt;:  France reopened some southern airports Sunday, including ones serving Marseille and Nice. Spain lifted flight restrictions on all its airports. And Germany was allowing a few airports to open, including ones serving Berlin, Frankfurt, and Leipzig.&lt;br /&gt;&lt;br /&gt;The Met Office, the official meteorological authority for the United Kingdom, forecast a northwest movement of much of the volcanic ash cloud over Europe for early Monday, leaving large portions of the southern and eastern parts of the continent free of ash. Perhaps 50 percent of European airspace may be available for air travel tomorrow, according to European Union Transport Commissioner Siim Kallas. However, there was no good news for the UK.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.telegraph.co.uk/news/worldnews/europe/iceland/7601178/Iceland-volcano-an-eyeful-of-Eyjafjallajokull.html"&gt;&lt;br /&gt;Eyewitness account of flying over the volcano&lt;/a&gt;.  "Not for the faint hearted".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://http.ruv.straumar.is/static.ruv.is/vefur/01042010_flogid_yfir_gosstodvar_1_april.wmv"&gt;&lt;br /&gt;Icelandic TV footage of volcano&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/hostednews/ap/article/ALeqM5jh7lQ-qBxQMPzPd3Iap7_s3YDBfQD9F5H4M81"&gt;Air France claims it did a successful test flight from Paris to Toulouse, in the south.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nytimes.com/2010/04/19/business/global/19impact.html?hp"&gt;&lt;br /&gt;New York Times&lt;/a&gt;:  TUI, the largest travel operator in Germany. flew 540 of its customers from the Spanish island of Mallorca to Barcelona. After staying overnight in hotels paid for by TUI, the vacationers boarded a dozen buses for a 20-hour trip to Frankfurt. From there they continued home by train.&lt;br /&gt;&lt;br /&gt;Kenyan growers, who account for 35 percent of the European Union’s imports of flowers, are losing up to $2 million a day in earnings because they cannot fly their blooms to market, Reuters reported.  Produce growers in North Africa and Israel will suffer the same effect. Most fresh produce travels by air because it is perishable.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.technologyreview.com/blog/energy/25064/"&gt;According to MIT's Technology Review, the volcano eruption will not slow global warming.&lt;/a&gt;&lt;br /&gt;Alan Robock, a professor of environmental studies at Rutgers University, who has studied the impact of volcanoes on climate, told me:&lt;br /&gt;&lt;br /&gt;    So far the volcano has only put out less than 0.004 Mt of SO2, compared to the 20 Mt that the 1991 Mt. Pinatubo eruption injected into the stratosphere. Furthermore, the Icelandic emission was only into the lower atmosphere, where the lifetime is on the order of one week, as opposed to a couple years in the stratosphere. So too little, and staying in the atmosphere for too short a time. So far.&lt;br /&gt;&lt;br /&gt;To make an impact globally, the volcano would have to erupt much more violently (or perhaps trigger nearby volcanoes to erupt violently) so that the larger amounts of sulfates would reach the stratosphere and stay in place, he says. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://finance.yahoo.com/news/Volcano-flight-chaos-leaves-apf-3329262171.html?x=0&amp;sec=topStories&amp;pos=1&amp;asset=&amp;ccode="&gt;&lt;br /&gt;Stranded passengers are broke&lt;/a&gt;.  Hotels are raising their prices.  Many people on holiday have spent their last funds.&lt;br /&gt;&lt;br /&gt;The Herald says the Royal Navy may be deployed in an unprecedented operation to ferry home some of the estimated 150,000 Britons stranded abroad by the global aviation crisis, a story also carried by The Courier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-8932390336323285289?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aVILQQzRfb5x6_WmPe3nEIzJko8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aVILQQzRfb5x6_WmPe3nEIzJko8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aVILQQzRfb5x6_WmPe3nEIzJko8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aVILQQzRfb5x6_WmPe3nEIzJko8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/D61_MjqEiGw" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/8932390336323285289?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/8932390336323285289?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/D61_MjqEiGw/iceland-volcano-update-april-19-2010.html" title="Iceland Volcano Update April 19 2010" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/04/iceland-volcano-update-april-19-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8BQ3k6eip7ImA9WxFSFk0.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-719745601000175132</id><published>2010-04-18T09:06:00.000-07:00</published><updated>2010-04-18T09:40:52.712-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-18T09:40:52.712-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iceland" /><category scheme="http://www.blogger.com/atom/ns#" term="glacier" /><category scheme="http://www.blogger.com/atom/ns#" term="europe" /><category scheme="http://www.blogger.com/atom/ns#" term="ice" /><category scheme="http://www.blogger.com/atom/ns#" term="eyjafjallajokull" /><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="katla" /><category scheme="http://www.blogger.com/atom/ns#" term="ash" /><category scheme="http://www.blogger.com/atom/ns#" term="flight" /><category scheme="http://www.blogger.com/atom/ns#" term="volcano" /><category scheme="http://www.blogger.com/atom/ns#" term="delay" /><category scheme="http://www.blogger.com/atom/ns#" term="melting" /><title>Iceland Volcano Update April 18 2010</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2kQV5t2BoZc&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/2kQV5t2BoZc&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;As you look at live video from the eruption at the Iceland volcano whose name I cannot pronounce, here is the latest, as of April 18, 2010, on the effects of this eruption, from various news sources.&lt;br /&gt;&lt;br /&gt;According to &lt;a href="http://www.nytimes.com/2010/04/19/world/europe/19ash.html?src=me"&gt;The New York Times&lt;/a&gt; "Britain’s National Air Traffic Services extended its ban on flights across its airspace until at least 6 a.m. local time Monday, prompting the country’s flag carrier, British Airways, to cancel all of its Monday flights. Across the globe, Cathay Pacific of Hong Kong, Qantas of Australia and China Airlines in Taiwan also canceled Europe-bound flights into Monday and beyond."&lt;br /&gt;&lt;br /&gt;According to &lt;a href="http://www.focus-fen.net/index.php?id=n217022"&gt;focus-fan.net&lt;/a&gt;, Eurocontrol, the Brussels based agency (European Organization for the Safety of Air Navigation), expects 84% of all flights scheduled to take off in Europe (21,000 flights out of 25,000) to be cancelled today (Sunday).&lt;br /&gt;&lt;br /&gt;EU Transport Ministers will hold a special video conference tomorow (Monday, April 19, 2010) on the air travel crisis.  EU ministerial meetings on agriculture and fisheries, due to be held in Luxemburg tomorrow, have been cancelled.&lt;br /&gt;&lt;br /&gt;First semifinals of the Champions League will not be postponed despite the eruption of volcano in Iceland, which led to the closure of the majority of European airspace, UEFA announced. Inter should face Barcelona on Tuesday in Milan and on Wednesday Bayern will face Lyon in Munich, RIA Novosti reported.  Barcelona's players have already departed by bus to Italy. Lyon FC also chose bus transport to get to Germany. The players of the French team will leave for Munich on Monday.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.reuters.com/article/idUSTRE63H0OB20100418"&gt;Reuters reports&lt;/a&gt; that two major German airline companies, Lufthansa and Air Berlin, have complained that aviation authorities have not taken the test flights that they have done into account in closing German air space.  Both these air lines have carried out test flights at low altitudes.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.reuters.com/article/idUSTRE63E1TM20100418?loomia_ow=t0:s0:a49:g43:r1:c0.390511:b33013998:z0"&gt;Reuters also reports that&lt;/a&gt; KLM, the largest Dutch airline, also carried out low level test flights with no problems.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.vancouverite.com/2010/04/18/heathrow-schiphol-frankfurt-halt-air-traffic/"&gt;The Vancouverite&lt;/a&gt; reports that the UK's air traffic control system (NATS) has closed UK airspace until 1 am BST, Monday, April 19, 2010.  There may be some scattered flights from the Orkney and Shetland islands, however.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://current.com/news/92383966_icelands-volcano-ash-from-space-raw-video.htm?xid=RSSfeed"&gt;According to current.com&lt;/a&gt;, the Norwegian meteorological office on Friday (April 16) published a prediction of how the ash cloud from the Icelandic volcano eruption is likely to spread over the next few days.  The prediction is until Sunday (April 18) evening and it shows the cloud moving further south and south-east.  According to their website, the prediction supposes that the volcano emissions are continuous throughout this period.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dailyrecord.co.uk/news/uk-world-news/2010/04/16/icelandic-volcano-could-ring-chaos-to-british-skies-for-a-year-86908-22189366/"&gt;According to the UK based Daily Record&lt;/a&gt; the volcano that halted all flights over Britain could continue to spew out giant ash clouds for the next year, experts warned yesterday.  The last time Eyjafjallajokull burst into life was almost 200 years ago - and it was still spitting its fury into the skies more than 12 months later.&lt;br /&gt;&lt;br /&gt;Professor Bill McGuire, of the Aon Benfield Hazard Research Centre at University College London, said air travel could be hit repeatedly if the current eruption lasts as long.  He added: "There is no way of knowing for certain how long this eruption will last. The level of disruption would also depend on how much gas and ash is produced."  The nearby volcano is Katla, which lies underneath a glacier and is described as "enormously powerful".  Katla has erupted frequently, is much larger.  The last eruption was in 1918, which makes the next eruption overdue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-719745601000175132?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qQ_8qc1Aprg6e8lxw33T8Yd3m1c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qQ_8qc1Aprg6e8lxw33T8Yd3m1c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qQ_8qc1Aprg6e8lxw33T8Yd3m1c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qQ_8qc1Aprg6e8lxw33T8Yd3m1c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/sckab9DqXEg" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/719745601000175132?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/719745601000175132?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/sckab9DqXEg/iceland-volcano-update-april-18-2010.html" title="Iceland Volcano Update April 18 2010" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/04/iceland-volcano-update-april-18-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AAR3kyeCp7ImA9WxFSEEU.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-4400477833460866630</id><published>2010-04-12T08:17:00.000-07:00</published><updated>2010-04-12T08:22:26.790-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-12T08:22:26.790-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blender 2.49b" /><category scheme="http://www.blogger.com/atom/ns#" term="animated text" /><category scheme="http://www.blogger.com/atom/ns#" term="3D Animation" /><title>2.49b Animated 3D Text</title><content type="html">&lt;a href="http://www.youtube.com/watch?v=lpmkpiIctOM"&gt;Watch the Video&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/lpmkpiIctOM&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/lpmkpiIctOM&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;In this tutorial, I will show you how to create animated 3D text in Blender 2.49b.  You can use this type of effect to create, for example, rolling credits in your video.  Or, perhaps, you can do something like the Star Wars introduction..."A long, long time ago, in a galaxy far away...".&lt;br /&gt;&lt;br /&gt;The techniques are based on Paolo Ciccone's excellent Blender 3D Survival Guide, which you can find at CreativeCow.  Specifically, you can find how Paolo creates animated 3D text in Parts 3 and 4.  The URLs are at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://library.creativecow.net/articles/ciccone_paolo/blender-survival-guide-3.php"&gt;http://library.creativecow.net/articles/ciccone_paolo/blender-survival-guide-3.php&lt;/a&gt;&lt;br /&gt;&lt;a href="http://library.creativecow.net/articles/ciccone_paolo/blender-survival-guide-4.php"&gt;http://library.creativecow.net/articles/ciccone_paolo/blender-survival-guide-4.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You should watch Paolo's tutorial as well, because he discusses many other features of 3D text animation, such as lighting and camera positioning.  Blender has so many features that it's impossible to cover all of them in one or two videos.  The purpose of this tutorial is to show you the basic steps, a recipe for doing animated 3D text in Blender.&lt;br /&gt;&lt;br /&gt;Steps:&lt;br /&gt;1)  Delete the default cube (right click, X to delete, Enter to confirm).&lt;br /&gt;&lt;br /&gt;2)  If you click inside the 3D window, the 3D cursor goes to the place where you click.  That's the place where the next object will be created.  We want the text to be placed at the origin, X=0, Y=0, and Z=0.  To do that, there's a simple shortcut to place the 3D cursor there.  Press Shift-C.&lt;br /&gt;&lt;br /&gt;3)  Create a new Text object (Space - Add - Text).   The text object has the word Text, placed on the floor.  The text object is actally a curve object.  &lt;br /&gt;&lt;br /&gt;4)  Press Tab to go into Edit mode.  For a text object, when you press the Tab key, you can change the text.  There is a cursor, a vertical bar.  Let's change the text so that it says "Blender 3D text is so very cool!" on 3 lines.  Press the backspace key 4 times to remove the word Text.  Then type "Blender 3d text".  Press Enter to go to the next line.  Then type "is so very".  Press Enter to go to the next line.  Type "cool!".  Press Tab to go back to Object Mode.&lt;br /&gt;&lt;br /&gt;5)  Let's make the camera see the text, in the view.  From the View menu, select Align View, then Align Active Camera to View.  Alternatively, you could have pressed Control-Alt-Num0.  Now the 3D view is in camera view.  Rotate the text 30 degrees in the Y direction (R Y 30).  Press the Scale key to scale the text up 1.5 times (S 1.5 Enter).  Press F12 to render.&lt;br /&gt;&lt;br /&gt;6)  Right now, the text is flat.  Now to make it 3D, go to the Editng Buttons (F9).  In the Curves and Surfaces panel, there are two settings that can make the text look 3D quickly.  The first one is to click on Extrude 3 times, to give the text a depth of .3 Blender Units.  This gives the text thickness.&lt;br /&gt;&lt;br /&gt;8)  In the Curves and Surfaces panel, click on Bevel 2 times.  Another thing we can do to make the text more striking is to bevel the edges.  To do that, press the Bevel key twice to give the text a bevel depth of .02 blender units.  Press F12 to render.&lt;br /&gt;&lt;br /&gt;9)  We can also change the orientation of the text.  In the Font panel, for example, we can center the text by clicking on Center.  We can also change the font to any font that is installed on your PC.  The default font is &lt;builtin&gt;.  To change it, on my Windows machine, from the Font panel, click the Load button.  Navigate to the Windows/Fonts directory.  The fonts that Blender supports are highlighted with a dark blue square.  I changed the font to Georgia Bold.  To add a dramatic effect, I changed the spacing to 1.3 from the default of 1.&lt;br /&gt;&lt;br /&gt;10)  We can change the color of the text.  Let's make it blue.  Press F5 to go to the Shading buttons.  Click the little icon to the left of Add New.  Let's use the default Material, which comes with Blender's default scene, associated with the cube.  It is still available, although the O in front of it shows that no object is associated with it.  Click on Material.  Change the color to Blue (R=0, G=0, B=1).   Press the G key to grab the text and center it in the camera view.  Press F12 to render.&lt;br /&gt;&lt;br /&gt;8)  So far, the blue text is offset against a blue sky.  Let's get rid of the sky, to make the blue text stand out against a black background.  Go to the Scene buttons (F10).  We could, of course, make the World background color black.  Another way is, from the Render Layers tab, we can get rid of the sky by clicking on the Sky button so that the sky doesn't render.  Press F12 to render.  Now the text is in the foreground, with a black background.&lt;br /&gt;&lt;br /&gt;9)  To get an even more dramatic effect for our text, we can add Ambient Occlusion. AO is a way of highlighting dark and light areas in the text.  To do this, press F5 for the Shading buttons.  Then go to the World buttons.  Select AmbOcc.  Click on Ambient Occlusion.  We want to use Approximate AO, and both lighten and darken.  So click on Approximate, and Both.  Press F12 to render.  Note both the darkening and lightening of the text.&lt;br /&gt;&lt;br /&gt;10) Let's animate the text.  To do this, go to Frame 1.  With the cursor in the 3D window, press the I key to insert a keyframe.  Select LocRot for location and rotation.&lt;br /&gt;&lt;br /&gt;11) Go to Frame 230  Rotate the text 90 degrees along the Y axis (R Y 90.  Press the I key to insert a keyframe.  Select LocRot.&lt;br /&gt;&lt;br /&gt;12) With the cursor in the 3D window, press Alt-A to animate.&lt;br /&gt;&lt;br /&gt;13) To create an animation, go to the Output tab in the Scene buttons.  If you enter // in Windows, you set the output animation to the same place where the blend file is.  You can set the output to AVI (raw, Codec, or JPeg), QuickTime (for a MOV file), or FFMpeg.&lt;br /&gt;&lt;br /&gt;There you have it.  Animated 3D text in Blender.  I hope this gives you a good start toward making your own cool animated 3D text effects.  When you do so, please post your renders at my Blender 3D Forum at http://forum.irakrakow.com so that others can see it.  Don't forget to subscribe to my Youtube channel as well.  Happy Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-4400477833460866630?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZeCR5QP2J5BRuolImSTweIm95Zc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZeCR5QP2J5BRuolImSTweIm95Zc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZeCR5QP2J5BRuolImSTweIm95Zc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZeCR5QP2J5BRuolImSTweIm95Zc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/9V_mBoBIOWo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/4400477833460866630?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/4400477833460866630?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/9V_mBoBIOWo/249b-animated-3d-text.html" title="2.49b Animated 3D Text" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/04/249b-animated-3d-text.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4NR3w_fSp7ImA9WxBaGEw.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-7073179788036280886</id><published>2010-03-28T16:28:00.001-07:00</published><updated>2010-03-28T16:29:56.245-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-28T16:29:56.245-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Script" /><category scheme="http://www.blogger.com/atom/ns#" term="python 3" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="blender 2.5" /><title>Python 3, Part 6 (Functions)</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/UPhRBxrvW8w&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/UPhRBxrvW8w&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;In this tutorial, we are going to see how to write and call functions in Python 3, as well as how to pass arguments, both as keyword and value, to a Python function.  I will also introduce you to some of the neat features of the Blender 2.5 text editor, such as source code color coding, which help make coding Python scripts much easier.  This video is based on the Python 3.1 function tutorial at:  http://docs.python.org/release/3.0.1/tutorial/controlflow.html#more-on-defining-functions.&lt;br /&gt;&lt;br /&gt;So start Blender 2.5.  We'll be using the most current version, 2.5 Alpha 2.  Go to the Scripting setup.  Up to now, we've been using the console window, in the lower left corner.  In this video, we'll be using the text editor window, in the upper left corner.  Position the cursor in the Python text editor window, and press control-down arrow to maximize the window.&lt;br /&gt;&lt;br /&gt;I pasted into the text editor window the code for the function to find all the Fibonacci numbers up to a given positive whole number n.  The function is called fib(n) and the code is shown below:&lt;br /&gt;&lt;br /&gt;def fib(n):    # write Fibonacci series up to n&lt;br /&gt;     """Print a Fibonacci series up to n."""&lt;br /&gt;     a, b = 0, 1&lt;br /&gt;     while b &lt; n:&lt;br /&gt;         print(b, end=' ')&lt;br /&gt;         a, b = b, a+b&lt;br /&gt;     print()&lt;br /&gt;&lt;br /&gt;When you paste code in Blender's text editor, all the code is in black.  There is no syntax highligting or line numbering.  To turn on line numbering, click the first icon on the left.  This shows line numbers to the left of the text.  This is a handy feature, because when an error occurs, Python will tell you the line number at which the error occurred.  Turning on syntax highlighting will highlight things like comments (in green), keywords (in purple), numeric constants (in blue), and function definitions (in gold).  &lt;br /&gt;&lt;br /&gt;In Python 3, the def keyword precedes the function definition, in this case fib(), with n as the argument.  You need the colon to define the end of the function definition.  A comment, in green, tells us what the fib() function does.  There's also a docstring, intended to be a larger comment, that is highlighted in red.  Docstrings start with three double quotes and end with three double quotes.&lt;br /&gt;&lt;br /&gt;The Fibonacci series starts with two variables, a and b, initialized to 0 and 1.  n is the limiting number for the series.  The next number is the sum of the previous two numbers.  &lt;br /&gt;&lt;br /&gt;the print() function prints b, the next number in the seies.  The end=' ' argument to print() adds a space to the end of the list.&lt;br /&gt;&lt;br /&gt;Finally, the print() statement adds a blank line.&lt;br /&gt;&lt;br /&gt;To call the fib() function, to find all the Fibonacci numbers that are less than 300, call the function as follows:&lt;br /&gt;&lt;br /&gt;fib(300)&lt;br /&gt;&lt;br /&gt;The Run Script button runs the active script.  Where did the result print?  Actually, it prints on the Blender console, where all the Blender messages print.  This may change in future Blender releases, but that's where it prints now.&lt;br /&gt;&lt;br /&gt;In another text window, a simple modification to the code, in the function fib2(), returns the result as a list instead of just printing it.  Instead of printing the next Fibonacci number, it is added to a list.  The entire list is returned instead of being printed.  Here's the code:&lt;br /&gt;&lt;br /&gt;def fib2(n): # return Fibonacci series up to n&lt;br /&gt;    """Return a list containing the Fibonacci series up to n."""&lt;br /&gt;    result = []&lt;br /&gt;    a, b = 0, 1&lt;br /&gt;    while b &lt; n:&lt;br /&gt;        result.append(b)    # see below&lt;br /&gt;        a, b = b, a+b&lt;br /&gt;    return result&lt;br /&gt;&lt;br /&gt;f100 = fib2(100)    # call it&lt;br /&gt;print(f100)    &lt;br /&gt;&lt;br /&gt;The variable result is initialized to an empty list, the two square brackets.  Instead of using the print() function, the next Fibonacci number is appended to the list using the append() method of the list object.  Finally the entire list is returned.  In the call to fib2(), the result list object is assigned to the variable f100 and then printed.&lt;br /&gt;&lt;br /&gt;As a final example, I would like to show you how to pass positional and keyword arguments to a function.  Positional arguments are referenced by their position number in the argument list.  Keyword arguments have the form keyword=value.  As a rule, you need to specify all the positional arguments.  The keyword arguments default to their value, and do not have to be specified.  If you do specify them, the value you pass wll be used.  A simple example, called cubevolume, will help clarify this:&lt;br /&gt;&lt;br /&gt;def cubevolume(length, width=4, height=5):&lt;br /&gt;    return length * width * height&lt;br /&gt;&lt;br /&gt;print(cubevolume(3))&lt;br /&gt;&lt;br /&gt;#print(cubevolume(8,width=7))&lt;br /&gt;&lt;br /&gt;#print(cubevolume())&lt;br /&gt;&lt;br /&gt;The cubevolume() function calculates the volume of a cube, which is its length, multiplied by its width, multiplied by its height.  The length argument is the only positional parameter, in the first position.  So print(cubevolume(3)) will return 60, 3 x 4 x 5.&lt;br /&gt;&lt;br /&gt;I will uncomment print(cubevolume(8,width=7)).  Running it, produces the result 8 x 7 x 5 , or 280.  The width=7 parameter overrides the default width of 4.&lt;br /&gt;&lt;br /&gt;Uncommenting print(cubevolume())  produces an error because the length argument, the positional parameter, is not specified.&lt;br /&gt;&lt;br /&gt;That's my brief introdeuction to Python 3 functions.  I hope this gets you started.  Refer to the Python 3 documentation for additional information, such as local and global variable passing in functions.  If you liked this tutorial, please hit the Youtube Subcribe button, and discuss this tutorial at http://forum.irakrakow.com.  Happy Python Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-7073179788036280886?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cFdV6iOI-Juyyk31aECQpofGa_k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cFdV6iOI-Juyyk31aECQpofGa_k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cFdV6iOI-Juyyk31aECQpofGa_k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cFdV6iOI-Juyyk31aECQpofGa_k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/64S6HSHCFO8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/7073179788036280886?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/7073179788036280886?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/64S6HSHCFO8/python-3-part-6-functions.html" title="Python 3, Part 6 (Functions)" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/03/python-3-part-6-functions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AERXk_fyp7ImA9WxBbEkg.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-1972722777076231176</id><published>2010-03-10T14:19:00.000-08:00</published><updated>2010-03-10T14:21:44.747-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-10T14:21:44.747-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="scripts" /><category scheme="http://www.blogger.com/atom/ns#" term="python 3" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Python 3, Part 5 (List Methods)</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_HjITxJvLWQ&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/_HjITxJvLWQ&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;In Part 4, we saw how to use slicing to work with parts of a string, list, or tuple, as well as how to insert, delete, and add to these types of variables.  Python has a number of built in methods -- also called functions -- that can do these operations in a way that makes the code easier to read.  Sometimes it's a bit hard to understand all those colons and square brackets, and it's easier to use words like append, remove, or insert, which are, indeed the names of methods associated with lists.  We'll also see how these easy to understand methods can be used to build a simple stack (where the last element added is the first element retrieved) or queue (where the first element added is the first element retrieved).  We'll also discover how to sort, count, and locate items in a list.  Along the way, we'll learn about the autocomplete feature of Blender's Python console, a handy feature that documents available methods.&lt;br /&gt;&lt;br /&gt;We'll be working in the Python 3 console window again. So start Blender 2.5.  We will be using the Python console for the most current version, 2.5 Alpha 2.  Go to the Scripting setup.  Position the cursor in the Python console window, at the lower left corner, and press control-down arrow to maximize the window.&lt;br /&gt;&lt;br /&gt;First off, what is a method, anyway?  In Python, a list is actually an object.  Depending on the type of object, Python defines methods, which are actions that can be done with the object.  The Python console's AutoComplete feature displays a list of what can be done with the particular type of object.&lt;br /&gt;&lt;br /&gt;Start with a string object.  Enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s = 'happy blendering'&lt;br /&gt;&lt;br /&gt;which is a string.  Then type&lt;br /&gt;&gt;&gt;&gt; s.&lt;br /&gt;&lt;br /&gt;and press the Autocomplete button.  You get a list of different things you can do with the string s.&lt;br /&gt;&lt;br /&gt;capitalize(  center(  count(  encode(  endswith(  expandtabs(  find(  format(  index(  isalnum(  isalpha(  isdecimal(  isdigit(  isidentifier(  islower(  isnumeric(  isprintable(  isspace(  istitle(  isupper(  join(  ljust(  lower(  lstrip(  maketrans(  partition(  replace(  rfind(  rindex(  rjust(  rpartition(  rsplit(  rstrip(  split(  splitlines(  startswith(  strip(  swapcase(  title(  translate(  upper(  zfill(&lt;br /&gt;&lt;br /&gt;Let's use the capitalize() method to capitalize the first letter of the string.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s = 'happy blendering'&lt;br /&gt;&gt;&gt;&gt; s.capitalize()&lt;br /&gt;'Happy blendering'&lt;br /&gt;&lt;br /&gt;Sometimes, a method produces a True/False results, like you're asking the string a question.  For example, a numeric string is a string that consists of numbers.  Right now, s does not have that quality.  So entering:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s.isnumeric()&lt;br /&gt;False  &lt;br /&gt;&lt;br /&gt;However, assigning a numeric value to the string s, and asking if it is numeric, would produce a True result.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s = '3452'&lt;br /&gt;&gt;&gt;&gt; s.&lt;br /&gt;capitalize(  center(  count(  encode(  endswith(  expandtabs(  find(  format(  index(  isalnum(  isalpha(  isdecimal(  isdigit(  isidentifier(  islower(  isnumeric(  isprintable(  isspace(  istitle(  isupper(  join(  ljust(  lower(  lstrip(  maketrans(  partition(  replace(  rfind(  rindex(  rjust(  rpartition(  rsplit(  rstrip(  split(  splitlines(  startswith(  strip(  swapcase(  title(  translate(  upper(  zfill(&lt;br /&gt;&gt;&gt;&gt; s.isnumeric()&lt;br /&gt;True&lt;br /&gt;&lt;br /&gt;Let's redefine s to be a list instead of a string.  Enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s = ['mary','had','a','lamb']&lt;br /&gt;&lt;br /&gt;Then, enter the following and click the Autocomplete button.&lt;br /&gt;&gt;&gt;&gt; s.&lt;br /&gt;append(  count(  extend(  index(  insert(  pop(  remove(  reverse(  sort(&lt;br /&gt;&lt;br /&gt;You get an entirely different set of methods, things you can do with a list.  Methods are functions that can be done, depending on the type of data.&lt;br /&gt;&lt;br /&gt;Let's look at these list-specific methods in more detail.&lt;br /&gt;&lt;br /&gt;The append() method has a string argument (what you put between the parentheses and will add it to the end of the list. Thus:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s.append('and')&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['mary', 'had', 'a', 'lamb', 'and']&lt;br /&gt;&lt;br /&gt;append() adds just one item to the list.  If you want to add more than one item, instead of using multiple append() statements, you can use the extend() method, to extend the list with a list of values.  Here's an example:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s.extend(['a','dog'])&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['mary', 'had', 'a', 'lamb', 'and', 'a', 'dog']&lt;br /&gt;&lt;br /&gt;Note how extend() requires a list argument, while append requires a string argument.  &lt;br /&gt;&lt;br /&gt;insert() inserts an item at a given position, or index.  Remember, we start counting from 0.  If we wanted to insert the word 'large' in front of the word 'dog' (the 7th word), we would enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s.insert(6,'large')&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['mary', 'had', 'a', 'lamb', 'and', 'a', 'large', 'dog']&lt;br /&gt;&lt;br /&gt;To remove an item from the list, use remove(), specifying the value of the item to be removed.  To remove the word 'large', the one we just inserted, enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s.remove('large')&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['mary', 'had', 'a', 'lamb', 'and', 'a', 'dog']&lt;br /&gt;&lt;br /&gt;The pop() method, with no arguments, returns the last item in the list AND deletes it from the list.  So:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; t = s.pop()&lt;br /&gt;&gt;&gt;&gt; t&lt;br /&gt;'dog'&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['mary', 'had', 'a', 'lamb', 'and', 'a']&lt;br /&gt;&lt;br /&gt;To implement a last in first out stack, add to the stack with append() and remove it from the stack with pop().  If you want a last in first out queue, use pop(0) instead of pop() and the first element will be removed.&lt;br /&gt;&lt;br /&gt;pop() can take an argument, which is the index of the value to pop.  So:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s.pop(4)&lt;br /&gt;'and'&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['mary', 'had', 'a', 'lamb', 'a']&lt;br /&gt;&lt;br /&gt;Thus, the fifth word ('and') was removed.  &lt;br /&gt;&lt;br /&gt;The index(string) method returns the index number of the first occurrence of the string.  Suppose we want to find the string 'lamb' in the list s, delete it from s, and assign it to t.  You could do it this way:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; t = s.pop( s.index('lamb') )&lt;br /&gt;&gt;&gt;&gt; t&lt;br /&gt;'lamb'&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['mary', 'had', 'a', 'a']&lt;br /&gt;&lt;br /&gt;The count(value) method returns the number of times the value occurs in the list.  Thus:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s.count('a')&lt;br /&gt;2&lt;br /&gt;&lt;br /&gt;The sort() method does what it says, sorting the list, from lowest to highest value.  Thus&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s.sort()&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['a', 'a', 'had', 'mary']&lt;br /&gt;&lt;br /&gt;The reverse() methods sorts the list from highest to lowest value.  Thus:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s.reverse()&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['mary', 'had', 'a', 'a']&lt;br /&gt;&lt;br /&gt;To summarize, we've been introduced to the autocomplete feature, which shows the methods available for particular object types, we explored the methods available for the list object, and in the process we have seen how to implement a stack (last in first out) and a queue (first in first out).  If you liked this tutorial, please hit the Youtube Subcribe button, and discuss this tutorial at &lt;a href="http://forum.irakrakow.com"&gt;http://forum.irakrakow.com&lt;/a&gt;.  Happy Python Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-1972722777076231176?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BBKv4XYNqzCB4m5SnAphnuVYGM0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BBKv4XYNqzCB4m5SnAphnuVYGM0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BBKv4XYNqzCB4m5SnAphnuVYGM0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BBKv4XYNqzCB4m5SnAphnuVYGM0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/LW4e-vMTmio" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/1972722777076231176?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/1972722777076231176?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/LW4e-vMTmio/python-3-part-5-list-methods.html" title="Python 3, Part 5 (List Methods)" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/03/python-3-part-5-list-methods.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIGRH0_eCp7ImA9WxBbEk4.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-2857552345797112611</id><published>2010-03-10T07:20:00.000-08:00</published><updated>2010-03-10T07:22:05.340-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-10T07:22:05.340-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="scripts" /><category scheme="http://www.blogger.com/atom/ns#" term="python 3" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="slicing" /><category scheme="http://www.blogger.com/atom/ns#" term="blender 2.5" /><title>Python 3, Part 4 (Slicing)</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ylyc1UFE3VM&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ylyc1UFE3VM&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;In Part 3, we were introduced to lists, which lets us work with more than one variable at onced.  We also saw how to reference parts of the list, say the 3rd element in the list x as x[2] (since we start numbering from 0), using the [] operator, and how to use negative numbers to reference list elements from the end.  In this tutorial, we will go into more detail about how to get parts of strings and lists, by use of slicing.  Slicing also uses the square brackets, but in a new and different way.  &lt;br /&gt;&lt;br /&gt;As usual, start Blender 2.5.  We will be using the Python console for the most current version, 2.5 Alpha 2.  Go to the Scripting setup.  Position the cursor in the Python console window, at the lower left corner, and press control-down arrow to maximize the window.&lt;br /&gt;&lt;br /&gt;First, we'll look at slicing up strings.  We'll start by working with the string 'Happy Blendering'  You can use the same [] operator on strings that you can use with lists.&lt;br /&gt;Thus:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s = 'Happy Blendering'&lt;br /&gt;&lt;br /&gt;The index numbering starts at 0.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[0]&lt;br /&gt;'H'&lt;br /&gt;&lt;br /&gt;The last element is referenced by -1.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[-1]&lt;br /&gt;'g'&lt;br /&gt;&lt;br /&gt;For this purpose, think of a string as a list of characters.  &lt;br /&gt;&lt;br /&gt;What if you wanted to extract a part of a string, for example, the word "Happy"?  This is where slicing comes into play.  The slice operator uses the colon to extract a range of characters in a string, with a bit of a twist.  The number to the left of the colon is the starting position, and the number to the right of the colon is the ending position, MINUS ONE.  You might think that if you enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[0:4]&lt;br /&gt;'Happ'&lt;br /&gt;&lt;br /&gt;you would retrieve the entire word Happy.  Instead, you get just "Happ", the first four letters.  You need to enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[0:5]&lt;br /&gt;'Happy'&lt;br /&gt;&lt;br /&gt;The rule is that to find the number of characters you'll get back, subtract the number to the right of the colon (5) by the number to the left of the colon (0). So:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[1:2]&lt;br /&gt;'a'&lt;br /&gt;&lt;br /&gt;'a' is the second letter (s[1]), but the length is only one character, stopping at s[2].&lt;br /&gt;&lt;br /&gt;If the second number is equal or less than the first number, and both numbers are positive, the null string is returned:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[2:1]&lt;br /&gt;''&lt;br /&gt;&lt;br /&gt;If we omit the number after the colon, the rest of the string, from that point, is returned.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[1:]&lt;br /&gt;'appy Blendering'&lt;br /&gt;&lt;br /&gt;On the other hand, if we omit the number before the colon, the start point is the beginning of the string.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[:5]&lt;br /&gt;'Happy'&lt;br /&gt;&lt;br /&gt;which is the same as:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[0:5]&lt;br /&gt;'Happy'&lt;br /&gt;&lt;br /&gt;If you omit both the beginning and ending elements numbers, you get the whole string.  That makes sense, start at the beginning and end at the end.  &lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[:]&lt;br /&gt;'Happy Blendering'&lt;br /&gt;&lt;br /&gt;How do we get the word "Blendering"?  If you try:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[-10:-1]&lt;br /&gt;'Blenderin'&lt;br /&gt;&lt;br /&gt;you miss the last letter.  That scan started from the 10th letter from the end (the B) and ended, but did not include, the last letter (the G).  Remember that the last element is not returned.  To get it, omit the -1.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[-10:]&lt;br /&gt;'Blendering'&lt;br /&gt;&lt;br /&gt;There's a third parameter.  If you add another colon, you can get "every nth" element.  So:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[::2]&lt;br /&gt;'HpyBedrn'&lt;br /&gt;&lt;br /&gt;skips every other letter.  Or,&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[::3]&lt;br /&gt;'HpBnrg'&lt;br /&gt;&lt;br /&gt;returns the first, fourth, seventh, etc. elements.&lt;br /&gt; &lt;br /&gt;As I said, strings behave almost like lists.  The one area where a lists behaves different from a string is that a string cannot be changed.  So if you try to insert a string, as in:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[5] = "Python"&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;console&gt;", line 1, in &lt;module&gt;&lt;br /&gt;TypeError: 'str' object does not support item assignment&lt;br /&gt;&lt;br /&gt;you get an error message.&lt;br /&gt;&lt;br /&gt;You can concatenate sliced strings together using the + operator.  Here's how to create the string "Happy Python Blendering"&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; t = s[:5] + ' Python ' + s[-10:]&lt;br /&gt;&gt;&gt;&gt; t&lt;br /&gt;'Happy Python Blendering'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Slices can be used with lists.  &lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s = ['The','quick','brown','fox']&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['The', 'quick', 'brown', 'fox']&lt;br /&gt;&lt;br /&gt;Using the [-1:] notation, you can add more elmeents to the end of the list.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[-1:] = ['jumped','over','the','lazy','dog']&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['The', 'quick', 'brown', 'jumped', 'over', 'the', 'lazy', 'dog']&lt;br /&gt;&lt;br /&gt;To insert a list element before the nth element use the [n:n] notation, as follows:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[1:1] = ['very']&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['The', 'very', 'quick', 'brown', 'jumped', 'over', 'the', 'lazy', 'dog']&lt;br /&gt;&lt;br /&gt;Use the empty element, assigning to a slice, to delete a range of elements.  This will delete the 2nd, 3rd, and 4th elements in the list.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[1:4] = []&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;['The', 'jumped', 'over', 'the', 'lazy', 'dog']&lt;br /&gt;&lt;br /&gt;The tuple is a cousin of the list.  Just assign a comma separated set of values to a variable.  A tuple prints in parentheses.  It behaves exactly like a list in terms of slices.  For example:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s = 2, 100, 'ira'&lt;br /&gt;&gt;&gt;&gt; s&lt;br /&gt;(2, 100, 'ira')&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[1:2]&lt;br /&gt;(100,)&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[1:3]&lt;br /&gt;(100, 'ira')&lt;br /&gt;&lt;br /&gt;However, like a string (and unlike a list), you cannot change a tuple element.  The following produces an error.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; s[1:3] = 'eduardo'&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;console&gt;", line 1, in &lt;module&gt;&lt;br /&gt;TypeError: 'tuple' object does not support item assignment&lt;br /&gt;&lt;br /&gt;That's the basics of slicing, an efficient way to create substrings or parts of lists or tuples.  If you enjoyed this tutorial, please don't forget to hit the Youtube Subscribe  button, and to discuss my tutorial at &lt;a href="http://forum.irakrakow.com"&gt;http://forum.irakrakow.com&lt;/a&gt;.  Happy Python Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-2857552345797112611?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_gnWgyXyNSxOPy2rh5h24uLmSs4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_gnWgyXyNSxOPy2rh5h24uLmSs4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_gnWgyXyNSxOPy2rh5h24uLmSs4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_gnWgyXyNSxOPy2rh5h24uLmSs4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/u48U3maYlOA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2857552345797112611?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2857552345797112611?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/u48U3maYlOA/python-3-part-4-slicing.html" title="Python 3, Part 4 (Slicing)" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/03/python-3-part-4-slicing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQGQ34zfip7ImA9WxBbEU0.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-7669147868456971448</id><published>2010-03-08T18:53:00.001-08:00</published><updated>2010-03-08T18:55:22.086-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-08T18:55:22.086-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="scripts" /><category scheme="http://www.blogger.com/atom/ns#" term="python 3" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="lists" /><title>Python 3, Part 3 (Lists)</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/SH0L3qjHdyw&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/SH0L3qjHdyw&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;In Part 2, we saw different ways that string variables can be defined.  In this tutorial, we will see how lists of variables can be defined and used.  You're basically creating more than one variable at a time, in a structure called a list.  Lists are a very important part of Python.  If you want to be able both program in Python and to read Python code written by others, you need to know how lists work.  Don't worry, you'll get the hang of it if you practice a bit.&lt;br /&gt;&lt;br /&gt;As before, start Blender 2.5.  We will be using the Python console for the most current version, 2.5 Alpha 2.  Go to the Scripting setup.  Position the cursor in the Python console window, at the lower left corner, and press control-down arrow to maximize the window.&lt;br /&gt;&lt;br /&gt;In Python, if a variable is assigned to a value that is enclosed in single quotes or double quotes (x = 'Hello' or x = "Hello"), then it's assumed to be a string.  If the variable is assigned to a number, either a whole number or one with a decimal component, like x = 2, the variable is numeric.  You can add, subtract, multiply, and divide.  The most recent assignment of a variable determines how it is used.&lt;br /&gt;&lt;br /&gt;Here's how it works:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x = "Hello"&lt;br /&gt;&gt;&gt;&gt; y = "World"&lt;br /&gt;&gt;&gt;&gt; x + y&lt;br /&gt;'HelloWorld'&lt;br /&gt;&lt;br /&gt;Since x and y are enclosed in double quotes, Python interprets them as strings.  The + operator for strings concatenates them, produciint 'HelloWorld'.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x = 2&lt;br /&gt;&gt;&gt;&gt; y = 2&lt;br /&gt;&gt;&gt;&gt; x + y&lt;br /&gt;4&lt;br /&gt;&lt;br /&gt;Now, x and y are redefined as numbers.  The + operator now adds them, producing the answer 4.  Python won't allow numbers and strings to be added.  So:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x = "World"&lt;br /&gt;&gt;&gt;&gt; x + y&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;console&gt;", line 1, in &lt;module&gt;&lt;br /&gt;TypeError: Can't convert 'int' object to str implicitly&lt;br /&gt;&lt;br /&gt;produces an error message.  &lt;br /&gt;&lt;br /&gt;With a list, you can define and work with lists of variables at once.  Variables in a list are enclosed in square brackets [].  You can mix strings and numbers in the list.&lt;br /&gt;Let's start with a list, x, containing 4 variables, 2 strings and 2 numbers&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x = ['corned', 'beef', 555, 666]&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;br /&gt;Each variable in the list is called an element.  Python has an interesting numbering system for list elements.  It starts numbering from 0.  So:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[0]&lt;br /&gt;'corned'&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[1]&lt;br /&gt;'beef'&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[2]&lt;br /&gt;555&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[3]&lt;br /&gt;666&lt;br /&gt;&lt;br /&gt;You can use the + operator on list elements the same way as if they were variables.  Thus:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[0] + x[1]&lt;br /&gt;'cornedbeef'&lt;br /&gt;&lt;br /&gt;The first two elements are concatenated, since they are strings.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[2] + x[3]&lt;br /&gt;1221&lt;br /&gt;&lt;br /&gt;The first two elements are added, since they are numbers.&lt;br /&gt;&lt;br /&gt;But:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[1] + x[2]&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;console&gt;", line 1, in &lt;module&gt;&lt;br /&gt;TypeError: Can't convert 'int' object to str implicitly&lt;br /&gt;&lt;br /&gt;produces an error because Python doesn't know how to add 'beef' to 555.&lt;br /&gt;&lt;br /&gt;Python also knows how to count backwards, from the end of the list.  The last element of a list has the index -1, the next to last element has the index -2, and so on.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[-1]&lt;br /&gt;666&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[-2]&lt;br /&gt;555&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[-3]&lt;br /&gt;'beef'&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[-4]&lt;br /&gt;'corned'&lt;br /&gt;&lt;br /&gt;The + operator works with negative indices just as with positive indices.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[-1] + x[-2]&lt;br /&gt;1221&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[-3] + x[-4]&lt;br /&gt;'beefcorned'&lt;br /&gt;&lt;br /&gt;If you want to know how many elements are in a list, use the len() function.  Python provides many functions to save you the time and effort of writing a program to find out frequently needed information.  We'll talk about functions in a future video.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; len(x)&lt;br /&gt;4&lt;br /&gt;&lt;br /&gt;You can change a list element.  Thus:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[0] = 'roast'&lt;br /&gt;&gt;&gt;&gt; x&lt;br /&gt;['roast', 'beef', 555, 666]&lt;br /&gt;&lt;br /&gt;changed the first element from 'corned' to 'roast'.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[3] = x[3] * 3&lt;br /&gt;&gt;&gt;&gt; x&lt;br /&gt;['roast', 'beef', 555, 1998]&lt;br /&gt;&lt;br /&gt;multipled the fourth element (666) by 3.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[1] = x[1] + x[0]&lt;br /&gt;&gt;&gt;&gt; x&lt;br /&gt;['roast', 'beefroast', 555, 1998]&lt;br /&gt;&lt;br /&gt;concatenated the changed the second element from 'beef' to 'beefroast'.&lt;br /&gt;&lt;br /&gt;If an element does not exist, Python produces an error message.  Thus:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[4]&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;console&gt;", line 1, in &lt;module&gt;&lt;br /&gt;IndexError: list index out of range&lt;br /&gt;&lt;br /&gt;There is no x[4].  There are only 4 elements (remember, we count from 0).  x[4] attempts to reference the fifth element in the list.&lt;br /&gt;&lt;br /&gt;When we worked backward, remember that we started from -1.  So:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[-4]&lt;br /&gt;'roast'&lt;br /&gt;&lt;br /&gt;However, trying to reference the fifth element, counting backwards, as in:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x[-5]&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;console&gt;", line 1, in &lt;module&gt;&lt;br /&gt;IndexError: list index out of range&lt;br /&gt;&lt;br /&gt;produces an error message.&lt;br /&gt;&lt;br /&gt;You can define an empty list, with no elements, if you define just the square brackets with nothing between them.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x= []&lt;br /&gt;&gt;&gt;&gt; x[0]&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;console&gt;", line 1, in &lt;module&gt;&lt;br /&gt;IndexError: list index out of range&lt;br /&gt;&lt;br /&gt;x is a list with no elements.  Trying to access the first element in the list produces an error.&lt;br /&gt;&lt;br /&gt;That's it.  I hope you enjoyed this introduction to lists.  There are many situations where handling groups of variables in a list will make our programming much easier.  In the next part, when we discuss slicing, you'll discover even more ways that Python can handle groups of variables easily.  If you enjoyed this tutorial, please hit the Youtube subscribe button and discuss it at &lt;a href="http://forum.irakrakow.com"&gt;http://forum.irakrakow.com&lt;/a&gt;.  Happy Blender Pythoning!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-7669147868456971448?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r869T4PYCtlIBTYktnkmAQ-Cvgw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r869T4PYCtlIBTYktnkmAQ-Cvgw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/r869T4PYCtlIBTYktnkmAQ-Cvgw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r869T4PYCtlIBTYktnkmAQ-Cvgw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/Efp_6k9lPIQ" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/7669147868456971448?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/7669147868456971448?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/Efp_6k9lPIQ/python-3-part-2-lists.html" title="Python 3, Part 3 (Lists)" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/03/python-3-part-2-lists.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4ARHg4eyp7ImA9WxBbEEg.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-2955002024155317063</id><published>2010-03-08T05:26:00.000-08:00</published><updated>2010-03-08T05:29:05.633-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-08T05:29:05.633-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python 3" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="strings" /><category scheme="http://www.blogger.com/atom/ns#" term="blender 2.5" /><title>Python 3, Part 2 (Strings)</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/geoly0UNCvA&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/geoly0UNCvA&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;In Part 1 of this series, we saw how to use Blender's Python 3 console, as well as how to write simple one line programs and make variable assignments.  In this tutorial we are going to dig deeper in strings, arguably the most important type of variable in Python.  We'll discover how to write strings, what happens when strings become very long or span more than one line, and how to use operators to combine strings or to make multiple copies of the same string text.&lt;br /&gt;&lt;br /&gt;There's a lot to talk about.  So without further ado, lets begin.&lt;br /&gt;&lt;br /&gt;So, as in Part 1, start up Blender.  I'm using the latest version, as of this video date, Blender 2.5, Alpha 2.  Go to the Scripting setup.  With the cursor on the Python console, press Control-Down Arrow to maximize the Python 3 console.  We're ready to enter some strings to see the different ways they can be entered.  &lt;br /&gt;&lt;br /&gt;A string can be enclosed in single quotes:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;'spam eggs'&lt;br /&gt;'spam eggs'&lt;br /&gt;&lt;br /&gt;Or it can be entered enclosed in double quotes:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;"spam eggs"&lt;br /&gt;'spam eggs'&lt;br /&gt;&lt;br /&gt;You get the same result either way.  Note that the string is echoed enclosed in single quotes, no matter which way you entered.&lt;br /&gt;&lt;br /&gt;Suppose you make the leftmost quote a double quote and the rightmost quote a single quote:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;"spam eggs'&lt;br /&gt;File "&lt;string&gt;", line None&lt;br /&gt;SyntaxError: EOL while scanning string literal (&lt;console&gt;, line 1)&lt;br /&gt;&lt;br /&gt;That's an error.  Use either both single quotes or both double quotes.&lt;br /&gt;&lt;br /&gt;What if there's a single quote inside the string.  Entering:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;doesn't&lt;br /&gt;  File "&lt;string&gt;", line None&lt;br /&gt;SyntaxError: invalid syntax (&lt;console&gt;, line 1)&lt;br /&gt;&lt;br /&gt;also produces a syntax error.  You have one of two ways of solving this.  You could use double quotes instead:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;"doesn't"&lt;br /&gt;"doesn't"&lt;br /&gt;&lt;br /&gt;or you can use what's called an escape character, the backslash (\), before the apostrophe, as in:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;'doesn\'t'&lt;br /&gt;"doesn't"&lt;br /&gt;&lt;br /&gt;What the escape character does is treat the second apostrophe, not as the end of the string, but as an actual apostrophe.  You can escape the double quote the same way:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;"doesn\"t"&lt;br /&gt;'doesn"t'&lt;br /&gt;&lt;br /&gt;If you want to assign a long string, one longer than fits in one line, the backslash has another meaning:  there's more to this string.  Here's an example.  Enter:&lt;br /&gt;&lt;br /&gt;hello = "This is a rather long string containing\&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;What do those 3 dots mean?  They mean that the console is asking for the next part of thne string.  So enter:&lt;br /&gt;&lt;br /&gt;...the next line of text."&lt;br /&gt;&lt;br /&gt;Now enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;print(hello)&lt;br /&gt;This is a rather long string containing the next line of text&lt;br /&gt;&lt;br /&gt;Suppose you want the first part of the string to print on one line and the second part to print on the other.  Use \n to indicate a new line.  Enter the following:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; hello = "This is a rather long string containing \n \&lt;br /&gt;...     the second line of text"&lt;br /&gt;&gt;&gt;&gt; print(hello)&lt;br /&gt;This is a rather long string containing &lt;br /&gt;     the second line of text&lt;br /&gt;&lt;br /&gt;Note that the second line is indented.  White space, or spaces, count as a character.&lt;br /&gt;&lt;br /&gt;There's a special significance to matching triple quotes """ or mathching triple apostrophes.  What's entered between them prints, with the spacing preserved, without you having to enter all those bothersome escape sequences.  Thus:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;print ( """&lt;br /&gt;...  hello my name is&lt;br /&gt;...     Ira&lt;br /&gt;... """)&lt;br /&gt;&lt;br /&gt; hello my name is&lt;br /&gt;    Ira&lt;br /&gt;&lt;br /&gt;Strings can be combined using the + operator.  Python is smart enough to see that when the + operator is used for 2 strings, it doesn't add the strings, as it would for numbers.  Instead, it combines them.  To produce my full name from my first and last name, enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; fullname = "Ira" + "Krakow"&lt;br /&gt;&gt;&gt;&gt; fullname&lt;br /&gt;'IraKrakow'&lt;br /&gt;&lt;br /&gt;To add a space between my first and last name, simply add a space at the beginning of my last name.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; fullname = "Ira" + " Krakow"&lt;br /&gt;&gt;&gt;&gt; fullname&lt;br /&gt;'Ira Krakow'&lt;br /&gt;&lt;br /&gt;Mixing strings and numbers when combining (the technical term is concatenating), is a no-no.  Entering:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; 2 + 'Ira'&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;console&gt;", line 1, in &lt;module&gt;&lt;br /&gt;TypeError: unsupported operand type(s) for +: 'int' and 'str'&lt;br /&gt;&lt;br /&gt;produces an exception, a "TypeError", trying to mix a number and a string.&lt;br /&gt;&lt;br /&gt;However, enclosing the 2 in quotes (either single or double), works because now '2' is a string&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; 'ira' + '2'&lt;br /&gt;'ira2'&lt;br /&gt;&lt;br /&gt;The * operator repeats a string some number of times. Entering:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; 'ira'*3&lt;br /&gt;'irairaira'&lt;br /&gt;&lt;br /&gt;repeats my name 3 times.&lt;br /&gt;&lt;br /&gt;If you omit the operator, concatenating is assumed.  Thus:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; 'ira' 'krakow'&lt;br /&gt;'irakrakow'&lt;br /&gt;&lt;br /&gt;This concludes Part 2 of the Python 3 tutorial.  We've gone more in depth about assigning a variable to a string, how to enter multi line strings, and how to combine and replicate strings.  In Part 3 we'll go into even greater depth, as we look at how to slice and dice strings into substrings, as well as how to create lists.  If you liked this tutorial, please don't forget to hit the Youtube Subscribe button, and to discuss my tutorial at &lt;a href="http://forum.irakrakow.com"&gt;forum.irakrakow.com&lt;/a&gt;.  Happy Blender Pythoning!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-2955002024155317063?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FnkJK-X6dk1IRkuEW0sjP1g8YWs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FnkJK-X6dk1IRkuEW0sjP1g8YWs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FnkJK-X6dk1IRkuEW0sjP1g8YWs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FnkJK-X6dk1IRkuEW0sjP1g8YWs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/wRO0tVetv3s" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2955002024155317063?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/2955002024155317063?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/wRO0tVetv3s/python-3-part-2-strings.html" title="Python 3, Part 2 (Strings)" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/03/python-3-part-2-strings.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQERXs6eip7ImA9WxBUGU4.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-1301363495140570961</id><published>2010-03-06T16:55:00.000-08:00</published><updated>2010-03-06T18:51:44.512-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-06T18:51:44.512-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python 3" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="expressions" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><category scheme="http://www.blogger.com/atom/ns#" term="scripting" /><category scheme="http://www.blogger.com/atom/ns#" term="console" /><title>Python 3, Part 1 (Expressions)</title><content type="html">&lt;a href="http://forum.irakrakow.com/viewtopic.php?f=31&amp;t=311"&gt;Discuss this video, and ask questions on my Blender 3D Forum.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/PBtJGgskrEU&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/PBtJGgskrEU&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;The goal of this tutorial is to introduce Blender users, whether or not they are programmers, to Python 3.  Blender 2.5 supports Python 3 scripts, which can let you program Blender behavioer very precisely.  Of course, before you can create Blender scripts, you need to know Python 3.  We will use the Blender 2.5 Scripting environment, which includes a Python console that supports most (but not all) of Python 3, as well as a fully featured text editor, with advanced features such as autocomplete and automatic indenting of code.  I will point out where Blender's Python implementation differs from the standard Python 3 distribution.  There are minor differences, none that should prevent you from writing fully featured scripts in Blender 2.5.&lt;br /&gt;&lt;br /&gt;Before working through the examples in this tutorial, you need to download Blender 2.5.  You can do this at:  &lt;a href="http://www.blender.org/download/get-25-alpha/"&gt;http://www.blender.org/download/get-25-alpha/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This series is based on &lt;a href="http://docs.python.org/dev/3.0/tutorial/"&gt;the Python 3 tutorial&lt;/a&gt;.  It is not meant to cover all aspects of Python 3.  I will cover enough so that you should be able to write Python scripts in Blender 2.5.  This tutorial, the first in my Python 3 Programming series, will cover the Blender 2.5 Python console, how to create simple expressions and assignments, and how to use the Python 3 console as a calculator.  We'll go into more depth in further tutorials.&lt;br /&gt;&lt;br /&gt;So let's get started.  Start up Blender 2.5.  I'm using the version most current, which is Blender 2.5, Alpha 2.  We're not going to be doing any 3D modeling or game design.  Instead, we'll go to the Scripting setup, which you can select from the dropdown at the top row.  Place the cursor in the lower left window, the Python console, and press control-down arrow to make it full screen.  This is where we will stay.  &lt;br /&gt;&lt;br /&gt;First, note the 3 greater than signs (&gt;&gt;&gt;).  This is the Python console prompt.  As you type, make sure that the cursor is inside the console window.  Otherwise, what you type won't print.  &lt;br /&gt;&lt;br /&gt;From the console, we can enter a line of Python code and see it run.  We'll write the traditional first line of code, which prints "Hello World" on the console.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;print("Hello World")&lt;br /&gt;Hello World&lt;br /&gt;&lt;br /&gt;On the console is the text Hello World, in blue.  Congratulations, you have written your first Python script. &lt;br /&gt;&lt;br /&gt;Note that you need to enclose what you want to print in parentheses.  This differs from earlier Python versions, notably the Python 2 version that is included with Blender 2.4x, which did not require the parentheses.  Let's type what would have worked in Python 2 (and Blender 2.4x), and see what happens.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;print "Hello World"&lt;br /&gt; File "&lt;string&gt;", line None&lt;br /&gt;SyntaxError: invalid syntax (&lt;console&gt;, line 1)&lt;br /&gt;&lt;br /&gt;This is the Python console's way of telling you that you made a coding syntax error.  The message is a bit mysterious.  What Python is trying to tell you is that there was an error, on line 1 (the only line in the code), and that there's something wrong with the string.  At this point, just remember that you need the parentheses for the print statement.&lt;br /&gt;&lt;br /&gt;In Python, a string like "Hello World" can get assigned to a variable.  To assign the variable x to "Hello World", enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;x = "Hello World"&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;br /&gt;It appears that nothing happened.  You get the &gt;&gt;&gt; prompt again.  But actually, space to hold the contents of the variable x was created in memory, and the variable x was assigned the string "Hello World"&lt;br /&gt;&lt;br /&gt;Now, instead of printing the string, you can print the variable contents, as follows:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;print(x)&lt;br /&gt;Hello World&lt;br /&gt;&lt;br /&gt;There are rules for variable names.  One is that the variable name must start with a letter.  Let's see what happens when we try to print the contents of the variable y.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;print(y)&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;console&gt;", line 1, in &lt;module&gt;&lt;br /&gt;NameError: name 'y' is not defined&lt;br /&gt;&lt;br /&gt;This time, Python tells us that the name y is not defined.  So if you want Python to print the contents of a variable, it needs to be assigned, as x was.  By the way, you don't need to code the print() function (that's what the parentheses mean) if you want to print the contents of a variable.  You can simply enter it.  Just enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;x&lt;br /&gt;'Hello World'&lt;br /&gt;&lt;br /&gt;The single quotes around the contents of x indicates that inside is the contents of the variable x.&lt;br /&gt;&lt;br /&gt;Python variable names are case sensitive, which means that capitalization counts.  So entering:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;print(X)&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;console&gt;", line 1, in &lt;module&gt;&lt;br /&gt;NameError: name 'X' is not defined&lt;br /&gt;&lt;br /&gt;produces another NameError message.  In the Python world, these error messages are called Exceptions.  We'll talk about Exceptions in a later tutorial in more detail.  For now, it's Python's way of saying you made a mistake.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you enter a number (a whole number or decimal), Python treats just as if you entered it in your calculator.  So you can enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;5 * 9&lt;br /&gt;45&lt;br /&gt;&lt;br /&gt;Python calculates the answer, just as if you entered the numbers in a calculator.  You can use the standard symbols, +, -, / , and *, as well as ** for power.&lt;br /&gt;&lt;br /&gt;There are other symbols.  I'll point out an interesting one related to division.  If you type:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;5 / 3&lt;br /&gt;1.6666666666666667&lt;br /&gt;&lt;br /&gt;This is the standard division symbol.  The // is called integer division.  If you type:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; 5 // 3&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;you get just the integer part of the division.  If you do a "no no" like dividing by zero, for example:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; 5 / 0&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;console&gt;", line 1, in &lt;module&gt;&lt;br /&gt;ZeroDivisionError: int division or modulo by zero&lt;br /&gt;&lt;br /&gt;you get another error message, ZeroDivisionError&lt;br /&gt;&lt;br /&gt;Refer to the Python 3 documentation, at http://www.python.org, for more symbols, which are called operators.&lt;br /&gt;&lt;br /&gt;The pound sign (#) is a comment.  Comments document your code.  Anything after the # is ignored.  You'll see why comments are important when you write larger programs than one liners, in the text editor.  You can enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;x   # this is a comment&lt;br /&gt;'Hello World'&lt;br /&gt;&lt;br /&gt;The text after the comment is ignored.  Entering just a comment&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;# this is another comment&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;br /&gt;Once you assign a value to a variable, you can use it.  Here's an example:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; width = 20&lt;br /&gt;&gt;&gt;&gt; height = 5*9&lt;br /&gt;&gt;&gt;&gt; width * height&lt;br /&gt;900&lt;br /&gt;&lt;br /&gt;A value can be assigned to several variables simultaneously:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x = y = z = 20&lt;br /&gt;&gt;&gt;&gt; x&lt;br /&gt;20&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; y&lt;br /&gt;20&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; z&lt;br /&gt;20&lt;br /&gt;&lt;br /&gt;A special character, the underscore (_), prints the last calculation.  Thus:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; x * 5&lt;br /&gt;100&lt;br /&gt;&gt;&gt;&gt; _&lt;br /&gt;100&lt;br /&gt;&lt;br /&gt;There are some special functions that relate to numbers.  For example, you can use the round() function to round a number or expression to a specific number of decimal places.&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; round(3.141592222,4)&lt;br /&gt;3.1416&lt;br /&gt;&lt;br /&gt;This concludes Part 1.  We covered a lot of ground.  We were introduced to the Python console, how to print literal strings and assign them to variables, how the Python console behaves when there's an error, and how to use Python as a calculator.  In the next tutorial, we'll go into more detail about string handling, a key part of Python programming.&lt;br /&gt;&lt;br /&gt;If you liked this tutorial, please hit the Subscribe button on Youtube and discuss it at &lt;a href="http://forum.irakrakow.com"&gt;http://forum.irakrakow.com&lt;/a&gt;.  Happy Blendering, and happy Python Programming.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-1301363495140570961?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BFLAMevoRro0AWw_TAtp8kgJdO0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BFLAMevoRro0AWw_TAtp8kgJdO0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BFLAMevoRro0AWw_TAtp8kgJdO0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BFLAMevoRro0AWw_TAtp8kgJdO0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/ZfWLDOY8zBE" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/1301363495140570961?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/1301363495140570961?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/ZfWLDOY8zBE/python-3-part-1-expressions.html" title="Python 3, Part 1 (Expressions)" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/03/python-3-part-1-expressions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYMR345cSp7ImA9WxBUF00.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-7896499856453095542</id><published>2010-03-03T12:51:00.000-08:00</published><updated>2010-03-04T03:46:26.029-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-04T03:46:26.029-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Script" /><category scheme="http://www.blogger.com/atom/ns#" term="2.50" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="alpha 1" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><title>2.50 Alpha 1 Python Part  4</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/38nTWMPvq64&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/38nTWMPvq64&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Up to this point, we have been looking at the Blender 2.5 Python environment and to scripts to control windows, panels, and operators.  We haven't done anything with actual Blender objects.  It's time to see how to change and even create new Blender objects in Python.  &lt;br /&gt;&lt;br /&gt;In this tutorial, we will see how to create a Blender mesh, a torus.  The script is part of the Blender 2.5 installation, as an operator creation script, in the op folder under scripts.  You will see how properties, attributes of the torus such as major radius and external segments, are defined.  We'll install add_torus as an official Blender operator, and then run it.  After that, we will look at the code for a script that changes the default cube into a monkey, called &lt;a href="http://blenderartists.org/forum/showthread.php?p=1453581"&gt;Monkify&lt;/a&gt;, from Blenderartists user Crouch. The script adds Monkify to the Tool Shelf automatically.&lt;br /&gt;&lt;br /&gt;Here's the code for add_torus.py.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# ##### BEGIN GPL LICENSE BLOCK #####&lt;br /&gt;#&lt;br /&gt;#  This program is free software; you can redistribute it and/or&lt;br /&gt;#  modify it under the terms of the GNU General Public License&lt;br /&gt;#  as published by the Free Software Foundation; either version 2&lt;br /&gt;#  of the License, or (at your option) any later version.&lt;br /&gt;#&lt;br /&gt;#  This program is distributed in the hope that it will be useful,&lt;br /&gt;#  but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;#  GNU General Public License for more details.&lt;br /&gt;#&lt;br /&gt;#  You should have received a copy of the GNU General Public License&lt;br /&gt;#  along with this program; if not, write to the Free Software Foundation,&lt;br /&gt;#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.&lt;br /&gt;#&lt;br /&gt;# ##### END GPL LICENSE BLOCK #####&lt;br /&gt;&lt;br /&gt;# &lt;pep8 compliant&gt;&lt;br /&gt;import bpy&lt;br /&gt;import Mathutils&lt;br /&gt;from math import cos, sin, pi&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def add_torus(major_rad, minor_rad, major_seg, minor_seg):&lt;br /&gt;    Vector = Mathutils.Vector&lt;br /&gt;    Quaternion = Mathutils.Quaternion&lt;br /&gt;&lt;br /&gt;    PI_2 = pi * 2&lt;br /&gt;    z_axis = (0, 0, 1)&lt;br /&gt;&lt;br /&gt;    verts = []&lt;br /&gt;    faces = []&lt;br /&gt;    i1 = 0&lt;br /&gt;    tot_verts = major_seg * minor_seg&lt;br /&gt;    for major_index in range(major_seg):&lt;br /&gt;        quat = Quaternion(z_axis, (major_index / major_seg) * PI_2)&lt;br /&gt;&lt;br /&gt;        for minor_index in range(minor_seg):&lt;br /&gt;            angle = 2 * pi * minor_index / minor_seg&lt;br /&gt;&lt;br /&gt;            vec = Vector(major_rad + (cos(angle) * minor_rad), 0.0,&lt;br /&gt;                        (sin(angle) * minor_rad)) * quat&lt;br /&gt;&lt;br /&gt;            verts.extend([vec.x, vec.y, vec.z])&lt;br /&gt;&lt;br /&gt;            if minor_index + 1 == minor_seg:&lt;br /&gt;                i2 = (major_index) * minor_seg&lt;br /&gt;                i3 = i1 + minor_seg&lt;br /&gt;                i4 = i2 + minor_seg&lt;br /&gt;&lt;br /&gt;            else:&lt;br /&gt;                i2 = i1 + 1&lt;br /&gt;                i3 = i1 + minor_seg&lt;br /&gt;                i4 = i3 + 1&lt;br /&gt;&lt;br /&gt;            if i2 &gt;= tot_verts:&lt;br /&gt;                i2 = i2 - tot_verts&lt;br /&gt;            if i3 &gt;= tot_verts:&lt;br /&gt;                i3 = i3 - tot_verts&lt;br /&gt;            if i4 &gt;= tot_verts:&lt;br /&gt;                i4 = i4 - tot_verts&lt;br /&gt;&lt;br /&gt;            # stupid eekadoodle&lt;br /&gt;            if i2:&lt;br /&gt;                faces.extend([i1, i3, i4, i2])&lt;br /&gt;            else:&lt;br /&gt;                faces.extend([i2, i1, i3, i4])&lt;br /&gt;&lt;br /&gt;            i1 += 1&lt;br /&gt;&lt;br /&gt;    return verts, faces&lt;br /&gt;&lt;br /&gt;from bpy.props import *&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class AddTorus(bpy.types.Operator):&lt;br /&gt;    '''Add a torus mesh'''&lt;br /&gt;    bl_idname = "mesh.primitive_torus_add"&lt;br /&gt;    bl_label = "Add Torus"&lt;br /&gt;    bl_register = True&lt;br /&gt;    bl_undo = True&lt;br /&gt;&lt;br /&gt;    major_radius = FloatProperty(name="Major Radius",&lt;br /&gt;            description="Radius from the origin to the center of the cross sections",&lt;br /&gt;            default=1.0, min=0.01, max=100.0)&lt;br /&gt;    minor_radius = FloatProperty(name="Minor Radius",&lt;br /&gt;            description="Radius of the torus' cross section",&lt;br /&gt;            default=0.25, min=0.01, max=100.0)&lt;br /&gt;    major_segments = IntProperty(name="Major Segments",&lt;br /&gt;            description="Number of segments for the main ring of the torus",&lt;br /&gt;            default=48, min=3, max=256)&lt;br /&gt;    minor_segments = IntProperty(name="Minor Segments",&lt;br /&gt;            description="Number of segments for the minor ring of the torus",&lt;br /&gt;            default=12, min=3, max=256)&lt;br /&gt;    use_abso = BoolProperty(name="Use Int+Ext Controls",&lt;br /&gt;            description="Use the Int / Ext controls for torus dimensions",&lt;br /&gt;            default=False)&lt;br /&gt;    abso_major_rad = FloatProperty(name="Exterior Radius",&lt;br /&gt;            description="Total Exterior Radius of the torus",&lt;br /&gt;            default=1.0, min=0.01, max=100.0)&lt;br /&gt;    abso_minor_rad = FloatProperty(name="Inside Radius",&lt;br /&gt;            description="Total Interior Radius of the torus",&lt;br /&gt;            default=0.5, min=0.01, max=100.0)&lt;br /&gt;&lt;br /&gt;    def execute(self, context):&lt;br /&gt;        props = self.properties&lt;br /&gt;&lt;br /&gt;        if props.use_abso == True:&lt;br /&gt;            extra_helper = (props.abso_major_rad - props.abso_minor_rad) * 0.5&lt;br /&gt;            props.major_radius = props.abso_minor_rad + extra_helper&lt;br /&gt;            props.minor_radius = extra_helper&lt;br /&gt;&lt;br /&gt;        verts_loc, faces = add_torus(props.major_radius,&lt;br /&gt;                                    props.minor_radius,&lt;br /&gt;                                    props.major_segments,&lt;br /&gt;                                    props.minor_segments)&lt;br /&gt;&lt;br /&gt;        mesh = bpy.data.meshes.new("Torus")&lt;br /&gt;&lt;br /&gt;        mesh.add_geometry(int(len(verts_loc) / 3), 0, int(len(faces) / 4))&lt;br /&gt;        mesh.verts.foreach_set("co", verts_loc)&lt;br /&gt;        mesh.faces.foreach_set("verts_raw", faces)&lt;br /&gt;        mesh.faces.foreach_set("smooth", [False] * len(mesh.faces))&lt;br /&gt;&lt;br /&gt;        scene = context.scene&lt;br /&gt;&lt;br /&gt;        # ugh&lt;br /&gt;        for ob in scene.objects:&lt;br /&gt;            ob.selected = False&lt;br /&gt;&lt;br /&gt;        mesh.update()&lt;br /&gt;        ob_new = bpy.data.objects.new("Torus", 'MESH')&lt;br /&gt;        ob_new.data = mesh&lt;br /&gt;        scene.objects.link(ob_new)&lt;br /&gt;        ob_new.selected = True&lt;br /&gt;&lt;br /&gt;        ob_new.location = scene.cursor_location&lt;br /&gt;&lt;br /&gt;        obj_act = scene.objects.active&lt;br /&gt;&lt;br /&gt;        if obj_act and obj_act.mode == 'EDIT':&lt;br /&gt;            bpy.ops.object.mode_set(mode='OBJECT')&lt;br /&gt;&lt;br /&gt;            obj_act.selected = True&lt;br /&gt;            scene.update() # apply location&lt;br /&gt;            #scene.objects.active = ob_new&lt;br /&gt;&lt;br /&gt;            bpy.ops.object.join() # join into the active.&lt;br /&gt;&lt;br /&gt;            bpy.ops.object.mode_set(mode='EDIT')&lt;br /&gt;        else:&lt;br /&gt;            scene.objects.active = ob_new&lt;br /&gt;            if context.user_preferences.edit.enter_edit_mode:&lt;br /&gt;                bpy.ops.object.mode_set(mode='EDIT')&lt;br /&gt;&lt;br /&gt;        return {'FINISHED'}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Add to the menu&lt;br /&gt;menu_func = (lambda self, context: self.layout.operator(AddTorus.bl_idname,&lt;br /&gt;                                        text="Torus", icon='MESH_DONUT'))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def register():&lt;br /&gt;    bpy.types.register(AddTorus)&lt;br /&gt;    bpy.types.INFO_MT_mesh_add.append(menu_func)&lt;br /&gt;&lt;br /&gt;def unregister():&lt;br /&gt;    bpy.types.unregister(AddTorus)&lt;br /&gt;    bpy.types.INFO_MT_mesh_add.remove(menu_func)&lt;br /&gt;&lt;br /&gt;if __name__ == "__main__":&lt;br /&gt;    register()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Start up Blender and delete the default cube (right click to select, press the Delete key, and press Enter to confirm).  Switch to the Scripting setup.  Open add_torus.py by going to the op folder and selecting the script.&lt;br /&gt;&lt;br /&gt;The actual code to add a torus is the add_torus() function.  We won't go into the nitty gritty details of the calculation for actually adding it.  We'll take it on faith that when add_torus is called, it will produce a torus.  I just want to point out that this function returns two items, a list of vertices and a list of faces.&lt;br /&gt;&lt;br /&gt;Next the Properties are defined.  Each property has a default, min, max, and help text.  Properties have a data type, such as FloatProperty, IntProperty, and BoolProperty (True/False).  FloatProperty is for numbers with decimals, like Major Radius.  IntPropert is for whole numbers, like Major Segments.  BoolProperty is for True/False values, usually displayed as a check box, where True=checked and False=Unchecked.  MajorRadius, for example, has a Float property.  Its default is 1.0, with a minimum of 0.1, a maximum of 100.0, and help text explaining that it is the radius from the origin to the beginning of the cross sections.  We'll see how to change the major radius when we actually create the torus.  use_abso is a Boolean property (shown as a check box) for whether internal / external controls are needed for the torus dimension.&lt;br /&gt;&lt;br /&gt;The execute() function actually creates the torus.  First, the properties we created earlier in the code are retrieved.  Then, the use_abso property is tested, and if true, the extra calculations for internal and external controls are done.  Then, add_torus() is called, returning the verts and faces for the torus.&lt;br /&gt;&lt;br /&gt;In the next section, the mesh variable is created in memory, and the verts and faces are added to it.  The code:&lt;br /&gt;&lt;br /&gt;   scene = context.scene&lt;br /&gt;&lt;br /&gt;retrieves the active scene.  This code:&lt;br /&gt;&lt;br /&gt; mesh.update()&lt;br /&gt;        ob_new = bpy.data.objects.new("Torus", 'MESH')&lt;br /&gt;        ob_new.data = mesh&lt;br /&gt;        scene.objects.link(ob_new)&lt;br /&gt;        ob_new.selected = True&lt;br /&gt;&lt;br /&gt;adds the torus to the scene.  Finally, the function checks to see whether or not we are in Edit mode or object mode.  If in Edit mode, the mesh is joined with the previous mesh.  If in Object mode, the torus becomes the active object and the torus is in edit mode.&lt;br /&gt;&lt;br /&gt;The rest of the code adds the new add_torus function to the menu of available operators, so that it can run from within Blender.&lt;br /&gt;&lt;br /&gt;Now let's install and run add_torus.  Click the Run Sripts button.&lt;br /&gt;&lt;br /&gt;Switch to the Default view.  From the Search window, type in Add Torus, or enough of it so that you can see it.  Click on the Add Torus button.  The panel at the bottom of the Tool Shelf.  Unlike in Blender 2.4x, where you set the properties before the torus is created, in 2.5, the torus is created first, with the default settings for each property.  At the bottom of the Tool Shelf is a panel that has the defaults.  You can change these if you don't like them.  Remember that in the code, the Major Radius had a default of 1, a minimum of 0.1 and a maximum of 100.0.  Let's change the major radius to 0.  We can't because major radius becomes 0.1.  Similarly, if we try to change the major radius to 99999, it is reset to the maximum of 100.0.  You can do the same to any other parameter, such as Major Segments, which has a minimum of 3 and a maximum of 256.  The torus changes in real time, according to the new settings.  &lt;br /&gt;&lt;br /&gt;Here's another example, called "monkify", from Blenderartists user Crouch, at:  http://blenderartists.org/forum/showthread.php?p=1452061.  In it, he changes the default cube to a monkey by creating a Python operator.  As we saw in Part 3, once this operator is registered, it can becomes a tool in your Tool Shelf.  You can also search for it, and run it anywhere in Blender.  &lt;br /&gt;&lt;br /&gt;Switch back to the Scripting window.  Create a new text window.  I pasted the Monkify script, which you can get from following the link in the notes.&lt;br /&gt;&lt;br /&gt;MONKIFY:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class OBJECT_OT_monkify(bpy.types.Operator):&lt;br /&gt;    bl_idname = "OBJECT_OT_monkify"&lt;br /&gt;    bl_label = "Monkify"&lt;br /&gt;    bl_description = "Replace the current mesh with a monkey"&lt;br /&gt;    &lt;br /&gt;    def poll(self, context):&lt;br /&gt;        if not context.active_object:&lt;br /&gt;            return&lt;br /&gt;        return context.active_object.type == 'MESH'&lt;br /&gt;    &lt;br /&gt;    def invoke(self, context, event):&lt;br /&gt;        ob = context.active_object&lt;br /&gt;        me = ob.data&lt;br /&gt;        if len(me.verts) &gt; 0:&lt;br /&gt;            me.verts[0].selected = True&lt;br /&gt;        if len(me.verts) &gt; 1:&lt;br /&gt;            me.verts[1].selected = False&lt;br /&gt;        me.update()&lt;br /&gt;        bpy.ops.object.editmode_toggle()&lt;br /&gt;        bpy.ops.mesh.select_all(action='TOGGLE')&lt;br /&gt;        bpy.ops.mesh.select_all(action='TOGGLE')&lt;br /&gt;        bpy.ops.mesh.delete(type='VERT')&lt;br /&gt;        loc = (ob.location[0], ob.location[1], ob.location[2])&lt;br /&gt;        bpy.ops.mesh.primitive_monkey_add(location=loc)&lt;br /&gt;        bpy.ops.object.editmode_toggle()&lt;br /&gt;        return{'FINISHED'}&lt;br /&gt; &lt;br /&gt;bpy.types.register(OBJECT_OT_monkify)&lt;br /&gt;&lt;br /&gt;menu_func = (lambda self, context: self.layout.operator('OBJECT_OT_monkify'))&lt;br /&gt;bpy.types.VIEW3D_PT_tools_objectmode.prepend(menu_func)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Monkify is simply another Blender operator which replaces the current mesh with a monkey.   The poll() function makes sure that Monkify can run.  It checks whether there is an active object and that it is a mesh.  If not, it doesn't run.&lt;br /&gt;&lt;br /&gt;The invoke() function gets the data of the active object.  If you look in the help at bpy.ops.mesh in the API documentation, you can see what you can do to a mesh, letting the program do what you would do.  By invoking the select_all() function in edit mode twice, this insures that all the vertices are selected.  Then the vertices are all deleted.  The function bpy.ops.mesh.primitive_monkey_add(location=loc) actually adds the monkey.  &lt;br /&gt;&lt;br /&gt;At the bottom of the code, the new operator (OBJECT_OT_monkify) is registered.  The prepend function places the new operator at the top of the Tools menu.&lt;br /&gt;&lt;br /&gt;We can now run Monkify.  Voila, the torus is now a monkey.&lt;br /&gt;&lt;br /&gt;I hope that you enjoyed this tour of mesh creation scripts in Python 2.5.  If you did, don't forget to hit the Youtube Subscribe button, and to discuss my tutorial at forum.irakrakow.com.  Happy Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-7896499856453095542?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OXz5NHtJoYfpm8ES70TV_Smzohg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OXz5NHtJoYfpm8ES70TV_Smzohg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OXz5NHtJoYfpm8ES70TV_Smzohg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OXz5NHtJoYfpm8ES70TV_Smzohg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/ABhguR22g4s" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/7896499856453095542?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/7896499856453095542?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/ABhguR22g4s/250-alpha-1-python-part-4.html" title="2.50 Alpha 1 Python Part  4" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/03/250-alpha-1-python-part-4.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMHR3w5fSp7ImA9WxBUFk8.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-6835328394980316408</id><published>2010-03-02T17:15:00.000-08:00</published><updated>2010-03-03T04:47:16.225-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-03T04:47:16.225-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Script" /><category scheme="http://www.blogger.com/atom/ns#" term="2.50" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><title>2.50 Alpha 1 Python Part 3</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/24RNmRxEKZg&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/24RNmRxEKZg&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;In Part 2, we saw how windows are built from building blocks called Panels in Blender 2.5.  You can lay out a panel and get data from the user.  The next step is to actually do something with the data.  For that, Blender 2.5 lets you define operators.  Once you create an operator, it works anywhere within Blender.  In this tutorial, we will create a simple operator, using the simple_operator.py template, one of a number of pre-designed templates that makes it easy for you to just add the functionality you need.  &lt;br /&gt;&lt;br /&gt;After that, we will look at a &lt;a href="http://blenderartists.org/forum/showthread.php?p=1452061"&gt;simple example&lt;/a&gt;, created by Blenderartists user Crouch.  By looking at the code, we can see how to create a panel with a simple row and column layout and display a button.  Then we will create a "ping pong" operator which, when the button is clicked, toggles between displaying the button in the left column and then the right column.   &lt;br /&gt;&lt;br /&gt;First, let's see what an operator can do.  Start up Blender with the default scene.  Again, we're not going to do anything with the default cube.  We'll go straight into the Text Editor by changing the window type to Text Editor.  From the Text menu, select Open.  Navigate to the .blender folder, which is a subfolder included in the 2.5 distribution.  If it is hidden, because it starts with a dot, unhide this type of folder in your operating system.  Click on the .blender folder and go to the Scripts folder.  Click on the Templates folder, which contains templates for basic scripts, and choose "operator_simple.py".  &lt;br /&gt;&lt;br /&gt;The code is shown below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def main(context):&lt;br /&gt;    for ob in context.scene.objects:&lt;br /&gt;        print(ob)&lt;br /&gt;&lt;br /&gt;class SimpleOperator(bpy.types.Operator):&lt;br /&gt;    ''''''&lt;br /&gt;    bl_idname = "object.simple_operator"&lt;br /&gt;    bl_label = "Simple Object Operator"&lt;br /&gt;&lt;br /&gt;    def poll(self, context):&lt;br /&gt;        return context.active_object != None&lt;br /&gt;&lt;br /&gt;    def execute(self, context):&lt;br /&gt;        main(context)&lt;br /&gt;        return {'FINISHED'}&lt;br /&gt;&lt;br /&gt;bpy.types.register(SimpleOperator)&lt;br /&gt;&lt;br /&gt;if __name__ == "__main__":&lt;br /&gt;    bpy.ops.object.simple_operator()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This operator will print the names of all the objects in the active scene on the Blender console.  That's what the code in main() does.  The class, SimpleOperator, needs two variables to be defined.  bl_idname (object.simple_operator) is the internal name of the function.  bl_label (Simple Object Operator) is the external name, the name of the operator, for the Blender GUI.  The poll() function checks to see whether there's an active object.  For now, just leave it as is.  &lt;br /&gt;&lt;br /&gt;The real action takes place in the execute() function.   When simple_operator is called, execute() calls the main() function, which, as I said prints the object names on the Blender console.  By returning 'FINISHED', the execute() function proclaims that it did its job, and the operator's job is complete.&lt;br /&gt;&lt;br /&gt;The register function registers SimpleOperator as an official Blender function.  &lt;br /&gt;&lt;br /&gt;The final two lines allow the simple_operator to be run outside of the Blender GUI, in a standalone fashion. &lt;br /&gt;&lt;br /&gt;Click the Run Script button.  Nothing seems to have happened.  However, if we click on the Blender console, we see that the names of the 3 objects in the scene, the Cube, the Lamp, and the Camera, print on the Blender console.&lt;br /&gt;&lt;br /&gt;What's nice is that you can run this new operator from anywhere within Blender.  To illustrate that, go to the little Search window at the top of the screen, and start typing Simple.  You'll see that the Simple Object Operator name displays.  Click on it.  Go to the Blender console and you'll see that our new Blender operator ran again, printing the names of the objects in the scene.&lt;br /&gt;&lt;br /&gt;You can even add your new operator as a tool.  To illustrate that, go to the 3D window.  From the Tool Self (on the left), click the Add Tool button, and type Simple again, just as before.  Choose Simple Object Operator.  Your operator is now part of the Tool Shelf.  Click the Simple Object Operator button.  Go to the Blender console and you can see that the object names are printed yet again.&lt;br /&gt;&lt;br /&gt;That's pretty slick, I think.  Let's combine our knowledge of panels and operators to do something a bit more complicated.  &lt;br /&gt;&lt;br /&gt;Switch back to the Text window and add a new text block.  I pasted the Ping Pong button example posted by Crouch on Blendernewbies.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class ObjectButtonsPanel(bpy.types.Panel):&lt;br /&gt;    bl_space_type = "PROPERTIES"&lt;br /&gt;    bl_region_type = "WINDOW"&lt;br /&gt;    bl_context = "object"&lt;br /&gt;&lt;br /&gt;class OBJECT_PT_pingpong(ObjectButtonsPanel):&lt;br /&gt;    bl_label = "Ping Pong"&lt;br /&gt;    Display = 0&lt;br /&gt;    &lt;br /&gt;    def draw_header(self, context):&lt;br /&gt;        layout = self.layout&lt;br /&gt;        layout.label(text="", icon='PHYSICS')&lt;br /&gt;    &lt;br /&gt;    def draw(self, context):&lt;br /&gt;        layout = self.layout&lt;br /&gt;        row = layout.row()&lt;br /&gt;        split = row.split(percentage=0.5)&lt;br /&gt;        colL = split.column()&lt;br /&gt;        colR = split.column()&lt;br /&gt;        &lt;br /&gt;        if bpy.types.OBJECT_PT_pingpong.Display == 0:&lt;br /&gt;            colL.operator("pipo", text="Ping")&lt;br /&gt;        else:&lt;br /&gt;            colR.operator("pipo", text="Pong")&lt;br /&gt;&lt;br /&gt;class OBJECT_OT_pingpong(bpy.types.Operator):&lt;br /&gt;    bl_label = "pipo"&lt;br /&gt;    bl_idname = "pipo"&lt;br /&gt;    bl_description = "Move the ball"&lt;br /&gt;&lt;br /&gt;    def invoke(self, context, event):&lt;br /&gt;        moveTheBall()&lt;br /&gt;        bpy.types.OBJECT_PT_pingpong.Display = 1 - bpy.types.OBJECT_PT_pingpong.Display&lt;br /&gt;        return{'FINISHED'}&lt;br /&gt;&lt;br /&gt;def moveTheBall():&lt;br /&gt;    print('Moving the ball')&lt;br /&gt;&lt;br /&gt;bpy.types.register(OBJECT_OT_pingpong)&lt;br /&gt;bpy.types.register(OBJECT_PT_pingpong)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The panel will be registered in the Objects window, displaying at the bottom of it, because of the bl_ variables at the top of the script.  The ObjectButtonsPanel class contains two functions, draw_header() and draw() which draw the header and the rest of the layout, respectively.  draw_header() places the Physics icon in the header area.  draw() splits the row into two columns, equally (percentage = 0.5).  Initially, the button does not display because Display is initialized to 0, making the Ping button display.&lt;br /&gt;&lt;br /&gt;The operator (OBJECT_OT_pingpong) has the name pipo.  When the button is clicked, the invoke() function is called.  The message "Moving the ball" displays on the console, and the panel displays, with the button position switching between the left and right column.  &lt;br /&gt;&lt;br /&gt;Both the operator (OBJECT_OT_pingpong) and the panel (OBJECT_PT_pingpong) will be registered, when the script is executed. &lt;br /&gt;&lt;br /&gt;Click the Run Script button.  Go to the Object window.  Click on the Ping button, then click on the Pong button.  Repeat as often as you want.&lt;br /&gt;&lt;br /&gt;I hope you liked this.  If you did, don't forget to hit the Subscribe button on Youtube and to discuss my video at &lt;a href="http://forum.irakrakow.com"&gt;http://forum.irakrakow.com&lt;/a&gt;.  Happy Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-6835328394980316408?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vygOCxqGev_jqx15Cchlt7nzeIM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vygOCxqGev_jqx15Cchlt7nzeIM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vygOCxqGev_jqx15Cchlt7nzeIM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vygOCxqGev_jqx15Cchlt7nzeIM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/j3nDNttPNBY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/6835328394980316408?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/6835328394980316408?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/j3nDNttPNBY/250-alpha-1-python-part-3.html" title="2.50 Alpha 1 Python Part 3" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/03/250-alpha-1-python-part-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUHR3o_eSp7ImA9WxBUFUk.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-170263637725085779</id><published>2010-03-02T07:28:00.000-08:00</published><updated>2010-03-02T08:43:56.441-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-02T08:43:56.441-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Script" /><category scheme="http://www.blogger.com/atom/ns#" term="panel" /><category scheme="http://www.blogger.com/atom/ns#" term="2.50" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="ui" /><category scheme="http://www.blogger.com/atom/ns#" term="alpha 1" /><category scheme="http://www.blogger.com/atom/ns#" term="window" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><title>2.50 Alpha 1 Python Part 2</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ZAckF-o0qws&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ZAckF-o0qws&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;In Part 1 of this series on Blender 2.50 Python, we explored the new Blender 2.50 Python User Interface.  In Part 2, we will look at the new user interface, consisting of windows and panels.  You are already familiar with windows -- things like the 3D window, the Outline Window, and the UV / Image Editor Window.  These still behave as 2.4x type windows, which you can resize, split, join, and so on.  &lt;br /&gt;&lt;br /&gt;However, the way windows are built is completely different.  In Blender 2.5, windows are assembled in units called Panels.  You program each panel as a Python class.  A window is a group of panels, with each panel in the window registered to it.  In this tutorial, we will explore how Blender 2.5 windows are put together by both looking at the scripts that build the windows in the user interface, and actually changing these windows.  Then we will create a panel based on Blender's panel template script, and register it to a window, adding our own panel to a Blender window.  In the process, we will see where the python scripts for the windows shipped with Blender are kept and examine how the user interface is created.  The goal is to show you how to find the code for the windows, as a starting point for you to change the Python code to add panels to existing windows.  The way of building the User Interface has changed so much in 2.50 that just about all Blender Python 2.4x scripts that use windows need to be rewritten, basically from the ground up.&lt;br /&gt;&lt;br /&gt;This tutorial is based on the &lt;a href="http://mfoxdogg.com/2_5_tour_python.ogg"&gt;Blender 2.5 Tour 9, Python tutorial&lt;/a&gt;, by Michael Fox (mfoxdogg), at:  .&lt;br /&gt;&lt;br /&gt;So start up Blender 2.5 Alpha 1.  The 3D window has a default cube.  We won't be doing anything with any Blender objects in this tutorial.  We'll only be looking at the user interface scripts.  First off, where are they?  To find out, switch the 3D window to a Text window by going to the window type buttons menu.  The text icon is the same as in Blender 2.4x.  From the Text menu, select Open.  Bundled into the distribution files is a .blender folder.  It may be hidden on your computer, so enable unhiding folders in your operating system, if you don't see that folder.  The Blender Python scripts are in the Scripts folder.  By the way, there are other Python scripts in the Python/lib folder.  You can look at these, which are part of the Python 3.1 distribution, to learn more about Python itself.  Today, we're going to look at the Scripts folder.&lt;br /&gt;&lt;br /&gt;The Scripts folder itself contains a number of folders:  extensions, IO, modules, op, presets, templates, and ui.  We're going to start by going to the ui folder, which contains the scripts for the windows in Blender's user interface.  The script names start with either "properties_" or "space_".  The ones starting with "properties_" are the scripts for the various properties windows.  The scripts starting with "space_" are scripts for Blender's windows, such as console, dopesheet, and 3D.  Space_view3d.py, for example, is the script for the 3D window.&lt;br /&gt;&lt;br /&gt;We're going to start with the script for the Material window, properties_material.py.  In the window on the far right, which you may need to expand a bit, click on the big spherical icon.  This is the Material window, which is the window produced by this script.   The window is divided into sections, which are coded as Property panels.  Hide the details of each panel, so that only the headers -- things like Preview, Diffuse, Specular and so on -- show.  &lt;br /&gt;&lt;br /&gt;Corresponding to each of these panels is a Python class of starting with the words MATERIAL_PT.  In the code, the panels are not coded in the order that you see them.  In fact, there are panels that you don't see.  The panel for the Diffuse settings is labeled "Diffuse", and the code to build the user interface elements, such as the list of shaders, is in the class called MATERIAL_PT_diffuse, specifically in the Draw function, which is required for any panel, some of the code of which is highlighted in pink.  There's a class called MATERIAL_PT_specular for the specular panel, with its Draw function, a class called MATERIAL_PT_shading for the Shading panel, and so on.&lt;br /&gt;&lt;br /&gt;All the way at the bottom is a list of the panel classes in this window, which are highlighted.  This is the order that the panels will display in, although not all of them may display. These classes are registered when the register function, highlighted here, is called.  Note that the Physics panel is not displayed.  That's because Physics is not appropriate to the Blender Render material window.  However, if we switch to Blender Game, where Physics is relevant, the panel displays.  In the code for the Physics panel, we see that the panel only should display for the Blender Game engine.&lt;br /&gt;&lt;br /&gt;One last thing.  The material window class has the following properties:&lt;br /&gt; bl_space_type = 'PROPERTIES'&lt;br /&gt;    bl_region_type = 'WINDOW'&lt;br /&gt;    bl_context = "material"&lt;br /&gt;&lt;br /&gt;Remember this when we build our panel, to add to the Material window.  To build a panel, Blender has a template script called panel_simple.py, in the Templates folder.  This script, by default, adds a "Hello World" panel, which displays the active object name, to the Object panel.  Since we want to add this panel to the material window, we change bl_context to "material".  The draw function actually draws the layout on the panel.  The row() function creates a row.  Three rows are created, one of which displays "Hello World" with an icon.  The second row displays the name of the active object.  The third row is an input area where we can change the name of the cube.    Finally, this new class is registered.&lt;br /&gt;&lt;br /&gt;If we press the Run Script button, the script runs.  Look at the Material window.  The Hello World panel was added at the bottom.  Change the name of the cube to MyCube.  Look in the outliner.  The name of the object has changed.&lt;br /&gt;&lt;br /&gt;Of course, there's a lot more, such as the details of how panels are drawn.  We'll leave that for another tutorial.  For now, I hope you have a better idea of how the new 2.5 interface works and how the scripts are organized.  If you liked this tutorial, please hit the Subscribe button on Youtube, and discuss this video at &lt;a href="http://forum.irakrakow.com"&gt;forum.irakrakow.com&lt;/a&gt;.  Happy Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-170263637725085779?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UkWO1JVWnJLTRHpFRccWImr4Hfg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UkWO1JVWnJLTRHpFRccWImr4Hfg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UkWO1JVWnJLTRHpFRccWImr4Hfg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UkWO1JVWnJLTRHpFRccWImr4Hfg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/pCnHyfawFRs" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/170263637725085779?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/170263637725085779?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/pCnHyfawFRs/250-alpha-1-python-part-2.html" title="2.50 Alpha 1 Python Part 2" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/03/250-alpha-1-python-part-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYMR30-eip7ImA9WxBUFE0.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-796627498472627121</id><published>2010-02-28T16:38:00.001-08:00</published><updated>2010-02-28T16:43:06.352-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-28T16:43:06.352-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Script" /><category scheme="http://www.blogger.com/atom/ns#" term="camera" /><category scheme="http://www.blogger.com/atom/ns#" term="changer" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><category scheme="http://www.blogger.com/atom/ns#" term="2.49b" /><title>2.49 Camera Changer</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/6UdG7ClEU5A&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/6UdG7ClEU5A&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Adding cameras, which have different views of the scene, and then changing them during your animation, can add more drama and realism to your animations.  Blender lets you have as many cameras as you want, and to position them anywhere in your scene.  Blender also has many Python scripts.  You've probably used a few of them.  For example, if you have ever saved the UV face layout from the UV/Image editor,to export the UV face layout to an image editor, you've used a Python script.  &lt;br /&gt;&lt;br /&gt;As it happens, there's a Python script, called camera_changer.py, that lets you change the active camera at any frame that you want.  The script is easy to use, relying on a simple naming convention for each camera.  In good old Blender tradition, we'll animate Suzanne and, at different frames in the animation, change the animation so that we look at her from the default camera, then from above, and finally from below.  After that, we'll go behind the scenes so to speak and we'll look at the Python script that does all the magic.&lt;br /&gt;&lt;br /&gt;So start with the default Blender scene.  Delete the default cube by right clicking on the cube, pressing Delete, and then pressing Enter.  Add Suzanne, the Blender mascot (Space - Add - Mesh - Monkey).  Press F10 to bring up the Scene buttons.  Click the Preview button at the extreme right, so that we get a 640 x 480 render size, making the rendering time fairly quick.  Click the Render button to render.  We're at Frame 1 and we get a view of Suzanne from about a 45 degree angle.&lt;br /&gt;&lt;br /&gt;Now we'll add two cameras, one looking down at Suzanne, the other looking up at her.  To do that, go to Front view, which makes the blue direction up and down.  Position the 3D cursor at 0,0,0 by pressing Shift-C.  Add a camera (Space - Add - Camera).  Move the camera upward in the blue direction 5 blender units (G  Z  5 Enter).  From the View menu, select Cameras, and then Select Active Object as Active Camera.  Press F12 to render.  Now you have a head on shot of Suzanne.&lt;br /&gt;&lt;br /&gt;Add a third camera by selecting the camera and pressing Shift-D.  Move this camera 10 units down in the Z direction (G Z -10 Enter).  Rotate the camera 180 degrees so it's looking upwards (R 180 Enter).  From the View menu, select Cameras, and then Select Active Object as Active Camera.  Press F12 to render.  Now we see the back of Suzanne's head.&lt;br /&gt;&lt;br /&gt;Now the fun begins.  From the Front view (Num1), go to the Animation set up by selecting it from the default Blender 2.49 setups.  Note that there are 3 cameras, Camera (the original one), Camera.001 (the camera looking from the top), and Camera.002 (the camera looking from the bottom).  We're going to make the default Camera  active at Frames 1, 101, and 201.  Camera.001 will be active at Frames 50, 125, and 225.  Camera.002 will be active at Frames 75, 175, and 240.  Camera_changer.py looks at the camera names to determine when to change the active camera.  The frame numbers are separated by commas.  Rename Camera to 1,101,201 from the Outliner (Ctrl-Left Click, then rename).  Left click on Camera.001.  Rename it to 50,125,225 by control left clicking and entering those numbers.   Then left click on Camera.002.  Rename it to 75,175,240.&lt;br /&gt;&lt;br /&gt;To activate the camera_changer script, go to the Scripts setup by selecting it.  Click the Scripts button.  Under Animation, choose Camera Changer.  Note in the lower right window, the Enable Script Links button is now enabled.  In addition, the Camera_changer.py script has been selected, for the Frame Changed event.  What this means is that this script runs every time a the next frame is rendered.  Camera_changer simply checks the list of frames in the camera name to figure out if the active camera needs to be changed.  There are other events - OnLoad, OnSave, Render, and Redraw - from which a Python script can run.   &lt;br /&gt;&lt;br /&gt;That's it.  To render the animation, press Control-F12.  Watch the cameras change.&lt;br /&gt;&lt;br /&gt;Let's look under the hood.  Change the Script window to the Text window.  From the Text menu, select Open.  Navigate to the Blender Scripts directory.   Sometimes that directory is hidden.  On my Vista machine, it's in the AppData, Roaming folder, which is hidden.  You need to make sure you can see the directory.  &lt;br /&gt;&lt;br /&gt;Here's the code.  At the top, in the area I highlight in pink, are some comments conforming to the Blender convention, with the headings Name, Heading, Blender, and Tip.  The name (Camera Changer) is the script's name.  Blender is the Blender version it was coded for.  Group (Animation) is the Script group from where you can select the script.  Tip is help text for the script.&lt;br /&gt;&lt;br /&gt;The real action in the script takes place in the main() function, which I highlight in pink.  Basically, the Blender module contains all the functions you can call with Python.  The code gets the current scene, gets the frame number, and checks the list of objects in the scene.  If the object is a camera, and if the current frame number is in the list of frame numbers of the camera name, the SetCurrentCamera() function is called to make that camera the active camera.  &lt;br /&gt;&lt;br /&gt;In case you're wondering, this other main() function installs the scriptlink for camera_changer.py.  It was called, once, when you chose camera_changer.py.  This sets up camera_changer to run.&lt;br /&gt;&lt;br /&gt;As an aside, I absolutely guarantee you that this script will NOT run in Blender 2.5.  First of all, this script runs in Python 2.6, while Blender 2.5 runs Python 3.  A simple thing like the print statement needs to be enclosed in parentheses.  Second, and actually more important, the Blender module is not currently supported in Blender 2.5.  The API has been completely rewritten and is encapsulated in the bpy module.  It's entirely possible that this camera changer script will NEVER run in Blender 2.5.&lt;br /&gt;&lt;br /&gt;So it's pretty simple to change cameras.  I hope you are inspired to become the next Alfred Hitchcock by this.  If you are, don't forget to hit the Youtube Subscribe button and to discuss this tutorial at forum.irakrakow.com&lt;a href="http://forum.irakrakow.com"&gt;&lt;/a&gt;.  Happy Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-796627498472627121?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IPYPq3Np18E0hIUrDVhtb1sR_C4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IPYPq3Np18E0hIUrDVhtb1sR_C4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IPYPq3Np18E0hIUrDVhtb1sR_C4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IPYPq3Np18E0hIUrDVhtb1sR_C4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/2rygB75mVfI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/796627498472627121?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/796627498472627121?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/2rygB75mVfI/249-camera-changer.html" title="2.49 Camera Changer" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/02/249-camera-changer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4NRHw6eCp7ImA9WxBUEk0.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-1633696747056590671</id><published>2010-02-26T09:25:00.000-08:00</published><updated>2010-02-26T10:13:15.210-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-26T10:13:15.210-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pixar" /><category scheme="http://www.blogger.com/atom/ns#" term="rendering" /><category scheme="http://www.blogger.com/atom/ns#" term="cg" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><category scheme="http://www.blogger.com/atom/ns#" term="eye" /><category scheme="http://www.blogger.com/atom/ns#" term="3D Animation" /><category scheme="http://www.blogger.com/atom/ns#" term="2.49b" /><title>2.49 Pixar Eye Tutorial</title><content type="html">&lt;a href="http://forum.irakrakow.com/viewtopic.php?f=19&amp;t=250&amp;p=868#p868"&gt;Download Ira's Pixar Eye Blend File&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/52KEN7NJkP0&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/52KEN7NJkP0&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;The goal of this tutorial is to make a Pixar-looking eye. The idea for this tutorial came from a post by KSF2010 on my Blender 3D Forum, at http://forum.irakrakow.com.  He rendered a whale with "Pixar eyes".  You can see his render at:  &lt;a href="http://"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was curious how to do Pixar eyes.  He mentioned some tutorials on the web.  &lt;br /&gt;&lt;br /&gt;This tutorial is based on:  &lt;a href="http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Creating_Pixar-looking_eyes_in_Blender"&gt;&lt;/a&gt;&lt;br /&gt;Iris texture:   &lt;a href="http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Creating_Pixar-looking_eyes_in_Blender"&gt;http://en.wikibooks.org/wiki/File:Iris.png&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;This tutorial uses the same modelling and texturing technique described in the well-known &lt;a href="http://www.3dluvr.com/rogueldr/tutorials/eye/eyes.html"&gt;MAX tutorial by Adam Baroody&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;One of the main reasons that Pixar's characters really convey life is in their eyes. They have depth, you can see how the eye not only shines but it "collects" light. In this tutorial, we will create a simple eyeball, without ray tracing, that you can enhance.  This is certainly not the ultimate, final Pixar eyeball render.  It's just my best shot at it.  There are 4 parts of the eyeball to render:  the eye white, or sclera, which is the big spherical, oozy shape of the eye.  Then there's the iris, the circular area around the eye.  The pupil is the part of the eye that gives the eye its color.  Finally, the cornea is the semi-transparent enclosure for the iris and the pupil.  &lt;br /&gt;&lt;br /&gt;Eye White (Sclera)&lt;br /&gt;&lt;br /&gt;1.  Start up Blender.  Delete the default cube (Right click to select, press Del key, Enter to confirm).  &lt;br /&gt;&lt;br /&gt;2.  Add a UV Sphere, with 8 segments and 8 rings.&lt;br /&gt;&lt;br /&gt;3.  To create the hole at the front of the eyeball, delete the 8 triangular faces that make up one end of the eyeball. Press Tab to go into Edit Mode.  Click off the 3D Transform Manipulator.  Click on the triangle icon, or press Ctrl-Tab-3 to go into face select mode.  Press the A key to delect all faces.  Press Z to go into Solid Mode.  Press the Occlude Background Geometry button because we only want to delete the front faces.  Press the B key to go to Border Select mode.  Select the middle 8 triangles by creating a rectangle just enclosing the eyeball faces.  Press Delete, and select Faces.&lt;br /&gt;&lt;br /&gt;4.  Let's tweak the eyeball material.  Select the eyeball.  Press Tab to go to Object mode.  Click the Shading Buttons (F5).  Select the Material.  Make the material color White by setting R=1, G=1, and B=1.  In the Shaders tab, dial up the Specularity setting to 1.25 and the Hardness to 165.  Click on the Edit button (F9).  Click the Set Smooth button.  Click the Modifiers tab.  Add a Subsurf Modifier at Level 2.  These are just my best guess.  Experiment until you get the right color, specularity, and hardness.&lt;br /&gt;&lt;br /&gt;5.  Let's adjust camera and the lighting.  In top view, from the View Menu, select Camera, then Align Active Camera to View.  Let's move the light closer to the camera.  The easiest way to do that is to first, select the camera.  Then press Shift-S and select Cursor to Selection.  Then, select the Lamp.  Press Shift-S and select Selection to Cursor.  This places the light directly at the camera location.  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Split the 3D window by right clicking on the bottom border, selecting Split Area, and positioning the cursor, then pressing Enter.  Make the right window a camera view.  Move the lamp a bit to the side of the camera.  Press F12 to render.  &lt;br /&gt;&lt;br /&gt;Iris&lt;br /&gt;&lt;br /&gt;6.  To make the iris, from the Top View (Num7), add a circle (Space - Add - Mesh- Circle), with 8 vertices.  Tab into Edit Mode.  Go to Vertex Select mode by selecting the icon with the dots or pressing Control-Tab-1.  Press the A key to select all the vertices.  Press the E key to extrude, only, don't extrude.  Select Edges Only and press Enter.  Then press S to scale the extruded circle inside, about 1/4 of the way inward.  Press Enter to confirm.  Tab into Object Mode.&lt;br /&gt;&lt;br /&gt;7.  Now add the texture to the iris.  Select the Shader button (F5) and click Add New to add a new material.  Click the Shadeless button because we are using the image texture without the lights affecting it.  We're going to add an image texture for the iris.  Press F6 to get to the Texture window.  Click Add New.  The texture type is Image.  Then click Load Image, and select Iris.png, the iris texture on the Blender Noob to Pro tutorial site.&lt;br /&gt;&lt;br /&gt;8.  To position the iris at the right place, bordering inside the hole of the eyeball, do the following.  Select the eyeball.  Press Shift-S.  Select Cursor to Selecction.  Then select the iris mesh.  Press Shift-S.  Choose Selection -&gt; Cursor.  Scale the iris down until you can see it inside the eyeball.  Then press the G key, then the Z key, to move the iris up so that it borders the hole.  Switch to Camera View (View - Camera, or Num0).  You may have to scale the iris a bit until you get it right.&lt;br /&gt;&lt;br /&gt;9.  Smooth the iris mesh.  Go to the Edit buttons (F9) and press Set Smooth.  Then click on Modifiers, and select Subsurf, at Level 1.  Press F12 to render.&lt;br /&gt;&lt;br /&gt;Pupil&lt;br /&gt;&lt;br /&gt;10.  Go to Top View (Num7).  Create a mesh circle, with the default 32 vertices.  Extrude the edges (press the E key, the press Enter).  Scale the resulting edges inward until they merge close to the center.  Add a material, by pressing F5 and clicking the Add New Button.  Make the material light blue by making R=0, G=.6, and B=1.  Make the material Shadeless so the pupil is not affected by lights.  You can, of course, change the color to any one you want. &lt;br /&gt;&lt;br /&gt;11.  Smooth out the pupil by going to the Edit buttons (F9) and pressing Set Smooth.  Click on the Modifiers button, select Subsurf, and give it a Level 1 subsurf.&lt;br /&gt;&lt;br /&gt;12.  Again, to position the pupil correctly, select the eyeball.  Press Shift-S.  Choose Cursor -&gt; Selection.  Select the Pupil.  Press Shift-S.  Choose Selection -&gt; Cursor.  Scale the pupil down until you see it from inside the eyeball.  Press the G key, then the Z key, and move the pupil until it encloses the rest of the hole.  Switch to Camera view to make the final adjustments.  Press F12 to render.&lt;br /&gt;&lt;br /&gt;Cornea&lt;br /&gt;&lt;br /&gt;13.  The cornea is simply a piece that fits exactly in the middle of the hole in the eye white.  From the Top View (Num7), add a circle with 8 vertices (Space - Add - Mesh - Circle).  Tab into Edit mode.  Make sure all the vertices are selected.  If not press the A key until they're all selected.  Press the E key, to extrude edges, and press Enter immediately.  Then scale the cornea down until the vertices almost touch.  Press Tab to go int Object mode.&lt;br /&gt;&lt;br /&gt;14.  Add a new material by going to the Shading buttons (F5) and clicking Add New.  The cornea is a transparent circle that surrounds the iris and the pupil.  Let's give it a greenish color, by setting R=.5, G=1, and B=.5.  You can set these to anything you want, with the effect of a sort of greenish contact lens color.  Set the alpha value of the cornea to .1.  In the Shaders tab, set Spec = .6 and Hard = 255.  Turn on ZTrans in the Render Pipeline section.   Make sure that the 'Traceable' button, under Render Pipeline, in the Links and Pipelines tab, is switched off.&lt;br /&gt;&lt;br /&gt;15.  Smooth out the cornea by going to the Edit buttons (F9) and pressing Set Smooth.  Click on the Modifiers button, selec Subsurf, and give it a Level 1 subsurf.&lt;br /&gt;&lt;br /&gt;16.  To position the cornea correctly, select the eyeball.  Press Shift-S.  Choose Cursor -&gt; Selection.  Select the cornea.  Press Shift-S.  Choose Selection -&gt; Cursor.  Scale the cornea down until you see it from inside the eyeball.  Press the G key, then the Z key, and move the cornea until it encloses the rest of the hole.  Switch to Camera view to make the final adjustments.  Press F12 to render.&lt;br /&gt;&lt;br /&gt;Creating the Eye&lt;br /&gt;&lt;br /&gt;To create the eye, you need to join the meshes.  To do that, change the view on the right to Outline View.  Shift Select the eye white, iris, pupil, and cornea.  Press Control-J to join the meshes.  The resulting mesh is your eye.  To officially name it, go to the Edit Buttons (F9) and rename the object, in the Ob: section, to Eye.  The eye is ready to be placed on your head model, to be animated, or whatever.&lt;br /&gt;&lt;br /&gt;That's it.  If you enjoyed my tutorial, please don't forget to hit the Subscribe button on Youtube, and to discuss my video at &lt;a href="http://forum.irakrakow.com"&gt;&lt;/a&gt;.  Happy Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-1633696747056590671?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dNRwQVKLPPYpFmH_6ZLOAghPBV0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dNRwQVKLPPYpFmH_6ZLOAghPBV0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dNRwQVKLPPYpFmH_6ZLOAghPBV0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dNRwQVKLPPYpFmH_6ZLOAghPBV0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/KSuXOv1iue8" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/1633696747056590671?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/1633696747056590671?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/KSuXOv1iue8/249-pixar-eye-tutorial.html" title="2.49 Pixar Eye Tutorial" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/02/249-pixar-eye-tutorial.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0INRno_fSp7ImA9WxBVGUs.&quot;"><id>tag:blogger.com,1999:blog-4154225963184946219.post-3051242258224986566</id><published>2010-02-23T15:57:00.001-08:00</published><updated>2010-02-23T15:59:57.445-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-23T15:59:57.445-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="2.5" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="alpha 1" /><category scheme="http://www.blogger.com/atom/ns#" term="blender" /><category scheme="http://www.blogger.com/atom/ns#" term="scripting" /><title>2.50 Alpha 1 Python Part 1</title><content type="html">&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vmhU_whC6zw&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vmhU_whC6zw&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;The purpose of this video is to give you an idea of the Python scripting environment in the new Blender 2.5, as well as to give you places to start if you either don't know Python at all, or are new to programming.  Don't be afraid if you are not a programmer.  Python is not a difficult language to learn.  This tutorial is based on Blender Labrat (mfoxdogg) tour of the Python setup in Blender 2.5, and the Blender 2.5 Python API introduction at blender.org.  I based this tutorial on Blender 2.5 Alpha 1, released in mid-February, 2010.  &lt;br /&gt;&lt;br /&gt;The basic document is Blender 2.6 Python API (the Application Programming Interface for Blender) document:  http://www.blender.org/documentation/250PythonDoc/contents.html&lt;br /&gt;The Wiki page to start learning te Blender 2.5 Python API is at:  http://wiki.blender.org/index.php/Dev:2.5/Py/API/Intro&lt;br /&gt;&lt;br /&gt;To learn Python itself, start at http://www.python.org and click the Tutorials tab.  You can do your learning entirely inside Blender, using the new Python 3.1 console that's a part of Blender 2.5.&lt;br /&gt;&lt;br /&gt;This API is undergoing modification.  You're looking at the version as of February 15, 2010.  The basic module is bpy, which is a totally different API than Blender 2.4x.&lt;br /&gt;The functions are grouped into different types.  For example, bpy.ops documents the Blender Python operators.  Under Mesh for example, you can see the paramters for anything you can do with a mesh, in alphabetical order.&lt;br /&gt;&lt;br /&gt;You can also access the API Reference from the Help Menu at any time.&lt;br /&gt;&lt;br /&gt;2.5 has a number of pre-built setups for different purposes.  By default, you start in the Default setup.  For scripting, go to the menu of different setups and select Scripting.&lt;br /&gt;There are a number of windows.  We'll start with the Python 3.1 interactive console.  This is a special Python console for Blender.  The console already has imported the most used modules for Blender, such as bpy, bpy.data, bpy.ops, Mathutils, and so on.  The standard Python 3.1 syntax will work here.  You can learn Python itself just working with this console and reading the Python 3.1 documentation.&lt;br /&gt;&lt;br /&gt;There are actually two consoles, Python (the default), and the Report Console, not discussed here.  We'll use Autocomplete shortly.&lt;br /&gt;&lt;br /&gt;If you have used an earlier version of Python, you will be shocked that if you enter:&lt;br /&gt;print "Hello World"&lt;br /&gt;&lt;br /&gt;you'll get an error message.  That's because in Python 3.1, print is a function.  You need to enter:&lt;br /&gt;print("Hello World")&lt;br /&gt;&lt;br /&gt;The console echoes your message, in blue.&lt;br /&gt;&lt;br /&gt;Here's how Autocomplete can help you.  Suppose you want to print all the objects in the scene.  The object references are stored in bpy.data.  When you don't know what properties are available, click the Autocomplete button).   Try:&lt;br /&gt;&lt;br /&gt;print(bpy.data.objects)&lt;br /&gt;The Python console tells you that there are 3 objects, each stored as a collection.  Python starts its index from 0. So:&lt;br /&gt;&lt;br /&gt;print(bpy.data.objects[0])&lt;br /&gt;prints "Camera"&lt;br /&gt;&lt;br /&gt;print(bpy.data.objects[1])&lt;br /&gt;prints "Cube"&lt;br /&gt;&lt;br /&gt;print(bpy.data.objects[2])&lt;br /&gt;prints "Lamp"&lt;br /&gt;&lt;br /&gt;print(bpy.data.objects[3])&lt;br /&gt;"Index 3 out of range" error message in pink&lt;br /&gt;&lt;br /&gt;Suppose you want to know the location of the camera.  Enter the following (hit autocomplate to find all the properties you can use):&lt;br /&gt;print(bpy.data.objects[0].location)&lt;br /&gt;&lt;br /&gt;The answer is a vector, with the x, y, and z location of the camera, in Blender Units.&lt;br /&gt;&lt;br /&gt;Usually, you're not working with bpy.data, which is all the data in the file.  Instead, you're most commonly working with the data that you can see, in your "context", so to speak.  &lt;br /&gt;&lt;br /&gt;For example, to find the name of the active object, type:&lt;br /&gt;&lt;br /&gt;print(bpy.context.active_object)   (click on Autocomplate to see all the properties you can find)&lt;br /&gt;The console prints "Cube".&lt;br /&gt;&lt;br /&gt;Just for fun, we'll change the active object by switching to the 3D window and selecting the Lamp.  To do that, go to the Default setup, select the Lamp, go back to the Scripting setup, press Up arrow (the Up arrow lets you recall previous commands), and enter:&lt;br /&gt;print(bpy.context.active_object)&lt;br /&gt;The console prints "Lamp"&lt;br /&gt;&lt;br /&gt;You can find the location of the lamp by entering:&lt;br /&gt;print(bpy.context.active_object.location)&lt;br /&gt;The console prints the lamp's location as a vector.&lt;br /&gt;&lt;br /&gt;We can change the lamp's location by assigning it a new value.  For example, let's change the lamp's z location (the indices are 0=x, 1=y, and 2=z) to 1&lt;br /&gt;Enter the following:&lt;br /&gt;bpy.context.active_object.location[2] = 1&lt;br /&gt;&lt;br /&gt;Go back to the Default setup.  Note that the lamp's z location is at 1 blender unit, with the x and y coordinates unchanged.&lt;br /&gt;&lt;br /&gt;Go back to the Scripting setup.  Press the Up arrow in the Python console, recalling the print statement, to print the coordinates of the active object, and you'll see that what I said is true.&lt;br /&gt;&lt;br /&gt;Now it's great that you have the Blender Python console.  There's a lot more.  You can load and run any Python script (with the .py extension), by going to the Text window, at the top, selecting Text - Open, and opening the file.  Included in the zip file for 2.5 Alpha 1 are many scripts.  They're either in the Python or Scripts folders.  As a simple example, there are Template files included, which gives you a Python file with the basics filled in, so you can start programming more easily.  In the Templates folder, under Scripts, is the file operator_simple.py.  We'll load this into the text area.&lt;br /&gt;&lt;br /&gt;In 2.5, everything is an operator.  This is just a shell operator script, called "Simple Object Operator".  By default, it just lists all the objects in the scene on the Blender console, which is what the code of the Main function does.  If we press Alt-P or click Run Script, the script runs, and we've added this new operator.  We'll look at the Blender console to see the output.  We can search for our new Simple Object Operator, and even add it as a tool, if we go back to the Default setup.  We just have to decide what Simple Object Operator is going to do.  Just recode the Main function and run the script.  If you register it, the script is loaded when you start up Blender.&lt;br /&gt;&lt;br /&gt;This is just the first in a series on Blender Python programming.  I hope you liked it.  If you did, please don't forget to hit the Subscribe button on Youtube.  You can also discuss my video at forum.irakrakow.com.  Happy Python Blendering!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4154225963184946219-3051242258224986566?l=blender3dvideos.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6pS389NkAnS2h3y0Zb0d9LQNK8A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6pS389NkAnS2h3y0Zb0d9LQNK8A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6pS389NkAnS2h3y0Zb0d9LQNK8A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6pS389NkAnS2h3y0Zb0d9LQNK8A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/zDOX/~4/X0aK3yATw2k" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/3051242258224986566?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4154225963184946219/posts/default/3051242258224986566?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/zDOX/~3/X0aK3yATw2k/250-alpha-1-python-setup.html" title="2.50 Alpha 1 Python Part 1" /><author><name>Ira Krakow</name><uri>http://www.blogger.com/profile/06891264242013325758</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_NiZyHSxaOkk/SspY3kSoScI/AAAAAAAAAMM/7Qi2cm8M4ao/S220/ira_krakow_80x80.jpg" /></author><feedburner:origLink>http://blender3dvideos.blogspot.com/2010/02/250-alpha-1-python-setup.html</feedburner:origLink></entry></feed>

