//using ArcGIS.Core.Data.Knowledge.Extensions; await QueuedTask.Run(async () => { var ffp_config = new CIMFilteredFindPathsConfiguration(); ffp_config.Name = "List out FFP Results Origin, Destination, Other Entities"; //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($"Entities by length: {path_by_len_indices.Count()}"); else if (x == 1) sb.AppendLine($"Entities by min cost: {path_by_min_cost.Count()}"); else if (x == 2) sb.AppendLine($"Entities 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 origin_dest_uids = new List<string>(); var sep = ""; sb.Append(" Origin EntitiesUIDs: "); foreach (var idx in per.PathsOriginEntitiesUIDsIndexes) { //See 'List out FFP Results by Path Length, Min Cost, Max Cost' for //FormatID method above var uid = FormatID(per.EntitiesUIDs[idx].ToString()); origin_dest_uids.Add(uid); var origin = $"{sep}{per.EntityTypeNames[per.EntityTypes[idx]]}:{uid}"; sep = ", "; sb.Append($"{origin}"); } sb.AppendLine(""); sep = ""; sb.Append(" Destination EntitiesUIDs: "); foreach (var idx in per.PathsDestinationEntitiesUIDsIndexes) { var uid = FormatID(per.EntitiesUIDs[idx].ToString()); origin_dest_uids.Add(uid); var dest = $"{sep}{per.EntityTypeNames[per.EntityTypes[idx]]}:{uid}"; sep = ", "; sb.Append($"{dest}"); } sb.AppendLine(""); sep = ""; var idx2 = 0; sb.Append(" Other EntitiesUIDs: "); bool wereAnyOthers = false; foreach (var raw_uid in per.EntitiesUIDs) { var uid = FormatID(raw_uid.ToString()); if (!origin_dest_uids.Contains(uid)) { var other = $"{sep}{per.EntityTypeNames[per.EntityTypes[idx2]]}:{uid}"; sep = ", "; sb.Append($"{other}"); wereAnyOthers = true; } idx2++; } if (!wereAnyOthers) sb.Append(" <<none>>"); //sb.AppendLine(""); var entity_str = sb.ToString(); System.Diagnostics.Debug.WriteLine(entity_str); sb.Clear(); sep = ""; } } });
Target Platforms: Windows 11, Windows 10