ldcheck.py

changeset 13
12d4ddc4bfd8
parent 9
fea8e9ae6f29
child 17
327da5d00360
equal deleted inserted replaced
12:eb74680a5e43 13:12d4ddc4bfd8
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(

mercurial