try:
from IPython.display import HTML, display, clear_output
except ImportError:
print('IPython not available.')
from agents import PolygonObstacle
import time
import __main__
# ______________________________________________________________________________
# Continuous environment
_CONTINUOUS_WORLD_HTML = '''
'''
with open('js/continuousworld.js', 'r') as js_file:
_JS_CONTINUOUS_WORLD = js_file.read()
class ContinuousWorldView:
''' View for continuousworld Implementation in agents.py '''
def __init__(self, world, fill="#AAA"):
self.time = time.time()
self.world = world
self.width = world.width
self.height = world.height
def object_name(self):
globals_in_main = {x: getattr(__main__, x) for x in dir(__main__)}
for x in globals_in_main:
if isinstance(globals_in_main[x], type(self)):
if globals_in_main[x].time == self.time:
return x
def handle_add_obstacle(self, vertices):
""" Vertices must be a nestedtuple. This method
is called from kernel.execute on completion of
a polygon. """
self.world.add_obstacle(vertices)
self.show()
def handle_remove_obstacle(self):
return NotImplementedError
def get_polygon_obstacles_coordinates(self):
obstacle_coordiantes = []
for thing in self.world.things:
if isinstance(thing, PolygonObstacle):
obstacle_coordiantes.append(thing.coordinates)
return obstacle_coordiantes
def show(self):
clear_output()
total_html = _CONTINUOUS_WORLD_HTML.format(self.width, self.height, self.object_name(), str(self.get_polygon_obstacles_coordinates()), _JS_CONTINUOUS_WORLD)
display(HTML(total_html))