+ "code": "\ntry: # import the ladybug_geometry dependencies\n from ladybug_geometry.geometry3d import Vector3D, Point3D, Mesh3D\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_geometry:\\n\\t{}'.format(e))\n\ntry: # import the core honeybee dependencies\n from honeybee.model import Model\n from honeybee.room import Room\n from honeybee.typing import clean_rad_string\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee:\\n\\t{}'.format(e))\n\ntry:\n from honeybee_radiance.sensorgrid import SensorGrid\nexcept ImportError as e:\n raise ImportError('\\nFailed to import honeybee_radiance:\\n\\t{}'.format(e))\n\ntry: # import ladybug_{{cad}} dependencies\n from ladybug_{{cad}}.config import conversion_to_meters\n from ladybug_{{cad}}.togeometry import to_vector3d\n from ladybug_{{cad}}.fromgeometry import from_mesh3d, from_point3d, from_vector3d\n from ladybug_{{cad}}.{{plugin}} import all_required_inputs, list_to_data_tree\nexcept ImportError as e:\n raise ImportError('\\nFailed to import ladybug_{{cad}}:\\n\\t{}'.format(e))\n\n\nif all_required_inputs(ghenv.Component):\n # set defaults for any blank inputs and process the quad_only_\n _dist_floor_ = 1.2 / conversion_to_meters() if _dist_floor_ is None else _dist_floor_\n wall_offset = 0 if wall_offset_ is None else wall_offset_\n dir_count = 8 if _dir_count_ is None else _dir_count_\n try:\n st_vec = to_vector3d(_start_vec_)\n except AttributeError:\n st_vec = Vector3D(0, -1, 0)\n\n # gather all of the rooms\n rooms = []\n for obj in _rooms:\n if isinstance(obj, Model):\n rooms.extend(obj.rooms)\n elif isinstance(obj, Room):\n rooms.append(obj)\n else:\n raise TypeError('Expected Honeybee Room or Model. Got {}.'.format(type(obj)))\n\n # group the rooms by zone if requested\n if by_zone_:\n room_groups = {}\n for room in rooms:\n try:\n room_groups[room.zone].append(room)\n except KeyError: # first room to be found in the zone\n room_groups[room.zone] = [room]\n else:\n room_groups = {room.identifier: [room] for room in rooms}\n\n # create lists to be filled with content\n grid, points, vecs, mesh = [], [], [], []\n\n # loop through the rooms and create the grids\n for zone_id, room_group in room_groups.items():\n # get the base meshs\n floor_meshes = []\n for room in room_group:\n floor_mesh = room.properties.radiance._base_sensor_mesh(\n _grid_size, _grid_size, offset=_dist_floor_, remove_out=True,\n wall_offset=wall_offset)\n if floor_mesh is not None:\n floor_meshes.append(floor_mesh)\n if len(floor_meshes) == 0:\n continue\n floor_grid = Mesh3D.join_meshes(floor_meshes) \\\n if len(floor_meshes) != 1 else floor_meshes[0]\n\n # create the sensor grid from the mesh\n mesh_radius = _grid_size * 0.45\n sg_name = room.display_name if not by_zone_ else zone_id\n grid_name = '{}_Radial'.format(clean_rad_string(sg_name))\n s_grid = SensorGrid.from_mesh3d_radial(\n grid_name, floor_grid, dir_count=dir_count, start_vector=st_vec,\n mesh_radius=mesh_radius)\n s_grid.room_identifier = room_group[0].identifier\n s_grid.display_name = sg_name\n\n # add the relevant items to the outputs\n grid.append(s_grid)\n sensors = s_grid.sensors\n base_points = [from_point3d(Point3D(*sen.pos)) for sen in sensors]\n base_vecs = [from_vector3d(Vector3D(*sen.dir)) for sen in sensors]\n points.append(base_points)\n vecs.append(base_vecs)\n lb_mesh = s_grid.mesh\n if lb_mesh is not None:\n mesh.append(from_mesh3d(lb_mesh))\n else:\n mesh.append(None)\n\n # convert the lists of points to data trees\n points = list_to_data_tree(points)\n vecs = list_to_data_tree(vecs)\n",
0 commit comments