19const FString USensorsManagerComponent::ComponentHierarchySeparator = TEXT(
"_|_");
 
   21USensorsManagerComponent::USensorsManagerComponent()
 
   23    PrimaryComponentTick.bCanEverTick = 
false;
 
   26USensorsManagerComponent::~USensorsManagerComponent()
 
   30ALidar* USensorsManagerComponent::SpawnLidar(
const FTransform& transform, 
bool isTransformRelativeToComponent, 
const FString sensorIdentifier, 
const FString sensorName, 
FLidarParameters lidarParameters, 
bool simulateSensor, 
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
 
   33    if (!attachToComponent && !attachToBone.IsNone())
 
   35        attachToComponent = GetOwner()->GetRootComponent();
 
   38    FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
 
   46    SpawnParams.
Parent = GetOwner();
 
   57    ASensor* CastedSensor = Cast<ASensor>(lidar);
 
   59    AddSensorDestroyListener(CastedSensor);
 
   61    AttachSensor(CastedSensor, attachToComponent, attachToBone);
 
   63    Lidars.Emplace(lidar);
 
   66    OnLidarSpawned.Broadcast(lidar);
 
   67    OnSensorSpawned.Broadcast(CastedSensor);
 
   72ACamera* USensorsManagerComponent::SpawnCamera(
const FTransform& transform, 
bool isTransformRelativeToComponent, 
const FString sensorIdentifier, 
const FString sensorName, 
FCameraBaseParameters cameraParameters, 
bool simulateSensor, 
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
 
   75    if (!attachToComponent && !attachToBone.IsNone())
 
   77        attachToComponent = GetOwner()->GetRootComponent();
 
   80    FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
 
   87    SpawnParams.
Parent = GetOwner();
 
   98    ASensor* CastedSensor = Cast<ASensor>(camera);
 
  100    AttachSensor(CastedSensor, attachToComponent, attachToBone);
 
  102    AddSensorDestroyListener(CastedSensor);
 
  104    Cameras.Emplace(camera);
 
  109    OnCameraSpawned.Broadcast(camera);
 
  110    OnSensorSpawned.Broadcast(CastedSensor);
 
  115AThermalCamera* USensorsManagerComponent::SpawnThermalCamera(
const FTransform& transform, 
bool isTransformRelativeToComponent, 
const FString sensorIdentifier, 
const FString sensorName, 
FThermalCameraParameters thermalCameraParameters, 
bool simulateSensor, 
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
 
  119    if (!attachToComponent && !attachToBone.IsNone())
 
  121        attachToComponent = GetOwner()->GetRootComponent();
 
  124    FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
 
  131    SpawnParams.
Parent = GetOwner();
 
  142    ASensor* CastedSensor = Cast<ASensor>(thermalCamera);
 
  144    AttachSensor(CastedSensor, attachToComponent, attachToBone);
 
  146    AddSensorDestroyListener(CastedSensor);
 
  148    ThermalCameras.Emplace(thermalCamera);
 
  151    thermalCamera->
OnCameraWindowClosed.AddDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
 
  153    OnThermalCameraSpawned.Broadcast(thermalCamera);
 
  154    OnSensorSpawned.Broadcast(CastedSensor);
 
  156    return thermalCamera;
 
  159ADVSCamera* USensorsManagerComponent::SpawnDVSCamera(
const FTransform& transform, 
bool isTransformRelativeToComponent, 
const FString sensorIdentifier, 
const FString sensorName, 
FDVSCameraParameters DVSCameraParameters, 
bool simulateSensor, 
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
 
  162    if (!attachToComponent && !attachToBone.IsNone())
 
  164        attachToComponent = GetOwner()->GetRootComponent();
 
  167    FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
 
  174    SpawnParams.
Parent = GetOwner();
 
  183    createdModel = 
DVSCamera->GetSensorModel();
 
  185    ASensor* CastedSensor = Cast<ASensor>(DVSCamera);
 
  187    AttachSensor(CastedSensor, attachToComponent, attachToBone);
 
  189    AddSensorDestroyListener(CastedSensor);
 
  191    DVSCameras.Emplace(DVSCamera);
 
  194    DVSCamera->OnCameraWindowClosed.AddDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
 
  196    OnDVSCameraSpawned.Broadcast(DVSCamera);
 
  197    OnSensorSpawned.Broadcast(CastedSensor);
 
  202ASemanticSegmentationCamera* USensorsManagerComponent::SpawnSegmentationCamera(
const FTransform& transform, 
bool isTransformRelativeToComponent, 
const FString sensorIdentifier, 
const FString sensorName, 
FCameraBaseParameters cameraParameters, 
bool simulateSensor, 
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
 
  205    if (!attachToComponent && !attachToBone.IsNone())
 
  207        attachToComponent = GetOwner()->GetRootComponent();
 
  210    FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
 
  217    SpawnParams.
Parent = GetOwner();
 
  221    if (!segmentationCamera)
 
  228    ASensor* CastedSensor = Cast<ASensor>(segmentationCamera);
 
  230    AttachSensor(CastedSensor, attachToComponent, attachToBone);
 
  232    AddSensorDestroyListener(CastedSensor);
 
  234    SegmentationCameras.Emplace(segmentationCamera);
 
  237    segmentationCamera->
OnCameraWindowClosed.AddDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
 
  239    OnSegmentationCameraSpawned.Broadcast(segmentationCamera);
 
  240    OnSensorSpawned.Broadcast(CastedSensor);
 
  242    return segmentationCamera;
 
  245AInstanceSegmentationCamera* USensorsManagerComponent::SpawnInstanceSegmentationCamera(
const FTransform& transform, 
bool isTransformRelativeToComponent, 
const FString sensorIdentifier, 
const FString sensorName, 
FCameraBaseParameters CameraParameters, 
bool simulateSensor, 
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
 
  248    if (!attachToComponent && !attachToBone.IsNone())
 
  250        attachToComponent = GetOwner()->GetRootComponent();
 
  253    FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
 
  260    SpawnParams.
Parent = GetOwner();
 
  264    if (!InstanceSegmentationCamera)
 
  271    ASensor* CastedSensor = Cast<ASensor>(InstanceSegmentationCamera);
 
  273    AttachSensor(CastedSensor, attachToComponent, attachToBone);
 
  275    AddSensorDestroyListener(CastedSensor);
 
  277    InstanceSegmentationCameras.Emplace(InstanceSegmentationCamera);
 
  282    OnInstanceSegmentationCameraSpawned.Broadcast(InstanceSegmentationCamera);
 
  283    OnSensorSpawned.Broadcast(CastedSensor);
 
  288ADepthCamera* USensorsManagerComponent::SpawnDepthCamera(
const FTransform& transform, 
bool isTransformRelativeToComponent, 
const FString sensorIdentifier, 
const FString sensorName, 
FDepthCameraParameters DepthCameraParameters, 
bool simulateSensor, 
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
 
  291    if (!attachToComponent && !attachToBone.IsNone())
 
  293        attachToComponent = GetOwner()->GetRootComponent();
 
  296    FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
 
  303    SpawnParams.
Parent = GetOwner();
 
  314    ASensor* CastedSensor = Cast<ASensor>(depthCamera);
 
  316    AttachSensor(CastedSensor, attachToComponent, attachToBone);
 
  318    AddSensorDestroyListener(CastedSensor);
 
  320    DepthCameras.Emplace(depthCamera);
 
  323    depthCamera->
OnCameraWindowClosed.AddDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
 
  325    OnDepthCameraSpawned.Broadcast(depthCamera);
 
  326    OnSensorSpawned.Broadcast(CastedSensor);
 
  331ARadar* USensorsManagerComponent::SpawnRadar(
const FTransform& transform, 
bool isTransformRelativeToComponent, 
const FString sensorIdentifier, 
const FString sensorName, 
FRadarParameters radarParameters, 
bool simulateSensor, 
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
 
  334    if (!attachToComponent && !attachToBone.IsNone())
 
  336        attachToComponent = GetOwner()->GetRootComponent();
 
  339    FTransform sensorTransform = isTransformRelativeToComponent ? GetSensorAttachmentTransform(transform, attachToComponent, attachToBone) : transform;
 
  346    SpawnParams.
Parent = GetOwner();
 
  357    ASensor* CastedSensor = Cast<ASensor>(radar);
 
  359    AttachSensor(CastedSensor, attachToComponent, attachToBone);
 
  361    AddSensorDestroyListener(CastedSensor);
 
  363    Radars.Emplace(radar);
 
  366    OnRadarSpawned.Broadcast(radar);
 
  367    OnSensorSpawned.Broadcast(CastedSensor);
 
  372ASensor* USensorsManagerComponent::SpawnSensor(
const FTransform& transform, 
bool isTransformRelativeToComponent, 
const FString sensorIdentifier, 
const FString sensorName, 
ESensorTypes sensorType, 
bool simulateSensor, 
ASensorModel*& createdModel, USceneComponent* attachToComponent, FName attachToBone)
 
  379            sensor = Cast<ASensor>(SpawnLidar(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName, 
FLidarParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
 
  382            sensor = Cast<ASensor>(SpawnCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName, 
FCameraBaseParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
 
  385            sensor = Cast<ASensor>(SpawnThermalCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName, 
FThermalCameraParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
 
  388            sensor = Cast<ASensor>(SpawnDVSCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName, 
FDVSCameraParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
 
  391            sensor = Cast<ASensor>(SpawnSegmentationCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName, 
FCameraBaseParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
 
  394            sensor = Cast<ASensor>(SpawnDepthCamera(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName, 
FDepthCameraParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
 
  397            sensor = Cast<ASensor>(SpawnRadar(transform, isTransformRelativeToComponent, sensorIdentifier, sensorName, 
FRadarParameters(), simulateSensor, createdModel, attachToComponent, attachToBone));
 
  406void USensorsManagerComponent::DestroyLidar(
ALidar* lidarToDestroy)
 
  411        Lidars.Remove(lidarToDestroy);
 
  413        ASensor* CastedSensor = Cast<ASensor>(lidarToDestroy);
 
  415        RemoveSensorDestroyListener(CastedSensor);
 
  418        DestroySensorActor(CastedSensor);
 
  420        OnLidarDestroyed.Broadcast(sensorIdentifier);
 
  425void USensorsManagerComponent::DestroyCamera(
ACamera* cameraToDestroy)
 
  431        cameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
 
  432        Cameras.Remove(cameraToDestroy);
 
  434        ASensor* CastedSensor = Cast<ASensor>(cameraToDestroy);
 
  436        RemoveSensorDestroyListener(CastedSensor);
 
  439        DestroySensorActor(CastedSensor);
 
  441        OnCameraDestroyed.Broadcast(sensorIdentifier);
 
  446void USensorsManagerComponent::DestroyThermalCamera(
AThermalCamera* thermalCameraToDestroy)
 
  448    if (thermalCameraToDestroy)
 
  452        thermalCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
 
  453        ThermalCameras.Remove(thermalCameraToDestroy);
 
  455        ASensor* CastedSensor = Cast<ASensor>(thermalCameraToDestroy);
 
  457        RemoveSensorDestroyListener(CastedSensor);
 
  460        DestroySensorActor(CastedSensor);
 
  462        OnThermalCameraDestroyed.Broadcast(sensorIdentifier);
 
  467void USensorsManagerComponent::DestroyDVSCamera(
ADVSCamera* DVSCameraToDestroy)
 
  469    if (DVSCameraToDestroy)
 
  473        DVSCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
 
  474        DVSCameras.Remove(DVSCameraToDestroy);
 
  476        ASensor* CastedSensor = Cast<ASensor>(DVSCameraToDestroy);
 
  478        RemoveSensorDestroyListener(CastedSensor);
 
  481        DestroySensorActor(CastedSensor);
 
  483        OnDVSCameraDestroyed.Broadcast(sensorIdentifier);
 
  490    if (segmentationCameraToDestroy)
 
  494        segmentationCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
 
  495        SegmentationCameras.Remove(segmentationCameraToDestroy);
 
  497        ASensor* CastedSensor = Cast<ASensor>(segmentationCameraToDestroy);
 
  499        RemoveSensorDestroyListener(CastedSensor);
 
  502        DestroySensorActor(CastedSensor);
 
  504        OnSegmentationCameraDestroyed.Broadcast(sensorIdentifier);
 
  509void USensorsManagerComponent::DestroyDepthCamera(
ADepthCamera* depthCameraToDestroy)
 
  511    if (depthCameraToDestroy)
 
  515        depthCameraToDestroy->
OnCameraWindowClosed.RemoveDynamic(
this, &USensorsManagerComponent::OnCameraWindowClosed);
 
  516        DepthCameras.Remove(depthCameraToDestroy);
 
  518        ASensor* CastedSensor = Cast<ASensor>(depthCameraToDestroy);
 
  520        RemoveSensorDestroyListener(CastedSensor);
 
  523        DestroySensorActor(CastedSensor);
 
  525        OnDepthCameraDestroyed.Broadcast(sensorIdentifier);
 
  530void USensorsManagerComponent::DestroyRadar(
ARadar* radarToDestroy)
 
  536        Radars.Remove(radarToDestroy);
 
  538        ASensor* CastedSensor = Cast<ASensor>(radarToDestroy);
 
  540        RemoveSensorDestroyListener(CastedSensor);
 
  543        DestroySensorActor(CastedSensor);
 
  545        OnRadarDestroyed.Broadcast(sensorIdentifier);
 
  550void USensorsManagerComponent::DestroySensor(
ASensor* sensorToDestroy)
 
  559                DestroyLidar(Cast<ALidar>(sensorToDestroy));
 
  562                DestroyCamera(Cast<ACamera>(sensorToDestroy));
 
  565                DestroyThermalCamera(Cast<AThermalCamera>(sensorToDestroy));
 
  568                DestroyDVSCamera(Cast<ADVSCamera>(sensorToDestroy));
 
  571                DestroySegmentationCamera(Cast<ASemanticSegmentationCamera>(sensorToDestroy));
 
  574                DestroyDepthCamera(Cast<ADepthCamera>(sensorToDestroy));
 
  577                DestroyRadar(Cast<ARadar>(sensorToDestroy));
 
  585void USensorsManagerComponent::DestroyAllSensors()
 
  587    TArray<ASensor*> SensorsTempArray = 
Sensors;
 
  589    for (
const auto& sensor : SensorsTempArray)
 
  591        DestroySensor(sensor);
 
  595FTransform USensorsManagerComponent::SensorRelativeTransformToWorld(
const FTransform& relativeTransform)
 
  597    AActor* owner = GetOwner();
 
  598    return relativeTransform * owner->GetActorTransform();
 
  601FTransform USensorsManagerComponent::SensorRelativeTransformToComponentWorld(
const FTransform& relativeTransform, 
const FTransform& componentTransformWorld)
 
  603    return relativeTransform * componentTransformWorld;
 
  606FTransform USensorsManagerComponent::GetSensorAttachmentTransform(
const FTransform& sensorRelativeTransform, USceneComponent* attachToComponent, 
const FName& attachToBone, 
bool revertScaleToVectorOne)
 
  608    FTransform worldTransform;
 
  611    if (attachToComponent)
 
  613        worldTransform = SensorRelativeTransformToComponentWorld(sensorRelativeTransform, attachToComponent->GetSocketTransform(attachToBone));
 
  617        worldTransform = SensorRelativeTransformToWorld(sensorRelativeTransform);
 
  620    if (revertScaleToVectorOne)
 
  622        worldTransform.SetScale3D(FVector(1, 1, 1));
 
  625    return worldTransform;
 
  628USceneComponent* USensorsManagerComponent::GetComponentByHierarchyName(FString hierarchyName)
 
  632    TArray<FString> componentNames;
 
  634    AActor* owner = GetOwner();
 
  637    USceneComponent* matchingComponent = owner->GetRootComponent();
 
  640    hierarchyName.ParseIntoArray(componentNames, *ComponentHierarchySeparator, 
true);
 
  642    if (componentNames.Num() > 0)
 
  645        FString initialComponentName = componentNames[0];
 
  646        USceneComponent* initialComponent = 
nullptr;
 
  647        bool skipFirstComponentName = 
true;
 
  649        TArray<USceneComponent*> ownerComponents;
 
  650        owner->GetComponents<USceneComponent>(ownerComponents);
 
  653        for (USceneComponent* childComponent : ownerComponents)
 
  655            if (childComponent && childComponent->GetName() == initialComponentName)
 
  657                initialComponent = childComponent;
 
  658                matchingComponent = initialComponent;
 
  663        if (!initialComponent)
 
  667            initialComponent = owner->GetRootComponent();
 
  669            skipFirstComponentName = 
false;
 
  672        USceneComponent* currentComponent = initialComponent;
 
  675        if (currentComponent && componentNames.Num() > (skipFirstComponentName ? 1 : 0))
 
  678            bool bComponentFound = 
false;
 
  681            for (int32 i = (skipFirstComponentName ? 1 : 0); i < componentNames.Num(); ++i)
 
  683                FString componentName = componentNames[i];
 
  685                bComponentFound = 
false;
 
  688                for (USceneComponent* childComponent : currentComponent->GetAttachChildren())
 
  690                    FString childComponentName = childComponent->GetName();
 
  695                    if (childComponent && childComponent->GetName() == componentName)
 
  698                        currentComponent = childComponent;
 
  699                        bComponentFound = 
true;
 
  706                if (!bComponentFound)
 
  709                    UE_LOG(LogTemp, Warning, TEXT(
"Component '%s' not found. Breaking out of the loop"), *componentName);
 
  718                FString foundComponentName = currentComponent->GetName();
 
  719                matchingComponent = currentComponent;
 
  724                UE_LOG(LogTemp, Warning, TEXT(
"Component not found"));
 
  729    return matchingComponent;
 
  732void USensorsManagerComponent::AttachSensorToOwner(
ASensor* sensor)
 
  735    AActor* owner = GetOwner();
 
  738    AttachSensorToActor(sensor, owner);
 
  741void USensorsManagerComponent::AttachSensorToActor(
ASensor* sensor, AActor* attachToActor)
 
  743    if (sensor && attachToActor)
 
  745        sensor->AttachToActor(attachToActor, FAttachmentTransformRules::KeepWorldTransform);
 
  751void USensorsManagerComponent::AttachSensorToBone(
ASensor* sensor, USceneComponent* attachToComponent, 
const FName& boneName)
 
  753    if (!sensor || !attachToComponent)
 
  758    if (IsValid(attachToComponent))
 
  760        sensor->AttachToComponent(attachToComponent, FAttachmentTransformRules::KeepWorldTransform, boneName);
 
  762        USceneComponent* currentParentComponent = attachToComponent->GetAttachParent();
 
  765        FString fullComponentName = attachToComponent->GetName();
 
  768        if (currentParentComponent)
 
  770            fullComponentName = attachToComponent->GetName();
 
  773            while (currentParentComponent && currentParentComponent->GetAttachParent())
 
  775                FString ParentComponentName = currentParentComponent->GetName();
 
  778                fullComponentName = FString::Format(TEXT(
"{0}{1}{2}"), { *ParentComponentName, *ComponentHierarchySeparator, *fullComponentName });
 
  781                currentParentComponent = currentParentComponent->GetAttachParent();
 
  792void USensorsManagerComponent::AttachSensor(
ASensor* sensor, USceneComponent* attachToComponent, 
const FName& boneName)
 
  795    if (IsValid(attachToComponent) || !boneName.IsNone())
 
  797        AttachSensorToBone(sensor, attachToComponent, boneName);
 
  801        AttachSensorToOwner(sensor);
 
  805void USensorsManagerComponent::DestroySensorActor(AActor* sensorActor)
 
  812    TArray<AActor*> attachedActors;
 
  813    sensorActor->GetAttachedActors(attachedActors);
 
  815    for (AActor* CActor : attachedActors)
 
  823    sensorActor->Destroy();
 
  830    for (
const auto& LidarData : preset.
LidarDatas)
 
  835        USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
 
  840        SpawnLidar(sensorTransform, 
true, sensorData.
SensorIdentifier, sensorData.
SensorName, LidarData.LidarParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
 
  843    for (
const auto& RadarData : preset.
RadarDatas)
 
  848        USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
 
  853        SpawnRadar(sensorTransform, 
true, sensorData.
SensorIdentifier, sensorData.
SensorName, RadarData.RadarParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
 
  862        USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
 
  867        SpawnCamera(sensorTransform, 
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
 
  876        USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
 
  881        SpawnThermalCamera(sensorTransform, 
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
 
  890        USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
 
  895        SpawnDVSCamera(sensorTransform, 
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.DVSCameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
 
  904        USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
 
  909        SpawnSegmentationCamera(sensorTransform, 
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
 
  918        USceneComponent* attachToComponent = GetComponentByHierarchyName(sensorData.
AttachedToComponent);
 
  923        SpawnDepthCamera(sensorTransform, 
true, sensorData.
SensorIdentifier, sensorData.
SensorName, CameraData.CameraParameters, simulateSensors, createdModel, attachToComponent, attachToBone);
 
  931    for (
const auto& Lidar : Lidars)
 
  933        FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(Lidar));
 
  941    for (
const auto& Radar : Radars)
 
  943        FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(Radar));
 
  951    for (
const auto& Camera : Cameras)
 
  953        FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(Camera));
 
  960    for (
const auto& ThermalCamera : ThermalCameras)
 
  962        FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(ThermalCamera));
 
  969    for (
const auto& DVSCamera : DVSCameras)
 
  971        FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(DVSCamera));
 
  978    for (
const auto& SegmentationCamera : SegmentationCameras)
 
  980        FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(SegmentationCamera));
 
  987    for (
const auto& DepthCamera : DepthCameras)
 
  989        FSensorPreset sensorPreset = GetSensorPreset(Cast<ASensor>(DepthCamera));
 
 1003    FTransform relativeTransform = sensor->GetRootComponent()->GetRelativeTransform();
 
 1005    sensorPreset.
Location = relativeTransform.GetLocation();
 
 1006    sensorPreset.
Rotation = relativeTransform.Rotator();
 
 1013    return sensorPreset;
 
 1016void USensorsManagerComponent::AddSensorDestroyListener(
ASensor* sensor)
 
 1020        sensor->
OnSensorDestroy.AddDynamic(
this, &USensorsManagerComponent::OnSensorDestroy);
 
 1024void USensorsManagerComponent::RemoveSensorDestroyListener(
ASensor* sensor)
 
 1028        sensor->
OnSensorDestroy.RemoveDynamic(
this, &USensorsManagerComponent::OnSensorDestroy);
 
 1032void USensorsManagerComponent::OnCameraWindowClosed(
ACamera* camera)
 
 1036        ASensor* CastedSensor = Cast<ASensor>(camera);
 
 1037        DestroySensor(CastedSensor);
 
 1041void USensorsManagerComponent::OnSensorDestroy(
ASensor* sensor)
 
 1046        DestroySensor(sensor);
 
@ SemanticSegmentationCamera
 
@ InstanceSegmentationCamera
 
FCameraDelegate_OnWindowClosed OnCameraWindowClosed
 
FSensorDestroy OnSensorDestroy
 
FString GetSensorIdentifier() const
 
FString GetSensorName() const
 
virtual ESensorTypes GetSensorType() const
 
FString AttachedToComponent
 
ASensorModel * GetSensorModel() const
 
static AInstanceSegmentationCamera * SpawnInstanceSegmentationCamera(const FSensorSpawnParameters SpawnParameters, FCameraBaseParameters SensorParameters)
 
static AThermalCamera * SpawnThermalCamera(const FSensorSpawnParameters SpawnParameters, FThermalCameraParameters SensorParameters)
 
static ASemanticSegmentationCamera * SpawnSegmentationCamera(const FSensorSpawnParameters SpawnParameters, FCameraBaseParameters SensorParameters)
 
static ARadar * SpawnRadar(const FSensorSpawnParameters SpawnParameters, FRadarParameters SensorParameters)
 
static ACamera * SpawnCamera(const FSensorSpawnParameters SpawnParameters, FCameraBaseParameters SensorParameters)
 
static ADepthCamera * SpawnDepthCamera(const FSensorSpawnParameters SpawnParameters, FDepthCameraParameters SensorParameters)
 
static ADVSCamera * SpawnDVSCamera(const FSensorSpawnParameters SpawnParameters, FDVSCameraParameters SensorParameters)
 
static ALidar * SpawnLidarSensor(const FSensorSpawnParameters SpawnParameters, FLidarParameters SensorParameters)
 
FCameraBaseParameters CameraParameters
 
FDVSCameraParameters DVSCameraParameters
 
FDepthCameraParameters CameraParameters
 
FLidarParameters LidarParameters
 
FRadarParameters RadarParameters
 
FCameraBaseParameters CameraParameters
 
FString AttachedToComponent
 
FThermalCameraParameters CameraParameters
 
TArray< FRadarPreset > RadarDatas
 
TArray< FLidarPreset > LidarDatas
 
TArray< FThermalCameraPreset > ThermalCameraDatas
 
TArray< FDVSCameraPreset > DVSCameraDatas
 
TArray< FSemanticSegmentationCameraPreset > SegmentationCameraDatas
 
TArray< FCameraPreset > CameraDatas
 
TArray< FDepthCameraPreset > DepthCameraDatas