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 SetPicBoxGrid(int index, bool alert) { int type = 0, count = 0; GetTypeAndCount(index, ref type, ref count); mapPicBox.SelectGroup = true; mapPicBox.SetSelectedGrid((sideOutObjects == null) ? null : SideFlowtUtility.GetSideFlowSets(sideOutObjects), (sideInObjects == null) ? null : SideFlowtUtility.GetSideFlowSets(sideInObjects), null, null, type, count, alert); if (type == 0) { if (sideOutObjects[count].criticalFlowType == RiverSimulationProfile.CriticalFlowType.SubCriticalFlow) { subTypeRdo.Checked = true; } else { superTypeRdo.Checked = true; } } else { if (sideInObjects[count].criticalFlowType == RiverSimulationProfile.CriticalFlowType.SubCriticalFlow) { subTypeRdo.Checked = true; } else { superTypeRdo.Checked = true; } } }
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 dataGv_SelectionChanged(object sender, EventArgs e) { if (selCombo.SelectedIndex == -1) { return; } 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 所有被選取的點集合 pl.Add(new Point(dataGv.SelectedCells[i].RowIndex, dataGv.SelectedCells[i].ColumnIndex)); } addBtn.Enabled = SideFlowtUtility.IsAllInEmpty(p, pl, type, count); List <Point> pts = (type == 0) ? sideOutObjects[count].sideFlowPoints : sideInObjects[count].sideFlowPoints; removeBtn.Enabled = CheclRemoveBtnEnabled(pts, pl); editBtn.Enabled = CheclEditBtnEnabled(type, count); }
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 UpdateSelectedGroup(List <Point> pts, bool alert = false) { RiverSimulationProfile p = RiverSimulationProfile.profile; int index = listBox.SelectedIndex; int type = 0, count = 0; GetTypeAndCount(index, ref type, ref count); if (type == 0) { sideOutObjects[count].sideFlowPoints = pts; } else { sideInObjects[count].sideFlowPoints = pts; } mapPicBox.SetSelectedGrid((sideOutObjects == null) ? null : SideFlowtUtility.GetSideFlowSets(sideOutObjects), (sideInObjects == null) ? null : SideFlowtUtility.GetSideFlowSets(sideInObjects), null, null, type, count, alert); }
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); }
private bool CheclRemoveBtnEnabled(List <Point> pts, List <Point> pl) { return((pts == null) ? false : SideFlowtUtility.IsAllInclude(pts, pl)); }
private void FillDataGrid(List <Point> newPl = null, bool alert = false, bool fillZ = false) { //RiverSimulationProfile p = RiverSimulationProfile.profile; var rg = p.inputGrid; //int type = 0, count = 0; // StructureSetUtility.CalcTypeCount(selIndex, ref type, ref count, typeIndex); int index = selCombo.SelectedIndex; int type = 0, count = 0; GetTypeAndCount(index, ref type, ref count); Point pt = new Point(); for (int i = 0; i < rg.GetI; ++i) { for (int j = 0; j < rg.GetJ; ++j) { pt.X = i; pt.Y = j; Point grpId = SideFlowtUtility.WhichGroup(sideOutObjects, sideInObjects, pt); int nameId = grpId.X * (sideOutObjects == null ? 0 : sideOutObjects.Length) + grpId.Y; Color cr; if (grpId.X == -1 && grpId.Y == -1) { //空白處 cr = Color.White; if (fillZ) { dataGv[j, i].Value = p.inputGrid.inputCoor[i, j].z.ToString(); dataGv[j, i].ReadOnly = true; } else { dataGv[j, i].Value = ""; dataGv[j, i].ReadOnly = true; } } else if (grpId.X == type && grpId.Y == count) { //被選取的結構物 cr = (alert) ? alertColor : selectedColor; if (fillZ) { dataGv[j, i].Value = structureName[nameId]; dataGv[j, i].ReadOnly = false; } else { dataGv[j, i].Value = structureName[nameId]; dataGv[j, i].ReadOnly = true; } } else { //其他結構物 cr = colorTable[grpId.X % colorTable.Length]; if (fillZ) { dataGv[j, i].Value = structureName[nameId]; dataGv[j, i].ReadOnly = false; } else { dataGv[j, i].Value = structureName[nameId]; dataGv[j, i].ReadOnly = true; } } dataGv[j, i].Style.BackColor = cr; } } }