private void OnCommandEnded(Document doc, string globalName)
        {
            // 比较之前保存的通信管道,对于新增加的通信管道,添加监控
            //通信管道的判断标准是 使用了 规划或现有 通信管道的PartList
            if (!_TXCommandNames.Contains(globalName))
            {
                return;
            }
            var db = doc.Database;

            var TXPipeIds = new List <ObjectId>();

            using (var tr = db.TransactionManager.StartTransaction())
            {
                var networkIds = Utils.FindEntities <Network>(db);
                if (!networkIds.Any())
                {
                    return;
                }

                //规划通信 和 现状通信
                var plIds_GHTX = NetworkUtils.GetPartListInformation()[(int)GHPipeType.TXG].GetPartListObjectIds();
                var plIds_XZTX = NetworkUtils.GetPartListInformation()[(int)XZPipeType.TXG].GetPartListObjectIds();
                //取不到这些PartList,说明这个图不符合我们的要求,就不用继续处理了
                if (plIds_GHTX == null || plIds_XZTX == null)
                {
                    return;
                }

                var TXPartListIds = new List <ObjectId> {
                    plIds_GHTX.PartListId, plIds_GHTX.PartListId
                };

                foreach (ObjectId networkId in networkIds)
                {
                    var network = tr.GetObject(networkId, OpenMode.ForRead) as Network;
                    if (!TXPartListIds.Contains(network.PartsListId))
                    {
                        continue;                                               //不是通信管就不管了
                    }
                    var pipeIds = network.GetPipeIds();
                    TXPipeIds.AddRange(pipeIds.ToList());
                }
            }

            var newTXIds = TXPipeIds.Except(_TXPipeIds);

            if (!newTXIds.Any())
            {
                return;
            }

            var pipeSizeMonitor = PipeSizeMonitorManager.GetInstance(doc);

            newTXIds.ForEach(i => pipeSizeMonitor.StartMonitor(i, true));
        }
        //每个Document被创建的时候,我们需要注册Event监控命令的执行
        //例如PxImportSHPToPipeNetwork,这些命令创建的 通信 管道,我们需要开始监控他的Size,Size变化需要自动刷新Module孔数
        private void DocumentManager_DocumentCreated(object sender, Autodesk.AutoCAD.ApplicationServices.DocumentCollectionEventArgs e)
        {
            var doc = e.Document;

            Assertion.Assert(doc != null);
            var db = doc.Database;

            doc.CommandWillStart += Doc_CommandWillStart;
            doc.CommandEnded     += Doc_CommandEnded;
            doc.CommandCancelled += Doc_CommandCancelled;
            doc.CommandFailed    += Doc_CommandFailed;

            var TXPipeIds = new List <ObjectId>();

            using (var tr = db.TransactionManager.StartTransaction())
            {
                var networkIds = Utils.FindEntities <Network>(db);
                if (!networkIds.Any())
                {
                    return;
                }

                //规划通信 和 现状通信
                var plIds_GHTX = NetworkUtils.GetPartListInformation()[(int)GHPipeType.TXG].GetPartListObjectIds();
                var plIds_XZTX = NetworkUtils.GetPartListInformation()[(int)XZPipeType.TXG].GetPartListObjectIds();
                //取不到这些PartList,说明这个图不符合我们的要求,就不用继续处理了
                if (plIds_GHTX == null || plIds_XZTX == null)
                {
                    return;
                }

                var TXPartListIds = new List <ObjectId> {
                    plIds_GHTX.PartListId, plIds_GHTX.PartListId
                };

                foreach (ObjectId networkId in networkIds)
                {
                    var network = tr.GetObject(networkId, OpenMode.ForRead) as Network;
                    if (!TXPartListIds.Contains(network.PartsListId))
                    {
                        continue;                                               //不是通信管就不管了
                    }
                    var pipeIds = network.GetPipeIds();
                    TXPipeIds.AddRange(pipeIds.ToList());
                }
                tr.Commit();
            }

            var pipeSizeMonitor = PipeSizeMonitorManager.GetInstance(doc);

            TXPipeIds.ForEach(i => pipeSizeMonitor.StartMonitor(i, false));
        }