class_docstr: This is a module responsible for creating 3D bounding boxes and drawing them
  client-side on pygame surface.
class_docstr_tok: ["This","is","a","module","responsible","for","creating","3D","bounding","boxes","and","drawing","them","client-side","on","pygame","surface","."]
docstr: Returns 3D bounding box for a vehicle based on camera view.
docstr_tok: ["Returns","3D","bounding","box","for","a","vehicle","based","on","camera","view","."]
code: def get_bounding_box(vehicle, camera):
      """
      Returns 3D bounding box for a vehicle based on camera view.
      """
  
      bb_cords = ClientSideBoundingBoxes._create_bb_points(vehicle)
      cords_x_y_z = ClientSideBoundingBoxes._vehicle_to_sensor(
          bb_cords, vehicle, camera
      )[:3, :]
      cords_y_minus_z_x = np.concatenate(
          [cords_x_y_z[1, :], -cords_x_y_z[2, :], cords_x_y_z[0, :]]
      )
      bbox = np.transpose(np.dot(camera.calibration, cords_y_minus_z_x))
      camera_bbox = np.concatenate(
          [
              bbox[:, 0] / bbox[:, 2],
              bbox[:, 1] / bbox[:, 2],
              bbox[:, 2],
          ],
          axis=1,
      )
      return camera_bbox
  
imports: import glob
  import os
  import sys
  import carla
  import weakref
  import random
label_desc: Use image node_id 3 for calling the ClientSideBoundingBoxes obj's underlying member method code with example usage: obj.get_bounding_box(vehicle, camera) and returns: camera_bbox