From d8ae27ed5bbda0da5410ef997a4baf31422f3f75 Mon Sep 17 00:00:00 2001 From: Tolga Yurtseven <tolgayurt02@outlook.de> Date: Sat, 10 Oct 2020 18:17:05 +0200 Subject: [PATCH] updated polygon splitter --- mysite/plots/polygon.py | 34 +++++++++++++++++------ mysite/plots/views.py | 61 ++++++++++++----------------------------- 2 files changed, 44 insertions(+), 51 deletions(-) diff --git a/mysite/plots/polygon.py b/mysite/plots/polygon.py index 987d7ee3..f77450a4 100644 --- a/mysite/plots/polygon.py +++ b/mysite/plots/polygon.py @@ -29,6 +29,8 @@ from bokeh.palettes import Dark2_5 as palette from bokeh.palettes import Viridis256 from bokeh.models import CustomJS import itertools +import pdb + a = 0.407 @@ -100,8 +102,8 @@ class Polygon2(object): if spine[0][0] == spine[1][0]: # Sonderfall für eine senkrechte slope = math.inf else: - slope = (spine[1][1] - spine[0][1]) / (spine[1][0] - spine[0][ - 0]) # m = y2-y1/x2-x1 Formel für die Geradensteigung mithilfe aus zwei verschiedenen Punkten der Geraden + slope = (spine[1][1] - spine[0][1]) / (spine[1][0] - spine[0][0]) + # m = y2-y1/x2-x1 Formel für die Geradensteigung mithilfe aus zwei verschiedenen Punkten der Geraden return slope def plot_polygon(self, title="", render=True): @@ -136,20 +138,22 @@ class Polygon2(object): spine_bottom = self.spine[0] spine_top = self.spine[1] help_array = self.shell.copy() + if help_array[0] == help_array[-1]: # falls letztes element doppelt + help_array = help_array[0:-1] spine_bottom_found = False spine_top_found = False spine_bottom_not_horizontal = False while spine_bottom_found == False: # Phase 1 der Funktion sie sucht den bottom spine, dabei werden die Ecken die nicht der Spine Bottom sind ans Ende der Liste geschoben if help_array[0] == spine_bottom: - if spine_bottom[1] != help_array[-1][ - 1]: # checkt ob Spine bottom ein horizontalen Nachbar hat falls ja wird ein Flag gesetzt damit Spine bottomt später nicht in die Rechte mitgenommen wird + if spine_bottom[1] != help_array[-1][1]: + # checkt ob Spine bottom ein horizontalen Nachbar hat falls ja wird ein Flag gesetzt damit Spine bottomt später nicht in die Rechte mitgenommen wird spine_bottom_not_horizontal = True spine_bottom_found = True left.append(help_array.pop(0)) else: help_array.append(help_array.pop(0)) while spine_top_found == False: # iterieren die Liste erneut durch bis wir spine top finden, falls spine top gefunden wurde wird auch geschaut ob spine top ein horizontalen linken - if help_array[0] == spine_top: # Nachbar hat falls ja wird spine top nicht in die Linke Liste miteingefügt + if help_array[0] == spine_top: # Nachbar hat falls ja wird spine top nicht in die rechte Liste miteingefügt spine_top_found = True if spine_top[1] != left[-1][1]: left.append(spine_top) @@ -548,6 +552,7 @@ class Container(object): successor_vertex = self.Tree.find_edges(self.root, vertex_y, self.root) corresponding_edge_points = (successor_vertex.vertice, successor_vertex.vertice_neighbour) # print("corresponding edge points",corresponding_edge_points,"for vertex",vertex)#p + #pdb.set_trace() distance = self.slope3(corresponding_edge_points, vertex) if distance <= min_horizontal_distance: min_horizontal_distance = distance @@ -782,18 +787,24 @@ def plot_mini_containers(plot_steps, render=True, plot_width=600, plot_height=60 class End_Container(object): def __init__(self, mini_container_array, angle=0): self.mini_containers = mini_container_array - self.pack_mini_containers() + self.polygons,self.max_width,self.max_height =self.pack_mini_containers() self.container_area = self.container_area(self.mini_containers) self.angle = angle def pack_mini_containers(self): y_offset = self.mini_containers[0].height + polygons=[] + container_max_width =0 for mini_container in self.mini_containers[1:]: for polygon in mini_container.polygons: polygon.translation(0, y_offset) mini_container.y_offset = y_offset y_offset += mini_container.height - return + polygons= polygons+mini_container.polygons + if container_max_width < mini_container.max_width: + container_max_width = mini_container.max_width + border_points = [(0,0),(0,y_offset),(container_max_width,y_offset),(container_max_width,0)] + return (polygons,container_max_width,y_offset,) def container_area(self, mini_containers): container_area = 0 @@ -843,4 +854,11 @@ class End_Container(object): if render: return show(fig) else: - return fig \ No newline at end of file + return fig + +list2=[[(233.50398313507685, 1720.9265753781722), (787.0422555505176, 1491.3173835514308), (0.0, 1680.8654987569212), (233.50398313507685, 1720.9265753781722)], [(1124.8805630148158, 1708.6895362501566), (532.1290575497333, 1491.3173835514308), (233.50398313507685, 1519.6028026015497), (1124.8805630148158, 1708.6895362501566)], [(1498.1911834971443, 1765.660563957103), (1832.2885709298307, 1593.0223998373076), (1124.8805630148158, 1491.3173835514308), (1498.1911834971443, 1765.660563957103)]] +list3=[] +for poly in list2: + list3.append((Polygon2(poly))) +high_classes = height_classes(list3) +test = building_containers(high_classes) \ No newline at end of file diff --git a/mysite/plots/views.py b/mysite/plots/views.py index 035e25bc..b2cff7b3 100644 --- a/mysite/plots/views.py +++ b/mysite/plots/views.py @@ -25,54 +25,37 @@ from bokeh.io import curdoc from bokeh.plotting import figure -# def index(request): -# return HttpResponse("Hello, world. You're at the polls index.") + def index(request): - # list_hc = height_classes(polygons) - # list_containers = building_containers(list_hc) - # list_mini_containers = pack_mini_containers(list_containers) - # end_container = End_Container(list_mini_containers, True) - #[(0.5, 0), (0, 1), (1, 0), (0.5, 0)] - convex_polygons = poly.create_multiple_convex_polygons(14,3) + convex_polygons = poly.create_multiple_convex_polygons(20,9) + polygons_plot= poly.plot_polygons(convex_polygons,plot_width=300,plot_height=300,render=False) html_polygons = file_html(polygons_plot, CDN, "my plot") high_classes = poly.height_classes(convex_polygons) - # hc_plot_helper=[] - # for hc in high_classes: - # hc_plot = hc.plot_hc(render=False,plot_width=300,plot_height=300) - # html_hc = file_html(hc_plot, CDN, "my plot") - # hc_plot_helper.append(html_hc) + hc_tab_list = [] - counter = 0 - for hc in high_classes: + + # building highclass plots + for counter,hc in enumerate(high_classes): hc_plot = hc.plot_hc(render=False,plot_width=300,plot_height=300) - # html_container = file_html(container_plot, CDN, "my plot") - # container_plot_helper.append(html_container) - tab = Panel(child=hc_plot, title="High-Class {}".format(counter, counter)) + tab = Panel(child=hc_plot, title="High-Class {}".format(counter)) hc_tab_list.append(tab) - counter += 1 hc_tabs = Tabs(tabs=hc_tab_list) hc_plot_helper = file_html(hc_tabs, CDN, "my plot") - - - list_containers = poly.building_containers(high_classes) - container_plot_helper = [] - tab_list=[] - counter = 0 - for container in list_containers: + container_tab_list=[] + + #building container plots + for counter,container in enumerate(list_containers): container_plot = container.plot_container_steps(plot_width=500,colums=3,plot_height=500,render=False) - #html_container = file_html(container_plot, CDN, "my plot") - #container_plot_helper.append(html_container) tab = Panel(child=container_plot, title="High-Class {} -> Container {}".format(counter, counter)) - tab_list.append(tab) - counter += 1 - tabs = Tabs(tabs=tab_list) + container_tab_list.append(tab) + tabs = Tabs(tabs=container_tab_list) container_plot_helper= file_html(tabs, CDN, "my plot") @@ -81,24 +64,16 @@ def index(request): mini_container_plots = mini_containers_tuple[1] mini_plot = poly.plot_mini_containers(mini_container_plots,render=False) - mini_plots=[] + + # building mini container plots mini_plots_tabs=[] for counter,m_plot in enumerate(mini_plot): - print(m_plot) - # print(m_plot[0]) - # print(m_plot[1]) - tab = Panel(child=m_plot, title="Container {} -> Mini-Container {}".format(counter, counter)) + tab = Panel(child=m_plot, title="Container {} -> Mini-Containers".format(counter)) mini_plots_tabs.append(tab) - - #m_plot = layout([[m_plot]],sizing_mode="scale_both") - #mini_plots.append(file_html( m_plot, CDN, "my plot")) - #tabs.append(Panel(child=m_plot, title="circle {}".format(counter))) mini_tabs = Tabs(tabs=mini_plots_tabs) mini_html_plots = file_html(mini_tabs, CDN, "my plot") - #tab =Tabs(tabs=tabs) - - #mini_html_plots= mini_plots + # end container plot end_container = poly.End_Container(list_mini_containers) end_container_plot= end_container.plot_container(render=False) end_container_html =file_html(end_container_plot, CDN, "my plot2") -- GitLab