8 |
8 |
9 with open(ini_path) as file: |
9 with open(ini_path) as file: |
10 library_standards.read_file(file) |
10 library_standards.read_file(file) |
11 |
11 |
12 def determinant_test(model): |
12 def determinant_test(model): |
|
13 ''' |
|
14 Checks all subfile references for matrices with rows or columns all |
|
15 zero. |
|
16 ''' |
13 yield from ( |
17 yield from ( |
14 error(subfile_reference, 'zero-determinant') |
18 error(subfile_reference, 'zero-determinant') |
15 for subfile_reference in model.subfile_references |
19 for subfile_reference in model.subfile_references |
16 if abs(subfile_reference.matrix.determinant() - 0) < 1e-15 |
20 if abs(subfile_reference.matrix.determinant() - 0) < 1e-15 |
17 ) |
21 ) |
44 abs(abs(scaling.y) - 1) < 1e-5, |
48 abs(abs(scaling.y) - 1) < 1e-5, |
45 ]), |
49 ]), |
46 } |
50 } |
47 |
51 |
48 def scaling_legality_test(model): |
52 def scaling_legality_test(model): |
|
53 ''' |
|
54 Checks the part against primitive references with bad scaling. Some |
|
55 primitives (e.g. pegs) are not allowed to be scaled in the |
|
56 X or Z directions. Some (e.g. most studs) are not allowed to be scaled |
|
57 in the Y direction either. |
|
58 ''' |
49 from fnmatch import fnmatch |
59 from fnmatch import fnmatch |
50 scaling_restrictions = library_standards['scaling restrictions'] |
60 scaling_restrictions = library_standards['scaling restrictions'] |
51 for subfile_reference in model.subfile_references: |
61 for subfile_reference in model.subfile_references: |
52 primitive = subfile_reference.subfile_path.lower() |
62 primitive = subfile_reference.subfile_path.lower() |
53 scaling = subfile_reference.matrix.scaling_vector() |
63 scaling = subfile_reference.matrix.scaling_vector() |