def test_from_mesh3d(): mesh_2d = Mesh2D.from_grid(Point2D(1, 1), 8, 2, 0.25, 1) mesh = Mesh3D.from_mesh2d(mesh_2d) sg = SensorGrid.from_mesh3d('sg_1', mesh) assert len(sg.sensors) == 16 assert len(sg.mesh.vertices) == 27 assert len(sg.mesh.faces) == 16 assert mesh.area == 4
def _aperture_view_factor(project_folder, apertures, size=0.2, ambient_division=1000, receiver='rflux_sky.sky', octree='scene.oct', calc_folder='dmtx_aperture_grouping'): """Calculates the view factor for each aperture by sensor points.""" # Instantiate dictionary that will store the sensor count for each aperture. We need # a OrderedDict so that we can split the rfluxmtx output file by each aperture # (sensor count) in the correct order. ap_dict = OrderedDict() meshes = [] # Create a mesh for each aperture and add the the sensor count to dict. for aperture in apertures: ap_mesh = aperture.geometry.mesh_grid(size, flip=True, generate_centroids=False) meshes.append(ap_mesh) ap_dict[aperture.display_name] = { 'sensor_count': len(ap_mesh.faces) } # Create a sensor grid from joined aperture mesh. grid_mesh = SensorGrid.from_mesh3d('aperture_grid', Mesh3D.join_meshes(meshes)) # Write sensor grid to pts file. sensors = grid_mesh.to_file(os.path.join(project_folder, calc_folder), file_name='apertures') # rfluxmtx options rfluxOpt = RfluxmtxOptions() rfluxOpt.ad = ambient_division rfluxOpt.lw = 1.0 / float(rfluxOpt.ad) rfluxOpt.I = True rfluxOpt.h = True # rfluxmtx command rflux = Rfluxmtx() rflux.options = rfluxOpt rflux.receivers = receiver rflux.sensors = sensors rflux.octree = octree rflux.output = os.path.join(calc_folder, 'apertures_vf.mtx') # Run rfluxmtx command rflux.run(cwd=project_folder) # Get the output file of the rfluxmtx command. mtx_file = os.path.join(project_folder, rflux.output) return mtx_file, ap_dict