﻿<?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%3APy%2FScripts%2FCookbook%2FCode_snippets%2FThree_ways_to_create_objects</id>
	<title>Dev: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%3APy%2FScripts%2FCookbook%2FCode_snippets%2FThree_ways_to_create_objects"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;action=history"/>
	<updated>2026-05-14T06:53:52Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;diff=104659&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;diff=104659&amp;oldid=prev"/>
		<updated>2018-06-28T19:43:18Z</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:Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;diff=104658&amp;oldid=prev</id>
		<title>wiki&gt;Brecht: moved Dev:2.5/Py/Scripts/Cookbook/Code snippets/Three ways to create objects to Dev:Py/Scripts/Cookbook/Code snippets/Three ways to create objects: remove version namespace</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;diff=104658&amp;oldid=prev"/>
		<updated>2015-12-27T19:24:33Z</updated>

		<summary type="html">&lt;p&gt;moved &lt;a href=&quot;/Dev:2.5/Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&quot; class=&quot;mw-redirect&quot; title=&quot;Dev:2.5/Py/Scripts/Cookbook/Code snippets/Three ways to create objects&quot;&gt;Dev:2.5/Py/Scripts/Cookbook/Code snippets/Three ways to create objects&lt;/a&gt; to &lt;a href=&quot;/Dev:Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&quot; title=&quot;Dev:Py/Scripts/Cookbook/Code snippets/Three ways to create objects&quot;&gt;Dev:Py/Scripts/Cookbook/Code snippets/Three ways to create objects&lt;/a&gt;: remove version namespace&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Page/Header|2.5x|Dev:2.5/Py/Scripts/Cookbook/Code_snippets/Armatures|Dev:2.5/Py/Scripts/Cookbook/Code_snippets/Materials_and_textures}}&lt;br /&gt;
=Three ways to create objects=&lt;br /&gt;
The examples covered so far show that object can be created from Python using different paradigms.&lt;br /&gt;
==Data method==&lt;br /&gt;
The data method closely mimics how data are stored internally in Blender.&lt;br /&gt;
*Add the data, and then the object. For a 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;
and for an armature:&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;
*Link the object to the current scene and make it active. Optionally, we can make the newly created object active or selected. This code is the same for all kinds of objects.&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;
*Fill in the data. In the mesh case, we add the lists of vertices and faces.&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;
In the armature case, we switch to edit mode and add a bone.&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;
*Finally, it is usually necessary to update the modified data. In the mesh case, we call an update function explicity.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;me.update()&amp;lt;/source&amp;gt;&lt;br /&gt;
The armature is implicitly update when we switch to 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;
==Operator method==&lt;br /&gt;
The operator method adds an object and a data block at the same time. The data block is currently empty, and needs to be filled with actual data later.&lt;br /&gt;
*Add the object with the &amp;lt;code&amp;gt;bpy.ops.object.add&amp;lt;/code&amp;gt; operator. This automatically takes care of several things that we had to do manually in the data method: it creates object data (i.e. the mesh or armature), links the object to the scene, makes it active and selects the object. On the other hand, we must now retrieve the object and its data. This is straightforward because &amp;lt;code&amp;gt;bpy.context.data&amp;lt;/code&amp;gt; always points to the active object.&amp;lt;br&amp;gt;To add a mesh object, we do&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;
and to add an armature:&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;
*As in the data method, the actual data must be filled in and updated before use. For a mesh we add the verts and faces:&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;
and for an armature we add a bone:&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;
Note that we do not need to explicitly enter edit mode, because the armature entered edit mode already on creation.&lt;br /&gt;
&lt;br /&gt;
==Primitive method==&lt;br /&gt;
If we want to make an object of a primitive type, there may exist an operator which creates the primitive with the desired properties.&lt;br /&gt;
*A cone is in fact approximated by a pyramid.&lt;br /&gt;
To create a pyramid mesh with 4 sides: &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;
whereas the following code adds a armature with a single bone;&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;
*As in the operator method, we then retrieve the newly create object from &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;
==Comparison==&lt;br /&gt;
The primitive method is simplest, but it only works when a suitable primitive is available. Even in the example program, it creates a pyramid mesh which is slightly different from the other two methods; the base is not a single quad, but rather consists of four triangles with a common point in the middle of the base. The other two methods are more or less equivalent.&lt;br /&gt;
&lt;br /&gt;
A primitive does not need to be particularly simple; there are primitives for creating a monkey mesh or a human rig. But the primitive method is always limited to prefabricated objects.&lt;br /&gt;
&lt;br /&gt;
We use all three methods in the examples in this note.&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:2.5/Py/Scripts/Cookbook/Code_snippets/Armatures|Dev:2.5/Py/Scripts/Cookbook/Code_snippets/Materials_and_textures}}&lt;/div&gt;</summary>
		<author><name>wiki&gt;Brecht</name></author>
		
	</entry>
</feed>