bc4757bfc5
* registed layer unpacker * nested layers logic moved to layerUnpacker * killed VectorLayerConverter * exposed Feature converter and Attributes in RootObjBuilder * send clean GisObject * refactor Rasters and PointClouds * send everything through 1 converter * proper object type * clean GIS objects and conversions * better layer names on Receive * fix raster position on send * switching to GIS layer, removing native geometry type checks (but keeping field check) * fix revit materials on child objects * remove IGisFeature interface * typo * remove empty converter * switch from attributes to properties * add required keyword * required attribute fix * attach dynamic "geometry" field to converted Polygons * refactor(arcgis): overhaul of arcgis connector and converter patterns to enable data extraction (#439) * rework 1 * additional restructuring of root object builder and converters * finalizes classes and patterns for converter and connector * fixes build errors * Update ArcGISHostObjectBuilder.cs * fixes some polygon conversions * refactor color manager to separate color unpacker * Delete GISLayerGeometryType.cs * disables receive * pr review issues * Update ArcGISRootObjectBuilder.cs * Update ArcGISRootObjectBuilder.cs * Update ArcGISRootObjectBuilder.cs * Update ArcGISRootObjectBuilder.cs * fixed color bugs * Update ArcGISLayerUnpacker.cs * don't cache repeated layers * Revert "don't cache repeated layers" This reverts commit48af025829. * remove flattened layers from root commit builder * Revert "remove flattened layers from root commit builder" This reverts commite0e7b1fb42. * layer order and duplication fixed * fix applicationIds * fix raster appId * yield; add comment * move appId to extensions --------- Co-authored-by: Claire Kuang <kuang.claire@gmail.com>
62 lines
1.9 KiB
C#
62 lines
1.9 KiB
C#
using ArcGIS.Desktop.Mapping;
|
|
|
|
namespace Speckle.Connectors.ArcGIS.Utils;
|
|
|
|
public class MapMembersUtils
|
|
{
|
|
/// <summary>
|
|
/// Returns all Layers and Standalone Tables present on the Map
|
|
/// </summary>
|
|
/// <param name="map"></param>
|
|
/// <returns></returns>
|
|
public List<MapMember> GetAllMapMembers(Map map)
|
|
{
|
|
// first get all map layers
|
|
List<MapMember> mapMembers = new();
|
|
var layerMapMembers = UnpackMapLayers(map.Layers);
|
|
mapMembers.AddRange(layerMapMembers);
|
|
|
|
// add tables
|
|
var standaloneTableMapMembers = UnpackMapLayers(map.StandaloneTables);
|
|
mapMembers.AddRange(standaloneTableMapMembers);
|
|
return mapMembers;
|
|
}
|
|
|
|
public List<MapMember> UnpackMapLayers(IEnumerable<MapMember> mapMembersToUnpack)
|
|
{
|
|
List<MapMember> mapMembers = new();
|
|
foreach (var layer in mapMembersToUnpack)
|
|
{
|
|
mapMembers.Add(layer);
|
|
switch (layer)
|
|
{
|
|
case ILayerContainer subGroup:
|
|
var subLayerMapMembers = UnpackMapLayers(subGroup.Layers);
|
|
mapMembers.AddRange(subLayerMapMembers);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return mapMembers;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sorts the selected mapmembers into the same order as they appear in the Table of Contents (TOC) bar in the file.
|
|
/// This is a required step before unpacking layers, because depending on the user selection order, some children layers may appear before their container layer if both the container and children layers are selected.
|
|
/// </summary>
|
|
public IEnumerable<MapMember> GetMapMembersInOrder(Map map, IReadOnlyList<MapMember> selectedMapMembers)
|
|
{
|
|
// first get all map layers
|
|
List<MapMember> allMapMembers = GetAllMapMembers(map);
|
|
|
|
// recalculate selected layer priority from all map layers
|
|
foreach (MapMember mapMember in allMapMembers)
|
|
{
|
|
if (selectedMapMembers.Contains(mapMember))
|
|
{
|
|
yield return mapMember;
|
|
}
|
|
}
|
|
}
|
|
}
|