12#ifndef WSFCLUSTERMANAGER_HPP
13#define WSFCLUSTERMANAGER_HPP
15#include "wsf_mil_export.h"
20#include "UtCluster.hpp"
37 mPlatformPtr =
nullptr;
39 bool VelocityValid()
override;
40 void GetLocationWCS(
double aLocationWCS[3])
override;
41 void GetLocationLLA(
double& aLat,
double& aLon,
double& aAlt)
override;
45 static void GetObjects(
const std::vector<WsfPlatform*>& platforms, std::vector<UtClusterObject*>& objects);
46 static void GetPlatforms(std::vector<UtClusterObject*>& objects, std::vector<WsfPlatform*>& platforms);
60 bool VelocityValid()
override;
61 void GetLocationWCS(
double aLocationWCS[3])
override;
62 void GetLocationLLA(
double& aLat,
double& aLon,
double& aAlt)
override;
66 static void GetObjects(
double aSimTime,
const std::vector<WsfTrack*>& tracks, std::vector<UtClusterObject*>& objects);
67 static void GetObjects(
double aSimTime,
const std::vector<WsfLocalTrack*>& tracks, std::vector<UtClusterObject*>& objects);
68 static void GetObjects(
double aSimTime,
WsfTrackList& tracks, std::vector<UtClusterObject*>& objects);
69 static void GetObjects(
double aSimTime,
WsfLocalTrackList& tracks, std::vector<UtClusterObject*>& objects);
70 static void GetTracks(std::vector<UtClusterObject*>& objects, std::vector<WsfTrack*>& tracks);
71 static void GetTracks(std::vector<UtClusterObject*>& objects, std::vector<WsfLocalTrack*>& tracks);
85 mGeoPointPtr =
nullptr;
87 bool VelocityValid()
override;
88 void GetLocationWCS(
double aLocationWCS[3])
override;
89 void GetLocationLLA(
double& aLat,
double& aLon,
double& aAlt)
override;
93 static void GetObjects(
const std::vector<WsfGeoPoint*>& geoPoints, std::vector<UtClusterObject*>& objects);
94 static void GetGeoPoints(std::vector<UtClusterObject*>& objects, std::vector<WsfGeoPoint*>& geoPoints);
108 bool VelocityValid()
override;
109 void GetLocationWCS(
double aLocationWCS[3])
override;
110 void GetLocationLLA(
double& aLat,
double& aLon,
double& aAlt)
override;
114 static void GetObjects(
const std::vector<WsfAssetPerception*>& assets, std::vector<UtClusterObject*>& objects);
115 static void GetAssets(std::vector<UtClusterObject*>& objects, std::vector<WsfAssetPerception*>& assets);
147 size_t aNumClusters = 0,
148 UtClusterManager::ClusteringMethod aMethod = UtClusterManager::cK_MEANS,
149 UtClusterManager::DistanceFunction aDistType = UtClusterManager::cPOSITION_ONLY);
157 std::vector<std::vector<WsfTrack*>>
GetTrackClusters(
const std::vector<WsfTrack*>& aList);
158 std::vector<std::vector<WsfLocalTrack*>>
GetTrackClusters(
const std::vector<WsfLocalTrack*>& aList);
159 std::vector<std::vector<WsfPlatform*>>
GetPlatformClusters(
const std::vector<WsfPlatform*>& aList);
160 std::vector<std::vector<WsfGeoPoint*>>
GetGeoPointClusters(
const std::vector<WsfGeoPoint*>& aList);
161 std::vector<std::vector<WsfAssetPerception*>>
GetAssetClusters(
const std::vector<WsfAssetPerception*>& aList);
164 void Delete(std::vector<UtClusterObject*>& objects);
168 unsigned int UniqueId(
const std::vector<WsfTrack*>& aList);
169 unsigned int UniqueId(
const std::vector<WsfPlatform*>& aList);
170 unsigned int UniqueId(
const std::vector<WsfGeoPoint*>& aList);
171 unsigned int UniqueId(
const std::vector<WsfAssetPerception*>& aList);
173 std::vector<WsfTrack*>
ConvexHull(
const std::vector<WsfTrack*>& aList);
174 std::vector<WsfPlatform*>
ConvexHull(
const std::vector<WsfPlatform*>& aList);
175 std::vector<WsfGeoPoint*>
ConvexHull(
const std::vector<WsfGeoPoint*>& aList);
176 std::vector<WsfAssetPerception*>
ConvexHull(
const std::vector<WsfAssetPerception*>& aList);
209 void CrossLength(
const std::vector<WsfTrack*>& aList,
214 void CrossLength(
const std::vector<WsfPlatform*>& aList,
219 void CrossLength(
const std::vector<WsfGeoPoint*>& aList,
224 void CrossLength(
const std::vector<WsfAssetPerception*>& aList,
235 void Draw(
const std::vector<WsfTrack*>& aList,
double duration, UtVec3d& color, DrawType type = HULL);
236 void Draw(
const std::vector<WsfPlatform*>& aList,
double duration, UtVec3d& color, DrawType type = HULL);
237 void Draw(
const std::vector<WsfGeoPoint*>& aList,
double duration, UtVec3d& color, DrawType type = HULL);
238 void Draw(
const std::vector<WsfAssetPerception*>& aList,
double duration, UtVec3d& color, DrawType type = HULL);
240 void DrawHull(std::vector<UtClusterObject*>& cluster,
double duration, UtVec3d& color);
241 void DrawStar(std::vector<UtClusterObject*>& cluster,
double duration, UtVec3d& color);
248 bool SetUserDistanceFunction(UtScriptContext* aScriptContextPtr,
const std::string& aScoringFunctionName);
249 bool UserDistanceFunction(UtClusterObject* aObjectPtr, UtClusterObject* aObject2Ptr,
double& aDistance)
override;
260 UtScriptContext* mScriptContextPtr;
261 UtScript* mScoringFunctionScriptPtr;
aObjectPtr GetVelocityWCS(vel.GetData())
WsfTrackListT< WsfLocalTrack > WsfLocalTrackList
Definition WsfTrackList.hpp:89
WsfTrackListT< WsfTrack > WsfTrackList
Definition WsfTrackList.hpp:88
WsfAssetPerception * GetAsset()
Definition WsfClusterManager.hpp:112
WsfAssetClusterObject(WsfAssetPerception *aAssetPtr)
Definition WsfClusterManager.cpp:320
~WsfAssetClusterObject() override
Definition WsfClusterManager.hpp:104
Definition WsfAssetPerception.hpp:32
WsfTrack * NearestMember(const std::vector< WsfTrack * > &aList, WsfGeoPoint &toPoint)
Definition WsfClusterManager.cpp:728
WsfSimulation * GetSimulation() const
Definition WsfClusterManager.hpp:252
std::vector< WsfTrack * > ConvexHull(const std::vector< WsfTrack * > &aList)
Definition WsfClusterManager.cpp:613
std::vector< std::vector< WsfTrack * > > GetTrackClusters(WsfTrackList &aList)
Definition WsfClusterManager.cpp:418
~WsfClusterManager() override=default
void Delete(std::vector< UtClusterObject * > &objects)
Definition WsfClusterManager.cpp:409
unsigned int UniqueId(const std::vector< WsfTrack * > &aList)
Definition WsfClusterManager.cpp:573
WsfGeoPoint MeanLocation(const std::vector< WsfTrack * > &aList)
Definition WsfClusterManager.cpp:684
std::vector< std::vector< WsfPlatform * > > GetPlatformClusters(const std::vector< WsfPlatform * > &aList)
Definition WsfClusterManager.cpp:507
std::vector< std::vector< WsfGeoPoint * > > GetGeoPointClusters(const std::vector< WsfGeoPoint * > &aList)
Definition WsfClusterManager.cpp:529
void CrossLength(const std::vector< WsfTrack * > &aList, WsfGeoPoint &refPoint, double &dist1, WsfGeoPoint &leftPt, WsfGeoPoint &rightPt)
Definition WsfClusterManager.cpp:840
WsfClusterManager(WsfSimulation &aSimulation, size_t aNumClusters=0, UtClusterManager::ClusteringMethod aMethod=UtClusterManager::cK_MEANS, UtClusterManager::DistanceFunction aDistType=UtClusterManager::cPOSITION_ONLY)
Definition WsfClusterManager.cpp:396
std::vector< std::vector< WsfAssetPerception * > > GetAssetClusters(const std::vector< WsfAssetPerception * > &aList)
Definition WsfClusterManager.cpp:551
void NearestEdgePoint(const std::vector< WsfTrack * > &aList, WsfGeoPoint &toPoint, WsfGeoPoint &edgePoint, size_t &edgeIndex1, size_t &edgeIndex2)
Definition WsfClusterManager.cpp:776
DrawType
Definition WsfClusterManager.hpp:231
@ HULL
Definition WsfClusterManager.hpp:232
@ STAR
Definition WsfClusterManager.hpp:233
Provides the capability to draw shapes into the WSF replay file.
Definition WsfDraw.hpp:35
WsfGeoPoint * GetGeoPoint()
Definition WsfClusterManager.hpp:91
WsfGeoPointClusterObject(WsfGeoPoint *aTrackPtr)
Definition WsfClusterManager.cpp:250
~WsfGeoPointClusterObject() override
Definition WsfClusterManager.hpp:83
Definition WsfGeoPoint.hpp:29
The main controller for a simulation.
Definition WsfSimulation.hpp:109
double GetSimTime()
Definition WsfClusterManager.hpp:72
~WsfTrackClusterObject() override
Definition WsfClusterManager.hpp:56
WsfTrack * GetTrack()
Definition WsfClusterManager.hpp:64
WsfTrackClusterObject(WsfTrack *aTrackPtr, double aSimTime)
Definition WsfClusterManager.cpp:113
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120