/// <summary> /// Загрузка изображения. /// </summary> /// <param name="sign">Идентификатор сущности.</param> public void LoadImage(EntitySign sign) { using (var ec = new EntityController()) { var parentLocation = ec.GetParentLocation(sign); if (parentLocation.GetSign() == ((EntitySign)Tag))// В теге хранится текущий идентификатор помещения на плане. { return; } Tag = parentLocation.GetSign(); var byteImage = parentLocation.Plan; Controls.Clear(); this.SuspendDrawing(); if (byteImage == null) { Image = null; } else { Image = Image.FromStream(new MemoryStream(byteImage)); ResizeRelativePosition(); var drawEquipment = ec.GetDrawEquipment(parentLocation); var sizeIcons = GetSizeIcons(); foreach (var eq in drawEquipment) { new IconOnPlan(this, eq.GetSign(), sizeIcons, eq.Point, IconsGetter.GetIconImage(eq.GetType()), eq.ToString()); } } this.ResumeDrawing(); } }
/// <summary> /// Возвращает родительское помещение. /// </summary> public Location GetParentLocation(EntitySign sign) { var entity = GetEntity(sign) as Hierarchy; if (entity == null) { return(null); } return((entity).GetLocation); }
/// <summary> /// Удаляет сущность. /// </summary> public void RemoveEntity(EntitySign sign) { var entity = GetEntity(sign); if (sign.Type.IsSubclassOf(typeof(KindBase))) { if (((KindBase)entity).Childs.Count != 0)//Не используем каскадное удаление { MessageBox.Show("Существует инвентарь с этим типом"); return; } } Set(sign.Type).Remove(entity); }
/// <summary> /// Добавить новую иконку на план при перетаскивании. /// </summary> /// <param name="e"></param> /// <param name="sign">Идентификатор сущности.</param> /// <returns></returns> private IconOnPlan AddNewIcon(DragEventArgs e, EntitySign sign) { IconOnPlan icon; string textIcon; using (var ec = new EntityController()) { var entity = ec.GetEntity(sign) as Equipment; textIcon = entity.ToString(); } this.SuspendDrawing(); icon = new IconOnPlan(this, sign, GetSizeIcons(), new ScalePoint(new Point(e.X, e.Y), this), IconsGetter.GetIconImage(sign.Type), textIcon); this.ResumeDrawing(); return(icon); }
/// <summary> /// Найти иконку по идентификатору. /// </summary> /// <param name="sign">Идентификатор сущности.</param> /// <returns></returns> private IconOnPlan FindIcon(EntitySign sign) => GetIcons().SingleOrDefault(i => i.Sign == sign);
/// <summary> /// Удалить иконку с плана. /// </summary> /// <param name="removeSign">Идентификатор.</param> public void RemoveIcon(EntitySign removeSign) { var icon = GetIcons().FirstOrDefault(i => i.Sign == removeSign); icon?.Dispose(); }
/// <summary>Возвращает сущность по его метке. /// Второй параметр NoTracking. /// </summary> public EntityBase GetEntity(EntitySign sign) { Set(sign.Type).Load(); return((EntityBase)Set(sign.Type).Find(sign.Id)); }