""" Geometry helper SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ import helpers.constants as cte class GeometryHelper: """ Geometry helper """ # function _pluto_to_function = { 'A0': cte.SFH, 'A1': cte.SFH, 'A2': cte.SFH, 'A3': cte.SFH, 'A4': cte.SFH, 'A5': cte.SFH, 'A6': cte.SFH, 'A7': cte.SFH, 'A8': cte.SFH, 'A9': cte.SFH, 'B1': cte.MFH, 'B2': cte.MFH, 'B3': cte.MFH, 'B9': cte.MFH, 'C0': cte.RESIDENTIAL, 'C1': cte.RESIDENTIAL, 'C2': cte.RESIDENTIAL, 'C3': cte.RESIDENTIAL, 'C4': cte.RESIDENTIAL, 'C5': cte.RESIDENTIAL, 'C6': cte.RESIDENTIAL, 'C7': cte.RESIDENTIAL, 'C8': cte.RESIDENTIAL, 'C9': cte.RESIDENTIAL, 'D0': cte.RESIDENTIAL, 'D1': cte.RESIDENTIAL, 'D2': cte.RESIDENTIAL, 'D3': cte.RESIDENTIAL, 'D4': cte.RESIDENTIAL, 'D5': cte.RESIDENTIAL, 'D6': cte.RESIDENTIAL, 'D7': cte.RESIDENTIAL, 'D8': cte.RESIDENTIAL, 'D9': cte.RESIDENTIAL, 'E1': cte.WAREHOUSE, 'E3': cte.WAREHOUSE, 'E4': cte.WAREHOUSE, 'E5': cte.WAREHOUSE, 'E7': cte.WAREHOUSE, 'E9': cte.WAREHOUSE, 'F1': cte.WAREHOUSE, 'F2': cte.WAREHOUSE, 'F4': cte.WAREHOUSE, 'F5': cte.WAREHOUSE, 'F8': cte.WAREHOUSE, 'F9': cte.WAREHOUSE, 'G0': cte.OFFICE, 'G1': cte.OFFICE, 'G2': cte.OFFICE, 'G3': cte.OFFICE, 'G4': cte.OFFICE, 'G5': cte.OFFICE, 'G6': cte.OFFICE, 'G7': cte.OFFICE, 'G8': cte.OFFICE, 'G9': cte.OFFICE, 'H1': cte.HOTEL, 'H2': cte.HOTEL, 'H3': cte.HOTEL, 'H4': cte.HOTEL, 'H5': cte.HOTEL, 'H6': cte.HOTEL, 'H7': cte.HOTEL, 'H8': cte.HOTEL, 'H9': cte.HOTEL, 'HB': cte.HOTEL, 'HH': cte.HOTEL, 'HR': cte.HOTEL, 'HS': cte.HOTEL, 'I1': cte.HOSPITAL, 'I2': cte.OUTPATIENT, 'I3': cte.OUTPATIENT, 'I4': cte.RESIDENTIAL, 'I5': cte.OUTPATIENT, 'I6': cte.OUTPATIENT, 'I7': cte.OUTPATIENT, 'I9': cte.OUTPATIENT, 'J1': cte.LARGE_OFFICE, 'J2': cte.LARGE_OFFICE, 'J3': cte.LARGE_OFFICE, 'J4': cte.LARGE_OFFICE, 'J5': cte.LARGE_OFFICE, 'J6': cte.LARGE_OFFICE, 'J7': cte.LARGE_OFFICE, 'J8': cte.LARGE_OFFICE, 'J9': cte.LARGE_OFFICE, 'K1': cte.STRIP_MALL, 'K2': cte.STRIP_MALL, 'K3': cte.STRIP_MALL, 'K4': cte.RESIDENTIAL, 'K5': cte.RESTAURANT, 'K6': cte.COMMERCIAL, 'K7': cte.COMMERCIAL, 'K8': cte.COMMERCIAL, 'K9': cte.COMMERCIAL, 'L1': cte.RESIDENTIAL, 'L2': cte.RESIDENTIAL, 'L3': cte.RESIDENTIAL, 'L8': cte.RESIDENTIAL, 'L9': cte.RESIDENTIAL, 'M1': cte.LARGE_OFFICE, 'M2': cte.LARGE_OFFICE, 'M3': cte.LARGE_OFFICE, 'M4': cte.LARGE_OFFICE, 'M9': cte.LARGE_OFFICE, 'N1': cte.RESIDENTIAL, 'N2': cte.RESIDENTIAL, 'N3': cte.RESIDENTIAL, 'N4': cte.RESIDENTIAL, 'N9': cte.RESIDENTIAL, 'O1': cte.OFFICE, 'O2': cte.OFFICE, 'O3': cte.OFFICE, 'O4': cte.OFFICE, 'O5': cte.OFFICE, 'O6': cte.OFFICE, 'O7': cte.OFFICE, 'O8': cte.OFFICE, 'O9': cte.OFFICE, 'P1': cte.LARGE_OFFICE, 'P2': cte.HOTEL, 'P3': cte.OFFICE, 'P4': cte.OFFICE, 'P5': cte.OFFICE, 'P6': cte.OFFICE, 'P7': cte.LARGE_OFFICE, 'P8': cte.LARGE_OFFICE, 'P9': cte.OFFICE, 'Q0': cte.OFFICE, 'Q1': cte.OFFICE, 'Q2': cte.OFFICE, 'Q3': cte.OFFICE, 'Q4': cte.OFFICE, 'Q5': cte.OFFICE, 'Q6': cte.OFFICE, 'Q7': cte.OFFICE, 'Q8': cte.OFFICE, 'Q9': cte.OFFICE, 'R0': cte.RESIDENTIAL, 'R1': cte.RESIDENTIAL, 'R2': cte.RESIDENTIAL, 'R3': cte.RESIDENTIAL, 'R4': cte.RESIDENTIAL, 'R5': cte.RESIDENTIAL, 'R6': cte.RESIDENTIAL, 'R7': cte.RESIDENTIAL, 'R8': cte.RESIDENTIAL, 'R9': cte.RESIDENTIAL, 'RA': cte.RESIDENTIAL, 'RB': cte.RESIDENTIAL, 'RC': cte.RESIDENTIAL, 'RD': cte.RESIDENTIAL, 'RG': cte.RESIDENTIAL, 'RH': cte.RESIDENTIAL, 'RI': cte.RESIDENTIAL, 'RK': cte.RESIDENTIAL, 'RM': cte.RESIDENTIAL, 'RR': cte.RESIDENTIAL, 'RS': cte.RESIDENTIAL, 'RW': cte.RESIDENTIAL, 'RX': cte.RESIDENTIAL, 'RZ': cte.RESIDENTIAL, 'S0': cte.RESIDENTIAL, 'S1': cte.RESIDENTIAL, 'S2': cte.RESIDENTIAL, 'S3': cte.RESIDENTIAL, 'S4': cte.RESIDENTIAL, 'S5': cte.RESIDENTIAL, 'S9': cte.RESIDENTIAL, 'U0': cte.WAREHOUSE, 'U1': cte.WAREHOUSE, 'U2': cte.WAREHOUSE, 'U3': cte.WAREHOUSE, 'U4': cte.WAREHOUSE, 'U5': cte.WAREHOUSE, 'U6': cte.WAREHOUSE, 'U7': cte.WAREHOUSE, 'U8': cte.WAREHOUSE, 'U9': cte.WAREHOUSE, 'W1': cte.PRIMARY_SCHOOL, 'W2': cte.PRIMARY_SCHOOL, 'W3': cte.SECONDARY_SCHOOL, 'W4': cte.SECONDARY_SCHOOL, 'W5': cte.SECONDARY_SCHOOL, 'W6': cte.SECONDARY_SCHOOL, 'W7': cte.SECONDARY_SCHOOL, 'W8': cte.PRIMARY_SCHOOL, 'W9': cte.SECONDARY_SCHOOL, 'Y1': cte.LARGE_OFFICE, 'Y2': cte.LARGE_OFFICE, 'Y3': cte.LARGE_OFFICE, 'Y4': cte.LARGE_OFFICE, 'Y5': cte.LARGE_OFFICE, 'Y6': cte.LARGE_OFFICE, 'Y7': cte.LARGE_OFFICE, 'Y8': cte.LARGE_OFFICE, 'Y9': cte.LARGE_OFFICE, 'Z1': cte.LARGE_OFFICE } _hft_to_function = { 'residential': cte.RESIDENTIAL, 'single family house': cte.SFH, 'multifamily house': cte.MFH, 'hotel': cte.HOTEL, 'hospital': cte.HOSPITAL, 'outpatient': cte.OUTPATIENT, 'commercial': cte.COMMERCIAL, 'strip mall': cte.STRIP_MALL, 'warehouse': cte.WAREHOUSE, 'primary school': cte.PRIMARY_SCHOOL, 'secondary school': cte.SECONDARY_SCHOOL, 'office': cte.OFFICE, 'large office': cte.LARGE_OFFICE } # usage _function_to_usage = { cte.RESTAURANT: cte.RESTAURANT, cte.RESIDENTIAL: cte.RESIDENTIAL, cte.HOSPITAL: cte.HEALTH_CARE, cte.HOTEL: cte.HOTEL, cte.LARGE_OFFICE: cte.OFFICE_ADMINISTRATION, cte.OFFICE: cte.OFFICE_ADMINISTRATION, cte.PRIMARY_SCHOOL: cte.EDUCATION, cte.SECONDARY_SCHOOL: cte.EDUCATION, cte.RETAIL: cte.RETAIL, cte.STRIP_MALL: cte.HALL, cte.WAREHOUSE: cte.INDUSTRY } @staticmethod def function_from_hft(building_hft_function): """ Get internal function from the given HfT function :param building_hft_function: str :return: str """ return GeometryHelper._hft_to_function[building_hft_function] @staticmethod def function_from_pluto(building_pluto_function): """ Get internal function from the given pluto function :param building_pluto_function: str :return: str """ return GeometryHelper._pluto_to_function[building_pluto_function] @staticmethod def usage_from_function(building_function): """ Get the internal usage for the given internal building function :param building_function: str :return: str """ return GeometryHelper._function_to_usage[building_function] @staticmethod def to_points_matrix(points): """ Transform a point vector into a point matrix :param points: [x, y, z, x, y, z ...] :return: [[x,y,z],[x,y,z]...] """ rows = points.size // 3 points = points.reshape(rows, 3) return points @staticmethod def gml_surface_to_libs(surface): """ Transform citygml surface names into libs names """ if surface == 'WallSurface': return 'Wall' if surface == 'GroundSurface': return 'Ground' return 'Roof'