/// <summary> /// Create graphic object for order /// </summary> /// <param name="location">Source order</param> /// <returns>Graphic object for order</returns> public static ClusterGraphicObject Create(MapPoint mapPoint, IList <Graphic> cluster) { ClusterGraphicObject graphic = new ClusterGraphicObject(mapPoint, cluster); // ClusterGraphicObject contains static list of all clusters. // This list used for disposing after new clustering process is started. _graphics.Add(graphic); return(graphic); }
/// <summary> /// Process cluster graphic mouse events. /// </summary> /// <param name="clusterGraphic">Cluster graphic.</param> /// <param name="clickedGraphic">Last clicked item.</param> private void _ProcessClusterGraphicMouseEvents(ClusterGraphicObject clusterGraphic, Graphic clickedGraphic) { Debug.Assert(clusterGraphic != null); Debug.Assert(clickedGraphic != null); Debug.Assert(_clustering != null); Debug.Assert(_objectLayers != null); if (!_clustering.ClusterExpanded) { _clustering.ExpandIfNeeded(clusterGraphic); } else { IList<object> clusteredData = _clustering.GetClusteredData(clusterGraphic); ObjectLayer layer = MapHelpers.GetLayerWithData(clusteredData[0], _objectLayers); if (clickedGraphic == clusterGraphic && layer.Selectable) { if (Keyboard.Modifiers != ModifierKeys.Shift && Keyboard.Modifiers != ModifierKeys.Control) { _mapControl.SelectedItems.Clear(); } _ProcessSelectionChanges(clusteredData, layer); } } }
/// <summary> /// Unexpand cluster /// </summary> private void _UnexpandCluster() { if (!_mapctrl.IsInEditedMode) _mapctrl.SetOpacityToLayers(MapControl.FullOpacity); Debug.Assert(ClusterExpanded); _expandedClusterGraphic.SetZIndex(ObjectLayer.BACKZINDEX); _expandedClusterGraphic = null; _clusterCenter = null; _clusteringLayerColl.Clear(); _clusteringLayer.SelectedItems.Clear(); _leaderLinesLayer.Graphics.Clear(); }
/// <summary> /// Check graphics count /// </summary> /// <param name="clusterGraphic">Cluster graphic to expand</param> /// <returns>True if exceeded</returns> private bool _MaxGraphicsToExpandExceeded(ClusterGraphicObject clusterGraphic) { IList<object> clusterData = GetClusteredData(clusterGraphic); ObjectLayer objectLayer = MapHelpers.GetLayerWithData(clusterData[0], _mapctrl.ObjectLayers); FlareClusterer clusterer = (FlareClusterer)objectLayer.MapLayer.Clusterer; int objectsInCluster = (int)clusterGraphic.Attributes[ALClusterer.COUNT_PROPERTY_NAME]; bool exceeded = objectsInCluster > clusterer.MaximumFlareCount; return exceeded; }
/// <summary> /// Expand cluster from cluster graphic /// </summary> /// <param name="clusterGraphic">Cluster graphic to expand</param> private void _ExpandCluster(ClusterGraphicObject clusterGraphic) { if (_mapctrl.IsInEditedMode || _MaxGraphicsToExpandExceeded(clusterGraphic)) return; if (!_mapctrl.IsInEditedMode) _mapctrl.SetOpacityToLayers(MapControl.HalfOpacity); _expandedClusterGraphic = clusterGraphic; _clusteringLayer.Visible = true; int count = (int)clusterGraphic.Attributes[ALClusterer.COUNT_PROPERTY_NAME]; Debug.Assert(count > 0); for (int index = 0; index < count; index++) { string attrKey = ALClusterer.GRAPHIC_PROPERTY_NAME + index.ToString(); DataGraphicObject grObj = (DataGraphicObject)clusterGraphic.Attributes[attrKey]; _clusteringLayerColl.Add(grObj.Data); // support already selected items if (_mapctrl.SelectedItems.Contains(grObj.Data)) _clusteringLayer.SelectedItems.Add(grObj.Data); } _clusterCenter = _mapctrl.map.MapToScreen((MapPoint)clusterGraphic.Geometry); if (_clusteringLayer.MapLayer.Graphics.Count > MAXIMUM_GRAPHICS_IN_CIRCLE_EXPANDED) _SetSpiraledPositionsToExpandedClusterGraphics(); else _SetCircledPositionsToExpandedClusterGraphics(); _CreateLeaderLines(); _expandedClusterGraphic.SetZIndex(ObjectLayer.FRONTZINDEX); }
public IList<object> GetClusteredData(ClusterGraphicObject clusterGraphic) { List<object> clusteredData = new List<object>(); int count = (int)clusterGraphic.Attributes[ALClusterer.COUNT_PROPERTY_NAME]; for (int index = 0; index < count; index++) { string attributeName = ALClusterer.GRAPHIC_PROPERTY_NAME + index.ToString(); DataGraphicObject dataGraphic = (DataGraphicObject)clusterGraphic.Attributes[attributeName]; clusteredData.Add(dataGraphic.Data); } return clusteredData; }
/// <summary> /// Create graphic object for order /// </summary> /// <param name="location">Source order</param> /// <returns>Graphic object for order</returns> public static ClusterGraphicObject Create(MapPoint mapPoint, IList<Graphic> cluster) { ClusterGraphicObject graphic = new ClusterGraphicObject(mapPoint, cluster); // ClusterGraphicObject contains static list of all clusters. // This list used for disposing after new clustering process is started. _graphics.Add(graphic); return graphic; }