﻿<?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%2FMeshes</id>
	<title>Dev:Py/Scripts/Cookbook/Code snippets/Meshes - 版の履歴</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%2FMeshes"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Py/Scripts/Cookbook/Code_snippets/Meshes&amp;action=history"/>
	<updated>2026-06-03T15:26:28Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:Py/Scripts/Cookbook/Code_snippets/Meshes&amp;diff=104641&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/Meshes&amp;diff=104641&amp;oldid=prev"/>
		<updated>2018-06-28T19:43: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日 (木) 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/Meshes&amp;diff=104640&amp;oldid=prev</id>
		<title>wiki&gt;Brecht: moved Dev:2.5/Py/Scripts/Cookbook/Code snippets/Meshes to Dev:Py/Scripts/Cookbook/Code snippets/Meshes: remove version namespace</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Py/Scripts/Cookbook/Code_snippets/Meshes&amp;diff=104640&amp;oldid=prev"/>
		<updated>2015-12-27T19:24:32Z</updated>

		<summary type="html">&lt;p&gt;moved &lt;a href=&quot;/Dev:2.5/Py/Scripts/Cookbook/Code_snippets/Meshes&quot; class=&quot;mw-redirect&quot; title=&quot;Dev:2.5/Py/Scripts/Cookbook/Code snippets/Meshes&quot;&gt;Dev:2.5/Py/Scripts/Cookbook/Code snippets/Meshes&lt;/a&gt; to &lt;a href=&quot;/Dev:Py/Scripts/Cookbook/Code_snippets/Meshes&quot; title=&quot;Dev:Py/Scripts/Cookbook/Code snippets/Meshes&quot;&gt;Dev:Py/Scripts/Cookbook/Code snippets/Meshes&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/Introduction|Dev:2.5/Py/Scripts/Cookbook/Code_snippets/Armatures}}&lt;br /&gt;
=Meshes=&lt;br /&gt;
==Mesh==&lt;br /&gt;
This program creates two meshes. The first is a solid pyramid, with both triangular and quad faces. The second is a wire triangle. The names of both meshes are displayed. The triangle is translated away so it can be seen beside the pyramid. This requires that it is selected.&lt;br /&gt;
[[File:Code_Snippets_Meshes.png|640px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
# File meshes.py&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
import bpy&lt;br /&gt;
&lt;br /&gt;
def createMesh(name, origin, verts, edges, 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;
    # Link object to scene&lt;br /&gt;
    bpy.context.scene.objects.link(ob)&lt;br /&gt;
&lt;br /&gt;
    # Create mesh from given verts, edges, faces. Either edges or&lt;br /&gt;
    # faces should be [], or you ask for problems&lt;br /&gt;
    me.from_pydata(verts, edges, faces)&lt;br /&gt;
&lt;br /&gt;
    # Update mesh with new data&lt;br /&gt;
    me.update(calc_edges=True)&lt;br /&gt;
    return ob&lt;br /&gt;
&lt;br /&gt;
def run(origin):&lt;br /&gt;
    (x,y,z) = (0.707107, 0.258819, 0.965926)&lt;br /&gt;
    verts1 = ((x,x,-1), (x,-x,-1), (-x,-x,-1), (-x,x,-1), (0,0,1))&lt;br /&gt;
    faces1 = ((1,0,4), (4,2,1), (4,3,2), (4,0,3), (0,1,2,3))&lt;br /&gt;
    ob1 = createMesh('Solid', origin, verts1, [], faces1)&lt;br /&gt;
    verts2 = ((x,x,0), (y,-z,0), (-z,y,0))&lt;br /&gt;
    edges2 = ((1,0), (1,2), (2,0))&lt;br /&gt;
    ob2 = createMesh('Edgy', origin, verts2, edges2, [])&lt;br /&gt;
&lt;br /&gt;
    # Move second object out of the way&lt;br /&gt;
    ob1.select = False&lt;br /&gt;
    ob2.select = True&lt;br /&gt;
    bpy.ops.transform.translate(value=(0,2,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;
&lt;br /&gt;
==Vertex groups and shapekeys==&lt;br /&gt;
This program adds an UV sphere with two vertex groups (Left and Right) and four shapekeys.&lt;br /&gt;
[[File:Code_Snippets_ShapeKey.png|640px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
# File shapekey.py&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
import bpy, random&lt;br /&gt;
&lt;br /&gt;
def run(origin):&lt;br /&gt;
    # Add UV sphere&lt;br /&gt;
    bpy.ops.mesh.primitive_uv_sphere_add(&lt;br /&gt;
        segments=6, ring_count=5, size=1, location=origin)&lt;br /&gt;
    ob = bpy.context.object&lt;br /&gt;
    ob.name = 'ShapeKeyObject'&lt;br /&gt;
    ob.show_name = True&lt;br /&gt;
&lt;br /&gt;
    # Create Left and Right vertex groups&lt;br /&gt;
    left = ob.vertex_groups.new('Left')&lt;br /&gt;
    right = ob.vertex_groups.new('Right')&lt;br /&gt;
    for v in ob.data.vertices:&lt;br /&gt;
        if v.co[0] &amp;gt; 0.001:&lt;br /&gt;
            left.add([v.index], 1.0, 'REPLACE')&lt;br /&gt;
        elif v.co[0] &amp;lt; -0.001:&lt;br /&gt;
            right.add([v.index], 1.0, 'REPLACE')&lt;br /&gt;
        else:&lt;br /&gt;
            left.add([v.index], 0.5, 'REPLACE')&lt;br /&gt;
            right.add([v.index], 0.5, 'REPLACE')&lt;br /&gt;
&lt;br /&gt;
    # Add Basis key&lt;br /&gt;
    bpy.ops.object.shape_key_add(None)&lt;br /&gt;
    basis = ob.active_shape_key&lt;br /&gt;
&lt;br /&gt;
    # Add FrontForward key: front verts move one unit forward&lt;br /&gt;
    # Slider from -1.0 to +2.0&lt;br /&gt;
    bpy.ops.object.shape_key_add(None)&lt;br /&gt;
    frontFwd = ob.active_shape_key&lt;br /&gt;
    frontFwd.name = 'FrontForward'&lt;br /&gt;
    frontFwd.slider_min = -1.0&lt;br /&gt;
    frontFwd.slider_max = 2.0    &lt;br /&gt;
    for v in [19, 20, 23, 24]:&lt;br /&gt;
        pt = frontFwd.data[v].co&lt;br /&gt;
        pt[1] = pt[1] - 1&lt;br /&gt;
&lt;br /&gt;
    # Add TopUp keys: top verts move one unit up.  TopUp_L and &lt;br /&gt;
    # TopUp_R only affect left and right halves, respectively&lt;br /&gt;
    keylist = [(None, ''), ('Left', '_L'), ('Right', '_R')]&lt;br /&gt;
    for (vgrp, suffix) in keylist:&lt;br /&gt;
        bpy.ops.object.shape_key_add(None)&lt;br /&gt;
        topUp = ob.active_shape_key&lt;br /&gt;
        topUp.name = 'TopUp' + suffix&lt;br /&gt;
        if vgrp:&lt;br /&gt;
            topUp.vertex_group = vgrp&lt;br /&gt;
        for v in [0, 1, 9, 10, 17, 18, 25]:&lt;br /&gt;
            pt = topUp.data[v].co&lt;br /&gt;
            pt[2] = pt[2] + 1&lt;br /&gt;
&lt;br /&gt;
    # Pose shape keys&lt;br /&gt;
    for shape in ob.data.shape_keys.key_blocks:&lt;br /&gt;
        shape.value = random.random()&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Create five object with random shapekeys&lt;br /&gt;
    for j in range(5):&lt;br /&gt;
        run((3*j,0,0))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Applying an array modifier==&lt;br /&gt;
This program creates a chain with ten links. A link is a primitive torus scaled along the x axis. We give the link an array modifier, where the offset is controlled by an empty. Finally the array modifier is applied, making the chain into a single mesh.&lt;br /&gt;
&lt;br /&gt;
[[File:Code_Snippets_Chain.png|640px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
# File chain.py&lt;br /&gt;
# Creates an array modifier and applies it&lt;br /&gt;
# Update to API rev. 36523&lt;br /&gt;
#----------------------------------------------------------&lt;br /&gt;
import bpy&lt;br /&gt;
import math&lt;br /&gt;
from math import pi&lt;br /&gt;
&lt;br /&gt;
def run(origin):&lt;br /&gt;
    # Add single chain link to the scene&lt;br /&gt;
    bpy.ops.mesh.primitive_torus_add(&lt;br /&gt;
        #major_radius=1, &lt;br /&gt;
        #minor_radius=0.25, &lt;br /&gt;
        major_segments=12, &lt;br /&gt;
        minor_segments=8, &lt;br /&gt;
        use_abso=True, &lt;br /&gt;
        abso_major_rad=1, &lt;br /&gt;
        abso_minor_rad=0.6, &lt;br /&gt;
        location=(0,0,0), &lt;br /&gt;
        rotation=(0,0,0))&lt;br /&gt;
&lt;br /&gt;
    # Scale the torus along the x axis&lt;br /&gt;
    ob = bpy.context.object&lt;br /&gt;
    ob.scale = (0.7, 1, 1)&lt;br /&gt;
    bpy.ops.object.transform_apply(scale=True)&lt;br /&gt;
&lt;br /&gt;
    # Create an empty&lt;br /&gt;
    bpy.ops.object.add(&lt;br /&gt;
        type='EMPTY', &lt;br /&gt;
        location=(0,1.2,0.2), &lt;br /&gt;
        rotation=(pi/2, pi/4, pi/2))&lt;br /&gt;
    empty = bpy.context.object&lt;br /&gt;
&lt;br /&gt;
    # Make chain link active again&lt;br /&gt;
    scn = bpy.context.scene&lt;br /&gt;
    scn.objects.active = ob&lt;br /&gt;
&lt;br /&gt;
    # Add modifier&lt;br /&gt;
    mod = ob.modifiers.new('Chain', 'ARRAY')&lt;br /&gt;
    mod.fit_type = 'FIXED_COUNT'&lt;br /&gt;
    mod.count = 10&lt;br /&gt;
    mod.use_relative_offset = 0&lt;br /&gt;
    mod.use_object_offset = True&lt;br /&gt;
    mod.offset_object = empty&lt;br /&gt;
&lt;br /&gt;
    # Apply the modifier&lt;br /&gt;
    bpy.ops.object.visual_transform_apply()&lt;br /&gt;
    bpy.ops.object.modifier_apply(apply_as='DATA', modifier='Chain')&lt;br /&gt;
&lt;br /&gt;
    # Move chain into place&lt;br /&gt;
    bpy.ops.transform.translate(value=origin)&lt;br /&gt;
&lt;br /&gt;
    # Don't need empty anymore&lt;br /&gt;
    scn.objects.unlink(empty)&lt;br /&gt;
    del(empty)&lt;br /&gt;
&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    run((0,3,0))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Page/Footer|Dev:2.5/Py/Scripts/Cookbook/Code_snippets/Introduction|Dev:2.5/Py/Scripts/Cookbook/Code_snippets/Armatures}}&lt;/div&gt;</summary>
		<author><name>wiki&gt;Brecht</name></author>
		
	</entry>
</feed>