Example #1
0
        //数据库删除事件的回调
        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();
                    }
                }
            }
        }
Example #2
0
        //修改叶子节点数据到数据库
        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);
        }
Example #3
0
        //数据库修改事件的回调
        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();
        }
Example #4
0
        //**************************数据库事件的回调函数**************************//

        //数据库插入事件的回调,包含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();
        }
Example #5
0
        //通过数据库中的数据重新实例化一个工程树,使各个节点产生父子关系
        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);
        }