///<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(); } }
///<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; } }
///<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(); }
///<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; } }
///<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; //} }
///<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(); }