{
//using ArcGIS.Core.Data.Knowledge.Extensions;
await QueuedTask.Run(async () =>
{
var ffp_config = new CIMFilteredFindPathsConfiguration();
ffp_config.Name = "List out FFP Results Relationships";
//set up config
//...
var results = kg.RunFilteredFindPaths(ffp_config);
if (results.CountPaths == 0)
{
System.Diagnostics.Debug.WriteLine("FFP returned no paths");
return;
}
//print out paths by increasing length, min cost, max cost
var path_by_len_indices = (IEnumerable<long>)results.PathIndicesOrderedByIncreasingPathLength
.Select(idx => idx.index);
var path_by_min_cost = (IEnumerable<long>)results.PathIndicesOrderedByIncreasingMinPathCost
.Select(idx => idx.index);
var path_by_max_cost = (IEnumerable<long>)results.PathIndicesOrderedByIncreasingMaxPathCost
.Select(idx => idx.index);
var x = 0;
StringBuilder sb = new StringBuilder();
foreach (var path_indeces in new List<IEnumerable<long>> {
path_by_len_indices,
path_by_min_cost,
path_by_max_cost})
{
if (x == 0)
sb.AppendLine($"Relationships by length: {path_by_len_indices.Count()}");
else if (x == 1)
sb.AppendLine($"Relationships by min cost: {path_by_min_cost.Count()}");
else if (x == 2)
sb.AppendLine($"Relationships by max cost: {path_by_max_cost.Count()}");
x++;
foreach (var path_idx in path_indeces)
{
var path = (ResultPath)results.MaterializePath(path_idx);
sb.AppendLine(
$"Path[{path_idx}] length: {path.Length}, min: {path.MinCost} max: {path.MaxCost}");
var sorted_set = new SortedSet<ulong>();
sorted_set.Add((ulong)path_idx);
var per = results.ExtractPathsEntitiesAndRelationships(sorted_set);
var idx = 0;
foreach (var rel_uid in per.RelationshipsUIDs)
{
sb.Append($" RelationshipsUIDs[{idx}]: ");
var uid = FormatID(rel_uid.ToString());
var rel_info =
$"{per.RelationshipTypeNames[per.RelationshipTypes[idx]]}:{uid}";
sb.Append($"{rel_info}\r\n");
//From entity:
var entity_idx = per.RelationshipsFrom[idx];
var origin_uid = FormatID(per.EntitiesUIDs[entity_idx].ToString());
var origin = $"{per.EntityTypeNames[per.EntityTypes[entity_idx]]}:{origin_uid}";
sb.Append($" RelationshipsFrom: {origin}\r\n");
//To entity
entity_idx = per.RelationshipsTo[idx];
var dest_uid = FormatID(per.EntitiesUIDs[entity_idx].ToString());
var dest = $"{per.EntityTypeNames[per.EntityTypes[entity_idx]]}:{dest_uid}";
sb.Append($" RelationshipsTo: {dest}\r\n");
idx++;
}
var rel_str = sb.ToString();
System.Diagnostics.Debug.WriteLine(rel_str);
sb.Clear();
}
}
});
}
string FormatID(string id)
{
id = id.ToUpperInvariant();
if (!id.StartsWith('{'))
id = '{' + id;
if (!id.EndsWith('}'))
id += '}';
return id;
}
Target Platforms: Windows 11 Home, Pro, Enterprise (64 bit)