public static void UpdateZoneState(GKState state) { var zone = GKManager.Zones.Union<GKBase>(GKManager.GuardZones).Union(GKManager.SKDZones).FirstOrDefault(z => state.UID == z.UID); if (zone == null) { throw new Exception(string.Format("Зона {0} не найдена.", state.UID)); } var hint = new ElementHint(); var hintImageSource = zone.ImageSource.Replace("/Controls;component/", ""); hint.StateHintLines.Add(new HintLine { Text = zone.PresentationName, Icon = (hintImageSource.Trim() != string.Empty) ? GetImageResource(hintImageSource).Item1 : null }); // Добавляем состояния foreach (var stateClass in zone.State.StateClasses) { //Получаем источник иконки для основного класса var iconSourceForStateClasses = stateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.ToDescription(), Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null }); } // Добавляем доп. состояния foreach (var stateClass in zone.State.AdditionalStates) { //Получаем источник иконки для основного класса var iconSourceForAdditionalStateClasses = stateClass.StateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.Name, Icon = iconSourceForAdditionalStateClasses != null ? GetImageResource(iconSourceForAdditionalStateClasses.Replace("/Controls;component/", "")).Item1 : null }); } System.Windows.Media.Color background; switch (zone.GetType().ToString()) { case "RubezhAPI.GK.GKZone": { background = GetGKZoneStateColor(state.StateClass); break; } case "RubezhAPI.GK.GKSKDZone": { background = GetGKSKDZoneStateColor(state.StateClass); break; } case "RubezhAPI.GK.GKGuardZone": { background = GetGKGuardZoneStateColor(state.StateClass); break; } default: { background = System.Windows.Media.Colors.Transparent; break; } } // Собираем обновление для передачи var statusUpdate = new { Id = "pe" + state.UID, Background = new { R = background.R, G = background.G, B = background.B, A = background.A }, Hint = hint }; PlansUpdater.Instance.UpdateZoneState(statusUpdate); }
public static void UpdateDeviceState(GKState state) { if (state.BaseObjectType != GKBaseObjectType.Device) { throw new ArgumentException(@"BaseObjectType должен быть GKBaseObjectType.Device", "state"); } var device = GKManager.Devices.FirstOrDefault(x => x.UID == state.UID); if (device == null) { throw new Exception(string.Format("Устройство {0} не найдено.", state.UID)); } // Получаем обновленную картинку устройства var getPictureTask = Task.Factory.StartNewSta(() => GetDeviceStatePic(device, state)); Task.WaitAll(getPictureTask); var pic = getPictureTask.Result; var hint = new ElementHint(); var hintImageSource = device.ImageSource.Replace("/Controls;component/", ""); hint.StateHintLines.Add(new HintLine { Text = device.PresentationName, Icon = (hintImageSource.Trim() != string.Empty) ? GetImageResource(hintImageSource).Item1 : null }); // Добавляем состояния foreach (var stateClass in device.State.StateClasses) { //Получаем источник иконки для основного класса var iconSourceForStateClasses = stateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.ToDescription(), Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null }); } // Добавляем доп. состояния foreach (var stateClass in device.State.AdditionalStates) { //Получаем источник иконки для основного класса var iconSourceForAdditionalStateClasses = stateClass.StateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.Name, Icon = iconSourceForAdditionalStateClasses != null ? GetImageResource(iconSourceForAdditionalStateClasses.Replace("/Controls;component/", "")).Item1 : null }); } // Собираем обновление для передачи var statusUpdate = new { Id = "pe" + state.UID, Picture = pic, Hint = hint }; PlansUpdater.Instance.UpdateDeviceState(statusUpdate); }
private static ElementHint GetElementHint(ElementBase element) { var hint = new ElementHint(); //var asDoor = element as ElementGKDoor; //if (asDoor != null) { // var door = GKManager.Doors.FirstOrDefault(d => d.UID == asDoor.DoorUID); // if (door != null) { // if (door.PresentationName != null) { // hint.StateHintLines.Add(new HintLine { Text = door.PresentationName, Icon = GetElementHintIcon(asDoor).Item1 }); // } // } //} var asZone = element as IElementZone; if (asZone != null) { if (element is ElementRectangleGKZone || element is ElementPolygonGKZone) { var zone = GKManager.Zones.FirstOrDefault(z => z.UID == asZone.ZoneUID); if (zone != null && zone.PresentationName != null) { var imagePath = "Images/Zone.png"; var imageData = GetImageResource(imagePath); hint.StateHintLines.Add(new HintLine { Text = zone.PresentationName, Icon = imageData.Item1 }); // Добавляем состояния foreach (var stateClass in zone.State.StateClasses) { //Получаем источник иконки для основного класса var iconSourceForStateClasses = stateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.ToDescription(), Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null }); } // Добавляем доп. состояния foreach (var stateClass in zone.State.AdditionalStates) { //Получаем источник иконки для основного класса var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.Name, Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null }); } } } if (element is ElementRectangleGKGuardZone || element is ElementPolygonGKGuardZone) { var zone = GKManager.GuardZones.FirstOrDefault(z => z.UID == asZone.ZoneUID); if (zone != null && zone.PresentationName != null) { var imagePath = "Images/GuardZone.png"; var imageData = GetImageResource(imagePath); hint.StateHintLines.Add(new HintLine { Text = zone.PresentationName, Icon = imageData.Item1 }); // Добавляем состояния foreach (var stateClass in zone.State.StateClasses) { //Получаем источник иконки для основного класса var iconSourceForStateClasses = stateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.ToDescription(), Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null }); } // Добавляем доп. состояния foreach (var stateClass in zone.State.AdditionalStates) { //Получаем источник иконки для основного класса var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.Name, Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null }); } } } if (element is ElementRectangleGKSKDZone || element is ElementPolygonGKSKDZone) { var zone = GKManager.SKDZones.FirstOrDefault(z => z.UID == asZone.ZoneUID); if (zone != null && zone.PresentationName != null) { var imagePath = "Images/Zone.png"; var imageData = GetImageResource(imagePath); hint.StateHintLines.Add(new HintLine { Text = zone.PresentationName, Icon = imageData.Item1 }); // Добавляем состояния foreach (var stateClass in zone.State.StateClasses) { //Получаем источник иконки для основного класса var iconSourceForStateClasses = stateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.ToDescription(), Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null }); } // Добавляем доп. состояния foreach (var stateClass in zone.State.AdditionalStates) { //Получаем источник иконки для основного класса var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.Name, Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null }); } } } } var asMpt = element as IElementMPT; if (asMpt != null) { var mpt = GKManager.MPTs.FirstOrDefault(m => m.UID == asMpt.MPTUID); if (mpt != null && mpt.PresentationName != null) { var imagePath = "Images/BMPT.png"; var imageData = GetImageResource(imagePath); hint.StateHintLines.Add(new HintLine { Text = mpt.PresentationName, Icon = imageData.Item1 }); // Добавляем состояния foreach (var stateClass in mpt.State.StateClasses) { //Получаем источник иконки для основного класса var iconSourceForStateClasses = stateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.ToDescription(), Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null }); } // Добавляем доп. состояния foreach (var stateClass in mpt.State.AdditionalStates) { //Получаем источник иконки для основного класса var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.Name, Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null }); } } } //var asDelay = element as IElementDelay; //if (asDelay != null) { // var delay = GKManager.Delays.FirstOrDefault(m => m.UID == asDelay.DelayUID); // if (delay != null) { // if (delay.PresentationName != null) { // hint.StateHintLines.Add(new HintLine { // Text = delay.PresentationName, // Icon = new Func<string>( // () => { // var imagePath = delay.ImageSource.Replace("/Controls;component/", ""); // var imageData = GetImageResource(imagePath); // return imageData.Item1; // }).Invoke() // }); // } // } //} var asDirection = element as IElementDirection; if (asDirection != null) { var direction = GKManager.Directions.FirstOrDefault( d => d.UID == asDirection.DirectionUID); if (direction != null && direction.PresentationName != null) { var imagePath = "Images/Blue_Direction.png"; var imageData = GetImageResource(imagePath); hint.StateHintLines.Add(new HintLine { Text = direction.PresentationName, Icon = imageData.Item1 }); // Добавляем состояния foreach (var stateClass in direction.State.StateClasses) { //Получаем источник иконки для основного класса var iconSourceForStateClasses = stateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.ToDescription(), Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null }); } // Добавляем доп. состояния foreach (var stateClass in direction.State.AdditionalStates) { //Получаем источник иконки для основного класса var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.Name, Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null }); } } } var asDevice = element as ElementGKDevice; if (asDevice != null) { var device = GKManager.Devices.FirstOrDefault( d => d.UID == asDevice.DeviceUID); if (device != null && device.PresentationName != null) { hint.StateHintLines.Add(new HintLine { Text = device.PresentationName, Icon = GetElementHintIcon(asDevice).Item1 }); // Добавляем состояния foreach (var stateClass in device.State.StateClasses) { //Получаем источник иконки для основного класса var iconSourceForStateClasses = stateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.ToDescription(), Icon = iconSourceForStateClasses != null ? GetImageResource(iconSourceForStateClasses.Replace("/Controls;component/", "")).Item1 : null }); } // Добавляем доп. состояния foreach (var stateClass in device.State.AdditionalStates) { //Получаем источник иконки для основного класса var iconSourceForAdditionalStateClassses = stateClass.StateClass.ToIconSource(); hint.StateHintLines.Add( new HintLine { Text = stateClass.Name, Icon = iconSourceForAdditionalStateClassses != null ? GetImageResource(iconSourceForAdditionalStateClassses.Replace("/Controls;component/", "")).Item1 : null }); } } } return hint; }