Esempio n. 1
0
        ///<summary>移动</summary>
        void scene_EditObjectMove(object sender, Earth.PickEventArgs e)
        {
            btnSave.IsEnabled = isModify = true;

            if (editobj.modifyStatus == EModifyStatus.未修改)
            {
                editobj.modifyStatus = EModifyStatus.修改;
                editobj.color        = Colors.Red;
            }

            if (editobj is pPowerLine && e.pickedObject is EDDot)  //线路修改,从eddot传递到线路
            {
                assobj = e.pickedObject as EDDot;
                pPowerLine lin = editobj as pPowerLine;
                lin.VecPoints[assobj.order] = assobj.VecLocation;
                lin.sendChangedLocation();
            }
            else if (editobj is pArea && e.pickedObject is EDDot)  //区域修改, 从eddot传递到区域
            {
                assobj = e.pickedObject as EDDot;
                pArea lin = editobj as pArea;
                lin.VecPoints[assobj.order] = assobj.VecLocation;
                lin.sendChangedLocation();
            }
        }
Esempio n. 2
0
        ///<summary>选中对象</summary>
        void scene_EditObjectSelected(object sender, Earth.PickEventArgs e)
        {
            if (editobj == null)
            {
                editobj               = e.pickedObject;
                isNewObject           = false;
                pgAcnt.SelectedObject = editobj.busiAccount;
                btnCreate.IsEnabled   = false;
                btnDelete.IsEnabled   = true;
                btnSave.IsEnabled     = isModify = false;
                btnExit.IsEnabled     = true;

                if (editobj is pPowerLine) //选中的线段
                {
                    pPowerLine lin = editobj as pPowerLine;
                    int        idx = 0;
                    foreach (Point pnt in lin.points)
                    {
                        EDDot dot = new EDDot(elayer)
                        {
                            id       = MyClassLibrary.helper.getGUID(),
                            location = pnt.ToString(),
                        };
                        dot.order  = idx;
                        dot.scaleX = dot.scaleY = dot.scaleZ = distnet.UnitMeasure * 5;
                        elayer.AddObject(dot);
                        idx++;
                    }
                    distnet.scene.UpdateModel();
                }
                else if (editobj is pArea)  //选中的区域
                {
                    pArea lin = editobj as pArea;
                    int   idx = 0;
                    foreach (Point pnt in lin.points)  //zh注,应改写为原始坐标点集
                    {
                        EDDot dot = new EDDot(elayer)
                        {
                            id       = MyClassLibrary.helper.getGUID(),
                            location = pnt.ToString(),
                        };
                        dot.order  = idx;
                        dot.scaleX = dot.scaleY = dot.scaleZ = distnet.UnitMeasure * 5;
                        elayer.AddObject(dot);
                        idx++;
                    }
                    distnet.scene.UpdateModel();
                }

                oldID = editobj.id;
            }
            else if (e.pickedObject is EDDot)  //选中的控制点, 服务于线段和区域
            {
                assobj = e.pickedObject as EDDot;
                btnDelDot.Visibility = btnAddDot.Visibility = System.Windows.Visibility.Visible;
            }
        }
Esempio n. 3
0
        ///<summary>退出编辑</summary>
        private void btnExit_Click(object sender, RoutedEventArgs e)
        {
            if (isModify)
            {
                MessageBoxResult mbr = MessageBox.Show("选中对象曾进行过修改,\r\n请确认是否不保存退出?", "是否退出编辑!", System.Windows.MessageBoxButton.OKCancel, System.Windows.MessageBoxImage.Information);
                if (mbr == MessageBoxResult.OK)
                {
                    if (isNewObject)
                    {
                        editobj.parent.pModels.Remove(editobj.id);
                    }
                    else
                    {
                        //恢复
                        //dbdesc.DictSQLS[editobj.DBOPKey].loadKeyAcnt(oldID, editobj);
                        SQL sql = dbdesc.Values.SelectMany(p => p.SQLS.Where(pp => pp.key == editobj.DBOPKey)).FirstOrDefault();
                        if (sql != null)
                        {
                            sql.loadKeyAcnt(oldID, editobj);
                        }

                        editobj.refreshLocation();
                    }
                }
                else
                {
                    return;
                }
            }


            //==========
            distnet.scene.clearEditObject();
            btnAddDot.Visibility = btnDelDot.Visibility = System.Windows.Visibility.Collapsed;

            btnCreate.IsEnabled = true;
            btnDelete.IsEnabled = false;
            btnSave.IsEnabled   = isModify = false;
            //btnExit.IsEnabled = false;
            pgAcnt.SelectedObject = null;
            editobj = assobj = null;

            elayer.pModels.Clear();
            distnet.scene.UpdateModel();
        }
Esempio n. 4
0
        ///<summary>删除对象</summary>
        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            MessageBoxResult mbr = MessageBox.Show("操作将从数据库中真正删除该对象且不可恢复,\r\n请选择【确定】(删除)或【取消】(取消删除)?", "删除确认!", System.Windows.MessageBoxButton.OKCancel, System.Windows.MessageBoxImage.Warning);

            if (mbr == MessageBoxResult.OK)
            {
                btnCreate.IsEnabled   = true;
                btnDelete.IsEnabled   = false;
                btnSave.IsEnabled     = isModify = false;
                btnExit.IsEnabled     = false;
                pgAcnt.SelectedObject = null;
                //数据库操作
                if (editobj != null)
                {
                    string dbopkey = editobj.DBOPKey;
                    //SQL sql = dbdesc.SQLS.FirstOrDefault(p => p.key == dbopkey);
                    SQL sql = dbdesc.Values.SelectMany(p => p.SQLS.Where(pp => pp.key == dbopkey)).FirstOrDefault();
                    if (sql != null)
                    {
                        editobj.id   = (editobj.busiAccount as AcntDataBase).id;
                        editobj.name = (editobj.busiAccount as AcntDataBase).name;
                        sql.delKeyAcnt(oldID);
                    }
                }
                //对象操作
                pLayer pl = editobj.parent;
                pl.pModels.Remove(editobj.id);

                btnAddDot.Visibility  = btnDelDot.Visibility = System.Windows.Visibility.Collapsed;
                btnCreate.IsEnabled   = true;
                btnDelete.IsEnabled   = false;
                btnSave.IsEnabled     = isModify = false;
                btnExit.IsEnabled     = false;
                pgAcnt.SelectedObject = null;
                editobj = assobj = null;

                elayer.pModels.Clear();
                distnet.scene.UpdateModel();
                isModify = false;
            }
        }
Esempio n. 5
0
        ///<summary>选中对象</summary>
        void scene_EditObjectSelected(object sender, Earth.PickEventArgs e)
        {
            if (isTopoBrowser)  //拓扑浏览模式
            {
                handleTopoBrowsePickedObject(e.pickedObject);
            }
            else  //编辑模式
            {
                #region 编辑模式

                if (e.pickedObject == editobj)
                {
                    return;
                }
                elayer.pModels.Clear();

                if (e.pickedObject is EDDot)  //选中的控制点, 服务于线段和区域
                {
                    assobj = e.pickedObject as EDDot;
                    btnDelDot.Visibility = btnAddDot.Visibility = System.Windows.Visibility.Visible;
                }
                else
                {
                    editobj               = e.pickedObject;
                    isNewObject           = false;
                    pgAcnt.SelectedObject = editobj.busiAccount;
                    //btnCreate.IsEnabled = false;
                    btnDelete.IsEnabled = true;
                    //btnSave.IsEnabled = isModify = false;
                    //btnExit.IsEnabled = true;

                    if (editobj is pPowerLine) //选中的线段
                    {
                        pPowerLine lin = editobj as pPowerLine;
                        int        idx = 0;
                        foreach (Point pnt in lin.points)
                        {
                            EDDot dot = new EDDot(elayer)
                            {
                                id       = MyClassLibrary.helper.getGUID(),
                                location = pnt.ToString(),
                            };
                            dot.order       = idx;
                            dot.scaleX      = dot.scaleY = dot.scaleZ = distnet.UnitMeasure * 5;
                            dot.symbolid    = "小圆圈";
                            dot.isUseXModel = false;
                            elayer.AddObject(dot);
                            idx++;
                        }
                    }
                    else if (editobj is pArea)  //选中的区域
                    {
                        pArea lin = editobj as pArea;
                        int   idx = 0;
                        foreach (Point pnt in lin.points)  //zh注,应改写为原始坐标点集
                        {
                            EDDot dot = new EDDot(elayer)
                            {
                                id       = MyClassLibrary.helper.getGUID(),
                                location = pnt.ToString(),
                            };
                            dot.order  = idx;
                            dot.scaleX = dot.scaleY = dot.scaleZ = distnet.UnitMeasure * 5;
                            elayer.AddObject(dot);
                            idx++;
                        }
                    }

                    distnet.scene.UpdateModel();
                    oldID = editobj.id;
                }
                #endregion
            }

            //if (editobj == null)
            //{
            //    editobj = e.pickedObject;
            //    isNewObject = false;
            //    pgAcnt.SelectedObject = editobj.busiAccount;
            //    btnCreate.IsEnabled = false;
            //    btnDelete.IsEnabled = true;
            //    btnSave.IsEnabled = isModify = false;
            //    btnExit.IsEnabled = true;

            //    if (editobj is pPowerLine) //选中的线段
            //    {
            //        pPowerLine lin = editobj as pPowerLine;
            //        int idx = 0;
            //        foreach (Point pnt in lin.points)
            //        {
            //            EDDot dot = new EDDot(elayer)
            //            {
            //                id=MyClassLibrary.helper.getGUID(),
            //                location=pnt.ToString(),
            //            };
            //            dot.order = idx;
            //            dot.scaleX = dot.scaleY = dot.scaleZ = distnet.UnitMeasure*5;
            //            elayer.AddObject(dot);
            //            idx++;
            //        }
            //        distnet.scene.UpdateModel();
            //    }
            //    else if (editobj is pArea)  //选中的区域
            //    {
            //        pArea lin = editobj as pArea;
            //        int idx = 0;
            //        foreach (Point pnt in lin.points)  //zh注,应改写为原始坐标点集
            //        {
            //            EDDot dot = new EDDot(elayer)
            //            {
            //                id = MyClassLibrary.helper.getGUID(),
            //                location = pnt.ToString(),
            //            };
            //            dot.order = idx;
            //            dot.scaleX = dot.scaleY = dot.scaleZ = distnet.UnitMeasure * 5;
            //            elayer.AddObject(dot);
            //            idx++;
            //        }
            //        distnet.scene.UpdateModel();
            //    }

            //    oldID = editobj.id;
            //}
            //else if (e.pickedObject is EDDot)  //选中的控制点, 服务于线段和区域
            //{
            //    assobj = e.pickedObject as EDDot;
            //    btnDelDot.Visibility = btnAddDot.Visibility = System.Windows.Visibility.Visible;
            //}
        }
Esempio n. 6
0
        ///<summary>增加线段或多边形控制点</summary>
        private void btnAddDot_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            EDDot dot;

            if (editobj is pPowerLine)
            {
                pPowerLine lin    = editobj as pPowerLine;
                int        idx    = assobj.order;
                int        idx2   = lin.VecPoints.Count() - 1 == idx ? idx - 1 : idx + 1;
                int        idxmin = Math.Min(idx, idx2);                 //这一点及以前的序号不变
                foreach (PowerBasicObject item in elayer.pModels.Values) //所有后点序号+1
                {
                    if (item is EDDot)
                    {
                        dot = item as EDDot;
                        if (dot.order > idxmin)
                        {
                            dot.order = dot.order + 1;
                        }
                    }
                }

                VECTOR3D np = new VECTOR3D((lin.VecPoints[idx].x + lin.VecPoints[idx2].x) / 2, (lin.VecPoints[idx].y + lin.VecPoints[idx2].y) / 2, (lin.VecPoints[idx].z + lin.VecPoints[idx2].z) / 2);

                lin.VecPoints.Insert(idxmin + 1, np);
                lin.sendChangedLocation();

                System.Windows.Media.Media3D.Point3D p3d = new System.Windows.Media.Media3D.Point3D(np.x, np.y, np.z);
                System.Windows.Media.Media3D.Point3D jwh = Helpler.PointToJWH(p3d, distnet.scene.earthManager.earthpara);
                System.Windows.Point pnt = new System.Windows.Point(jwh.Y, jwh.X);
                if (distnet.scene.coordinateManager.Enable)
                {
                    pnt = distnet.scene.coordinateManager.transToOuter(pnt);                                          //若启用了坐标转换,转换为外部坐标
                }
                dot = new EDDot(elayer)
                {
                    id       = MyClassLibrary.helper.getGUID(),
                    location = pnt.ToString(),
                };
                dot.order  = idxmin + 1;
                dot.scaleX = dot.scaleY = dot.scaleZ = distnet.UnitMeasure * 5;
                elayer.AddObject(dot);
            }
            else if (editobj is pArea)
            {
                pArea lin    = editobj as pArea;
                int   idx    = assobj.order;
                int   idx2   = lin.VecPoints.Count() - 1 == idx ? idx - 1 : idx + 1;
                int   idxmin = Math.Min(idx, idx2);                      //这一点及以前的序号不变
                foreach (PowerBasicObject item in elayer.pModels.Values) //所有后点序号+1
                {
                    if (item is EDDot)
                    {
                        dot = item as EDDot;
                        if (dot.order > idxmin)
                        {
                            dot.order = dot.order + 1;
                        }
                    }
                }

                VECTOR3D np = new VECTOR3D((lin.VecPoints[idx].x + lin.VecPoints[idx2].x) / 2, (lin.VecPoints[idx].y + lin.VecPoints[idx2].y) / 2, (lin.VecPoints[idx].z + lin.VecPoints[idx2].z) / 2);

                lin.VecPoints.Insert(idxmin + 1, np);
                lin.sendChangedLocation();

                System.Windows.Media.Media3D.Point3D p3d = new System.Windows.Media.Media3D.Point3D(np.x, np.y, np.z);
                System.Windows.Media.Media3D.Point3D jwh = Helpler.PointToJWH(p3d, distnet.scene.earthManager.earthpara);
                System.Windows.Point pnt = new System.Windows.Point(jwh.Y, jwh.X);
                if (distnet.scene.coordinateManager.Enable)
                {
                    pnt = distnet.scene.coordinateManager.transToOuter(pnt);                                          //若启用了坐标转换,转换为外部坐标
                }
                dot = new EDDot(elayer)
                {
                    id       = MyClassLibrary.helper.getGUID(),
                    location = pnt.ToString(),
                };
                dot.order  = idxmin + 1;
                dot.scaleX = dot.scaleY = dot.scaleZ = distnet.UnitMeasure * 5;
                elayer.AddObject(dot);
            }

            distnet.scene.UpdateModel();
        }