﻿<?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%2FThree_ways_to_create_objects</id>
	<title>Dev:IT/2.5/Py/Scripts/Cookbook/Code snippets/Three ways to create objects - 版の履歴</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%2FThree_ways_to_create_objects"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;action=history"/>
	<updated>2026-09-14T13:07:55Z</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/Three_ways_to_create_objects&amp;diff=105251&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/Three_ways_to_create_objects&amp;diff=105251&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/Three_ways_to_create_objects&amp;diff=105250&amp;oldid=prev</id>
		<title>wiki&gt;ValterVB: Created page with &quot;{{Page/Header|2.5x|Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Armatures|Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Materials_and_textures|100}} =Tre modi per creare oggetti= ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;diff=105250&amp;oldid=prev"/>
		<updated>2011-05-13T20:33:51Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Page/Header|2.5x|Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Armatures|Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Materials_and_textures|100}} =Tre modi per creare oggetti= ...&amp;quot;&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/Armatures|Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Materials_and_textures|100}}&lt;br /&gt;
=Tre modi per creare oggetti=&lt;br /&gt;
Gli esempi mostrano che un oggetto può essere creato in modi differenti.&lt;br /&gt;
==Metodo Data==&lt;br /&gt;
Questo metodo imita strettamente come i dati vengono memorizzati internamente in Blender.&lt;br /&gt;
*Aggiungi i dati e poi l'oggetto. Per una mesh:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
me = bpy.data.meshes.new(meshName)&lt;br /&gt;
ob = bpy.data.objects.new(obName, me)&amp;lt;/source&amp;gt;&lt;br /&gt;
e per un'armatura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
amt = bpy.data.armatures.new(amtname)&lt;br /&gt;
ob = bpy.data.objects.new(obname, amt)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Collega l'oggetto alla scena corrente e rendilo attivo. Opzionalmente possiamo rendere l'oggetto appena creato attivo o selezionato. Questo codice è uguale per tutti i tipi di oggetto.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
scn = bpy.context.scene&lt;br /&gt;
scn.objects.link(ob)&lt;br /&gt;
scn.objects.active = ob&lt;br /&gt;
ob.select = True&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Compila i dati. Nel caso della mesh, aggiungiamo la lista dei vertici e delle facce.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;me.from_pydata(verts, [], faces)&amp;lt;/source&amp;gt;&lt;br /&gt;
Nel caso dell'armatura, andiamo in Edit Mode e aggiungiamo un osso.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
bpy.ops.object.mode_set(mode='EDIT')&lt;br /&gt;
bone = amt.edit_bones.new('Bone')&lt;br /&gt;
bone.head = (0,0,0)&lt;br /&gt;
bone.tail = (0,0,1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*nfine, di solito, è necessario aggiornare i dati modificati. Nel caso della mesh, chiameremo esplicitamente la funzione update.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;me.update()&amp;lt;/source&amp;gt;&lt;br /&gt;
L'armatura è implicitamente aggiornata quando torni in Object Mode.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;bpy.ops.object.mode_set(mode='OBJECT')&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Metodo con operatore==&lt;br /&gt;
Il metodo con operatore, aggiunge un oggetto e il suo data block contemporaneamente. Il data block è vuoto, e dovrà essere riempito con i dati reali in seguito.&lt;br /&gt;
*Aggiungi l'oggetto con l'operatore &amp;lt;code&amp;gt;bpy.ops.object.add&amp;lt;/code&amp;gt;. Questo si prende cura di fare automaticamente le cose che abbiamo dovuto fare manualmente con il metodo Data: crea i dati dell'oggetto (per es. la mesh o l'armatura) collega l'oggetto alla scena, rende attivo e selezionato l'oggetto. Dall'altro lato dobbiamo recuperare l'oggetto e i suoi dati. Questo è semplice, perché &amp;lt;code&amp;gt;bpy.context.data&amp;lt;/code&amp;gt; punta sempre sull'oggetto attivo.&amp;lt;br&amp;gt;Per aggiungere una mesh dobbiamo&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
bpy.ops.object.add(type='MESH')&lt;br /&gt;
ob = bpy.context.object&lt;br /&gt;
me = ob.data&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
mentre per aggiungere un'armatura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
bpy.ops.object.add(&lt;br /&gt;
type='ARMATURE',&lt;br /&gt;
enter_editmode=True,&lt;br /&gt;
location=origin)&lt;br /&gt;
ob = bpy.context.object&lt;br /&gt;
amt = ob.data&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Come per il metodo Data, devi compilare con dati reali e aggiornare, prima di usarlo. Per una mesh aggiungiamo vertici e facce:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
me.from_pydata(verts, [], faces)&lt;br /&gt;
me.update()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
mentre per un'armatura aggiungiamo un osso:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
bone = amt.edit_bones.new('Bone')&lt;br /&gt;
bone.head = (0,0,0)&lt;br /&gt;
bone.tail = (0,0,1)&lt;br /&gt;
bpy.ops.object.mode_set(mode='OBJECT')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Notare che non ci serve entrare in Edit Mode in maniera esplicita, in quanto l'armatura entra in Edit Mode nel momento della creazione.&lt;br /&gt;
&lt;br /&gt;
==Metodo con primitive==&lt;br /&gt;
Se vuoi creare un oggetto di tipo primitiva, c'è un metodo che le può creare con le proprietà desiderate.&lt;br /&gt;
*Per creare una mesh piramide&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
bpy.ops.mesh.primitive_cone_add(&lt;br /&gt;
vertices=4,&lt;br /&gt;
radius=1,&lt;br /&gt;
depth=1,&lt;br /&gt;
cap_end=True)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
mentre il codice seguente aggiunge un armatura con un singolo osso;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
bpy.ops.object.armature_add()&lt;br /&gt;
bpy.ops.transform.translate(value=origin)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*Come nel metodo con operatore, dobbiamo recuperare l'oggetto appena creato con &amp;lt;code&amp;gt;bpy.context.object&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
ob = bpy.context.object&lt;br /&gt;
me = ob.data&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Confronto==&lt;br /&gt;
Il metodo con primitive è il più semplice, ma lavora solo se è disponibile una primitiva adatta.&lt;br /&gt;
Nel programma di esempio, viene creata una mesh piramide leggermente diversa da quella creata con gli altri due metodi, la base non è un singolo quadrato, ma è composta da quatro triangoli con un vertice comune al centro della base. Gli altri due metodi sono più o meno equivalenti.&lt;br /&gt;
&lt;br /&gt;
Una primitiva, non necessariemente deve essere semplice, ci sono primitive per la creazione di una scimmia o di uno scheletro umano. Comunque il metodo con primitive è sempre limitato a oggetti prefabbricati.&lt;br /&gt;
&lt;br /&gt;
Useremo tutti e tre i metodi negli esempi seguenti.&lt;br /&gt;
[[File:Code_Snippets_Objects.png|640px]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
# File objects.py&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
import bpy&lt;br /&gt;
import mathutils&lt;br /&gt;
from mathutils import Vector&lt;br /&gt;
&lt;br /&gt;
def createMeshFromData(name, origin, verts, faces):&lt;br /&gt;
    # Create mesh and object&lt;br /&gt;
    me = bpy.data.meshes.new(name+'Mesh')&lt;br /&gt;
    ob = bpy.data.objects.new(name, me)&lt;br /&gt;
    ob.location = origin&lt;br /&gt;
    ob.show_name = True&lt;br /&gt;
&lt;br /&gt;
    # Link object to scene and make active&lt;br /&gt;
    scn = bpy.context.scene&lt;br /&gt;
    scn.objects.link(ob)&lt;br /&gt;
    scn.objects.active = ob&lt;br /&gt;
    ob.select = True&lt;br /&gt;
&lt;br /&gt;
    # Create mesh from given verts, faces.&lt;br /&gt;
    me.from_pydata(verts, [], faces)&lt;br /&gt;
    # Update mesh with new data&lt;br /&gt;
    me.update()    &lt;br /&gt;
    return ob&lt;br /&gt;
    &lt;br /&gt;
def createMeshFromOperator(name, origin, verts, faces):&lt;br /&gt;
    bpy.ops.object.add(&lt;br /&gt;
        type='MESH', &lt;br /&gt;
        enter_editmode=False,&lt;br /&gt;
        location=origin)&lt;br /&gt;
    ob = bpy.context.object&lt;br /&gt;
    ob.name = name&lt;br /&gt;
    ob.show_name = True&lt;br /&gt;
    me = ob.data&lt;br /&gt;
    me.name = name+'Mesh'&lt;br /&gt;
&lt;br /&gt;
    # Create mesh from given verts, faces.&lt;br /&gt;
    me.from_pydata(verts, [], faces)&lt;br /&gt;
    # Update mesh with new data&lt;br /&gt;
    me.update()    &lt;br /&gt;
    # Set object mode&lt;br /&gt;
    bpy.ops.object.mode_set(mode='OBJECT')&lt;br /&gt;
    return ob&lt;br /&gt;
    &lt;br /&gt;
def createMeshFromPrimitive(name, origin):&lt;br /&gt;
    bpy.ops.mesh.primitive_cone_add(&lt;br /&gt;
        vertices=4, &lt;br /&gt;
        radius=1, &lt;br /&gt;
        depth=1, &lt;br /&gt;
        cap_end=True, &lt;br /&gt;
        view_align=False, &lt;br /&gt;
        enter_editmode=False, &lt;br /&gt;
        location=origin, &lt;br /&gt;
        rotation=(0, 0, 0))&lt;br /&gt;
        &lt;br /&gt;
    ob = bpy.context.object&lt;br /&gt;
    ob.name = name&lt;br /&gt;
    ob.show_name = True&lt;br /&gt;
    me = ob.data&lt;br /&gt;
    me.name = name+'Mesh'&lt;br /&gt;
    return ob&lt;br /&gt;
&lt;br /&gt;
def createArmatureFromData(name, origin):&lt;br /&gt;
    # Create armature and object&lt;br /&gt;
    amt = bpy.data.armatures.new(name+'Amt')&lt;br /&gt;
    ob = bpy.data.objects.new(name, amt)&lt;br /&gt;
    ob.location = origin&lt;br /&gt;
    ob.show_name = True&lt;br /&gt;
&lt;br /&gt;
    # Link object to scene and make active&lt;br /&gt;
    scn = bpy.context.scene&lt;br /&gt;
    scn.objects.link(ob)&lt;br /&gt;
    scn.objects.active = ob&lt;br /&gt;
    ob.select = True&lt;br /&gt;
&lt;br /&gt;
    # Create single bone&lt;br /&gt;
    bpy.ops.object.mode_set(mode='EDIT')&lt;br /&gt;
    bone = amt.edit_bones.new('Bone')&lt;br /&gt;
    bone.head = (0,0,0)&lt;br /&gt;
    bone.tail = (0,0,1)&lt;br /&gt;
    bpy.ops.object.mode_set(mode='OBJECT')&lt;br /&gt;
    return ob&lt;br /&gt;
&lt;br /&gt;
def createArmatureFromOperator(name, origin):&lt;br /&gt;
    bpy.ops.object.add(&lt;br /&gt;
        type='ARMATURE', &lt;br /&gt;
        enter_editmode=True,&lt;br /&gt;
        location=origin)&lt;br /&gt;
    ob = bpy.context.object&lt;br /&gt;
    ob.name = name&lt;br /&gt;
    ob.show_name = True&lt;br /&gt;
    amt = ob.data&lt;br /&gt;
    amt.name = name+'Amt'&lt;br /&gt;
&lt;br /&gt;
    # Create single bone&lt;br /&gt;
    bone = amt.edit_bones.new('Bone')&lt;br /&gt;
    bone.head = (0,0,0)&lt;br /&gt;
    bone.tail = (0,0,1)&lt;br /&gt;
    bpy.ops.object.mode_set(mode='OBJECT')&lt;br /&gt;
    return ob&lt;br /&gt;
    &lt;br /&gt;
def createArmatureFromPrimitive(name, origin):&lt;br /&gt;
    bpy.ops.object.armature_add()&lt;br /&gt;
    bpy.ops.transform.translate(value=origin)&lt;br /&gt;
    ob = bpy.context.object&lt;br /&gt;
    ob.name = name&lt;br /&gt;
    ob.show_name = True&lt;br /&gt;
    amt = ob.data&lt;br /&gt;
    amt.name = name+'Amt'&lt;br /&gt;
    return ob&lt;br /&gt;
&lt;br /&gt;
def run(origo):&lt;br /&gt;
    origin = Vector(origo)&lt;br /&gt;
    (x,y,z) = (0.707107, 0.258819, 0.965926)&lt;br /&gt;
    verts = ((x,x,-1), (x,-x,-1), (-x,-x,-1), (-x,x,-1), (0,0,1))&lt;br /&gt;
    faces = ((1,0,4), (4,2,1), (4,3,2), (4,0,3), (0,1,2,3))&lt;br /&gt;
    &lt;br /&gt;
    cone1 = createMeshFromData('DataCone', origin, verts, faces)&lt;br /&gt;
    cone2 = createMeshFromOperator('OpsCone', origin+Vector((0,2,0)), verts, faces)&lt;br /&gt;
    cone3 = createMeshFromPrimitive('PrimCone', origin+Vector((0,4,0)))&lt;br /&gt;
&lt;br /&gt;
    rig1 = createArmatureFromData('DataRig', origin+Vector((0,6,0)))&lt;br /&gt;
    rig2 = createArmatureFromOperator('OpsRig', origin+Vector((0,8,0)))&lt;br /&gt;
    rig3 = createArmatureFromPrimitive('PrimRig', origin+Vector((0,10,0)))&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    run((0,0,0))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Page/Footer|Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Armatures|Dev:IT/2.5/Py/Scripts/Cookbook/Code_snippets/Materials_and_textures}}&lt;/div&gt;</summary>
		<author><name>wiki&gt;ValterVB</name></author>
		
	</entry>
</feed>