end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

blender python で、meshの縁のedgeを選択

import bpy
import copy
import math
import bmesh
import sys
from mathutils import Vector

def main():
    select_end_edge( "Cube" )


# 縁の辺を選択
def select_end_edge( obj_name ) -> bool:

    # 一旦、全てを選択解除
    for ob in bpy.context.scene.objects:
        ob.select_set(False)

    ob = bpy.data.objects.get( obj_name )
    if not ob:
        return False

    ob.select_set(True)
    bpy.context.view_layer.objects.active = ob
    bpy.ops.object.mode_set(mode='EDIT', toggle=False)

    
    meshdata = bmesh.from_edit_mesh(ob.data)   # meshデータ取得
    meshdata.select_mode = {'EDGE'}            # 辺選択modeへ
    
    bpy.ops.mesh.select_all(action='DESELECT') # 一旦、選択解除し
    meshdata.select_flush_mode()               # 辺/面の選択状態を更新
    meshdata.verts.ensure_lookup_table()       # 更にtable更新

    # https://docs.blender.org/api/current/bmesh.types.html?highlight=bmedge#bmesh.types.BMEdge
    for edge in meshdata.edges:
        if edge.is_boundary == True:    # 面境界の辺の判定
            edge.select_set(True)

    meshdata.select_flush_mode()        # 辺/面の選択状態を更新
    selectob.data.update()              # objectデータ更新

    return True

if __name__ == '__main__':
    main()