276 bad_object = model.body[0], |
276 bad_object = model.body[0], |
277 category = category_name.title(), |
277 category = category_name.title(), |
278 ) |
278 ) |
279 break |
279 break |
280 |
280 |
|
281 @problem_type('mirrored-studs', |
|
282 severity = 'warning', |
|
283 message = lambda primitive: str.format( |
|
284 '"{primitive}" should not be mirrored', |
|
285 primitive = primitive, |
|
286 ) |
|
287 ) |
|
288 def mirrored_studs_test(model): |
|
289 for subfile_reference in model.subfile_references: |
|
290 # Test whether any stud subfile is mirrored. |
|
291 # A subfile is mirrored if its determinant is negative. |
|
292 if subfile_reference.subfile_path.startswith('stu') \ |
|
293 and subfile_reference.subfile_path != 'stud4.dat' \ |
|
294 and subfile_reference.matrix.determinant() < 0: |
|
295 yield report_problem( |
|
296 'mirrored-studs', |
|
297 bad_object = subfile_reference, |
|
298 primitive = subfile_reference.subfile_path, |
|
299 ) |
|
300 |
281 manifest = { |
301 manifest = { |
282 'tests': [ |
302 'tests': [ |
283 determinant_test, |
303 determinant_test, |
284 scaling_legality_test, |
304 scaling_legality_test, |
285 dependent_subfile_tests, |
305 dependent_subfile_tests, |
286 category_test, |
306 category_test, |
|
307 mirrored_studs_test, |
287 ], |
308 ], |
288 } |
309 } |