def zonearea(dct, zone): """return the area of the zone this is the sum of all areas of faces that have 'surfacedirection'=180""" facelist = dct.keys() zonefacelist = [face for face in facelist if dct[face]['layer'] == zone] zonefloorlist = [face for face in zonefacelist \ if dct[face]['surfacedirection'] == 180] areas = [geometry.polygonarea3d(dct[floor]['points']) for floor in zonefloorlist] return sum(areas)
def test_polygonarea3d(): """py.test or polygonarea3d()""" poly = [[97.952770165533494, -89.688089019337596, 1.23613716318408e-14], [-42.113949041963799, -48.668412230783197, 4.3225283531169101e-15], [-176.015056172523, 95.487947355641097, 9.98244187111785e-15], [-59.700839733667401, 203.52759542159399, 9.98244187111785e-15], [193.10639752719001, 28.032400933162201, 2.21573588081702e-14], [175.70277016553399, -89.688089019337596, 1.23613716318408e-14]] area = 60724.6427925073 result = geometry.polygonarea3d(poly) assert almostequals(result, area)