//вывод информации о растении в строке состояния 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; } }