﻿<?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%3AIT%2F2.5%2FPy%2FScripts%2FCookbook%2FCode_snippets%2FProperties</id>
	<title>Dev:IT/2.5/Py/Scripts/Cookbook/Code snippets/Properties - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3AIT%2F2.5%2FPy%2FScripts%2FCookbook%2FCode_snippets%2FProperties"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Properties&amp;action=history"/>
	<updated>2026-06-13T20:20:36Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Properties&amp;diff=105261&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Properties&amp;diff=105261&amp;oldid=prev"/>
		<updated>2018-06-28T19:43:40Z</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日 (木) 19:43時点における版&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:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Properties&amp;diff=105260&amp;oldid=prev</id>
		<title>2011年5月14日 (土) 20:43にwiki&gt;ValterVBによる</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Properties&amp;diff=105260&amp;oldid=prev"/>
		<updated>2011-05-14T20:43:16Z</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;{{Page/Header|2.5x|Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/World_view_renderer|Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Interface|100}}&lt;br /&gt;
&lt;br /&gt;
=Proprietà=&lt;br /&gt;
&lt;br /&gt;
==Proprietà RNA vs proprietà ID==&lt;br /&gt;
In Blender ci sono due differenti tipi di proprietà: proprietà ID e proprietà RNA. Una  proprietà RNA estende la definizione data di struttura dati. Deve essere dichiarata prima dell'uso.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
bpy.types.Object.myRnaInt = bpy.props.IntProperty(&lt;br /&gt;
    name = &amp;quot;RNA int&amp;quot;,&lt;br /&gt;
    min = -100,&lt;br /&gt;
    max = 100,&lt;br /&gt;
    default = 33)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una volta che è stata dichiarata, le proprietà RNA sono accessibili con la sintassi punto:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
cube.myRnaInt = -99&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Poiche la dichiarazione della proprietà RNA &amp;lt;code&amp;gt;myRnaInt&amp;lt;/code&amp;gt; estende la definizione della struttura dei dati, ogni oggetto avrà questa proprietà.&lt;br /&gt;
&lt;br /&gt;
Una proprietà ID è aggiunta a un singolo datablock, senza agire sugli altri dati dello stesso tipo. Non serve nessuna dichiarazione, ma è automaticamente definita quando è impostata, per es.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
cube.data[&amp;quot;MyIdInt&amp;quot;] = 4711&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le proprietà ID possono essere solo di tipo intero, float, e stringa, altri tipi saranno convertiti automaticamente. Quindi la linea&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
cube.data[&amp;quot;MyIdBool&amp;quot;] = True&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
definisce una proprietà ID di tipo intero e non una di tipo Booleana.&lt;br /&gt;
&lt;br /&gt;
Le proprietà sono memorizzate all'interno del file .blend, ma non la dichiarazione delle proprietà.&lt;br /&gt;
&lt;br /&gt;
Questo è uno script che crea tre mesh, assegna varie proprietà e stampa i loro valori nella console.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
# File properties.py&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
import bpy&lt;br /&gt;
from bpy.props import *&lt;br /&gt;
&lt;br /&gt;
# Clean the scene and create some objects&lt;br /&gt;
bpy.ops.object.select_by_type(type='MESH')&lt;br /&gt;
bpy.ops.object.delete()&lt;br /&gt;
bpy.ops.mesh.primitive_cube_add(location=(-3,0,0))&lt;br /&gt;
cube = bpy.context.object&lt;br /&gt;
bpy.ops.mesh.primitive_cylinder_add(location=(0,0,0))&lt;br /&gt;
cyl = bpy.context.object&lt;br /&gt;
bpy.ops.mesh.primitive_uv_sphere_add(location=(3,0,0))&lt;br /&gt;
sphere = bpy.context.object&lt;br /&gt;
&lt;br /&gt;
# Define RNA props for every object&lt;br /&gt;
bpy.types.Object.myRnaInt = IntProperty(&lt;br /&gt;
    name = &amp;quot;RNA int&amp;quot;, &lt;br /&gt;
    min = -100, max = 100,&lt;br /&gt;
    default = 33)&lt;br /&gt;
&lt;br /&gt;
bpy.types.Object.myRnaFloat = FloatProperty(&lt;br /&gt;
    name = &amp;quot;RNA float&amp;quot;, &lt;br /&gt;
    default = 12.345,&lt;br /&gt;
    min = 1, max = 20)&lt;br /&gt;
&lt;br /&gt;
bpy.types.Object.myRnaString = StringProperty(&lt;br /&gt;
    name = &amp;quot;RNA string&amp;quot;, &lt;br /&gt;
    default = &amp;quot;Ribonucleic acid&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
bpy.types.Object.myRnaBool = BoolProperty(&lt;br /&gt;
    name = &amp;quot;RNA bool&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
bpy.types.Object.myRnaEnum = EnumProperty(&lt;br /&gt;
    items = [('one', 'eins', 'un'), &lt;br /&gt;
            ('two', 'zwei', 'deux'), &lt;br /&gt;
            ('three', 'drei', 'trois')],&lt;br /&gt;
    name = &amp;quot;RNA enum&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Set the cube's RNA props&lt;br /&gt;
cube.myRnaInt = -99&lt;br /&gt;
cube.myRnaFloat = -1&lt;br /&gt;
cube.myRnaString = &amp;quot;I am an RNA prop&amp;quot;&lt;br /&gt;
cube.myRnaBool = True&lt;br /&gt;
cube.myRnaEnum = 'three'&lt;br /&gt;
&lt;br /&gt;
# Create ID props fore cube mesh by setting them.&lt;br /&gt;
cube.data[&amp;quot;MyIdInt&amp;quot;] = 4711&lt;br /&gt;
cube.data[&amp;quot;MyIdFloat&amp;quot;] = 666.777&lt;br /&gt;
cube.data[&amp;quot;MyIdString&amp;quot;] = &amp;quot;I am an ID prop&amp;quot;&lt;br /&gt;
cube.data[&amp;quot;MyIdBool&amp;quot;] = True&lt;br /&gt;
&lt;br /&gt;
# Print all properties&lt;br /&gt;
def printProp(rna, path):&lt;br /&gt;
    try:&lt;br /&gt;
        print('    %s%s =' % (rna.name, path), eval(&amp;quot;rna&amp;quot;+path))&lt;br /&gt;
    except:&lt;br /&gt;
        print('    %s%s does not exist' % (rna.name, path))&lt;br /&gt;
&lt;br /&gt;
for ob in [cube, cyl, sphere]:&lt;br /&gt;
    print(&amp;quot;%s RNA properties&amp;quot; % ob)&lt;br /&gt;
    printProp(ob, &amp;quot;.myRnaInt&amp;quot;)&lt;br /&gt;
    printProp(ob, &amp;quot;.myRnaFloat&amp;quot;)&lt;br /&gt;
    printProp(ob, &amp;quot;.myRnaString&amp;quot;)&lt;br /&gt;
    printProp(ob, &amp;quot;.myRnaBool&amp;quot;)&lt;br /&gt;
    printProp(ob, &amp;quot;.myRnaEnum&amp;quot;)&lt;br /&gt;
    print(&amp;quot;%s ID properties&amp;quot; % ob.data)&lt;br /&gt;
    printProp(ob.data, '[&amp;quot;MyIdInt&amp;quot;]')&lt;br /&gt;
    printProp(ob.data, '[&amp;quot;MyIdFloat&amp;quot;]')&lt;br /&gt;
    printProp(ob.data, '[&amp;quot;MyIdString&amp;quot;]')&lt;br /&gt;
    printProp(ob.data, '[&amp;quot;MyIdBool&amp;quot;]')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Lo script stampa il seguente testo nella console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;bpy_struct, Object(&amp;quot;Cube&amp;quot;)&amp;gt; RNA properties&lt;br /&gt;
    Cube.myRnaInt = -99&lt;br /&gt;
    Cube.myRnaFloat = 1.0&lt;br /&gt;
    Cube.myRnaString = I am an RNA prop&lt;br /&gt;
    Cube.myRnaBool = True&lt;br /&gt;
    Cube.myRnaEnum = three&lt;br /&gt;
&amp;lt;bpy_struct, Mesh(&amp;quot;Cube.001&amp;quot;)&amp;gt; ID properties&lt;br /&gt;
    Cube.001[&amp;quot;MyIdInt&amp;quot;] = 4711&lt;br /&gt;
    Cube.001[&amp;quot;MyIdFloat&amp;quot;] = 666.777&lt;br /&gt;
    Cube.001[&amp;quot;MyIdString&amp;quot;] = I am an ID prop&lt;br /&gt;
    Cube.001[&amp;quot;MyIdBool&amp;quot;] = 1&lt;br /&gt;
&amp;lt;bpy_struct, Object(&amp;quot;Cylinder&amp;quot;)&amp;gt; RNA properties&lt;br /&gt;
    Cylinder.myRnaInt = 33&lt;br /&gt;
    Cylinder.myRnaFloat = 12.345000267028809&lt;br /&gt;
    Cylinder.myRnaString = Ribonucleic acid&lt;br /&gt;
    Cylinder.myRnaBool = False&lt;br /&gt;
    Cylinder.myRnaEnum = one&lt;br /&gt;
&amp;lt;bpy_struct, Mesh(&amp;quot;Cylinder&amp;quot;)&amp;gt; ID properties&lt;br /&gt;
    Cylinder[&amp;quot;MyIdInt&amp;quot;] does not exist&lt;br /&gt;
    Cylinder[&amp;quot;MyIdFloat&amp;quot;] does not exist&lt;br /&gt;
    Cylinder[&amp;quot;MyIdString&amp;quot;] does not exist&lt;br /&gt;
    Cylinder[&amp;quot;MyIdBool&amp;quot;] does not exist&lt;br /&gt;
&amp;lt;bpy_struct, Object(&amp;quot;Sphere&amp;quot;)&amp;gt; RNA properties&lt;br /&gt;
    Sphere.myRnaInt = 33&lt;br /&gt;
    Sphere.myRnaFloat = 12.345000267028809&lt;br /&gt;
    Sphere.myRnaString = Ribonucleic acid&lt;br /&gt;
    Sphere.myRnaBool = False&lt;br /&gt;
    Sphere.myRnaEnum = one&lt;br /&gt;
&amp;lt;bpy_struct, Mesh(&amp;quot;Sphere&amp;quot;)&amp;gt; ID properties&lt;br /&gt;
    Sphere[&amp;quot;MyIdInt&amp;quot;] does not exist&lt;br /&gt;
    Sphere[&amp;quot;MyIdFloat&amp;quot;] does not exist&lt;br /&gt;
    Sphere[&amp;quot;MyIdString&amp;quot;] does not exist&lt;br /&gt;
    Sphere[&amp;quot;MyIdBool&amp;quot;] does not exist&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Code_Snippets_PropsCube.png|640px]]&lt;br /&gt;
Tutti e tre gli oggetti hanno proprietà RNA, perché sono un'estensione dei tipi di dati dell'oggetto. Le proprietà RNA del cubo hanno il valore assegnato dal programma ad eccezione della proprietà &amp;lt;code&amp;gt;myRnaFloat&amp;lt;/code&amp;gt; il cui valore non può essere più piccolo di 1. Nessuna proprietà è stata impostata per il cilindro e per la sfera, ma hanno comunque proprietà RNA con valori di default.&lt;br /&gt;
&lt;br /&gt;
La mesh cubo ha le proprietà ID impostate dal programma. Nota che la proprietà MyIdBool è un intero con valore 1 anziché una booleana con valore True.&lt;br /&gt;
&lt;br /&gt;
Le proprietà dell'oggetto sono mostrate nell'interfaccia nel pannello sotto Properties, e anche nel contesto dell' oggetto. Le proprietà della mesh possono essere trovate nel contesto della mesh.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Code_Snippets_PropsSphere.png|640px]]&lt;br /&gt;
Come abbiamo visto, possiamo accedere alle proprietà RNA dell'oggetto sfera, tuttavia, non sono mostrate nell'interfaccia utente. A quanto pare solo le proprietà impostate sono memorizzate nel datablock dell'oggetto. Possiamo usare una proprietà RNA che non è stata impostata nello script, prende il valore di default. Al contrario, se proviamo ad accedere a una proprietà ID non acora impostata, sarà generato un errore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Code_Snippets_PropsLinkedCube.png|640px]]&lt;br /&gt;
Le proprietà sono compatibili con il collegamento del file. Salva il file e collega il cubo a un nuovo file. Sia le proprietà RNA che quelle ID sono presenti nel nuovo file, ma sono in grigio, perché non sono accessibili attraverso il collegamento del file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Code_Snippets_PropsProxyCube.png|640px]]&lt;br /&gt;
Se rendiamo proxy il cubo collegato, le proprietà dell'oggetto appartengono al datablock dell'oggetto proxy, e può essere modificato nel file collegato; al contrario, le proprietà della mesh  appartengono al datablock della mesh e non possono esere cambiate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Code_Snippets_PropsBlenderRestarted.png|640px]]&lt;br /&gt;
Come detto prima, le proprietà sono memorizzate all'interno del file, ma la dichiarazione no. Esci,  riavvia Blender, e apri il file che abbiamo precedentemente salvato. Le proprietà &amp;lt;code&amp;gt;myRnaBool&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;myRnaEnum&amp;lt;/code&amp;gt;, sono state convertite a interi. Loro sono infatti memorizzate sempre come interi, ma saranno mostrate come booleane ed enumeratori, a causa della dichiarazione della proprietà memorizzata nel tipo di Object data&amp;lt;code&amp;gt;myRnaEnum&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Per avere conferma del fatto che le proprietà RNA si trasformano in proprietà Id esegui lo script seguente.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
# File print_props.py&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
import bpy&lt;br /&gt;
&lt;br /&gt;
def printProp(rna, path):&lt;br /&gt;
    try:&lt;br /&gt;
        print('    %s%s =' % (rna.name, path), eval(&amp;quot;rna&amp;quot;+path))&lt;br /&gt;
    except:&lt;br /&gt;
        print('    %s%s does not exist' % (rna.name, path))&lt;br /&gt;
&lt;br /&gt;
ob = bpy.context.object&lt;br /&gt;
print(&amp;quot;%s RNA properties&amp;quot; % ob)&lt;br /&gt;
printProp(ob, &amp;quot;.myRnaInt&amp;quot;)&lt;br /&gt;
printProp(ob, &amp;quot;.myRnaFloat&amp;quot;)&lt;br /&gt;
printProp(ob, &amp;quot;.myRnaString&amp;quot;)&lt;br /&gt;
printProp(ob, &amp;quot;.myRnaBool&amp;quot;)&lt;br /&gt;
printProp(ob, &amp;quot;.myRnaEnum&amp;quot;)&lt;br /&gt;
print(&amp;quot;%s ID properties&amp;quot; % ob)&lt;br /&gt;
printProp(ob, '[&amp;quot;myRnaInt&amp;quot;]')&lt;br /&gt;
printProp(ob, '[&amp;quot;myRnaFloat&amp;quot;]')&lt;br /&gt;
printProp(ob, '[&amp;quot;myRnaString&amp;quot;]')&lt;br /&gt;
printProp(ob, '[&amp;quot;myRnaBool&amp;quot;]')&lt;br /&gt;
printProp(ob, '[&amp;quot;myRnaEnum&amp;quot;]')&lt;br /&gt;
print(&amp;quot;%s ID properties&amp;quot; % ob.data)&lt;br /&gt;
printProp(ob.data, '[&amp;quot;MyIdInt&amp;quot;]')&lt;br /&gt;
printProp(ob.data, '[&amp;quot;MyIdFloat&amp;quot;]')&lt;br /&gt;
printProp(ob.data, '[&amp;quot;MyIdString&amp;quot;]')&lt;br /&gt;
printProp(ob.data, '[&amp;quot;MyIdBool&amp;quot;]')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Lo script stampa il seguente testo nella console.&lt;br /&gt;
&amp;lt;pre&lt;br /&gt;
&amp;lt;bpy_struct, Object(&amp;quot;Cube&amp;quot;)&amp;gt; RNA properties&lt;br /&gt;
    Cube.myRnaInt does not exist&lt;br /&gt;
    Cube.myRnaFloat does not exist&lt;br /&gt;
    Cube.myRnaString does not exist&lt;br /&gt;
    Cube.myRnaBool does not exist&lt;br /&gt;
    Cube.myRnaEnum does not exist&lt;br /&gt;
&amp;lt;bpy_struct, Object(&amp;quot;Cube&amp;quot;)&amp;gt; ID properties&lt;br /&gt;
    Cube[&amp;quot;myRnaInt&amp;quot;] = -99&lt;br /&gt;
    Cube[&amp;quot;myRnaFloat&amp;quot;] = 1.0&lt;br /&gt;
    Cube[&amp;quot;myRnaString&amp;quot;] = I am an RNA prop&lt;br /&gt;
    Cube[&amp;quot;myRnaBool&amp;quot;] = 1&lt;br /&gt;
    Cube[&amp;quot;myRnaEnum&amp;quot;] = 2&lt;br /&gt;
&amp;lt;bpy_struct, Mesh(&amp;quot;Cube.001&amp;quot;)&amp;gt; ID properties&lt;br /&gt;
    Cube.001[&amp;quot;MyIdInt&amp;quot;] = 4711&lt;br /&gt;
    Cube.001[&amp;quot;MyIdFloat&amp;quot;] = 666.777&lt;br /&gt;
    Cube.001[&amp;quot;MyIdString&amp;quot;] = I am an ID prop&lt;br /&gt;
    Cube.001[&amp;quot;MyIdBool&amp;quot;] = 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Se ripristiniamo le dichiarazioni di proprietà, le proprietà ID saranno convertite di nuovo in proprietà RNA.&lt;br /&gt;
&lt;br /&gt;
==Bone roll==&lt;br /&gt;
Questo programma si aspetta, come oggetto attivo, un'armatura. Memorizizza l'angolo di rotazione di ogni editbone come proprietà del corrispondente osso, e infine stampa i valori delle proprietà nella console. Quando eseguito con l'armatura dell'immagine, il risultato nella console sarà il seguente.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    Head    3.1416&lt;br /&gt;
    Arm_L   1.5708&lt;br /&gt;
    Leg_R  -2.7646&lt;br /&gt;
    Leg_L   2.7646&lt;br /&gt;
    Arm_R  -1.5708&lt;br /&gt;
    Torso   3.1416&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nota che i valori della proprietà sono in radianti. Gli angoli nella view port sono mostrati in gradi, ma quando ci accedi da Python, sono espressi in radianti. Tuttavia la proprietà Roll è solo una proprietà float, e Blender non sa che è considerato un angolo. Per trovare la proprietà nell'interfaccia utente, ci serve selezionare l'osso in Pose Mode e quindi andare in Edit Mode, come mostrato nella figura.&lt;br /&gt;
[[File:Code_Snippets_BoneRoll.png|640px]]&lt;br /&gt;
Questo codice, in realtà è piuttosto utile per uno script che ''retargets'' i dati provenienti da un motion capture. Per farlo in maniera adeguata, abbiamo bisogno di conoscere l'angolo di rotazione. Tuttavia non possiamo trovarlo se l'armatura è stata collegata in un altro file e reso reso proxy. Per accedere all'angolo di rotatazione &amp;lt;code&amp;gt;rig.data.edit_bones[name].roll&amp;lt;/code&amp;gt;, l'armatura deve essere in Edit Mode, cosa, che non è possibile se è collegata. Ma, se lo script è esegito nel file dove l'armatura è definita, la proprietà Roll può essere accessibile dal file collegato come &amp;lt;code&amp;gt;rig.pose.bones[name].bone[&amp;quot;Roll&amp;quot;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
# File bone_roll.py&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
import bpy&lt;br /&gt;
&lt;br /&gt;
def createBoneRollProps(rig):&lt;br /&gt;
    if rig.type != 'ARMATURE':&lt;br /&gt;
        raise NameError(&amp;quot;Object not an armature&amp;quot;)&lt;br /&gt;
    bpy.context.scene.objects.active = rig&lt;br /&gt;
    try:&lt;br /&gt;
        bpy.ops.object.mode_set(mode='EDIT')    &lt;br /&gt;
        editable = (len(rig.data.edit_bones) &amp;gt; 0)&lt;br /&gt;
    except:&lt;br /&gt;
        editable = False&lt;br /&gt;
&lt;br /&gt;
    rolls = {}&lt;br /&gt;
    if editable:&lt;br /&gt;
        for eb in rig.data.edit_bones:&lt;br /&gt;
            rolls[eb.name] = eb.roll&lt;br /&gt;
        bpy.ops.object.mode_set(mode='POSE')    &lt;br /&gt;
        for pb in rig.pose.bones:&lt;br /&gt;
            pb.bone[&amp;quot;Roll&amp;quot;] = rolls[pb.name]&lt;br /&gt;
    else:&lt;br /&gt;
        try:&lt;br /&gt;
            bpy.ops.object.mode_set(mode='POSE')    &lt;br /&gt;
        except:&lt;br /&gt;
            raise NameError(&amp;quot;Armature is not posable. Create proxy&amp;quot;)&lt;br /&gt;
        for pb in rig.pose.bones:&lt;br /&gt;
            try:&lt;br /&gt;
                rolls[pb.name] = pb.bone[&amp;quot;Roll&amp;quot;]&lt;br /&gt;
            except:&lt;br /&gt;
                raise NameError(&amp;quot;Create roll props in asset file&amp;quot;)&lt;br /&gt;
    return rolls&lt;br /&gt;
&lt;br /&gt;
rolls = createBoneRollProps(bpy.context.object)&lt;br /&gt;
for (bname, roll) in rolls.items():&lt;br /&gt;
        print(&amp;quot;  %16s %8.4f&amp;quot; % (bname, roll))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Page/Footer|Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/World_view_renderer|Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Interface}}&lt;/div&gt;</summary>
		<author><name>wiki&gt;ValterVB</name></author>
		
	</entry>
</feed>