diff --git a/scripts/_Plot_cell_rho.py b/scripts/_Plot_cell_rho.py index 2ea0f9102c86c0e79c675aaa5bd1539b5d5775e6..a7f9fe285f1434b39b4fedd336fe0615cf7f699d 100644 --- a/scripts/_Plot_cell_rho.py +++ b/scripts/_Plot_cell_rho.py @@ -1,5 +1,6 @@ # todo https://stackoverflow.com/questions/12881848/draw-polygons-more-efficiently-with-matplotlib import os +import re import sys import logging import argparse @@ -55,6 +56,26 @@ def get_polygon(poly): return X, Y + +def str_to_array(p): + """ + convert jpsreport polygon into <np.array> + --> can be converted to <Polygon.Polygon> + """ + + if not isinstance(p, str): + raise TypeError('str_to_Array argument must be str') + + pat = re.compile(r'''(-*\d+\.?\d*, -*\d+\.?\d*),*''') + matches = pat.findall(p) + lst = [] + if matches: + lst = [tuple(map(float, m.split(","))) for m in matches] + else: + print("WARNING: could not convert str to list") + + return np.array(lst) + def get_geometry_boundary(geometry): tree = ET.parse(geometry) root = tree.getroot() @@ -207,13 +228,26 @@ def main(): #polys = open("%s/polygon%s.dat"%(filepath,namefile)).readlines() poly_index = [] areas = [] + + print("---") + print(type(polys)) + print(polys) + print("---") + + # ToDo: Korrektur der Schleife erforderlich. + for poly in polys: poly = poly.split("|") poly_index.append(poly[0].strip()) Poly = poly[1].strip() - exec("p = %s"%Poly) - pp = locals()['p'] - polygons.append(pp) + + pp = str_to_array(Poly) + + # print("---") + # print(type(pp)) + # print(pp) + # print("---") + area = pol.Polygon(pp).area() xx = 1.0/area if xx > rho_max: @@ -233,14 +267,15 @@ def main(): sm.set_clim(vmin=0, vmax=10) maxArea = np.max(areas) meanArea = np.mean(areas) + for j, poly in enumerate(polys): - ax1.add_patch(pgon(polygons[j], fc=sm.to_rgba(density_orig[j]), ec='white', lw=2)) + # ax1.add_patch(pgon(pp[j], fc=sm.to_rgba(density_orig[j]), ec='white', lw=2)) bcolor = sm.to_rgba(density_orig[j]) #inverse background color icolor = [1 - c for c in bcolor] icolor[-1] = bcolor[-1] # alpha if plotIndex: - ax1.text(pol.Polygon(polygons[j]).center()[0], - pol.Polygon(polygons[j]).center()[1], + ax1.text(pol.Polygon(pp[j]).center()[0], + pol.Polygon(pp[j]).center()[1], poly_index[j], fontsize=25*areas[j]/maxArea, color=icolor)