This commit is contained in:
Peter Yefi 2022-04-07 12:42:41 -04:00
commit ed6f568b92
10 changed files with 548 additions and 507 deletions

View File

@ -104,7 +104,6 @@ class Polygon:
if module != 0: if module != 0:
angle = abs(np.arcsin(scalar_product / module)) angle = abs(np.arcsin(scalar_product / module))
angle_sum += angle angle_sum += angle
print(angle_sum)
return abs(angle_sum - math.pi*2) < cte.EPSILON return abs(angle_sum - math.pi*2) < cte.EPSILON
def contains_polygon(self, polygon): def contains_polygon(self, polygon):
@ -112,13 +111,10 @@ class Polygon:
Determines if the given polygon is contained by the current polygon Determines if the given polygon is contained by the current polygon
:return: boolean :return: boolean
""" """
print('contains')
for point in polygon.points:
print(point.coordinates, self.contains_point(point))
for point in polygon.points:
if not self.contains_point(point): if not self.contains_point(point):
return False return False
print('Belong!')
return True return True
@property @property

View File

@ -31,6 +31,7 @@ class ThermalOpening:
self._inside_emissivity = None self._inside_emissivity = None
self._alpha_coefficient = None self._alpha_coefficient = None
self._radiative_coefficient = None self._radiative_coefficient = None
self._construction_name = None
@property @property
def id(self): def id(self):
@ -290,3 +291,17 @@ class ThermalOpening:
""" """
if value is not None: if value is not None:
self._radiative_coefficient = float(value) self._radiative_coefficient = float(value)
@property
def construction_name(self):
"""
Get thermal opening construction name
"""
return self._construction_name
@construction_name.setter
def construction_name(self, value):
"""
Set thermal opening construction name
"""
self._construction_name = value

View File

@ -8,8 +8,9 @@ from __future__ import annotations
import sys import sys
import pickle import pickle
import math import math
from typing import List, Union import copy
import pyproj import pyproj
from typing import List, Union
from pyproj import Transformer from pyproj import Transformer
from pathlib import Path from pathlib import Path
@ -434,3 +435,9 @@ class City:
return lca_material return lca_material
return None return None
@property
def copy(self) -> City:
"""
Get a copy of the current city
"""
return copy.deepcopy(self)

View File

@ -44,6 +44,14 @@ class CityObject:
""" """
return self._name return self._name
@name.setter
def name(self, value):
"""
Set building name
:return: str
"""
self._name = value
@property @property
def lod(self) -> int: def lod(self) -> int:
""" """

File diff suppressed because it is too large Load Diff

View File

@ -12,7 +12,8 @@ class ThermalOpeningArchetype:
def __init__(self, conductivity=None, frame_ratio=None, g_value=None, thickness=None, def __init__(self, conductivity=None, frame_ratio=None, g_value=None, thickness=None,
back_side_solar_transmittance_at_normal_incidence=None, back_side_solar_transmittance_at_normal_incidence=None,
front_side_solar_transmittance_at_normal_incidence=None, overall_u_value=None, front_side_solar_transmittance_at_normal_incidence=None, overall_u_value=None,
openable_ratio=None, inside_emissivity=None, alpha_coefficient=None, radiative_coefficient=None): openable_ratio=None, inside_emissivity=None, alpha_coefficient=None, radiative_coefficient=None,
construction_name=None):
self._conductivity = conductivity self._conductivity = conductivity
self._frame_ratio = frame_ratio self._frame_ratio = frame_ratio
self._g_value = g_value self._g_value = g_value
@ -24,6 +25,7 @@ class ThermalOpeningArchetype:
self._inside_emissivity = inside_emissivity self._inside_emissivity = inside_emissivity
self._alpha_coefficient = alpha_coefficient self._alpha_coefficient = alpha_coefficient
self._radiative_coefficient = radiative_coefficient self._radiative_coefficient = radiative_coefficient
self._construction_name = construction_name
@property @property
def conductivity(self): def conductivity(self):
@ -112,3 +114,17 @@ class ThermalOpeningArchetype:
:return: float :return: float
""" """
return self._radiative_coefficient return self._radiative_coefficient
@property
def construction_name(self):
"""
Get thermal opening construction name
"""
return self._construction_name
@construction_name.setter
def construction_name(self, value):
"""
Set thermal opening construction name
"""
self._construction_name = value

View File

@ -109,6 +109,7 @@ class NrelPhysicsInterface:
if 'window' in construction and construction['window'] is not None: if 'window' in construction and construction['window'] is not None:
window_ratio = construction['window_ratio']['#text'] window_ratio = construction['window_ratio']['#text']
w_lib = self._search_construction_type('window', construction['window']) w_lib = self._search_construction_type('window', construction['window'])
window_construction_name = w_lib['@name']
frame_ratio = w_lib['frame_ratio']['#text'] frame_ratio = w_lib['frame_ratio']['#text']
if 'conductivity' in w_lib: if 'conductivity' in w_lib:
conductivity = w_lib['conductivity']['#text'] conductivity = w_lib['conductivity']['#text']
@ -128,7 +129,8 @@ class NrelPhysicsInterface:
thickness=thickness, back_side_solar_transmittance_at_normal_incidence= thickness=thickness, back_side_solar_transmittance_at_normal_incidence=
back_side_solar_transmittance_at_normal_incidence, back_side_solar_transmittance_at_normal_incidence,
front_side_solar_transmittance_at_normal_incidence= front_side_solar_transmittance_at_normal_incidence=
front_side_solar_transmittance_at_normal_incidence) front_side_solar_transmittance_at_normal_incidence,
construction_name=window_construction_name)
else: else:
overall_u_value = w_lib['overall_u_value']['#text'] overall_u_value = w_lib['overall_u_value']['#text']
units = w_lib['overall_u_value']['@units'] units = w_lib['overall_u_value']['@units']

View File

@ -99,6 +99,7 @@ class UsPhysicsParameters(NrelPhysicsInterface):
for thermal_opening in thermal_boundary.thermal_openings: for thermal_opening in thermal_boundary.thermal_openings:
if thermal_boundary_archetype.thermal_opening_archetype is not None: if thermal_boundary_archetype.thermal_opening_archetype is not None:
thermal_opening_archetype = thermal_boundary_archetype.thermal_opening_archetype thermal_opening_archetype = thermal_boundary_archetype.thermal_opening_archetype
thermal_opening.construction_name = thermal_opening_archetype.construction_name
thermal_opening.frame_ratio = thermal_opening_archetype.frame_ratio thermal_opening.frame_ratio = thermal_opening_archetype.frame_ratio
thermal_opening.g_value = thermal_opening_archetype.g_value thermal_opening.g_value = thermal_opening_archetype.g_value
thermal_opening.conductivity = thermal_opening_archetype.conductivity thermal_opening.conductivity = thermal_opening_archetype.conductivity

View File

@ -7,7 +7,6 @@ from numpy import inf
from rhino3dm import * from rhino3dm import *
from rhino3dm._rhino3dm import MeshType from rhino3dm._rhino3dm import MeshType
from city_model_structure.attributes.point import Point from city_model_structure.attributes.point import Point
import numpy as np import numpy as np
@ -16,7 +15,6 @@ from city_model_structure.attributes.polygon import Polygon
from city_model_structure.building import Building from city_model_structure.building import Building
from city_model_structure.city import City from city_model_structure.city import City
from city_model_structure.building_demand.surface import Surface as LibsSurface from city_model_structure.building_demand.surface import Surface as LibsSurface
from helpers.constants import EPSILON
from imports.geometry.helpers.geometry_helper import GeometryHelper from imports.geometry.helpers.geometry_helper import GeometryHelper
@ -31,7 +29,6 @@ class Rhino:
@staticmethod @staticmethod
def _in_perimeter(wall, corner): def _in_perimeter(wall, corner):
res = wall.contains_point(Point(corner)) res = wall.contains_point(Point(corner))
print(f'belong: {res} wall:({wall.coordinates}) corner: ({corner})')
return res return res
@staticmethod @staticmethod
@ -98,7 +95,6 @@ class Rhino:
windows.append(Polygon(surface.perimeter_polygon.inverse)) windows.append(Polygon(surface.perimeter_polygon.inverse))
else: else:
buildings.append(rhino_object) buildings.append(rhino_object)
print(f'windows: {len(windows)}')
# todo: this method will be pretty inefficient # todo: this method will be pretty inefficient
for hole in windows: for hole in windows:
corner = hole.coordinates[0] corner = hole.coordinates[0]

View File

@ -6,7 +6,7 @@ Contributor Mohammad Reza mohammad.seyedabadi@mail.concordia.ca
""" """
import xmltodict import xmltodict
from pathlib import Path from pathlib import Path
from city_model_structure.building_demand.material import Material from city_model_structure.lca_material import LcaMaterial as LMaterial
class LcaMaterial: class LcaMaterial:
def __init__(self, city, base_path): def __init__(self, city, base_path):
@ -15,14 +15,14 @@ class LcaMaterial:
self._lca = None self._lca = None
def enrich(self): def enrich(self):
self._city.materials = [] self._city.lca_materials = []
path = Path(self._base_path / 'lca_data.xml').resolve() path = Path(self._base_path / 'lca_data.xml').resolve()
with open(path) as xml: with open(path) as xml:
self._lca = xmltodict.parse(xml.read()) self._lca = xmltodict.parse(xml.read())
for material in self._lca["library"]["building_materials"]['material']: for material in self._lca["library"]["building_materials"]['material']:
_material = Material() _material = LMaterial()
_material.type = material['@type'] _material.type = material['@type']
_material.id = material['@id'] _material.id = material['@id']
_material.name = material['@name'] _material.name = material['@name']
@ -37,4 +37,4 @@ class LcaMaterial:
_material.cost=material['cost']['#text'] _material.cost=material['cost']['#text']
_material._cost_unit=material['cost']['@unit'] _material._cost_unit=material['cost']['@unit']
self._city.materials.append(_material) self._city.lca_materials.append(_material)