From d7aa4fd4c22b4f7a76b8a9db977b2af815ac2d3d Mon Sep 17 00:00:00 2001 From: MasterofJOKers Date: Wed, 30 Jul 2014 21:35:02 +0200 Subject: [PATCH] genPOI: function for doubled code for marker creation The code creating the actual marker dict out of the entity and the result of the filter function was almost the same for every set of entities. Thus it is now a function. --- overviewer_core/aux_files/genPOI.py | 128 +++++++++++----------------- 1 file changed, 48 insertions(+), 80 deletions(-) diff --git a/overviewer_core/aux_files/genPOI.py b/overviewer_core/aux_files/genPOI.py index fd5cb36..98ad1ee 100755 --- a/overviewer_core/aux_files/genPOI.py +++ b/overviewer_core/aux_files/genPOI.py @@ -209,6 +209,50 @@ def handleManual(rset, manualpois): if manualpois: rset._pois['Manual'].extend(manualpois) + +def create_marker_from_filter_result(poi, result): + """ + Takes a POI and the return value of a filter function for it and creates a + marker dict depending on the type of the returned value. + """ + # every marker has a position either directly via attributes x, y, z or + # via tuple attribute Pos + if 'Pos' in poi: + d = dict((v, poi['Pos'][i]) for i, v in enumerate('xyz')) + else: + d = dict((v, poi[v]) for v in 'xyz') + + if isinstance(result, basestring): + d.update(dict(text=result, hovertext=result)) + elif type(result) == tuple: + d.update(dict(text=result[1], hovertext=result[0])) + # Dict support to allow more flexible things in the future as well as polylines on the map. + elif type(result) == dict: + d['text'] = result['text'] + + # Use custom hovertext if provided... + if 'hovertext' in result and isinstance(result['hovertext'], basestring): + d['hovertext'] = result['hovertext'] + else: # ...otherwise default to display text. + d['hovertext'] = result['text'] + + if 'polyline' in result and type(result['polyline']) == tuple: #if type(result.get('polyline', '')) == tuple: + d['polyline'] = [] + for point in result['polyline']: + # This poor man's validation code almost definately needs improving. + if type(point) == dict: + d['polyline'].append(dict(x=point['x'], y=point['y'], z=point['z'])) + if isinstance(result['color'], basestring): + d['strokeColor'] = result['color'] + + if "icon" in poi: + d.update({"icon": poi['icon']}) + if "createInfoWindow" in poi: + d.update({"createInfoWindow": poi['createInfoWindow']}) + + return d + + def main(): if os.path.basename(sys.argv[0]) == """genPOI.py""": @@ -309,98 +353,22 @@ def main(): for poi in rset._pois['Entities']: result = filter_function(poi) if result: - if isinstance(result, basestring): - d = dict(x=poi['Pos'][0], y=poi['Pos'][1], z=poi['Pos'][2], text=result, hovertext=result) - elif type(result) == tuple: - d = dict(x=poi['Pos'][0], y=poi['Pos'][1], z=poi['Pos'][2], text=result[1], hovertext=result[0]) - if "icon" in poi: - d.update({"icon": poi['icon']}) - if "createInfoWindow" in poi: - d.update({"createInfoWindow": poi['createInfoWindow']}) + d = create_marker_from_filter_result(poi, result) markerSetDict[name]['raw'].append(d) for poi in rset._pois['TileEntities']: result = filter_function(poi) if result: - if isinstance(result, basestring): - d = dict(x=poi['x'], y=poi['y'], z=poi['z'], text=result, hovertext=result) - elif type(result) == tuple: - d = dict(x=poi['x'], y=poi['y'], z=poi['z'], text=result[1], hovertext=result[0]) - # Dict support to allow more flexible things in the future as well as polylines on the map. - elif type(result) == dict: - d = dict(x=poi['x'], y=poi['y'], z=poi['z'], text=result['text']) - # Use custom hovertext if provided... - if 'hovertext' in result and isinstance(result['hovertext'], basestring): - d['hovertext'] = result['hovertext'] - else: # ...otherwise default to display text. - d['hovertext'] = result['text'] - if 'polyline' in result and type(result['polyline']) == tuple: #if type(result.get('polyline', '')) == tuple: - d['polyline'] = [] - for point in result['polyline']: - # This poor man's validation code almost definately needs improving. - if type(point) == dict: - d['polyline'].append(dict(x=point['x'],y=point['y'],z=point['z'])) - if isinstance(result['color'], basestring): - d['strokeColor'] = result['color'] - if "icon" in poi: - d.update({"icon": poi['icon']}) - if "createInfoWindow" in poi: - d.update({"createInfoWindow": poi['createInfoWindow']}) + d = create_marker_from_filter_result(poi, result) markerSetDict[name]['raw'].append(d) for poi in rset._pois['Players']: result = filter_function(poi) if result: - if isinstance(result, basestring): - d = dict(x=poi['x'], y=poi['y'], z=poi['z'], text=result, hovertext=result) - elif type(result) == tuple: - d = dict(x=poi['x'], y=poi['y'], z=poi['z'], text=result[1], hovertext=result[0]) - # Dict support to allow more flexible things in the future as well as polylines on the map. - elif type(result) == dict: - d = dict(x=poi['x'], y=poi['y'], z=poi['z'], text=result['text']) - # Use custom hovertext if provided... - if 'hovertext' in result and isinstance(result['hovertext'], basestring): - d['hovertext'] = result['hovertext'] - else: # ...otherwise default to display text. - d['hovertext'] = result['text'] - if 'polyline' in result and type(result['polyline']) == tuple: #if type(result.get('polyline', '')) == tuple: - d['polyline'] = [] - for point in result['polyline']: - # This poor man's validation code almost definately needs improving. - if type(point) == dict: - d['polyline'].append(dict(x=point['x'],y=point['y'],z=point['z'])) - if isinstance(result['color'], basestring): - d['strokeColor'] = result['color'] - if "icon" in poi: - d.update({"icon": poi['icon']}) - if "createInfoWindow" in poi: - d.update({"createInfoWindow": poi['createInfoWindow']}) + d = create_marker_from_filter_result(poi, result) markerSetDict[name]['raw'].append(d) for poi in rset._pois['Manual']: result = filter_function(poi) if result: - if isinstance(result, basestring): - d = dict(x=poi['x'], y=poi['y'], z=poi['z'], text=result, hovertext=result) - elif type(result) == tuple: - d = dict(x=poi['x'], y=poi['y'], z=poi['z'], text=result[1], hovertext=result[0]) - # Dict support to allow more flexible things in the future as well as polylines on the map. - elif type(result) == dict: - d = dict(x=poi['x'], y=poi['y'], z=poi['z'], text=result['text']) - # Use custom hovertext if provided... - if 'hovertext' in result and isinstance(result['hovertext'], basestring): - d['hovertext'] = result['hovertext'] - else: # ...otherwise default to display text. - d['hovertext'] = result['text'] - if 'polyline' in result and type(result['polyline']) == tuple: #if type(result.get('polyline', '')) == tuple: - d['polyline'] = [] - for point in result['polyline']: - # This poor man's validation code almost definately needs improving. - if type(point) == dict: - d['polyline'].append(dict(x=point['x'],y=point['y'],z=point['z'])) - if isinstance(result['color'], basestring): - d['strokeColor'] = result['color'] - if "icon" in poi: - d.update({"icon": poi['icon']}) - if "createInfoWindow" in poi: - d.update({"createInfoWindow": poi['createInfoWindow']}) + d = create_marker_from_filter_result(poi, result) markerSetDict[name]['raw'].append(d) #print markerSetDict