﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Doc%3AJA%2F2.6%2FManual%2FAnimation%2FEditors%2FGraph%2FDrivers</id>
	<title>Doc:JA/2.6/Manual/Animation/Editors/Graph/Drivers - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Doc%3AJA%2F2.6%2FManual%2FAnimation%2FEditors%2FGraph%2FDrivers"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Doc:JA/2.6/Manual/Animation/Editors/Graph/Drivers&amp;action=history"/>
	<updated>2026-06-22T15:49:16Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Doc:JA/2.6/Manual/Animation/Editors/Graph/Drivers&amp;diff=134575&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Doc:JA/2.6/Manual/Animation/Editors/Graph/Drivers&amp;diff=134575&amp;oldid=prev"/>
		<updated>2018-06-28T20:46:48Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;2018年6月28日 (木) 20:46時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yamyam</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Doc:JA/2.6/Manual/Animation/Editors/Graph/Drivers&amp;diff=134574&amp;oldid=prev</id>
		<title>wiki&gt;Sato: Created page with &quot;{{Page/Header|2.5|Doc:JA/2.5/Manual/Animation/FCurve Modifiers|Doc:JA/2.5/Manual/Animation/Dope Sheet}}  {{review|copy=X|text=partially}}  =ドライバ= ドライバは、ある...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Doc:JA/2.6/Manual/Animation/Editors/Graph/Drivers&amp;diff=134574&amp;oldid=prev"/>
		<updated>2012-02-05T11:53:18Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Page/Header|2.5|Doc:JA/2.5/Manual/Animation/FCurve Modifiers|Doc:JA/2.5/Manual/Animation/Dope Sheet}}  {{review|copy=X|text=partially}}  =ドライバ= ドライバは、ある...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Page/Header|2.5|Doc:JA/2.5/Manual/Animation/FCurve Modifiers|Doc:JA/2.5/Manual/Animation/Dope Sheet}}&lt;br /&gt;
&lt;br /&gt;
{{review|copy=X|text=partially}}&lt;br /&gt;
&lt;br /&gt;
=ドライバ=&lt;br /&gt;
ドライバは、あるプロパティのアニメーションを他のプロパティの値によってコントロールするために使います。つまり、そのアニメートされる値はフレーム番号でコントロールされるのではなく、特定のチャンネルにコントロールされます。ドライバが使えるのは、何らかの単一のプロパティや、回転の差や、Blender上でも編集できるPythonスクリプト等です。&lt;br /&gt;
&lt;br /&gt;
たとえば、ドライバのX位置を使ってマテリアルの色（RGBカーブ）をコントロールしたり、ドライバの回転を使ってオブジェクトの拡大縮小をコントロールしたり、ドライバの拡大縮小を使ってメッシュやカーブの形状を（シェイプキーを介して）コントロールしたり、Pythonの関数でコンストレイントの影響をコントロールしたり…もっともっといろんなことができます。&lt;br /&gt;
&lt;br /&gt;
一つの効果的な使い方は、キャラクターアニメーションでの使用です。たとえば顔のシェイプキーに対してドライバを追加し、そのドライバオブジェクト（もちろんこれはレンダリングされないように設定します）を動かしてキャラクターの表情を操作することができます。NLAエディタと少し似ていますが、よりわかりやすいでしょう。[[Doc:JA/2.5/Manual/Animation/Driven Shape Keys|シェイプキーをドライブする]]を参照。&lt;br /&gt;
&lt;br /&gt;
ドライバのインターフェースや機能はF-カーブに似ていますが、ドライバはアニメーションシステムのヒエラルキーにおいてアクションの外側に位置しています。ドライバはアクションの後で評価されるので、アクションに関わるどんなF-カーブもドライバの効果に上書きされます。&lt;br /&gt;
&lt;br /&gt;
==マッピング==&lt;br /&gt;
ドライバで使われるカーブは時間に支配されているのではありません（これは力説しておきます。''非常に''重要なことなのでよく理解してください）。ドライバのプロパティの変更（X軸上）に応じて、カーブのどの位置の値（Y軸上）が適用されるかが決まります。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、入力と出力はGenerator F-カーブモディファイアによって一対一にマッピングされています。このモディファイアを削除して、グラフエリアに{{Shortcut/Keypress|ctrl}} + {{Shortcut/Mouse|lmb}}でキーフレームを追加すれば、好きなマッピングを作れます。&lt;br /&gt;
&lt;br /&gt;
=ドライバの作成=&lt;br /&gt;
ドライバを作成するには、まずドライブする属性をプロパティパネルで見つけます。これが、他の属性によって'''ドライブされる'''属性となります。&lt;br /&gt;
&lt;br /&gt;
チャンネル上で{{Shortcut/Mouse|rmb}}クリックして、いかのオプションの一つを選択してください。&lt;br /&gt;
&lt;br /&gt;
;'''{{Literal|Add Drivers}}'''&lt;br /&gt;
:選択したチャンネルに関連するチャンネルすべてにドライバが作られます。たとえば、X、Y、Z方向の移動に対してそれぞれドライバが作られます。&lt;br /&gt;
&lt;br /&gt;
;'''{{Literal|Add Single Driver}}'''&lt;br /&gt;
:選択したチャンネルのみに対してドライバが作られます。&lt;br /&gt;
&lt;br /&gt;
=ドライバの編集=&lt;br /&gt;
ドライバを作成したらそのチャンネルが何によってどのようにドライブされるかを決めなくてはいけません。&lt;br /&gt;
&lt;br /&gt;
ドライバエディタはグラフエディタの中にあります。ヘッダのメニューで、F-カーブエディタビューからドライバビューに切り替えられます。&lt;br /&gt;
&lt;br /&gt;
ドライバエディタは現在のシーン内にあるすべてのドライバを表示します。左側のチャンネル欄に表示されます。&lt;br /&gt;
&lt;br /&gt;
シーンの中に複数のドライバがある場合、グラフエリアでの表示／非表示を切り替えられます。また、特定のドライバを編集するにはそれを選択する必要があります。&lt;br /&gt;
&lt;br /&gt;
==ドライバプロパティ==&lt;br /&gt;
ドライバのプロパティは右側のプロパティパネル（デフォルトでは隠されています。{{Shortcut|n}}で表示されます）にあります。&lt;br /&gt;
&lt;br /&gt;
;'''{{Literal|Update Dependencies}}'''&lt;br /&gt;
:ドライバの接続を更新します。&lt;br /&gt;
&lt;br /&gt;
==ドライバの種類==&lt;br /&gt;
ドライバにはいくつかの種類があります。ドライバの入力値がどのように計算されるかが異なります。&lt;br /&gt;
&lt;br /&gt;
;'''{{Literal|Maximum Value}}'''&lt;br /&gt;
:ユーザ変数の最高値をとります。&lt;br /&gt;
;'''{{Literal|Minimum Value}}'''&lt;br /&gt;
:ユーザ変数の最低値をとります。&lt;br /&gt;
;'''{{Literal|Sum Values}}'''&lt;br /&gt;
:ユーザ変数の合計値をとります。&lt;br /&gt;
;'''{{Literal|Averaged Values}}'''&lt;br /&gt;
:ユーザ変数の平均値をとります。&lt;br /&gt;
;'''{{Literal|Scripted Expression}}'''&lt;br /&gt;
:Pythonによる記述にしたがって値を計算します。これはユーザ変数を自在に使える方法でもあります（後述）。&lt;br /&gt;
&lt;br /&gt;
=変数=&lt;br /&gt;
ユーザ変数はドライバの入力値を計算するものです。スクリプトを使う場合以外は、少なくとも一つの変数が必要です。一つの変数を使うと、スクリプト以外のすべての種類のドライバは同じ値を生み出します。&lt;br /&gt;
&lt;br /&gt;
==単一プロパティ==&lt;br /&gt;
シーン内のあらゆるものの中からデータブロックを呼び出すにはSingle Propertyを使います。これはランプの強度でもいいし、テクスチャのカラーでもいいです。&lt;br /&gt;
&lt;br /&gt;
==座標変換チャンネル==&lt;br /&gt;
このタイプはオブジェクトの座標変換プロパティを通じてカーブをコントロールすることができます。つまり、一つのドライバで９つのカーブを別々にコントロールできます（XYZそれぞれの位置、回転、拡大縮小）。&lt;br /&gt;
&lt;br /&gt;
オブジェクトドライバを設定するには、&lt;br /&gt;
*ドライブしたいチャンネルを選択する。&lt;br /&gt;
*{{Literal|OB}}欄が現れるので、ドライバオブジェクトの名前を入力する。&lt;br /&gt;
*ドライバがアーマチュア以外の場合、{{Literal|Driver type}}のドロップダウンリストからは{{Literal|Object}}のみが選べる。&lt;br /&gt;
*最後に、二つ目のドロップダウンリストでカーブをドライブするためのプロパティを選択する（{{Literal|Loc X}}、{{Literal|Scale Z}}など）。&lt;br /&gt;
&lt;br /&gt;
これでカーブは時間にコントロールされるのではなく、選んだプロパティによってコントロールされます。値はBlender単位です。&lt;br /&gt;
&lt;br /&gt;
ドライバのプロパティはローカル座標で評価されることに注意してください（親オブジェクトの座表変換には影響されません）。&lt;br /&gt;
&lt;br /&gt;
===例===&lt;br /&gt;
これからの例では、よく知られた猿の頭（Susanne）のサイズを、Emptyをドライバとしてコントロールしてみます。まず、Susanneオブジェクトの{{Literal|ScaleX}}、{{Literal|ScaleY}}、{{Literal|ScaleZ}}チャンネルに{{Literal|Add Driver}}でドライバを追加します（カーブがまだ存在しない場合は、自動的に作られます）。今の時点では、まだカーブがないので、Blenderは直線的なカーブがあるかのように一対一のマッピングをします（下の画像での破線）。これはまた同じドライバのプロパティ（この例ではY位置）をいくつかの違ったドライバに使えることを示しています。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|align=center&lt;br /&gt;
 |+'''Object drivers.'''&lt;br /&gt;
 |下図ではカーブエディタウィンドウはSuzanneのカーブに表示固定されているので、Emptyオブジェクトを移動しながらドライバカーブを見ることができます）。&lt;br /&gt;
 |-&lt;br /&gt;
 |[[File:ManAnimationEditorsIpoDriversExNoCurves01.png|thumb|600px|center|The empty driver at Y = '''1.0''' gives Suzanne a scale of '''1.0'''…]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[File:ManAnimationEditorsIpoDriversExNoCurves02.png|thumb|600px|center|With driver at Y = '''2.0''', driven’s scale at '''2.0'''…]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[File:ManAnimationEditorsIpoDriversExNoCurves03.png|thumb|600px|center|And driver at Y = '''-2.0''', driven’s scale at… Oh, I think you got it!]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
では、ドライバのカーブを基本的な一対一のマッピングより複雑にしてみましょう。下図に示されているのは上と同じシーンですが、今回は{{Literal|ScaleY}}チャンネルが'''1.0'''から'''-1.0'''の間で反復する擬似サインカーブになっています。これは三つの制御点と{{Literal|Cyclic}}補外で作られています。SuzanneのX方向とZ方向の大きさは依然としてEmptyオブジェクトのY位置を直接的に反映していますが、Y方向の大きさは下図のようにEmptyオブジェクトの移動とともに反復的に変わるということです。&lt;br /&gt;
&lt;br /&gt;
{|align=center&lt;br /&gt;
 |+'''Object driver with curve.'''&lt;br /&gt;
 |-&lt;br /&gt;
 |[[File:ManAnimationEditorsIpoDriversExWithCurves01.png|thumb|600px|The empty driver at Y = '''1.0''' gives Suzanne a scale of ('''1.0''', '''1.0''', '''1.0''')…]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[File:ManAnimationEditorsIpoDriversExWithCurves02.png|thumb|600px|With driver at Y = '''1.25''', driven’s scale at ('''1.25''', '''0.0''', '''1.25''')…]]&lt;br /&gt;
 |-&lt;br /&gt;
 |[[File:ManAnimationEditorsIpoDriversExWithCurves03.png|thumb|600px|And driver at Y = '''-2.0''', driven’s scale at ('''-2.0''', '''1.0''', '''-2.0''')!]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==回転の差==&lt;br /&gt;
回転の差はボーンの場合だけ使えますが、オブジェクトの場合とほぼ同様です。&lt;br /&gt;
&lt;br /&gt;
ボーンをドライバとして使うには、{{Literal|OB}}欄にアーマチュアの名前を入力し、{{Literal|Driver type}}のリストから{{Literal|Pose}}を選択します。そして現れた{{Literal|BO}}欄にボーンの名前を入力し、使用するプロパティを選択します。&lt;br /&gt;
&lt;br /&gt;
以下の特徴に注意してください。&lt;br /&gt;
*座標変換はそのボーンの空間で評価されます（親ボーンやオブジェクトそのものの座標には影響されません）。&lt;br /&gt;
*回転をドライバに使う場合、制限に気づくでしょう。ボーンの回転は常に&amp;lt;code&amp;gt;[-180°, 180°]&amp;lt;/code&amp;gt;の範囲にマッピングされます（つまり、180°を超えて回転させると、-180°に値が飛び移ります）。&lt;br /&gt;
*特別なドライブプロパティが使えます。{Literal|Rotation Difference}}は他のボーンの名前を入力すると、そのボーンとドライバボーンの角度の差をドライブに使用します。&lt;br /&gt;
&lt;br /&gt;
==距離==&lt;br /&gt;
距離モードは二つのオブジェクトまたはボーンの間の距離を使います。&lt;br /&gt;
&lt;br /&gt;
=式ドライバ=&lt;br /&gt;
Python式ドライバ（略してパイドライバ）は、他のオブジェクトのプロパティを使う代わりに、一行の[http://www.python.org Python]による式を入力に使います。明確な値が計算できるならどんな記号でも使えます。&lt;br /&gt;
&lt;br /&gt;
{{Warning/Important}}パイドライバによってコントロールするのは、カーブそのものではありません。他のタイプのドライバと同じように、カーブ上のどこの値を使うかということをコントロールします。&lt;br /&gt;
&lt;br /&gt;
パイドライバを使うには、ドライバタイプをScripted Expressionに変更します。すると標準的なテキスト欄が現れるので、そこにPython式を入力します。&lt;br /&gt;
&lt;br /&gt;
このドライバには面白い可能性がたくさんあります。数式やプログラミングを使ってオブジェクトをアニメートすることができるのです。唯一のルールは、パイドライバの表現は最終的には実数値を生み出さなければいけないということです。たとえば文字列などではいけません。&lt;br /&gt;
&lt;br /&gt;
オブジェクトが特定の点の周りで往復するようにサインまたはコサイン関数を使うこともできるし、拡散、RGB,アルファなどをランダムな数値で変えることもできます。&lt;br /&gt;
&lt;br /&gt;
パイドライバの評価は、内蔵のeval()関数の結果と同じです。ただしパイドライバでは結果として実数を返さなければならないという制約があります（あらゆる種類の数値は自動的に浮動小数点数にキャストされます）。&lt;br /&gt;
&lt;br /&gt;
== Valid Expressions ==&lt;br /&gt;
（訳注：Blender 2.6現在ではAPIが大幅に変更されているので、以下の式は動かないものが多いです。最新の情報を参照してください）&lt;br /&gt;
&lt;br /&gt;
We’ve already told the basics: there is a text field where you can type an expression in Python. Here are some examples of valid expressions:&lt;br /&gt;
&lt;br /&gt;
*Any real value: &amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;1.0&amp;lt;/source&amp;gt;&lt;br /&gt;
*Expressions with numbers and operators: &amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;4.5 + 8.9 * 7.0 - (2 / 3.0)&amp;lt;/source&amp;gt;&lt;br /&gt;
*Expressions also with variables: &amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;math.pi * 2 + 5.0&amp;lt;/source&amp;gt;&lt;br /&gt;
*Available data: &amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;Blender.Get(&amp;quot;curframe&amp;quot;) # the current animation frame&amp;lt;/source&amp;gt;&lt;br /&gt;
*A little math: &amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;math.sin(Blender.Get(&amp;quot;curframe&amp;quot;)) # the sine of the current frame&amp;lt;/source&amp;gt;&lt;br /&gt;
*Using the animated (driven) object, available as &amp;lt;code&amp;gt;self&amp;lt;/code&amp;gt;: &amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;self.LocX * 10&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Builtin resources and aliases ==&lt;br /&gt;
Pydrivers use their own global dictionary that is cached and only gets recreated when any expression fails. In this dictionary, a few modules are pre-imported, so that they can be used inside pydriver expressions.&lt;br /&gt;
&lt;br /&gt;
{{Note|Note|To save typing and keep expressions smaller, we’ve added aliases for each module: Blender can be referenced as “&amp;lt;code&amp;gt;Blender&amp;lt;/code&amp;gt;” or simply as “&amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;”. Below, each module is followed by its available aliases.}}&lt;br /&gt;
&lt;br /&gt;
*All from &amp;lt;code&amp;gt;builtin&amp;lt;/code&amp;gt; (the default &amp;lt;code&amp;gt;builtin&amp;lt;/code&amp;gt; module)&lt;br /&gt;
*&amp;lt;code&amp;gt;Blender&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;blender&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;Blender.Noise&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;noise&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;math&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;math&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example expression:'''&lt;br /&gt;
&amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;m.cos(m.pi * b.Get(&amp;quot;curframe&amp;quot;) / n.random())&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aliases were also added for a few commonly needed data:&lt;br /&gt;
*&amp;lt;code&amp;gt;ob(name)&amp;lt;/code&amp;gt; is equivalent to &amp;lt;code&amp;gt;Blender.Object.Get(name)&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;me(name)&amp;lt;/code&amp;gt; is equivalent to &amp;lt;code&amp;gt;Blender.Mesh.Get(name)&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;ma(name)&amp;lt;/code&amp;gt; is equivalent to &amp;lt;code&amp;gt;Blender.Material.Get(name)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example expression:'''&lt;br /&gt;
&amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;ob(&amp;quot;Cube&amp;quot;).LocX + ob(&amp;quot;Lamp&amp;quot;).RotZ&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The pydrivers.py Blender text ==&lt;br /&gt;
Besides the above modules, if there’s a Blender text buffer called “&amp;lt;code&amp;gt;pydrivers.py&amp;lt;/code&amp;gt;” loaded in the {{Literal|Text Editor}}, it’s also imported:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;pydrivers&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;pydrivers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows users to create their own functions and add their own variables without the restriction of the one-line Python expression. For example, if your pydrivers.py text looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;myvar = 10.0&lt;br /&gt;
&lt;br /&gt;
def myfunction(arg):&lt;br /&gt;
    # do something fancy here&lt;br /&gt;
    return float_val&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can access both &amp;lt;code&amp;gt;myvar&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;myfunction&amp;lt;/code&amp;gt; inside any expression:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;p.myvar * p.myfunction(2) - 1&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note''': if you make updates to the &amp;lt;code&amp;gt;pydrivers.py&amp;lt;/code&amp;gt; text, go to the {{Literal|Curve Editor}} window and click in any pydriver’s text input box (in the {{Literal|Transform Properties}} panel), then click out of it or press {{Shortcut|enter}}, to force reloading the &amp;lt;code&amp;gt;pydrivers.py&amp;lt;/code&amp;gt; module and to update all pydrivers at once.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
Let’s say we want to give our &amp;lt;code&amp;gt;Suzanne&amp;lt;/code&amp;gt; a perfect two BU radius circle movement in the (XY) plane. This is not easy to achieve with standard curves, as you have to create perfect sinusoidal ones (for those who lost their math, a perfect circle in a Cartesian plane is obtained with &amp;lt;code&amp;gt;x = sin(t)&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;y = cos(t)&amp;lt;/code&amp;gt;…). So let’s use Python drivers:&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;sin()&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;cos()&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;math&amp;lt;/code&amp;gt; functions take as input a ''radian'' value (i.e. a cycle takes &amp;lt;code&amp;gt;2π&amp;lt;/code&amp;gt; frames to complete), and output a value in range &amp;lt;code&amp;gt;[-1.0, 1.0]&amp;lt;/code&amp;gt;. So, to get a '''2BU''' radius circle fully walked in '''50''' frames (two seconds in PAL videos), we have to use the following Python expression:&lt;br /&gt;
*For {{Literal|LocX}}: &amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;2.0 * math.sin(Blender.Get(&amp;quot;curframe&amp;quot;)*math.pi/25)&amp;lt;/source&amp;gt;&lt;br /&gt;
*For {{Literal|LocY}}: &amp;lt;source lang=python line=GESHI_NORMAL_LINE_NUMBERS&amp;gt;2.0 * math.cos(Blender.Get(&amp;quot;curframe&amp;quot;)*math.pi/25)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, &amp;lt;code&amp;gt;Suzanne&amp;lt;/code&amp;gt; will go in endless circles around the world’s origin (if you want to make it turn around another point, just add an offset to the above expressions, or drive {{Literal|dLoc…}} curves…).&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
*In the above example, we did not use F-curves.&lt;br /&gt;
*You can also get a perfect circular movement by using a [[Doc:2.4/Manual/Modeling/Curves|NURBS circle curve]] as a [[Doc:2.4/Manual/Animation/Techs/Object/Path|path]]…&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
*The [http://www.blender.org/documentation/249PythonDoc/index.html Blender 2.49 Python API reference] and the chapter on [[Doc:2.4/Manual/Extensions/Python|extending Blender with Python]].&lt;br /&gt;
*[http://www.python.org Python] and its [http://www.python.org/doc documentation].&lt;br /&gt;
*This might be a good hunting ground for those looking for functions to try with pydrivers: http://functions.wolfram.com/ (newcomers are recommended to start with elementary ones, specially trigonometric).&lt;br /&gt;
*Finally, the patch tracker entry, with patch and sample .blend files for pydrivers: [http://projects.blender.org/tracker/index.php?func=detail&amp;amp;aid=4155&amp;amp;group_id=9&amp;amp;atid=127 right here].&lt;br /&gt;
&lt;br /&gt;
{{Page/Footer|Doc:JA/2.5/Manual/Animation/FCurve Modifiers|Doc:JA/2.5/Manual/Animation/Dope Sheet}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Animation]]&lt;br /&gt;
[[Category:Editors]]&lt;br /&gt;
[[Category:FCurves]]&lt;br /&gt;
[[Category:Drivers]]&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>wiki&gt;Sato</name></author>
		
	</entry>
</feed>