5 |
5 |
6 from parse import parse_ldraw_code |
6 from parse import parse_ldraw_code |
7 from colours import load_colours |
7 from colours import load_colours |
8 from geometry import * |
8 from geometry import * |
9 from pathlib import Path |
9 from pathlib import Path |
|
10 import linetypes |
10 |
11 |
11 from os.path import realpath |
12 from os.path import realpath |
12 script_directory = Path(realpath(__file__)).parent |
13 script_directory = Path(realpath(__file__)).parent |
13 |
14 |
14 def load_config(filename): |
15 def load_config(filename): |
45 |
46 |
46 def hairline_score(smallest_angle): |
47 def hairline_score(smallest_angle): |
47 from math import log10 |
48 from math import log10 |
48 return max(0, -log10(smallest_angle)) |
49 return max(0, -log10(smallest_angle)) |
49 |
50 |
|
51 class Model: |
|
52 def __init__(self, body): |
|
53 self.body = body |
|
54 @property |
|
55 def quadrilaterals(self): |
|
56 yield from filter( |
|
57 lambda element: isinstance(element, linetypes.Quadrilateral), |
|
58 self.body) |
|
59 |
50 if __name__ == '__main__': |
60 if __name__ == '__main__': |
51 from sys import argv |
61 from sys import argv |
52 config = load_config('ldcheck.cfg') |
62 config = load_config('ldcheck.cfg') |
53 for ldconfig_ldr_path in find_ldconfig_ldr_paths(config): |
63 for ldconfig_ldr_path in find_ldconfig_ldr_paths(config): |
54 with ldconfig_ldr_path.open() as ldconfig_ldr: |
64 with ldconfig_ldr_path.open() as ldconfig_ldr: |
55 load_colours(ldconfig_ldr) |
65 load_colours(ldconfig_ldr) |
56 with open(argv[1], 'r') as file: |
66 with open(argv[1], 'r') as file: |
57 model = read_ldraw(file, config = config) |
67 model_body = read_ldraw(file, config = config) |
58 for line_number, entry in enumerate(model, 1): |
68 model = Model(body = model_body) |
|
69 for line_number, entry in enumerate(model_body, 1): |
59 if hasattr(entry, 'colour'): |
70 if hasattr(entry, 'colour'): |
60 print(repr(entry.colour)) |
71 print(repr(entry.colour)) |
61 if hasattr(entry, 'geometry') and len(entry.geometry) >= 3: |
72 if hasattr(entry, 'geometry') and len(entry.geometry) >= 3: |
62 if hairline_score(entry.geometry.smallest_angle) >= 2.0: |
73 if hairline_score(entry.geometry.smallest_angle) >= 2.0: |
63 print(str.format( |
74 print(str.format( |