﻿<?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%3AJA%2F2.5%2FPy%2FScripts%2FCookbook%2FCode_snippets%2FThree_ways_to_create_objects</id>
	<title>Dev:JA/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%3AJA%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:JA/2.5/Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;action=history"/>
	<updated>2026-07-04T03:35:23Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:JA/2.5/Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;diff=141777&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:JA/2.5/Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;diff=141777&amp;oldid=prev"/>
		<updated>2018-06-28T20:54:17Z</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日 (木) 20:54時点における版&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:JA/2.5/Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;diff=141776&amp;oldid=prev</id>
		<title>wiki&gt;Blendmild: translate into ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:JA/2.5/Py/Scripts/Cookbook/Code_snippets/Three_ways_to_create_objects&amp;diff=141776&amp;oldid=prev"/>
		<updated>2013-05-10T00:51:00Z</updated>

		<summary type="html">&lt;p&gt;translate into ja&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;
=オブジェクトを作る３つの方法=&lt;br /&gt;
この例では、Python からオブジェクトを複数の方法で作れることを見ていきます。&lt;br /&gt;
==データ方式==&lt;br /&gt;
データ方式は、Blender 内部のデータ格納法に非常に似ています。&lt;br /&gt;
*データを追加し、次にオブジェクトを追加します。メッシュであれば:&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;
アーマチュアであれば:&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;
*オブジェクトを現在のシーンにリンクして、アクティブにします。新たに作ったオブジェクトはアクティブや選択状態にすることもできます。このコードはどの種類のオブジェクトでも同じです。&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;
*データを埋めます。メッシュの例では、頂点と面のリストを追加します。&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;
アーマチュアの例では、edit mode に切り替えてボーンを追加します。&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;
*最終的に、通常は編集したデータを更新する必要があります。メッシュの例では更新関数を明示的に呼びます。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;me.update()&amp;lt;/source&amp;gt;&lt;br /&gt;
オブジェクトモードに切り替えるとアーマチュアは暗黙的に更新されます。&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（演算）方式==&lt;br /&gt;
operator 方式はオブジェクトとデータブロックを同時に追加します。データブロックは初めは空で、あとで実際のデータを入れる必要があります。&lt;br /&gt;
*&amp;lt;code&amp;gt;bpy.ops.object.add&amp;lt;/code&amp;gt; operator でオブジェクトを追加します。これで、データ方式では手動で行う必要のあったいくつかの事が、自動的に行われます: オブジェクトデータ（メッシュやアーマチュア）を作り、オブジェクトをシーンにリンクし、アクティブにして選択状態にします。一方、オブジェクトにデータを入れる必要があります。これは常にアクティブオブジェクトを指す &amp;lt;code&amp;gt;bpy.context.data&amp;lt;/code&amp;gt; を使うと簡単です。&amp;lt;br&amp;gt;メッシュオブジェクトを追加するには、次を実行します。&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;
アーマチュアを追加します:&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;
*データ方式と同じように、使う前に実際のデータが入り、更新されている必要があります。メッシュでは頂点と面を追加します:&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;
アーマチュアではボーンを追加します:&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;
アーマチュアは作成時にすでに edit mode に入っているので、明示的に edit mode に入る必要がないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
==プリミティブ方式==&lt;br /&gt;
プリミティブ型のオブジェクトを作りたいなら、望みのプロパティを持ったプリミティブを作れる operator を探します。&lt;br /&gt;
*cone は実際のところ pyramid によく似ています。&lt;br /&gt;
４つの側面を持つ pyramid メッシュを作るには: &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;
一方、次のコードは１つのボーンを持つアーマチュアを追加します。&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;
*operator 方式と同じで、新たに作成したオブジェクトは &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;
==比較==&lt;br /&gt;
プリミティブ方式が一番簡単ですが、使えるのは都合のよいプリミティブが利用できる場合だけです。また、このプログラム例でさえも、作成したのは他の方式のものとわずかに異なる pyramid メッシュでした。底は１枚の四角形ではなく、底の中心点を共有する４つの三角形でできています。他の２つの方式はだいたい同じです。&lt;br /&gt;
&lt;br /&gt;
プリミティブは特に単純である必要はありません。猿のメッシュや人間のリグを作るプリミティブがあります。しかしながらプリミティブ方式で作れるのは常に、事前に作られたオブジェクトに限られます。&lt;br /&gt;
&lt;br /&gt;
この記事の例では３つ全ての方式を使っています。&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;
    # メッシュとオブジェクトを作成&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;
    # シーンにオブジェクトをリンクしアクティブ化&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;
    # 頂点と面からメッシュを作成&lt;br /&gt;
    me.from_pydata(verts, [], faces)&lt;br /&gt;
    # 新たなデータでメッシュを更新&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;
    # 頂点と面からメッシュを作成&lt;br /&gt;
    me.from_pydata(verts, [], faces)&lt;br /&gt;
    # 新たなデータでメッシュを更新&lt;br /&gt;
    me.update()    &lt;br /&gt;
    # 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;
    # アーマチュアとオブジェクトを作成&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;
    # シーンにオブジェクトをリンクしアクティブ化&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;
    # ボーンを１つ作成&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;
    # ボーンを１つ作成&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;Blendmild</name></author>
		
	</entry>
</feed>