Agrarsense
Static Public Member Functions | Static Private Member Functions | Static Private Attributes | List of all members
USensorFactory Class Reference

#include <SensorFactory.h>

Inheritance diagram for USensorFactory:
Inheritance graph
[legend]
Collaboration diagram for USensorFactory:
Collaboration graph
[legend]

Static Public Member Functions

static USensorMapDataAssetGetSensorMapDataAsset ()
 
static ALidarSpawnLidarSensor (const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FLidarParameters lidarParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
 
static ACameraSpawnCamera (const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FCameraBaseParameters cameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
 
static AThermalCameraSpawnThermalCamera (const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FThermalCameraParameters thermalCameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
 
static ADepthCameraSpawnDepthCamera (const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FDepthCameraParameters depthCameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
 
static ASemanticSegmentationCameraSpawnSegmentationCamera (const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FCameraBaseParameters cameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
 
static ADVSCameraSpawnDVSCamera (const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FDVSCameraParameters DVSCameraParameters, bool SimulateSensor, AActor *Parent=nullptr)
 
static ARadarSpawnRadar (const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FRadarParameters radarParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
 
static ACollisionSensorSpawnCollisionSensor (const FTransform &transform, AActor *Owner, const FString sensorIdentifier, const FString sensorName, bool SimulateSensor=true, AActor *Parent=nullptr)
 
static ATransformSensorSpawnTransformSensor (const FTransform &transform, FTransformSensorParameters Parameters, const FString sensorIdentifier, const FString sensorName, bool SimulateSensor=true, AActor *Parent=nullptr)
 
static AOverlapSensorSpawnOverlapSensor (const FTransform &transform, FOverlapSensorParameters Parameters, const FString sensorIdentifier, const FString sensorName, AActor *Parent=nullptr)
 

Static Private Member Functions

template<typename T >
static T * SpawnSensor (const FTransform &transform, const FString &sensorIdentifier, const FString &sensorName, bool SpawnSensorModel=true, AActor *Parent=nullptr)
 
static void SetSensorIdentifierAndNameWithFallbacks (ASensor *sensor, const FString &sensorIdentifier, const FString &sensorName)
 
static ASensorModelSpawnModelClassForSensor (ASensor *attachTo)
 
static ASensorModelSpawnModelClass (TSubclassOf< ASensorModel > modelClass, ASensor *attachTo)
 
static void Initialize ()
 

Static Private Attributes

static TWeakObjectPtr< USensorMapDataAssetSensorMapDataAsset
 

Detailed Description

SensorFactory is a UBlueprintFunctionLibrary based class in charge of spawning sensors. Sensors should not be spawned in any other way. Note. This Factory only works during runtime, don't call these functions in Editor without play mode on.

Definition at line 43 of file SensorFactory.h.

Member Function Documentation

◆ GetSensorMapDataAsset()

USensorMapDataAsset * USensorFactory::GetSensorMapDataAsset ( )
static

Definition at line 50 of file SensorFactory.cpp.

51{
52 Initialize();
53
54 if (SensorMapDataAsset.IsValid())
55 {
56 return SensorMapDataAsset.Get();
57 }
58 else
59 {
60 return nullptr;
61 }
62}
static void Initialize()
static TWeakObjectPtr< USensorMapDataAsset > SensorMapDataAsset

References Initialize(), and SensorMapDataAsset.

Referenced by SpawnModelClassForSensor().

◆ Initialize()

void USensorFactory::Initialize ( )
staticprivate

Initialize the factory. Should be called before using data or calling functions

Definition at line 27 of file SensorFactory.cpp.

28{
29 if (SensorMapDataAsset.IsValid())
30 {
31 return;
32 }
33
34 SensorMapDataAsset.Reset();
35 FSoftObjectPath SensorMapDataAssetPath(TEXT("/Game/Agrarsense/Data/Sensors/SensorMap"));
36 SensorMapDataAsset = Cast<USensorMapDataAsset>(SensorMapDataAssetPath.TryLoad());
37
38#if WITH_EDITOR
39 if (SensorMapDataAsset.IsValid())
40 {
41 UE_LOG(LogTemp, Warning, TEXT("USensorFactory.cpp: Loaded SensorMapDataAsset successfully."));
42 }
43 else
44 {
45 UE_LOG(LogTemp, Warning, TEXT("USensorFactory.cpp: Loading SensorMapDataAsset failed."));
46 }
47#endif
48}

References SensorMapDataAsset.

Referenced by GetSensorMapDataAsset().

◆ SetSensorIdentifierAndNameWithFallbacks()

void USensorFactory::SetSensorIdentifierAndNameWithFallbacks ( ASensor sensor,
const FString &  sensorIdentifier,
const FString &  sensorName 
)
staticprivate

Set sensor name and identifier but fallback to default values if sensor name and/or sensor identifier are empty.

Parameters
sensorSensor which name and identifier to change
sensorIdentifierSensor new identifier (empty identifier not accepted)
sensorNameSensor new name (empty name not accepted)

Definition at line 64 of file SensorFactory.cpp.

65{
66 bool generateIdentifier = sensorIdentifier.IsEmpty();
67 bool generateName = sensorName.IsEmpty();
68
69 FString generatedSensorIdentifier;
70
71 // If ID not given, use ESensorTypes as the ID
72 // and let the ActorInformation-interface handle the numbering after that
73 if (generateIdentifier)
74 {
75 generatedSensorIdentifier = UEnumUtilities::ConvertSensorTypeToString(sensor->GetSensorType());
76 }
77
78 // If not using generated name -> set the given sensor name
79 if (!generateName)
80 {
81 sensor->SetSensorName(sensorName);
82 }
83
84 sensor->SetSensorIdentifier(generateIdentifier ? generatedSensorIdentifier : sensorIdentifier);
85
86 // If using generated name -> use the identifier as the name too
87 if (generateName)
88 {
89 sensor->SetSensorName(sensor->GetSensorIdentifier());
90 }
91}
void SetSensorName(const FString newName)
Definition: Sensor.h:123
FString GetSensorIdentifier() const
Definition: Sensor.h:75
virtual ESensorTypes GetSensorType() const
Definition: Sensor.h:65
void SetSensorIdentifier(const FString newIdentifier)
Definition: Sensor.h:85
static FString ConvertSensorTypeToString(ESensorTypes Sensortype)

References UEnumUtilities::ConvertSensorTypeToString(), ASensor::GetSensorIdentifier(), ASensor::GetSensorType(), ASensor::SetSensorIdentifier(), and ASensor::SetSensorName().

Referenced by SpawnSensor().

◆ SpawnCamera()

ACamera * USensorFactory::SpawnCamera ( const FTransform &  transform,
const FString  sensorIdentifier,
const FString  sensorName,
FCameraBaseParameters  cameraParameters,
bool  SimulateSensor = true,
AActor *  Parent = nullptr 
)
static

Spawn new Camera sensor. BlueprintCallable.

Parameters
FTransformlocation to spawn sensor
FStringSensor's unique identifier
FStringSensor's name
FCameraBaseParametersFCameraBaseParameters parameters struct
boolShould the sensor start simulating after spawn
Returns
ACamera pointer or nullptr

Definition at line 105 of file SensorFactory.cpp.

106{
107 ACamera* RGBCamera = nullptr;
108 RGBCamera = SpawnSensor<ACamera>(transform, sensorIdentifier, sensorName, true, Parent);
109 if (RGBCamera)
110 {
111 RGBCamera->Init(cameraParameters, SimulateSensor);
112 }
113
114 return RGBCamera;
115}
Definition: Camera.h:53

References RGBCamera.

◆ SpawnCollisionSensor()

ACollisionSensor * USensorFactory::SpawnCollisionSensor ( const FTransform &  transform,
AActor *  Owner,
const FString  sensorIdentifier,
const FString  sensorName,
bool  SimulateSensor = true,
AActor *  Parent = nullptr 
)
static

Spawn new Collision sensor. BlueprintCallable.

Parameters
FTransformlocation to spawn sensor
AActor*Owning actor
boolShould the sensor start simulating after spawn
Returns
ACollisionSensor pointer or nullptr

Definition at line 177 of file SensorFactory.cpp.

178{
179 ACollisionSensor* CollisionSensor = nullptr;
180 if (Owner)
181 {
182 CollisionSensor = SpawnSensor<ACollisionSensor>(transform, sensorIdentifier, sensorName, false, Parent);
183 if (CollisionSensor)
184 {
185 CollisionSensor->Init(Owner, SimulateSensor);
186 CollisionSensor->AttachToActor(Owner, FAttachmentTransformRules::KeepWorldTransform);
187 }
188 }
189
190 return CollisionSensor;
191}
void Init(AActor *NewOwner, bool SimulateSensor=true)

References ACollisionSensor::Init().

Referenced by AVehicle::BeginPlay().

◆ SpawnDepthCamera()

ADepthCamera * USensorFactory::SpawnDepthCamera ( const FTransform &  transform,
const FString  sensorIdentifier,
const FString  sensorName,
FDepthCameraParameters  depthCameraParameters,
bool  SimulateSensor = true,
AActor *  Parent = nullptr 
)
static

Spawn new Camera sensor. BlueprintCallable.

Parameters
FTransformlocation to spawn sensor
FStringSensor's unique identifier
FStringSensor's name
FCameraBaseParametersFCameraBaseParameters parameters struct
boolShould the sensor start simulating after spawn
Returns
ADepthCamera pointer or nullptr

Definition at line 129 of file SensorFactory.cpp.

130{
131 ADepthCamera* DepthCamera = nullptr;
132 DepthCamera = SpawnSensor<ADepthCamera>(transform, sensorIdentifier, sensorName, true, Parent);
133 if (DepthCamera)
134 {
135 DepthCamera->DepthInit(depthCameraParameters, SimulateSensor);
136 }
137
138 return DepthCamera;
139}

References DepthCamera.

◆ SpawnDVSCamera()

ADVSCamera * USensorFactory::SpawnDVSCamera ( const FTransform &  transform,
const FString  sensorIdentifier,
const FString  sensorName,
FDVSCameraParameters  DVSCameraParameters,
bool  SimulateSensor,
AActor *  Parent = nullptr 
)
static

Spawn new Camera sensor. BlueprintCallable.

Parameters
FTransformlocation to spawn sensor
FStringSensor's unique identifier
FStringSensor's name
FCameraBaseParametersFCameraBaseParameters parameters struct
boolShould the sensor start simulating after spawn
Returns
ADVSCamera pointer or nullptr

Definition at line 153 of file SensorFactory.cpp.

154{
155 ADVSCamera* DVSCamera = nullptr;
156 DVSCamera = SpawnSensor<ADVSCamera>(transform, sensorIdentifier, sensorName, true, Parent);
157 if (DVSCamera)
158 {
159 DVSCamera->DVSInit(DVSCameraParameters, SimulateSensor);
160 }
161
162 return DVSCamera;
163}

References DVSCamera.

◆ SpawnLidarSensor()

ALidar * USensorFactory::SpawnLidarSensor ( const FTransform &  transform,
const FString  sensorIdentifier,
const FString  sensorName,
FLidarParameters  lidarParameters,
bool  SimulateSensor = true,
AActor *  Parent = nullptr 
)
static

Spawn new Lidar sensor. BlueprintCallable.

Parameters
FTransformlocation to spawn sensor
FStringSensor's unique identifier
FStringSensor's name
FLidarParametersFLidarParameters parameters struct
boolShould the sensor start simulating after spawn
Returns
ALidar pointer or nullptr

Definition at line 93 of file SensorFactory.cpp.

94{
95 ALidar* LidarSensor = nullptr;
96 LidarSensor = SpawnSensor<ALidar>(transform, sensorIdentifier, sensorName, true, Parent);
97 if (LidarSensor)
98 {
99 LidarSensor->Init(lidarParameters, SimulateSensor);
100 }
101
102 return LidarSensor;
103}
Definition: Lidar.h:35
void Init(FLidarParameters parameters, bool SimulateSensor=true)
Definition: Lidar.cpp:40

References ALidar::Init().

◆ SpawnModelClass()

ASensorModel * USensorFactory::SpawnModelClass ( TSubclassOf< ASensorModel modelClass,
ASensor attachTo 
)
staticprivate

Spawn sensor model (3D model) class attaching it to the given actor

Parameters
ModelClassASensorModel class for the sensor's model's class
attachToAttach to this sensor
Returns
Spawned model actor or nullptr

Definition at line 256 of file SensorFactory.cpp.

257{
258 ASensorModel* createdModelActor = nullptr;
259
260 if (!attachTo)
261 {
262 return createdModelActor;
263 }
264
265 UWorld* World = nullptr;
266 if (GEngine && GEngine->GameViewport)
267 {
268 World = GEngine->GameViewport->GetWorld();
269 }
270
271 if (World)
272 {
273 FVector sensorLocation = attachTo->GetActorLocation();
274 createdModelActor = World->SpawnActor<ASensorModel>(modelClass);
275
276 if (createdModelActor)
277 {
278 createdModelActor->AttachToActor(attachTo, FAttachmentTransformRules::SnapToTargetIncludingScale);
279
280 attachTo->SetSensorModel(createdModelActor);
281 createdModelActor->SetAttachedToSensor(attachTo);
282 createdModelActor->InitAfterSpawn();
283 }
284 }
285
286 return createdModelActor;
287}
void InitAfterSpawn()
void SetAttachedToSensor(ASensor *NewAttachedToSensor)
Definition: SensorModel.h:38
void SetSensorModel(ASensorModel *NewSensorModel)
Definition: Sensor.h:191

References ASensorModel::InitAfterSpawn(), ASensorModel::SetAttachedToSensor(), and ASensor::SetSensorModel().

Referenced by SpawnModelClassForSensor().

◆ SpawnModelClassForSensor()

ASensorModel * USensorFactory::SpawnModelClassForSensor ( ASensor attachTo)
staticprivate

Spawn sensor model (3D model) class attaching it to the given actor

Parameters
attachToSensor to attach to
Returns
Spawned model actor or nullptr

Definition at line 221 of file SensorFactory.cpp.

222{
223 ASensorModel* spawnedModel = nullptr;
224
225 if (!attachTo)
226 {
227 return spawnedModel;
228 }
229
231
232 if (SensorMap)
233 {
234 ESensorTypes sensorType = attachTo->GetSensorType();
235
236 TSubclassOf<ASensorModel> modelClass = nullptr;
237
238 bool matchFound;
239
240 USensorDataAsset* sensorData = SensorMap->GetAssetDataBySensorType(sensorType, matchFound);
241
242 if (matchFound && sensorData)
243 {
244 modelClass = sensorData->ModelClass;
245 }
246
247 if (modelClass)
248 {
249 spawnedModel = SpawnModelClass(modelClass, attachTo);
250 }
251 }
252
253 return spawnedModel;
254}
ESensorTypes
Definition: SensorTypes.h:15
TSubclassOf< ASensorModel > ModelClass
static USensorMapDataAsset * GetSensorMapDataAsset()
static ASensorModel * SpawnModelClass(TSubclassOf< ASensorModel > modelClass, ASensor *attachTo)
USensorDataAsset * GetAssetDataBySensorType(ESensorTypes SensorType, bool &MatchFound)

References USensorMapDataAsset::GetAssetDataBySensorType(), GetSensorMapDataAsset(), ASensor::GetSensorType(), USensorDataAsset::ModelClass, and SpawnModelClass().

Referenced by SpawnSensor().

◆ SpawnOverlapSensor()

AOverlapSensor * USensorFactory::SpawnOverlapSensor ( const FTransform &  transform,
FOverlapSensorParameters  Parameters,
const FString  sensorIdentifier,
const FString  sensorName,
AActor *  Parent = nullptr 
)
static

Spawn new Overlap sensor. BlueprintCallable. This is spawned by default on every vehicle

Parameters
FTransformlocation to spawn sensor
FOverlapSensorParameters*Overlap sensor parameters
Returns
AOverlapSensor pointer or nullptr

Definition at line 209 of file SensorFactory.cpp.

210{
211 AOverlapSensor* OverlapSensor = nullptr;
212 OverlapSensor = SpawnSensor<AOverlapSensor>(transform, sensorIdentifier, sensorName, false, Parent);
213 if (OverlapSensor)
214 {
215 OverlapSensor->Init(Parameters);
216 }
217
218 return OverlapSensor;
219}
void Init(FOverlapSensorParameters InParameters)

References AOverlapSensor::Init().

Referenced by AVehicle::BeginPlay().

◆ SpawnRadar()

ARadar * USensorFactory::SpawnRadar ( const FTransform &  transform,
const FString  sensorIdentifier,
const FString  sensorName,
FRadarParameters  radarParameters,
bool  SimulateSensor = true,
AActor *  Parent = nullptr 
)
static

Spawn new Radar sensor. BlueprintCallable.

Parameters
FTransformlocation to spawn sensor
FStringSensor's unique identifier
FStringSensor's name
FRadarParametersFRadarParameters parameters struct
boolShould the sensor start simulating after spawn
Returns
ARadar pointer or nullptr

Definition at line 165 of file SensorFactory.cpp.

166{
167 ARadar* RadarSensor = nullptr;
168 RadarSensor = SpawnSensor<ARadar>(transform, sensorIdentifier, sensorName, true, Parent);
169 if (RadarSensor)
170 {
171 RadarSensor->Init(radarParameters, SimulateSensor);
172 }
173
174 return RadarSensor;
175}
Definition: Radar.h:26
void Init(FRadarParameters parameters, bool SimulateSensor=true)
Definition: Radar.cpp:22

References ARadar::Init().

◆ SpawnSegmentationCamera()

ASemanticSegmentationCamera * USensorFactory::SpawnSegmentationCamera ( const FTransform &  transform,
const FString  sensorIdentifier,
const FString  sensorName,
FCameraBaseParameters  cameraParameters,
bool  SimulateSensor = true,
AActor *  Parent = nullptr 
)
static

Spawn new Camera sensor. BlueprintCallable.

Parameters
FTransformlocation to spawn sensor
FStringSensor's unique identifier
FStringSensor's name
FCameraBaseParametersFCameraBaseParameters parameters struct
boolShould the sensor start simulating after spawn
Returns
ASemanticSegmentationCamera pointer

Definition at line 141 of file SensorFactory.cpp.

142{
144 SemanticSegmentationCamera = SpawnSensor<ASemanticSegmentationCamera>(transform, sensorIdentifier, sensorName, true, Parent);
146 {
147 SemanticSegmentationCamera->Init(cameraParameters, SimulateSensor);
148 }
149
151}
@ SemanticSegmentationCamera

References SemanticSegmentationCamera.

◆ SpawnSensor()

template<typename T >
T * USensorFactory::SpawnSensor ( const FTransform &  transform,
const FString &  sensorIdentifier,
const FString &  sensorName,
bool  SpawnSensorModel = true,
AActor *  Parent = nullptr 
)
staticprivate

Definition at line 290 of file SensorFactory.cpp.

291{
292 UWorld* World = nullptr;
293
294 if (GEngine && GEngine->GameViewport)
295 {
296 // This might only fail if called in Editor without play mode.
297 World = GEngine->GameViewport->GetWorld();
298 }
299
300 T* Sensor = nullptr;
301
302 if (World)
303 {
304 Sensor = World->SpawnActorDeferred<T>(T::StaticClass(), transform);
305 if (Sensor)
306 {
307 SetSensorIdentifierAndNameWithFallbacks(Sensor, sensorIdentifier, sensorName);
308
309 if (Parent)
310 {
311 Sensor->SetParentActorPtr(Parent);
312 }
313
314 Sensor->FinishSpawning(transform);
315
316 if (SpawnSensorModel)
317 {
318 SpawnModelClassForSensor(Cast<ASensor>(Sensor));
319 }
320 }
321 }
322
323 return Sensor;
324}
static void SetSensorIdentifierAndNameWithFallbacks(ASensor *sensor, const FString &sensorIdentifier, const FString &sensorName)
static ASensorModel * SpawnModelClassForSensor(ASensor *attachTo)

References SetSensorIdentifierAndNameWithFallbacks(), and SpawnModelClassForSensor().

◆ SpawnThermalCamera()

AThermalCamera * USensorFactory::SpawnThermalCamera ( const FTransform &  transform,
const FString  sensorIdentifier,
const FString  sensorName,
FThermalCameraParameters  thermalCameraParameters,
bool  SimulateSensor = true,
AActor *  Parent = nullptr 
)
static

Spawn new Camera sensor. BlueprintCallable.

Parameters
FTransformlocation to spawn sensor
FStringSensor's unique identifier
FStringSensor's name
FCameraBaseParametersFCameraBaseParameters parameters struct
boolShould the sensor start simulating after spawn
Returns
AThermalCamera pointer or nullptr

Definition at line 117 of file SensorFactory.cpp.

118{
119 AThermalCamera* ThermalCamera = nullptr;
120 ThermalCamera = SpawnSensor<AThermalCamera>(transform, sensorIdentifier, sensorName, true, Parent);
121 if (ThermalCamera)
122 {
123 ThermalCamera->ThermalInit(thermalCameraParameters, SimulateSensor);
124 }
125
126 return ThermalCamera;
127}

References ThermalCamera.

◆ SpawnTransformSensor()

ATransformSensor * USensorFactory::SpawnTransformSensor ( const FTransform &  transform,
FTransformSensorParameters  Parameters,
const FString  sensorIdentifier,
const FString  sensorName,
bool  SimulateSensor = true,
AActor *  Parent = nullptr 
)
static

Spawn new Tranform sensor. BlueprintCallable. This is spawned by default on every vehicle

Parameters
FTransformlocation to spawn sensor
AActor*Owning actor
boolShould the sensor start simulating after spawn
Returns
ATransformSensor pointer or nullptr

Definition at line 193 of file SensorFactory.cpp.

194{
195 ATransformSensor* TransformSensor = nullptr;
196 if (Parameters.OwningActor)
197 {
198 TransformSensor = SpawnSensor<ATransformSensor>(transform, sensorIdentifier, sensorName, false, Parent);
199 if (TransformSensor)
200 {
201 TransformSensor->Init(Parameters, SimulateSensor);
202 TransformSensor->AttachToActor(Parameters.OwningActor, FAttachmentTransformRules::KeepWorldTransform);
203 }
204 }
205
206 return TransformSensor;
207}
void Init(FTransformSensorParameters Params, bool SimulateSensor=true)

References ATransformSensor::Init(), and FTransformSensorParameters::OwningActor.

Referenced by ASensor::BeginPlay(), APIDDrone::BeginPlay(), and AVehicle::BeginPlay().

Member Data Documentation

◆ SensorMapDataAsset

TWeakObjectPtr< USensorMapDataAsset > USensorFactory::SensorMapDataAsset
staticprivate

Sensor map data asset to hold sensor specific base data

Definition at line 214 of file SensorFactory.h.

Referenced by GetSensorMapDataAsset(), and Initialize().


The documentation for this class was generated from the following files: