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);
        }
Example #2
0
        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();
        }
Example #3
0
        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);
        }