Tue, 23 Jan 2018 12:29:30 +0200
Changed threshold skew test, added warning for slightly skew quads
22 | 1 | from math import radians |
13 | 2 | from testsuite import warning, error |
12 | 3 | from geometry import * |
4 | ||
5 | def sign_consistency(container): | |
6 | # Returns whether all elements in container have the same sign | |
7 | return min(container) * max(container) >= 0 | |
8 | ||
9 | def concave_test(model): | |
26
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
22
diff
changeset
|
10 | ''' Checks that all quadrilaterals are convex. ''' |
13 | 11 | for quadrilateral in model.quadrilaterals: |
14
d383f319f35b
transform_to_xy implemented and concave test online
Santeri Piippo
parents:
13
diff
changeset
|
12 | geometry = transform_to_xy(quadrilateral.geometry) |
12 | 13 | z_scores = [ |
14 | cross_product(v2 - v1, v3 - v1).z | |
14
d383f319f35b
transform_to_xy implemented and concave test online
Santeri Piippo
parents:
13
diff
changeset
|
15 | for v1, v2, v3 in pairs(geometry.vertices, count = 3) |
12 | 16 | ] |
17 | if not sign_consistency(z_scores): | |
16 | 18 | yield error(quadrilateral, 'concave-error') |
13 | 19 | |
20 | def skew_test(model): | |
26
7c263b864371
Added command line option to list all checks.
Santeri Piippo
parents:
22
diff
changeset
|
21 | ''' Checks that all quadrilaterals are coplanar. ''' |
13 | 22 | for quadrilateral in model.quadrilaterals: |
14
d383f319f35b
transform_to_xy implemented and concave test online
Santeri Piippo
parents:
13
diff
changeset
|
23 | for triangles in split_quadrilateral(quadrilateral.geometry): |
d383f319f35b
transform_to_xy implemented and concave test online
Santeri Piippo
parents:
13
diff
changeset
|
24 | plane_1 = triangle_plane_normal(triangles[0]) |
d383f319f35b
transform_to_xy implemented and concave test online
Santeri Piippo
parents:
13
diff
changeset
|
25 | plane_2 = triangle_plane_normal(triangles[1]) |
16 | 26 | skew_angle = vector_angle(plane_1, plane_2, normalized = True) |
27
3089611c99d1
Changed threshold skew test, added warning for slightly skew quads
Santeri Piippo
parents:
26
diff
changeset
|
27 | if skew_angle > radians(3.0): |
16 | 28 | yield error(quadrilateral, 'skew-error', |
29 | skew_angle = skew_angle, | |
30 | ) | |
13 | 31 | break |
27
3089611c99d1
Changed threshold skew test, added warning for slightly skew quads
Santeri Piippo
parents:
26
diff
changeset
|
32 | elif skew_angle > radians(1.0): |
3089611c99d1
Changed threshold skew test, added warning for slightly skew quads
Santeri Piippo
parents:
26
diff
changeset
|
33 | yield warning(quadrilateral, 'skew-warning', |
3089611c99d1
Changed threshold skew test, added warning for slightly skew quads
Santeri Piippo
parents:
26
diff
changeset
|
34 | skew_angle = skew_angle, |
3089611c99d1
Changed threshold skew test, added warning for slightly skew quads
Santeri Piippo
parents:
26
diff
changeset
|
35 | ) |
3089611c99d1
Changed threshold skew test, added warning for slightly skew quads
Santeri Piippo
parents:
26
diff
changeset
|
36 | break |
14
d383f319f35b
transform_to_xy implemented and concave test online
Santeri Piippo
parents:
13
diff
changeset
|
37 | |
d383f319f35b
transform_to_xy implemented and concave test online
Santeri Piippo
parents:
13
diff
changeset
|
38 | manifest = { |
16 | 39 | 'tests': { |
40 | 'skew': skew_test, | |
41 | 'concave': concave_test, | |
42 | }, | |
43 | 'messages': { | |
44 | 'skew-error': lambda skew_angle: | |
22 | 45 | str.format('skew quadrilateral (plane angle {})', |
46 | degree_rep(skew_angle), | |
16 | 47 | ), |
27
3089611c99d1
Changed threshold skew test, added warning for slightly skew quads
Santeri Piippo
parents:
26
diff
changeset
|
48 | 'skew-warning': lambda skew_angle: |
3089611c99d1
Changed threshold skew test, added warning for slightly skew quads
Santeri Piippo
parents:
26
diff
changeset
|
49 | str.format('slightly skew quadrilateral (plane angle {})', |
3089611c99d1
Changed threshold skew test, added warning for slightly skew quads
Santeri Piippo
parents:
26
diff
changeset
|
50 | degree_rep(skew_angle), |
3089611c99d1
Changed threshold skew test, added warning for slightly skew quads
Santeri Piippo
parents:
26
diff
changeset
|
51 | ), |
18 | 52 | 'concave-error': 'concave quadrilateral', |
16 | 53 | }, |
14
d383f319f35b
transform_to_xy implemented and concave test online
Santeri Piippo
parents:
13
diff
changeset
|
54 | } |