private bool CheckOverlapping(List <Point> pl, List <Point>[] rg, int count) { if (rg == null) { return(true); } if (SideFlowtUtility.IsOverlapping(rg, pl, count)) { UpdateSelectedGroup(pl, true); if (DialogResult.Yes == MessageBox.Show("圈選到重覆區域,是否刪減重複範圍(選「否」將放棄此次圈選)", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)) { SideFlowtUtility.RemoveOverlapping(ref pl, rg, count); if (!SideFlowtUtility.IsContinuous(pl)) { UpdateSelectedGroup(pl, true); MessageBox.Show("刪減後不是連續區域,請重新選取!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); UpdateSelectedGroup(null); return(false); } } else { UpdateSelectedGroup(null); return(false); } } return(true); }
private void addBtn_Click(object sender, EventArgs e) { var p = RiverSimulationProfile.profile; var selectedCellCount = dataGv.GetCellCount(DataGridViewElementStates.Selected); if (selectedCellCount <= 0) { return; } int index = selCombo.SelectedIndex; int type = 0, count = 0; GetTypeAndCount(index, ref type, ref count); List <Point> pl = new List <Point>(); //表格內被選取的格網點 for (int i = 0; i < selectedCellCount; ++i) { pl.Add(new Point(dataGv.SelectedCells[i].RowIndex, dataGv.SelectedCells[i].ColumnIndex)); } List <Point> pts = (type == 0) ? sideOutObjects[count].sideFlowPoints : sideInObjects[count].sideFlowPoints; List <Point> plSelected = (pts == null) ? null : new List <Point>(pts); if (null != plSelected) { //正在編輯的結構物不為空則合併被選取的格網點到正在編輯的結構物中 SideFlowtUtility.MergePoints(ref plSelected, pl); SideFlowtUtility.TrimToEdge(ref plSelected, p.inputGrid.GetI, p.inputGrid.GetJ); } else { //正在編輯的結構物還沒有任何格網點 if (!SideFlowtUtility.TrimToEdge(ref pl, p.inputGrid.GetI, p.inputGrid.GetJ)) { MessageBox.Show("請圈選邊界!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } plSelected = new List <Point>(pl); } if (!SideFlowtUtility.IsContinuous(plSelected)) { //檢查是否連續 FillDataGrid(plSelected, true); MessageBox.Show("新增後不是連續區域,請重新選取!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); FillDataGrid(); return; } if (type == 0) { sideOutObjects[count].sideFlowPoints = plSelected; } else { sideInObjects[count].sideFlowPoints = plSelected; } FillDataGrid(); dataGv.ClearSelection(); }
private void removeBtn_Click(object sender, EventArgs e) { var selectedCellCount = dataGv.GetCellCount(DataGridViewElementStates.Selected); if (selectedCellCount <= 0) { return; } int index = selCombo.SelectedIndex; int type = 0, count = 0; GetTypeAndCount(index, ref type, ref count); List <Point> pl = new List <Point>(); for (int i = 0; i < selectedCellCount; ++i) { pl.Add(new Point(dataGv.SelectedCells[i].RowIndex, dataGv.SelectedCells[i].ColumnIndex)); } List <Point> pts = (type == 0) ? sideOutObjects[count].sideFlowPoints : sideInObjects[count].sideFlowPoints; List <Point> plSelected = (pts == null) ? null : new List <Point>(pts); SideFlowtUtility.RemovePoints(ref plSelected, pl); if (!SideFlowtUtility.IsContinuous(plSelected)) { FillDataGrid(plSelected, true); MessageBox.Show("刪減後不是連續區域,請重新選取!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); FillDataGrid(); return; } if (type == 0) { sideOutObjects[count].sideFlowPoints = plSelected; } else { sideInObjects[count].sideFlowPoints = plSelected; } FillDataGrid(); dataGv.ClearSelection(); }
private void mapPicBox_SelectedGroupChangedEvent(List <Point> pl) { RiverSimulationProfile p = RiverSimulationProfile.profile; int index = listBox.SelectedIndex; if (!SideFlowtUtility.TrimToEdge(ref pl, p.inputGrid.GetI, p.inputGrid.GetJ)) { UpdateSelectedGroup(pl, true); MessageBox.Show("請圈選邊界!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); UpdateSelectedGroup(null); return; } int type = 0, count = 0; GetTypeAndCount(index, ref type, ref count); //檢查連續 if (!SideFlowtUtility.IsContinuous(pl)) { UpdateSelectedGroup(pl, true); MessageBox.Show("請圈選連續區域!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); UpdateSelectedGroup(null); return; } //檢查重疊 if (!CheckOverlapping(pl, SideFlowtUtility.GetSideFlowSets(sideOutObjects), count)) { return; } if (!CheckOverlapping(pl, SideFlowtUtility.GetSideFlowSets(sideInObjects), count)) { return; } //最後確認 [20141121]更新客製化需求 回報問題 新增規格 if (DialogResult.OK == MessageBox.Show("請確認以此次圈選範圍取代原先資料。", "確認", MessageBoxButtons.OKCancel, MessageBoxIcon.None)) { UpdateSelectedGroup(pl); } //StructureSetUtility.EditBottomElevation(p, "編輯" + structureName[type] + (1 + count).ToString() + "高程", type, count); //if (StructureSetUtility.IsOverlapping(rg, pl, index)) //{ // UpdateSelectedGroup(pl, true); // if (DialogResult.Yes == MessageBox.Show("圈選到重覆區域,是否刪減重複範圍(選「否」將放棄此次圈選)", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)) // { // StructureSetUtility.RemoveOverlapping(ref pl, rg, index); // if (!StructureSetUtility.IsContinuous(pl)) // { // UpdateSelectedGroup(pl, true); // MessageBox.Show("刪減後不是連續區域,請重新選取!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); // UpdateSelectedGroup(null); // return; // } // } // else // { // UpdateSelectedGroup(null); // return; // } //} //UpdateSelectedGroup(pl); }