forked from evaherbst/Blender_remeshing_guide
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSelect_Angles_Python_Script.txt
43 lines (32 loc) · 1.32 KB
/
Select_Angles_Python_Script.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#written by Eva Herbst and Niccolo Fioritti, 2021
#In Object mode, select object of interest. Paste this script into the Python consolve. Triangles with angles < 20 degrees and > 150 will be selected in Edit mode after script runs.
import bpy
import math
obj = bpy.context.object
def angle_between_edges(obj,poly,e1,e2):
common_vert = set(e1).intersection(set(e2))
if common_vert==set():
return None
v0 = list(common_vert)[0]
v1 = list(set(e1).difference(common_vert))[0]
v2 = list(set(e2).difference(common_vert))[0]
vec1 = obj.data.vertices[v1].co -obj.data.vertices[v0].co
vec2 = obj.data.vertices[v2].co -obj.data.vertices[v0].co
angle = vec1.angle(vec2)
angle = math.degrees(angle)
return angle
def selectPolygon(angle,polyIndex):
if(angle is not None):
if(angle<20 or angle >150):
obj = bpy.context.active_object
obj.data.polygons[polyIndex].select = True
#
#
for p_i,poly in enumerate(obj.data.polygons):
for i,e1 in enumerate(poly.edge_keys):
for j,e2 in enumerate(poly.edge_keys):
if i<j:
angle = angle_between_edges(obj,poly,e1,e2)
selectPolygon(angle,p_i)
if angle==None:
continue