Blenderで芳香環に面を張るやつ

 こんなやつです。


手作業でやると思いのほかめんどくさかったので、少し楽にしようとしました。

方針としては、

・手作業で原子を選択する

・選択されている原子の中心座標を頂点として面を生成する

・ついでにマテリアルも設定しておく

という感じです。


以下スクリプトです。



import bpy

name = "plane"
color = (0,0.7,0.95,1)
emit = 15

ma = bpy.data.materials.new(name)
ma.use_nodes = True
bsdf = ma.node_tree.nodes["Principled BSDF"]
bsdf.inputs[0].default_value = color
bsdf.inputs[4].default_value = 0.2
bsdf.inputs[7].default_value = 0.3
bsdf.inputs[18].default_value = emit
ma.diffuse_color = color
  
if(len(bpy.context.selected_objects))>2: 
    verts=[]
    face=[]
    idx=0
    for o in bpy.context.selected_objects:
        verts.append(o.location)
        face.append(idx)
        idx+=1
        o.select_set(False)

    faces=[face]    

    mesh = bpy.data.meshes.new(name)
    obj = bpy.data.objects.new(name,mesh)
    bpy.context.collection.objects.link(obj)
    mesh.from_pydata(verts,[],faces)
    mesh.update

    bpy.context.view_layer.objects.active = obj
    bpy.ops.object.mode_set(mode='EDIT')
    bpy.ops.mesh.convex_hull()
    bpy.ops.object.mode_set(mode='OBJECT')
    
    obj.data.materials.append(ma)
    
else:
    print("Err: Select more than 3 objects.")

使い方ですが、

面を張る領域を選択してスクリプトを実行してください。

原子を選択するのは意外とめんどくさいので、結合ごとまとめて選択してしまうのが楽だと思います。







これを目的の面すべてに対して実行してください。(中心座標を頂点にしているだけなので、一度にやろうとすると面がはみ出ます)




なお、マテリアルは面ごとに生成されますので、一括で編集したい場合には対象の面をまとめて選択してCtrl+L>マテリアルを選んでください。










何か改善点などあれば教えていただけると嬉しいです。


関連記事

Blenderで読み込んだ分子モデルにマテリアルを自動設定したかった

パワポに直接挿入可能な3D分子モデルを作る

コメント

このブログの人気の投稿

ブルアカで学ぶ韓国語#1_生徒名のハングル表記

パワポに直接挿入可能な3D分子モデルを作る

VSCodeにLaTeXを入れました