tests/quadrilaterals.py

Tue, 23 Jan 2018 12:29:30 +0200

author
Santeri Piippo
date
Tue, 23 Jan 2018 12:29:30 +0200
changeset 27
3089611c99d1
parent 26
7c263b864371
child 28
5933250813a3
permissions
-rw-r--r--

Changed threshold skew test, added warning for slightly skew quads

22
9bb00170780b refactor
Santeri Piippo
parents: 20
diff changeset
1 from math import radians
13
12d4ddc4bfd8 Got the skew test working
Santeri Piippo
parents: 12
diff changeset
2 from testsuite import warning, error
12
eb74680a5e43 commit work done on test suites...
Santeri Piippo
parents:
diff changeset
3 from geometry import *
eb74680a5e43 commit work done on test suites...
Santeri Piippo
parents:
diff changeset
4
eb74680a5e43 commit work done on test suites...
Santeri Piippo
parents:
diff changeset
5 def sign_consistency(container):
eb74680a5e43 commit work done on test suites...
Santeri Piippo
parents:
diff changeset
6 # Returns whether all elements in container have the same sign
eb74680a5e43 commit work done on test suites...
Santeri Piippo
parents:
diff changeset
7 return min(container) * max(container) >= 0
eb74680a5e43 commit work done on test suites...
Santeri Piippo
parents:
diff changeset
8
eb74680a5e43 commit work done on test suites...
Santeri Piippo
parents:
diff changeset
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
12d4ddc4bfd8 Got the skew test working
Santeri Piippo
parents: 12
diff changeset
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
eb74680a5e43 commit work done on test suites...
Santeri Piippo
parents:
diff changeset
13 z_scores = [
eb74680a5e43 commit work done on test suites...
Santeri Piippo
parents:
diff changeset
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
eb74680a5e43 commit work done on test suites...
Santeri Piippo
parents:
diff changeset
16 ]
eb74680a5e43 commit work done on test suites...
Santeri Piippo
parents:
diff changeset
17 if not sign_consistency(z_scores):
16
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
18 yield error(quadrilateral, 'concave-error')
13
12d4ddc4bfd8 Got the skew test working
Santeri Piippo
parents: 12
diff changeset
19
12d4ddc4bfd8 Got the skew test working
Santeri Piippo
parents: 12
diff changeset
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
12d4ddc4bfd8 Got the skew test working
Santeri Piippo
parents: 12
diff changeset
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
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
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
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
28 yield error(quadrilateral, 'skew-error',
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
29 skew_angle = skew_angle,
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
30 )
13
12d4ddc4bfd8 Got the skew test working
Santeri Piippo
parents: 12
diff changeset
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
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
39 'tests': {
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
40 'skew': skew_test,
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
41 'concave': concave_test,
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
42 },
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
43 'messages': {
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
44 'skew-error': lambda skew_angle:
22
9bb00170780b refactor
Santeri Piippo
parents: 20
diff changeset
45 str.format('skew quadrilateral (plane angle {})',
9bb00170780b refactor
Santeri Piippo
parents: 20
diff changeset
46 degree_rep(skew_angle),
16
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
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
672ebc45685a made errors prettier
Santeri Piippo
parents: 16
diff changeset
52 'concave-error': 'concave quadrilateral',
16
09cc89622262 Commit work done on test loading
Santeri Piippo
parents: 14
diff changeset
53 },
14
d383f319f35b transform_to_xy implemented and concave test online
Santeri Piippo
parents: 13
diff changeset
54 }

mercurial