平面のへこみを調べる方法
bm.faces[0].loops[0].is_convex
凹んでいるときにfalseになる
loopにそって円になってるなら右に曲がってるのが凹みになっている
以下理屈だとこうなる
import bpy , bmesh obj = bpy.context.object bpy.ops.object.mode_set(mode = 'EDIT') bm = bmesh.from_edit_mesh(obj.data) bm.faces.ensure_lookup_table() loops = bm.faces[0].loops xv = loops[0] p0 = (xv.link_loop_prev.vert.co,xv.vert.co) p1 = (xv.vert.co,xv.link_loop_next.vert.co ) p2 = (xv.link_loop_next.vert.co , xv.link_loop_next.link_loop_next.vert.co) ps =((p0[0],p1[0],p2[0]),(p0[1],p1[1],p2[1])) def ang_chek(ps): (p0,p1,p2) = ps v01 = (p1-p0).normalized() v12 = (p2-p1).normalized() # 角度を得る [0,Π] # acosの値域は[-1,1]となるので演算の誤差で範囲を超えた場合に抑える。 def clamp(v): return min( max(v,-1), 1 ) rad = acos( clamp(v01.dot(v12))) # 曲がる方向で符号を設定 v02 = p2-p0 v12_rot90 = mathutils.Vector( (-v01.y,v01.x) ) rad = rad if v12_rot90.dot(v02) > 0 else -rad # if (p0-p1).cross(p2-p1).z > 0: #print( "MIGI" ) ang=False else: #print( "HIDARI" ) ang = True return ang