//вывод информации о растении в строке состояния
 private void CursorMove(object sender, MouseEventArgs e)
 {
     using (LandscapeDesignEntities db = new LandscapeDesignEntities())
     {
         //определение элемента на который наведена мыша
         IInputElement clickedElement = Mouse.DirectlyOver;
         if (clickedElement is Rectangle)
         {
             //поиск нужного элемента в базе
             foreach (var item in db.Plants)
             {
                 if ((clickedElement as Rectangle).Name.ToString() == item.PlantName)
                 {
                     //формирование текста на вывод
                     TextInfoStatusBar.Text = "Примечание: " + item.PlantInfo;
                 }
             }
         }
         //очистка строки, если мышка наведена не на растение
         else
         {
             TextInfoStatusBar.Text = "";
         }
     }
 }
 //фильтрация вывода растений
 private void PrintPicture(object sender, SelectionChangedEventArgs e)
 {
     //проверка на наничие выбраного элемента
     if (PlantComboBox.SelectedIndex != -1)
     {
         using (LandscapeDesignEntities db = new LandscapeDesignEntities())
         {
             //определение текущего выбраного элемента
             int index = PlantComboBox.SelectedIndex;
             //очистка содержимого блока
             PlantListView.Items.Clear();
             foreach (var item in db.Plants)
             {
                 string path = Directory.GetCurrentDirectory();
                 //вывод всех растений без фильтка
                 if (index == 0)
                 {
                     PlantListView.Items.Add(new ExplorerData()
                     {
                         //формирование вывода растений
                         ID   = item.IDPlant,
                         Name = item.PlantName,
                         Icon = new BitmapImage(new Uri(path + "\\..\\..\\picture\\" + item.PicturePlant, UriKind.Relative))
                     });
                 }
                 //вывод растения выбраного вида
                 else
                 {
                     if (index == item.IDPlantSpecies)
                     {
                         //формирование вывода растений
                         PlantListView.Items.Add(new ExplorerData()
                         {
                             ID   = item.IDPlant,
                             Name = item.PlantName,
                             Icon = new BitmapImage(new Uri(path + "\\..\\..\\picture\\" + item.PicturePlant, UriKind.Relative))
                         });
                     }
                 }
             }
         }
     }
 }
 //формирование файла с растениями в проекте
 private void CreateSaveFile(int idLast, string path)
 {
     using (LandscapeDesignEntities db = new LandscapeDesignEntities())
     {
         //поиск и подсчет количества растений в проекте
         var query = (from p in db.Projects
                      from pl in db.ProjectPlants
                      from plant in db.Plants
                      where pl.IDPlant == plant.IDPlant && p.IDProject == pl.IDProject && p.IDProject == idLast
                      group pl by plant.PlantName into plant
                      orderby plant.Count()
                      select(new { Name = plant.Key, Count = plant.Count() })).ToList();
         //добавление найденой информации в файл
         using (StreamWriter sw = new StreamWriter(path, false, System.Text.Encoding.Default))
         {
             sw.WriteLine("*******В проекте используется*******");
             foreach (var item in query)
             {
                 sw.WriteLine($"{item.Name}: {item.Count} шт.");
             }
         }
     }
 }
        //загрузка существующего проекта
        private void OpenOldProject(int iD)
        {
            using (LandscapeDesignEntities db = new LandscapeDesignEntities())
            {
                //поиск проекта с сообветствующим индексом
                foreach (var item in db.Projects)
                {
                    if (item.IDProject == iD)
                    {
                        scale = item.Scale;
                        //формирование рабочей области
                        WorkingFieldCanvas.Width  = item.Width * scale;
                        WorkingFieldCanvas.Height = item.Height * scale;
                        InfoStatusBar.Width       = WorkingFieldCanvas.Width;
                        scale = item.Scale;
                    }
                }
                //выборка нужных записей из базы
                var queryP = (from p in db.Projects
                              from pl in db.ProjectPlants
                              from plant in db.Plants
                              where p.IDProject == iD && p.IDProject == pl.IDProject && pl.IDPlant == plant.IDPlant
                              select(new { width = plant.WidthPlant, height = plant.HeightPlant, name = plant.PlantName, picture = plant.PicturePlantTop, x = pl.PointX, y = pl.PointY })).ToArray();

                string path = Directory.GetCurrentDirectory();
                //создание image "растение"
                foreach (var item in queryP)
                {
                    Rectangle rec = new Rectangle
                    {
                        Width           = Convert.ToInt32(item.width) * scale / 10,
                        Height          = Convert.ToInt32(item.height) * scale / 10,
                        Name            = item.name,
                        StrokeThickness = 0,
                        Fill            = new ImageBrush
                        {
                            ImageSource = new BitmapImage(new Uri(path + "\\..\\..\\picture\\" + item.picture))
                        }
                    };
                    //отображение изображения на поле
                    WorkingFieldCanvas.Children.Add(rec);
                    Canvas.SetLeft(rec, item.x);
                    Canvas.SetTop(rec, item.y);
                }
                ;
                //выборка нужных записей из базы
                var queryS = (from s in db.Projects
                              from st in db.ProjectStructure
                              from struc in db.Structures
                              where s.IDProject == iD && s.IDProject == st.IDProject && st.IDStructure == struc.IDStructure
                              select(new { width = st.WidthStructure, height = st.HeightStructure, name = struc.StructureName, picture = struc.StructureTop, x = st.PointX, y = st.PointY })).ToArray();

                //создание image "строение"
                foreach (var item in queryS)
                {
                    Rectangle rec = new Rectangle
                    {
                        Width           = Convert.ToInt32(item.width) * scale,
                        Height          = Convert.ToInt32(item.height) * scale,
                        Name            = item.name,
                        StrokeThickness = 1,
                        Fill            = new ImageBrush
                        {
                            ImageSource = new BitmapImage(new Uri(path + "\\..\\..\\picture\\" + item.picture))
                        }
                    };
                    //отображение изображения на поле
                    WorkingFieldCanvas.Children.Add(rec);
                    Canvas.SetLeft(rec, item.x);
                    Canvas.SetTop(rec, item.y);
                }
                ;
                //индекс текущего проекта
                indexProject = iD;
            }
        }
 //сохранение проекта
 private void SaveProject()
 {
     using (LandscapeDesignEntities db = new LandscapeDesignEntities())
     {
         //если проект редакрируется
         if (indexProject != -1)
         {
             //поиск растений на старом проекте
             var queryP = from p in db.Projects
                          from pl in db.ProjectPlants
                          where p.IDProject == indexProject && pl.IDProject == p.IDProject
                          select pl;
             //удаление растений из старого проекта
             foreach (var item in queryP)
             {
                 db.ProjectPlants.Remove(item);
             }
             //поиск строений на старом проекте
             var queryS = from p in db.Projects
                          from st in db.ProjectStructure
                          where p.IDProject == indexProject && st.IDProject == p.IDProject
                          select st;
             //удатение строений из страрого проекта
             foreach (var item in queryS)
             {
                 db.ProjectStructure.Remove(item);
             }
             db.SaveChanges();
         }
         //если проекта еще небыло
         else
         {
             //создание экземпляра проекта
             Projects project = new Projects()
             {
                 Project = TextBoxNameProject.Text,
                 Width   = Convert.ToDouble(TextBoxWidthProject.Text),
                 Height  = Convert.ToDouble(TextBoxHeightProject.Text),
                 Scale   = scale
             };
             //добавление экземпляра проекта в базу
             db.Projects.Add(project);
             db.SaveChanges();
             //нахождение индекса текущего проекта
         }
         var idLast = db.Projects.Max(u => u.IDProject);
         if (indexProject != -1)
         {
             idLast = indexProject;
         }
         foreach (var item in WorkingFieldCanvas.Children)
         {
             //перебор элементов находящихся в рабочей области
             if (item is Rectangle)
             {
                 //нахождений растений в проекте
                 if ((item as Rectangle).StrokeThickness == 0)
                 {
                     string name = (item as Rectangle).Name.ToString();
                     //определение экземпляра растения
                     var query = db.Plants.FirstOrDefault(u => u.PlantName == name);
                     //добавление растений в проект
                     db.ProjectPlants.Add(new ProjectPlants()
                     {
                         IDProject = idLast,
                         IDPlant   = query.IDPlant,
                         PointY    = Canvas.GetTop(item as Rectangle),
                         PointX    = Canvas.GetLeft(item as Rectangle)
                     });
                 }
                 //находжение строений в проекте
                 else if ((item as Rectangle).StrokeThickness == 1)
                 {
                     string name = (item as Rectangle).Name.ToString();
                     //определение экземпляра строения
                     var query = db.Structures.FirstOrDefault(u => u.StructureName == name);
                     //добавление строений в проект
                     db.ProjectStructure.Add(new ProjectStructure()
                     {
                         IDProject       = idLast,
                         IDStructure     = query.IDStructure,
                         WidthStructure  = (item as Rectangle).Width / scale,
                         HeightStructure = (item as Rectangle).Height / scale,
                         PointY          = Canvas.GetTop(item as Rectangle),
                         PointX          = Canvas.GetLeft(item as Rectangle)
                     });
                 }
                 db.SaveChanges();
             }
             else
             {
                 continue;
             }
         }
         string path = Directory.GetCurrentDirectory();
         //сохранение картинки проекта
         CreateSaveBitmap(WorkingFieldCanvas, path + "\\..\\..\\projectPicture\\" + TextBoxNameProject.Text + "#" + idLast + ".png");
         //сохранение состава проекта
         CreateSaveFile(idLast, path + "\\..\\..\\projectPicture\\" + TextBoxNameProject.Text + "#" + idLast + ".txt");
     }
 }
 //заполнение элементов при старте программы
 private void Fill(object elem)
 {
     using (LandscapeDesignEntities db = new LandscapeDesignEntities())
     {
         //заполнение ComboBox - виды растений
         if (elem is ComboBox)
         {
             //определение элемента
             if ((elem as ComboBox).Name.ToString() == "PlantComboBox")
             {
                 //добавление значений в элемент
                 TimeBox tb = new TimeBox()
                 {
                     Name = "все"
                 };
                 PlantComboBox.Items.Add(tb);
                 //добавление значений в элемент из базы
                 foreach (var item in db.PlantSpecies.ToList())
                 {
                     tb = new TimeBox()
                     {
                         Name = item.PlantSpecies1
                     };
                     PlantComboBox.Items.Add(tb);
                 }
                 //поле для вывода
                 PlantComboBox.DisplayMemberPath = "Name";
             }
             //активный элемент
             PlantComboBox.SelectedIndex = 0;
         }
         else if (elem is ListView)
         {
             if ((elem as ListView).Name.ToString() == "StructureListView")
             {
                 //очистка содержимого блока
                 StructureListView.Items.Clear();
                 foreach (var item in db.Structures)
                 {
                     string path = Directory.GetCurrentDirectory();
                     //вывод всех строений без фильтка
                     StructureListView.Items.Add(new ExplorerData()
                     {
                         //формирование вывода строений
                         ID   = item.IDStructure,
                         Name = item.StructureName,
                         Icon = new BitmapImage(new Uri(path + "\\..\\..\\picture\\" + item.StructurePicture, UriKind.Relative))
                     });
                 }
             }
         }
         else if (elem is ListBox)
         {
             if ((elem as ListBox).Name.ToString() == "ListProject")
             {
                 ListProject.Items.Clear();
                 foreach (var item in db.Projects)
                 {
                     ListProject.Items.Add(new ExplorerData()
                     {
                         ID   = item.IDProject,
                         Name = item.Project
                     });
                 }
             }
         }
     }
 }
        //определение координаты курсора и выбор элемента
        private void CursorCoordinates_MouseDown(object sender, MouseButtonEventArgs e)
        {
            //определение координаты курсора при клике на рабочем поле
            Point point = Mouse.GetPosition(WorkingFieldCanvas);

            //нажата левая кнопка мыши
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                using (LandscapeDesignEntities db = new LandscapeDesignEntities())
                {
                    //определение на каком элементе было произведено нажатие
                    IInputElement clickedElement = Mouse.DirectlyOver;
                    if (clickedElement is Rectangle)
                    {
                        //двойное нажатие левой кнопкой на изображение
                        if (e.ClickCount == 2)
                        {
                            Rectangle img = clickedElement as Rectangle;
                            //удаление изображения
                            WorkingFieldCanvas.Children.Remove(img);
                        }
                    }
                    else
                    {
                        //выбор элементов в вкладке растения
                        if ((tabControl.SelectedItem as TabItem).Header.ToString() == "Растения")
                        {
                            //поиск элемента выбраного в каталоге
                            foreach (var item in db.Plants)
                            {
                                if (item.IDPlant == indexElem)
                                {
                                    string path = Directory.GetCurrentDirectory();
                                    //создание image
                                    Rectangle rec = new Rectangle
                                    {
                                        Width           = Convert.ToInt32(item.WidthPlant) * scale / 10,
                                        Height          = Convert.ToInt32(item.HeightPlant) * scale / 10,
                                        Name            = item.PlantName,
                                        StrokeThickness = 0,
                                        Fill            = new ImageBrush
                                        {
                                            ImageSource = new BitmapImage(new Uri(path + "\\..\\..\\picture\\" + item.PicturePlantTop))
                                        }
                                    };
                                    //отображение изображения на поле
                                    PrintPicture(rec, point);
                                }
                            }
                        }
                        //выбор элементов в вкладке строения
                        else if ((tabControl.SelectedItem as TabItem).Header.ToString() == "Строения")
                        {
                            //поиск элемента выбраного в каталоге
                            foreach (var item in db.Structures)
                            {
                                if (item.IDStructure == indexElem)
                                {
                                    string path = Directory.GetCurrentDirectory();
                                    //создание image
                                    if (WidthStructureTextBox.Text == "" || LengthStructureTextBox.Text == "")
                                    {
                                        ErrorText.Text     = "Введите размер";
                                        ErrorText.Height   = 30;
                                        ErrorText.FontSize = 15;
                                    }
                                    else
                                    {
                                        Rectangle rec = new Rectangle
                                        {
                                            Width           = Convert.ToDouble(WidthStructureTextBox.Text) * scale,
                                            Height          = Convert.ToDouble(LengthStructureTextBox.Text) * scale,
                                            Name            = item.StructureName,
                                            StrokeThickness = 1,
                                            Fill            = new ImageBrush
                                            {
                                                ImageSource = new BitmapImage(new Uri(path + "\\..\\..\\picture\\" + item.StructureTop))
                                            }
                                        };
                                        PrintPicture(rec, point);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            //нажата правая кнопка мышы
            else if (e.RightButton == MouseButtonState.Pressed)
            {
                //удаление активности выбраного элемента
                indexElem = 0;
                PlantListView.SelectedItem     = null;
                StructureListView.SelectedItem = null;
            }
        }