//数据库删除事件的回调 private void dataDeleted(object sender, List <DBEntity> entities) { Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; DBEntityControl dbControl = Project.Instance.GetTmpEntCol(doc); if (dbControl.Senders.Contains(this)) { return; } foreach (var entity in entities) { if (!(entity is DBTunnel)) { continue; } DBTunnel dbTunnel = entity as DBTunnel; var projectTree = Project.Instance.GetProjectTree(doc); var deleteNode = projectTree.Find((node) => { if (!(node is ProjectTreeLeafNode)) { return(false); } else { ProjectTreeLeafNode leafNode = node as ProjectTreeLeafNode; if (leafNode.HandleValue == dbTunnel.HandleValue) { return(true); } else { return(false); } } }); if (deleteNode != null) { deleteNode.GetParentNode().Children.Remove(deleteNode); bool ok = projectTree.Remove(deleteNode); if (ok) { treeList1.RefreshDataSource(); } } } }
//修改叶子节点数据到数据库 private void modityLeafNode(ProjectTreeLeafNode leafNode) { Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; DBEntityControl dbControl = Project.Instance.GetTmpEntCol(doc); DBEntity entity = dbControl.FindOne (Query.EQ("HandleValue", leafNode.HandleValue)); DBTunnel tunnel = entity as DBTunnel; tunnel.Location = leafNode.ParentPath; tunnel.Name = leafNode.Name; dbControl.Update(entity, this); }
//数据库修改事件的回调 private void dataUpdated(object sender, DBEntity entity) { Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; DBEntityControl dbControl = Project.Instance.GetTmpEntCol(doc); if (dbControl.Senders.Contains(this)) { return; } if (!(entity is DBTunnel)) { return; } DBTunnel dbTunnel = entity as DBTunnel; var projectTree = Project.Instance.GetProjectTree(doc); var updatedNode = projectTree.Find((node) => { if (!(node is ProjectTreeLeafNode)) { return(false); } else { ProjectTreeLeafNode leafNode = node as ProjectTreeLeafNode; if (leafNode.HandleValue == dbTunnel.HandleValue) { return(true); } else { return(false); } } }); updatedNode.Name = dbTunnel.Name; treeList1.RefreshDataSource(); }
//**************************数据库事件的回调函数**************************// //数据库插入事件的回调,包含cad撤销事件 private void dataInserted(object sender, DBEntity entity) { Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; DBEntityControl dbControl = Project.Instance.GetTmpEntCol(doc); if (dbControl.Senders.Contains(this)) { return; } if (!(entity is DBTunnel)) { return; } DBTunnel dbTunnel = entity as DBTunnel; var currentWorkingSurface = Project.Instance.getCurrentSurface(doc); if (currentWorkingSurface == null) { throw new System.Exception("找不到当前工作面"); } //确定工作面 ProjectTreeNode pNode = null; //如果是当前工作面 if (dbTunnel.Location == currentWorkingSurface.Path) { pNode = currentWorkingSurface; } else //非当前工作面 { var surface = findNodeByPath(dbTunnel.Location); //var surface = findParentNodeByPath(dbTunnel.Location); if (surface != null) //工程树中有巷道保存的工作面 { pNode = surface; } else { pNode = getUnassignedNode(); } } ProjectTreeLeafNode nodex = new ProjectTreeLeafNode(dbTunnel.Name, pNode, dbTunnel.HandleValue); pNode.Children.Add(nodex); var projectTree = Project.Instance.GetProjectTree(doc); var flag = projectTree.Find((n) => { if (n.Path == nodex.Path) { return(true); } else { return(false); } }); if (flag == null) { projectTree.Add(nodex); } treeList1.RefreshDataSource(); }
//通过数据库中的数据重新实例化一个工程树,使各个节点产生父子关系 public List <ProjectTreeNode> RebuldFromDB(out ProjectTreeNode currentWorkingSurface) { //数据库中的树信息 List <ProjectTreeNode> oldTree = _collection.FindAll().ToList(); List <ProjectTreeNode> tree = new List <ProjectTreeNode>(); currentWorkingSurface = null; //数据库还没有树的信息,可能是一个空的图纸 if (oldTree.Count == 0) { ProjectTreeNode node0 = new ProjectTreeNode("煤矿1", null); node0.Children.Clear(); ProjectTreeNode node1 = new ProjectTreeNode("水平1", node0); node0.Children.Add(node1); ProjectTreeNode node2 = new ProjectTreeNode("采区1", node1); node1.Children.Add(node2); ProjectTreeNode node3 = new ProjectTreeNode("工作面1", node2); node2.Children.Add(node3); tree.Add(node0); tree.Add(node1); tree.Add(node2); tree.Add(node3); currentWorkingSurface = node3; } else //有信息 { List <ProjectTreeNode> level0 = new List <ProjectTreeNode>(); List <ProjectTreeNode> level1 = new List <ProjectTreeNode>(); List <ProjectTreeNode> level2 = new List <ProjectTreeNode>(); List <ProjectTreeNode> level3 = new List <ProjectTreeNode>(); List <ProjectTreeNode> level4 = new List <ProjectTreeNode>(); foreach (var node in oldTree) { if (node.ParentPath == null) { level0.Add(node); node.Children.Clear(); } else if (node.ParentPath.Split('>').Count() == 1) { level1.Add(node); node.Children.Clear(); } else if (node.ParentPath.Split('>').Count() == 2) { level2.Add(node); node.Children.Clear(); } else if (node.ParentPath.Split('>').Count() == 3) { level3.Add(node); node.Children.Clear(); } else if (node.ParentPath.Split('>').Count() == 4) { level4.Add(node); node.Children.Clear(); } } foreach (var node in level0) { tree.Add(node); } foreach (var node in level1) { ProjectTreeNode newNode = new ProjectTreeNode(node.Name); var pNode = tree.Find((pn) => { if (pn.Path == node.ParentPath) { return(true); } else { return(false); } }); newNode.SetParentNode(pNode); pNode.Children.Add(newNode); tree.Add(newNode); } foreach (var node in level2) { ProjectTreeNode newNode = new ProjectTreeNode(node.Name); var pNode = tree.Find((pn) => { if (pn.Path == node.ParentPath) { return(true); } else { return(false); } }); newNode.SetParentNode(pNode); pNode.Children.Add(newNode); tree.Add(newNode); } foreach (var node in level3) { ProjectTreeNode newNode = new ProjectTreeNode(node.Name); var pNode = tree.Find((pn) => { if (pn.Path == node.ParentPath) { return(true); } else { return(false); } }); newNode.SetParentNode(pNode); pNode.Children.Add(newNode); tree.Add(newNode); currentWorkingSurface = newNode; } foreach (var node in level4) { ProjectTreeLeafNode newNode = new ProjectTreeLeafNode(node.Name, ((ProjectTreeLeafNode)node).HandleValue); var pNode = tree.Find((pn) => { if (pn.Path == node.ParentPath) { return(true); } else { return(false); } }); newNode.SetParentNode(pNode); pNode.Children.Add(newNode); tree.Add(newNode); } } return(tree); }