Mercurial > nagslang
comparison tools/generate_poly.py @ 445:79ba44e04b57
Add offset support.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 07 Sep 2013 14:48:53 +0200 |
parents | fffb9becf608 |
children |
comparison
equal
deleted
inserted
replaced
444:547320870aed | 445:79ba44e04b57 |
---|---|
12 | 12 |
13 | 13 |
14 def parse_args(args): | 14 def parse_args(args): |
15 """Parse arguments.""" | 15 """Parse arguments.""" |
16 parser = optparse.OptionParser(usage="%prog <type> arg1=foo arg2=bar") | 16 parser = optparse.OptionParser(usage="%prog <type> arg1=foo arg2=bar") |
17 | |
18 parser.add_option('-x', | |
19 dest='offset_x', type=int, default=0, | |
20 help='X offset for poly.') | |
21 | |
22 parser.add_option('-y', | |
23 dest='offset_y', type=int, default=0, | |
24 help='Y offset for poly.') | |
25 | |
17 opts, args = parser.parse_args(args) | 26 opts, args = parser.parse_args(args) |
18 args = args[1:] | 27 args = args[1:] |
19 | 28 |
20 if not args: | 29 if not args: |
21 parser.print_help() | 30 parser.print_help() |
25 params = parse_params(args[1:]) | 34 params = parse_params(args[1:]) |
26 return obj_type, params, opts | 35 return obj_type, params, opts |
27 | 36 |
28 | 37 |
29 class PolyGenerator(object): | 38 class PolyGenerator(object): |
30 def generate(self, obj_type, params, opts): | 39 def __init__(self, opts): |
40 self.offset_x = opts.offset_x | |
41 self.offset_y = opts.offset_y | |
42 | |
43 def generate(self, obj_type, params): | |
31 handler = getattr(self, 'generate_%s' % (obj_type,), | 44 handler = getattr(self, 'generate_%s' % (obj_type,), |
32 self.unknown_type) | 45 self.unknown_type) |
33 return handler(params, opts) | 46 return handler(params) |
34 | 47 |
35 def print_poly(self, poly): | 48 def print_poly(self, poly): |
36 print "Poly:" | 49 print "Poly:" |
37 for point in poly: | 50 for point in poly: |
38 print " - [%d, %d]" % tuple(point) | 51 print " - [%d, %d]" % tuple(point) |
39 | 52 |
40 def unknown_type(self, params, opts): | 53 def unknown_type(self, params): |
41 prefix = "generate_" | 54 prefix = "generate_" |
42 known_types = [k[len(prefix):] for k in self.__dict__ | 55 known_types = [k[len(prefix):] for k in self.__dict__ |
43 if k.startswith(prefix)] | 56 if k.startswith(prefix)] |
44 raise ValueError("Unknown object type. Known types: %s" % | 57 raise ValueError("Unknown object type. Known types: %s" % |
45 ",".join(known_types)) | 58 ",".join(known_types)) |
55 "Failed to parse param %s with value %s (parser: %r)" | 68 "Failed to parse param %s with value %s (parser: %r)" |
56 % (name, value, parser)) | 69 % (name, value, parser)) |
57 results.append(result) | 70 results.append(result) |
58 return results | 71 return results |
59 | 72 |
60 def generate_circle(self, params, opts): | 73 def apply_opts(self, poly): |
74 new_poly = [] | |
75 for p in poly: | |
76 x = p[0] + self.offset_x | |
77 y = p[1] + self.offset_y | |
78 new_poly.append([x, y]) | |
79 return new_poly | |
80 | |
81 def generate_circle(self, params): | |
61 r, steps = self.check_params(params, ("r", int), ("steps", int)) | 82 r, steps = self.check_params(params, ("r", int), ("steps", int)) |
62 poly = [] | 83 poly = [] |
63 rad, step_size = 0, 2 * math.pi / steps | 84 rad, step_size = 0, 2 * math.pi / steps |
64 for p in range(steps + 1): | 85 for p in range(steps + 1): |
65 x, y = r * math.sin(rad), r * math.cos(rad) | 86 x, y = r * math.sin(rad), r * math.cos(rad) |
66 poly.append([x, y]) | 87 poly.append([x, y]) |
67 rad += step_size | 88 rad += step_size |
68 return poly | 89 return self.apply_opts(poly) |
69 | 90 |
70 | 91 |
71 if __name__ == "__main__": | 92 if __name__ == "__main__": |
72 obj_type, params, opts = parse_args(sys.argv) | 93 obj_type, params, opts = parse_args(sys.argv) |
73 if obj_type is not None: | 94 if obj_type is not None: |
74 p = PolyGenerator() | 95 p = PolyGenerator(opts) |
75 poly = p.generate(obj_type, params, opts) | 96 poly = p.generate(obj_type, params) |
76 p.print_poly(poly) | 97 p.print_poly(poly) |