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)