﻿<?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%3A2.5%2FSource%2FPython%2FPyRNA</id>
	<title>Dev:2.5/Source/Python/PyRNA - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3A2.5%2FSource%2FPython%2FPyRNA"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:2.5/Source/Python/PyRNA&amp;action=history"/>
	<updated>2026-06-15T09:51:35Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:2.5/Source/Python/PyRNA&amp;diff=79621&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:2.5/Source/Python/PyRNA&amp;diff=79621&amp;oldid=prev"/>
		<updated>2018-06-28T18:37:24Z</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日 (木) 18:37時点における版&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:2.5/Source/Python/PyRNA&amp;diff=79620&amp;oldid=prev</id>
		<title>2010年4月1日 (木) 08:22にwiki&gt;Terrywallworkによる</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:2.5/Source/Python/PyRNA&amp;diff=79620&amp;oldid=prev"/>
		<updated>2010-04-01T08:22:32Z</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;== Python RNA API ==&lt;br /&gt;
* Matches the C/RNA api structure&lt;br /&gt;
* Thin wrapper ~(3000 lines)&lt;br /&gt;
* No functions specific to any blender object type.&lt;br /&gt;
* Defines 2 types, BPy_StructRNA and BPy_PropertyRNA.&lt;br /&gt;
* Python 3.1 target&lt;br /&gt;
* Write access to data&lt;br /&gt;
* Subclasses are used for adding extra functionality through python.&lt;br /&gt;
* Collection iterators&lt;br /&gt;
* Call RNA functions&lt;br /&gt;
&lt;br /&gt;
=== Collections ===&lt;br /&gt;
Collections may have their own functions and attributes, here is a list which should be used as a bases when extending collections for the RNA api.&lt;br /&gt;
&lt;br /&gt;
* '''seq.active''' --&amp;gt; item or None active member of the collection.&lt;br /&gt;
* '''data = seq.new(name, type)''' / '''seq.remove(item)'''&amp;lt;br&amp;gt;''Type optional when it can be changed after adding.''&lt;br /&gt;
* '''seq.link(data)''' / '''seq.unlink(data)'''&amp;lt;br&amp;gt;''Exception if already linked or not linked when unlinking.&lt;br /&gt;
&lt;br /&gt;
=== Todo ===&lt;br /&gt;
* Solve the &amp;quot;Python keeping invalid blender pointers&amp;quot; problem.&amp;lt;br&amp;gt;''This cant just be solved in the py api - we need blender to notify when ID's are removed''&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
Here are some examples that work with the current implementation of the api.&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 bpy.lamps[&amp;quot;Lamp.006&amp;quot;].energy -&amp;gt; (1.0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 bpy.lamps[&amp;quot;Lamp.007&amp;quot;].shadow -&amp;gt; (&amp;quot;NOSHADOW&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 bpy.meshes[&amp;quot;MyObject&amp;quot;]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 bpy.materials.keys() -&amp;gt; ['flyingsquirrel_eye', 'frankie_skin', 'frankie_theeth']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 bpy.meshes[&amp;quot;mymesh&amp;quot;].uv_layers.keys() -&amp;gt; ['UVTex', 'UVTex']&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 bpy.scenes[&amp;quot;hud&amp;quot;].objects[&amp;quot;num_text_p2_4&amp;quot;].data.novnormalflip -&amp;gt; False&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
* &amp;quot;bpy&amp;quot; is as an arbitrary pytype, we can change it to anything.&lt;br /&gt;
* At the moment enum types are converted into python strings (as seen above with the lamps &amp;quot;NOSHADOW&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Dumping a blendfile with PyRNA ===&lt;br /&gt;
Here's a script that prints out  all RNA data&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PRINT_DATA = True&lt;br /&gt;
VERBOSE = False&lt;br /&gt;
VERBOSE_TYPE = False&lt;br /&gt;
VERBOSE_DOCS = True&lt;br /&gt;
SKIP_RECURSIVE = False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def seek(r, txt):&lt;br /&gt;
	print(txt)&lt;br /&gt;
	newtxt = ''&lt;br /&gt;
	&lt;br /&gt;
	if len(txt) &amp;gt; 200:&lt;br /&gt;
		print (&amp;quot;Something is wrong&amp;quot;)&lt;br /&gt;
		print (txt)&lt;br /&gt;
		return&lt;br /&gt;
		&lt;br /&gt;
	# basic types&lt;br /&gt;
	if type(r) in (float, int, bool, type(None)):&lt;br /&gt;
		if PRINT_DATA:&lt;br /&gt;
			print(txt + ' -&amp;gt; ' + str(r))&lt;br /&gt;
		return&lt;br /&gt;
	if type(r) == str:&lt;br /&gt;
		if PRINT_DATA:&lt;br /&gt;
			print(txt + ' -&amp;gt; &amp;quot;' + str(r) + '&amp;quot;')&lt;br /&gt;
		return		&lt;br /&gt;
	&lt;br /&gt;
	if VERBOSE_DOCS and PRINT_DATA:&lt;br /&gt;
		try:	print(r.__doc__)&lt;br /&gt;
		except:	pass&lt;br /&gt;
&lt;br /&gt;
	try:	keys = r.keys()&lt;br /&gt;
	except: keys = None&lt;br /&gt;
	&lt;br /&gt;
	if keys != None:&lt;br /&gt;
		if PRINT_DATA:&lt;br /&gt;
			print(txt + '.keys() - ' + str(r.keys()))&lt;br /&gt;
		&lt;br /&gt;
	try:	__members__ = r.__members__&lt;br /&gt;
	except: __members__ = []&lt;br /&gt;
	&lt;br /&gt;
	for item in __members__:&lt;br /&gt;
		if PRINT_DATA:	newtxt = txt + '.' + item&lt;br /&gt;
		&lt;br /&gt;
		if item == 'rna_type' and not VERBOSE_TYPE: # just avoid because it spits out loads of data&lt;br /&gt;
			continue&lt;br /&gt;
		&lt;br /&gt;
		if SKIP_RECURSIVE:&lt;br /&gt;
			if item in txt:&lt;br /&gt;
				if PRINT_DATA:&lt;br /&gt;
					print(newtxt + ' - (skipping to avoid recursive search)')&lt;br /&gt;
				continue&lt;br /&gt;
		&lt;br /&gt;
		seek( getattr(r, item), newtxt)&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if keys:&lt;br /&gt;
		for k in keys:&lt;br /&gt;
			if PRINT_DATA:	newtxt = txt + '[&amp;quot;' + k + '&amp;quot;]'&lt;br /&gt;
			seek(r[k], newtxt)&lt;br /&gt;
	&lt;br /&gt;
	else:&lt;br /&gt;
		try:	length = len( r )&lt;br /&gt;
		except:	length = 0&lt;br /&gt;
		&lt;br /&gt;
		if not VERBOSE and length &amp;gt;= 4:&lt;br /&gt;
			for i in (0, length-1):&lt;br /&gt;
				if i&amp;gt;0:&lt;br /&gt;
					if PRINT_DATA:&lt;br /&gt;
						print((' '*len(txt)) + ' ... skipping '+str(length-2)+' items ...')&lt;br /&gt;
				&lt;br /&gt;
				if PRINT_DATA:	newtxt = txt + '[' + str(i) + ']'&lt;br /&gt;
				seek(r[i], newtxt)&lt;br /&gt;
		else:&lt;br /&gt;
			for i in range(length):&lt;br /&gt;
				if PRINT_DATA:	newtxt = txt + '[' + str(i) + ']'&lt;br /&gt;
				seek(r[i], newtxt)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
seek(bpy, 'bpy')&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
sys.exit()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extract of a file dump, see yo-frankie level dump here [http://pasteall.org/3294/python]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.004&amp;quot;].name -&amp;gt; &amp;quot;Lamp.004&amp;quot;&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.004&amp;quot;].color[0] -&amp;gt; 1.0&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.004&amp;quot;].color[1] -&amp;gt; 1.0&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.004&amp;quot;].color[2] -&amp;gt; 1.0&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.004&amp;quot;].dist -&amp;gt; 20.0&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.004&amp;quot;].energy -&amp;gt; 1.0&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.004&amp;quot;].shadow -&amp;gt; &amp;quot;NOSHADOW&amp;quot;&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.004&amp;quot;].type -&amp;gt; &amp;quot;LOCAL&amp;quot;&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.rna_type - (skipping to avoid recursive search)&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.name -&amp;gt; &amp;quot;Lamp&amp;quot;&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.identifier -&amp;gt; &amp;quot;Lamp&amp;quot;&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.name_property.rna_type - (skipping to avoid recursive search)&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.name_property.name - (skipping to avoid recursive search)&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.name_property.description -&amp;gt; &amp;quot;Object ID name.&amp;quot;&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.name_property.identifier -&amp;gt; &amp;quot;name&amp;quot;&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.name_property.max_length -&amp;gt; 22&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.name_property.subtype -&amp;gt; &amp;quot;NONE&amp;quot;&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.name_property.type - (skipping to avoid recursive search)&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.properties.keys() - ['RNA', 'Name', 'Color', 'Distance', 'Energy', 'Shadow', 'Type']&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.properties[&amp;quot;RNA&amp;quot;].rna_type - (skipping to avoid recursive search)&lt;br /&gt;
bpy.lamps[&amp;quot;Lamp.006&amp;quot;].rna_type.properties[&amp;quot;RNA&amp;quot;].name -&amp;gt; &amp;quot;RNA&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== rna2xml.py ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
VERBOSE = True&lt;br /&gt;
VERBOSE_TYPE = False&lt;br /&gt;
VERBOSE_DOCS = False&lt;br /&gt;
SKIP_RECURSIVE = False&lt;br /&gt;
common_types = float, int, bool, type(None), str&lt;br /&gt;
&lt;br /&gt;
def seek(r, txt, end = '\n'):&lt;br /&gt;
	newtxt = ''&lt;br /&gt;
	&lt;br /&gt;
	if type(r) in (float, int, type(None)): # basic types&lt;br /&gt;
		print('%s%s' % (txt, r), end=end)&lt;br /&gt;
		return&lt;br /&gt;
	if type(r) in (str, bool):&lt;br /&gt;
		print('%s&amp;quot;%s&amp;quot;' % (txt, r), end=end)&lt;br /&gt;
		return		&lt;br /&gt;
	&lt;br /&gt;
	try:	keys = r.keys()&lt;br /&gt;
	except: keys = None&lt;br /&gt;
		&lt;br /&gt;
	try:	__members__ = r.__members__&lt;br /&gt;
	except: __members__ = []&lt;br /&gt;
	&lt;br /&gt;
	for item in __members__:&lt;br /&gt;
		newtxt = txt + '\t'&lt;br /&gt;
		&lt;br /&gt;
		if item == 'rna_type' and not VERBOSE_TYPE: # just avoid because it spits out loads of data&lt;br /&gt;
			continue&lt;br /&gt;
		&lt;br /&gt;
		if SKIP_RECURSIVE:&lt;br /&gt;
			if item in txt:&lt;br /&gt;
				continue&lt;br /&gt;
				&lt;br /&gt;
		attr = getattr(r, item)&lt;br /&gt;
		&lt;br /&gt;
		if type(attr) in common_types:&lt;br /&gt;
			print('%s&amp;lt;%s&amp;gt;' % (txt, item), end='')&lt;br /&gt;
			seek( attr, '', ''),&lt;br /&gt;
			print('&amp;lt;/%s&amp;gt;' % (item))&lt;br /&gt;
		else:&lt;br /&gt;
			print('%s&amp;lt;%s&amp;gt;' % (txt, item))&lt;br /&gt;
			seek( attr, txt, '')&lt;br /&gt;
			print('%s&amp;lt;/%s&amp;gt;' % (txt, item))&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	if keys:&lt;br /&gt;
		for k in keys:&lt;br /&gt;
			newtxt = txt + '\t'&lt;br /&gt;
			print('%s&amp;lt;item key=&amp;quot;%s&amp;quot;&amp;gt;' % (txt, k))&lt;br /&gt;
			seek(r[k], newtxt)&lt;br /&gt;
			print('%s&amp;lt;/item&amp;gt;' % (txt))&lt;br /&gt;
	&lt;br /&gt;
	else:&lt;br /&gt;
		try:	length = len( r )&lt;br /&gt;
		except:	length = 0&lt;br /&gt;
	&lt;br /&gt;
		for i in range(length):&lt;br /&gt;
			newtxt = txt + '\t'&lt;br /&gt;
			&lt;br /&gt;
			attr = r[i]&lt;br /&gt;
			if type(attr) in common_types:&lt;br /&gt;
				print('%s&amp;lt;item index=&amp;quot;%d&amp;quot;&amp;gt;' % (newtxt, i), end = '')&lt;br /&gt;
				seek(attr, '', '')&lt;br /&gt;
				print('&amp;lt;/item&amp;gt;')&lt;br /&gt;
			else:&lt;br /&gt;
				print('%s&amp;lt;item index=%d&amp;gt;' % (newtxt, i))&lt;br /&gt;
				seek(attr, newtxt+'\t')&lt;br /&gt;
				print('%s&amp;lt;/item&amp;gt;' % (newtxt))&lt;br /&gt;
&lt;br /&gt;
print('&amp;lt;root&amp;gt;')&lt;br /&gt;
seek(bpy, '\t')&lt;br /&gt;
print('&amp;lt;/root&amp;gt;')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script]]&lt;/div&gt;</summary>
		<author><name>wiki&gt;Terrywallwork</name></author>
		
	</entry>
</feed>