def generate_sensor_surfaces(occface, wall_dim, roof_dim, srf_type, orientation, normal, intersection): mid_pt = py3dmodel.calculate.face_midpt(occface) location_pt = py3dmodel.modify.move_pt(mid_pt, normal, 0.01) moved_oface = py3dmodel.fetch.topo2topotype( py3dmodel.modify.move(mid_pt, location_pt, occface)) if srf_type == 'roofs': xdim = ydim = roof_dim else: xdim = ydim = wall_dim # put it into occ and subdivide surfaces sensor_surfaces = py3dmodel.construct.grid_face(moved_oface, xdim, ydim) # calculate list of properties per surface sensor_intersection = [intersection for x in sensor_surfaces] sensor_dir = [normal for x in sensor_surfaces] sensor_cord = [py3dmodel.calculate.face_midpt(x) for x in sensor_surfaces] sensor_type = [srf_type for x in sensor_surfaces] sensor_orientation = [orientation for x in sensor_surfaces] sensor_area = [ calculate.face_area(x) * (1.0 - scalar) for x, scalar in zip(sensor_surfaces, sensor_intersection) ] return sensor_dir, sensor_cord, sensor_type, sensor_area, sensor_orientation, sensor_intersection
def create_hollowed_facade(surface_facade, window): b_facade_cmpd = fetch.topo2topotype(construct.boolean_difference(surface_facade, window)) hole_facade = fetch.topo_explorer(b_facade_cmpd, "face")[0] hollowed_facade = construct.simple_mesh(hole_facade) # Clean small triangles: this is a despicable source of error hollowed_facade_clean = [x for x in hollowed_facade if calculate.face_area(x) > 1E-3] return hollowed_facade_clean, hole_facade