Skip to content

Commit

Permalink
CNX-9500 Implement highlighting sent elements (#3432)
Browse files Browse the repository at this point in the history
* Implement highlighting sent elements

* Remove not null check from active map

* Edit using as inline
  • Loading branch information
oguzhankoral authored May 24, 2024
1 parent 50370cf commit 034f2e9
Showing 1 changed file with 98 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
using System.Reflection;
using ArcGIS.Core.Data;
using ArcGIS.Core.Geometry;
using ArcGIS.Desktop.Core;
using ArcGIS.Desktop.Framework.Threading.Tasks;
using ArcGIS.Desktop.Mapping;
using Speckle.Connectors.ArcGIS.HostApp;
using Speckle.Connectors.DUI.Bindings;
using Speckle.Connectors.DUI.Bridge;
Expand Down Expand Up @@ -49,5 +53,98 @@ public BasicConnectorBinding(DocumentModelStore store, ArcGISSettings settings,

public void RemoveModel(ModelCard model) => _store.RemoveModel(model);

public void HighlightModel(string modelCardId) => throw new System.NotImplementedException();
public async void HighlightModel(string modelCardId)
{
MapView mapView = MapView.Active;

var model = _store.GetModelById(modelCardId);

if (model is null)
{
return;
}

var objectIds = new List<string>();

if (model is SenderModelCard senderModelCard)
{
objectIds = senderModelCard.SendFilter.NotNull().GetObjectIds();
}

if (model is ReceiverModelCard receiverModelCard)
{
objectIds = receiverModelCard.ReceiveResult?.BakedObjectIds.NotNull();
}

if (objectIds is null)
{
return;
}

await QueuedTask
.Run(() =>
{
List<MapMember> mapMembers = GetMapMembers(objectIds, mapView);
ClearSelection();
SelectMapMembers(mapMembers);
mapView.ZoomToSelected();
})
.ConfigureAwait(false);
}

private List<MapMember> GetMapMembers(List<string> objectIds, MapView mapView)
{
List<MapMember> mapMembers = new();

foreach (string objectId in objectIds)
{
MapMember mapMember = mapView.Map.FindLayer(objectId);
if (mapMember is null)
{
mapMember = mapView.Map.FindStandaloneTable(objectId);
}
if (mapMember is null)
{
continue;
}
mapMembers.Add(mapMember);
}

return mapMembers;
}

private void ClearSelection()
{
List<Layer> mapMembers = MapView.Active.Map.GetLayersAsFlattenedList().ToList();
foreach (var member in mapMembers)
{
if (member is FeatureLayer featureLayer)
{
featureLayer.ClearSelection();
}
}
}

private void SelectMapMembers(List<MapMember> mapMembers)
{
foreach (var member in mapMembers)
{
if (member is FeatureLayer featureLayer)
{
using RowCursor rowCursor = featureLayer.Search();
while (rowCursor.MoveNext())
{
using (var row = rowCursor.Current)
{
if (row is not Feature feature)
{
continue;
}
Geometry geometry = feature.GetShape();
MapView.Active.SelectFeatures(geometry, SelectionCombinationMethod.Add);
}
}
}
}
}
}

0 comments on commit 034f2e9

Please sign in to comment.