﻿<?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=Dev%3ASource%2FNode_Editor%2FIPOs</id>
	<title>Dev:Source/Node Editor/IPOs - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3ASource%2FNode_Editor%2FIPOs"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/Node_Editor/IPOs&amp;action=history"/>
	<updated>2026-11-06T16:34:21Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:Source/Node_Editor/IPOs&amp;diff=51346&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/Node_Editor/IPOs&amp;diff=51346&amp;oldid=prev"/>
		<updated>2018-06-28T17:49:39Z</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日 (木) 17:49時点における版&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=Dev:Source/Node_Editor/IPOs&amp;diff=51345&amp;oldid=prev</id>
		<title>2010年4月3日 (土) 12:51にwiki&gt;Terrywallworkによる</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/Node_Editor/IPOs&amp;diff=51345&amp;oldid=prev"/>
		<updated>2010-04-03T12:51:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This document outlines my initial work on adding IPO support to nodes.&lt;br /&gt;
&lt;br /&gt;
=Patch=&lt;br /&gt;
&lt;br /&gt;
You can get the current patch at [http://projects.blender.org/tracker/index.php?func=detail&amp;amp;aid=4864&amp;amp;group_id=9&amp;amp;atid=127 the tracker page].&lt;br /&gt;
&lt;br /&gt;
=How it works=&lt;br /&gt;
&lt;br /&gt;
Node IPOs are defined by special definition structures, called bNodeIpoChannel.  They also get defined automatically by node input sockets.  This section relates to exposing node parameters to the IPO system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
typedef struct bNodeIpoChannel {&lt;br /&gt;
	char name[30];&lt;br /&gt;
	short type;&lt;br /&gt;
	int offset;&lt;br /&gt;
	float min, max;&lt;br /&gt;
&lt;br /&gt;
	/*internal use only.*/&lt;br /&gt;
	int datatype, sockindex, varindex;&lt;br /&gt;
	char nodename[32];&lt;br /&gt;
} bNodeIpoChannel;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fields are:&lt;br /&gt;
&lt;br /&gt;
* name: The name of the ipo channel.&lt;br /&gt;
* type: The IPO data type (e.g. IPO_SHORT).&lt;br /&gt;
* offset: The offset in the node&amp;#039;s .storage struct, can be hardcoded or calculated with a macro and a static global template struct.&lt;br /&gt;
* min, max: the minimum and maximum values allowed.&lt;br /&gt;
* datatype: set internally to 1, if this is an auto-generated node socket definition.&lt;br /&gt;
* sockindex, varindex: the index of a node&amp;#039;s socket, and the index of the socket&amp;#039;s ns.var float array to use.&lt;br /&gt;
* nodename: the name of the parent node.&lt;br /&gt;
&lt;br /&gt;
An example would be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
static NodeBlurData blurtemplate;&lt;br /&gt;
&lt;br /&gt;
static bNodeIpoChannel BlurIpoType[] = {&lt;br /&gt;
	{&amp;quot;X Radius&amp;quot;, IPO_SHORT, ((char*)&amp;amp;blurtemplate.sizex)-((char*)&amp;amp;blurtemplate), 0.0, 256.0, NIPO_USEDATA},&lt;br /&gt;
	{&amp;quot;Y Radius&amp;quot;, IPO_SHORT, ((char*)&amp;amp;blurtemplate.sizey)-((char*)&amp;amp;blurtemplate), 0.0, 256.0, NIPO_USEDATA},&lt;br /&gt;
	{0, 0, 0}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
static bNodeType cmp_node_blur= {&lt;br /&gt;
	/* type code   */	CMP_NODE_BLUR,&lt;br /&gt;
	/* name        */	&amp;quot;Blur&amp;quot;,&lt;br /&gt;
	/* width+range */	120, 80, 200,&lt;br /&gt;
	/* class+opts  */	NODE_CLASS_OP_FILTER, NODE_OPTIONS,&lt;br /&gt;
	/* input sock  */	cmp_node_blur_in,&lt;br /&gt;
	/* output sock */	cmp_node_blur_out,&lt;br /&gt;
	/* storage     */	&amp;quot;NodeBlurData&amp;quot;,&lt;br /&gt;
	/* execfunc    */	node_composit_exec_blur,&lt;br /&gt;
	/* Ipo type   */	&amp;amp;BlurIpoType&lt;br /&gt;
	&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Problems=&lt;br /&gt;
Since nodes are not library block data (e.g. they don&amp;#039;t inherit struct ID) I had to hack the IPO system to work with them.  I&amp;#039;m not sure if this is really acceptable; what I&amp;#039;d really like to do would be to *make* nodes library block data, though I don&amp;#039;t know how well that&amp;#039;d work.&lt;br /&gt;
&lt;br /&gt;
(comment by ton)&lt;br /&gt;
Nodes should not become Library data, that type is limited to data you allow to be re-used and freely linked internally by any other data block.&lt;br /&gt;
The main problem is that the current Ipo system is far too weak... its original design (over 10 years old) has not proven to be very future proof.&lt;br /&gt;
&lt;br /&gt;
=Scene-&amp;gt;actnode And Scene-&amp;gt;acttree=&lt;br /&gt;
&lt;br /&gt;
To facilitate editing Ipos, I&amp;#039;ve added two members, actnode and acttree to Scene, to represent the active selected node and its parent nodetree.  I decided not to use the internal nodetree&amp;#039;s active node, since it seems to be in use for the material system.  These members are in Scene, so you can have an active node/nodetree in each separate scene.&lt;br /&gt;
&lt;br /&gt;
(comment by ton)&lt;br /&gt;
I&amp;#039;ll have to review this internal &amp;#039;active node&amp;#039; then. Having multiple of these &amp;#039;globals&amp;#039; should be avoided...&lt;br /&gt;
&lt;br /&gt;
[[Category:Script]]&lt;/div&gt;</summary>
		<author><name>wiki&gt;Terrywallwork</name></author>
		
	</entry>
</feed>