ハートのメッシュを作成するスクリプト(Add on)

投稿ツリー

  • 通常 ハートのメッシュを作成するスクリプト(Add on) (Takeshi, 2011/7/29 22:36) «

このトピックの投稿一覧へ

通常 ハートのメッシュを作成するスクリプト(Add on)

msg# 1
depth:
0
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/7/29 22:36
Takeshi  新米 居住地: 愛知  投稿数: 9
ハートのメッシュを作るblender2.5用のスクリプトを書きました。
こちらのサイトで紹介されているものを2.5用に書き直させていただきました。


Addonとしてインストールして使えます。
Add > Mesh > Heartとたどって使ってください


プロパティ
points:作成するハートの頂点の数を指定します
Scale of the heart:ハートの大きさを指定します
Heart influence:カージオイド曲線からハート型への変換の強さを指定します
Notch influence:ハートの切れ込みの強さを指定します
Elasticity:y軸方向の伸縮度を指定します

初めてのスクリプティングでド緊張ですが、どうかよろしくお願いします。
bl_info = {
    'name': 'Heart Mesh',
    'author': 'takeshi',
    'version': (0, 0, 1),
    'blender': (2, 5, 8),
    'api': 37702,
    'location': 'View3D > Add > Mesh > Heart',
    'description': 'Add Heart Mesh',
    'warning': '',
    'category': 'Add Mesh'}

#===================================================================================================
# Import
#===================================================================================================
import bpy
from bpy.props import *
from mathutils import *
from math import sqrt, sin, cos, pi

#============================================================================
#============================================================================
#         Add Heart
#============================================================================
#============================================================================


def Create_mesh_object(context,verts,edges,faces,name):
    scene = context.scene
    obj_act = scene.objects.active
    
    #Create new mesh
    mesh = bpy.data.meshes.new(name)
    
    #Make a mesh from a list of verts/edges/faces.
    mesh.from_pydata(verts, edges, faces)
    
    #Updata mesh geometory after adding stuff.
    mesh.update()
    
    from bpy_extras import object_utils
    return object_utils.object_data_add(context,mesh,operator = None)
    
    
    
def Create_heart_edge_data(points, scale, heart_inf, notch_inf, elasticity):
    verts=[]
    edges=[]
    
    fmin = -pi/2.0
    fmax = 3.0*pi/2.0
    
    for i in range(points):
        f = fmin + (fmax-fmin)*float(i)/float(points)
        t = heart_inf*sqrt(f+pi/2.0) - heart_inf*sqrt(3.0*pi/2.0-f) + (1.0-heart_inf*sqrt(2.0/pi))*f + heart_inf*sqrt(pi/2.0)
        r = scale*(1.0 - sin(t))
        
        x =   r*(1.0+notch_inf*sin(f))*cos(f)
        y = elasticity*r*(1.0+notch_inf*sin(f))*sin(f)
        verts.append( (x,y,0.0) )
        
        i0 = i
        i1 = i+1
        if i == points-1: i1 = 0 #end of loop
        edges.append( (i0,i1) )
        
    return verts, edges



class AddHeart(bpy.types.Operator):
    bl_idname = "mesh.primitive_heart_add"
    bl_label = "Add Heart"
    bl_options = {'REGISTER', 'UNDO'}
    
    
    points = IntProperty(name="Points",
        description="Number of points for the heart",
        min=2,
        max=256,
        default=32)
    scale = FloatProperty(name="Scale of the heart",
        description="Scale of the heart",
        min=0.01,
        max=9999.0,
        default=5.0)
    heart_inf = FloatProperty(name="Heart influence",
        description="Influence of convert cardioid to heart",
        min=0.01,
        max=9999.0,
        default=1.8)
    notch_inf = FloatProperty(name="Notch influence",
        description="Influence of Notch",
        min=0.01,
        max=1,
        default=0.65)
    elasticity = FloatProperty(name="Elasticity",
        description="Elasticity of the Y-axis",
        min=0.01,
        max=9999.0,
        default=1.0)
    
    def execute(self, context):

        verts, edges = Create_heart_edge_data(
            self.points,
            self.scale,
            self.heart_inf,
            self.notch_inf,
            self.elasticity)

        obj = Create_mesh_object(context, verts, edges, [], "Heart")

        return {'FINISHED'}
        
        
        
#============================================================================
#============================================================================
#         REGISTER
#============================================================================
#============================================================================


def menu_func_heart(self, context):
    self.layout.operator(AddHeart.bl_idname, text="Heart", icon="PLUGIN")

def register():
    bpy.utils.register_module(__name__)

    bpy.types.INFO_MT_mesh_add.append(menu_func_heart)

def unregister():
    bpy.utils.unregister_module(__name__)

    bpy.types.INFO_MT_mesh_add.remove(menu_func_heart)

if __name__ == "__main__":
    register()
    


:download:add_mesh_heart_edge.zip

投票数:6 平均点:10.00

  条件検索へ


ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

●テストビルド
Buildbot(自動生成)


●開発関連
公式開発サイト
Blender開発blog
Blender Wiki