private bool RemoveDev(DevEntity dev)
        {
            if (MessageBox.Show("确认删除设备:" + dev.Name + "?", "警告", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                var r = devService.Delete(dev.Id + "");
                if (r == null)
                {
                    MessageBox.Show("删除失败");
                    return(false);
                }
                var area = AreaCanvas1.CurrentArea;
                area.RemoveLeafNode(dev.Id);
                AreaCanvas1.RemoveDev(dev.Id);

                var topoTree = ResourceTreeView1.TopoTree;
                topoTree.RemoveDevNode(dev.Id);
                return(true);
                //topoTree.RefreshNode(dev.ParentId);
                //ResourceTreeView1.TopoTree.RemoveCurrentNode();
            }
            else
            {
                return(false);
            }
        }
        private void EngineClient_NewAlarmsFired(List <DbModel.Location.Alarm.LocationAlarm> obj)
        {
            var alarms = obj.ToTModel().ToArray();

            AlarmHub.SendLocationAlarms(alarms);
            AreaCanvas1.ShowLocationAlarms(alarms);
        }
示例#3
0
        private void ShowPersons()
        {
            if (currentArea == null)
            {
                return;
            }
            if (AreaCanvas1 == null)
            {
                return;
            }
            var service = new PersonService();
            //var persons = service.GetListByArea(area.Id + "");
            //if (persons == null)
            //{
            //    persons = service.GetListByArea("");
            //}
            var persons    = service.GetList(true);
            var posService = new PosService();
            var posList    = posService.GetList();//todo:实时数据以后从缓存中取

            foreach (var item in persons)
            {
                var pos = posList.FirstOrDefault(i => i.Tag == item.Tag.Code);
                item.Pos = pos;
            }
            AreaCanvas1.ShowPersons(persons);
        }
 private void RemoveArea(AreaEntity area)
 {
     if (area.Children == null)
     {
         area.Children = areaService.GetListByPid(area.Id + "");
     }
     if (area.Children != null && area.Children.Count > 0)
     {
         MessageBox.Show("存在子区域,不能删除!");
     }
     if (area.LeafNodes == null)
     {
         area.LeafNodes = devService.GetListByPid(area.Id + "");
     }
     if (area.LeafNodes != null && area.LeafNodes.Count > 0)
     {
         MessageBox.Show("存在子设备,不能删除!");
     }
     if (MessageBox.Show("确认删除区域:" + area.Name + "?", "警告", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
     {
         var r = areaService.Delete(area.Id + "");
         if (r == null)
         {
             MessageBox.Show("删除失败");
         }
         else
         {
             AreaCanvas1.RemoveArea(area.Id);
         }
     }
 }
示例#5
0
        private void Tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            currentArea = ResourceTreeView1.TopoTree.SelectedObject as AreaEntity;
            if (currentArea != null)
            {
                Bll bll         = new Bll();
                var switchAreas = bll.bus_anchor_switch_area.ToList();

                AreaCanvas1.ShowDev = true;
                AreaCanvas1.ShowArea(currentArea, switchAreas);

                AreaListBox1.LoadData(currentArea.Children);
                DeviceListBox1.LoadData(currentArea.LeafNodes);

                ShowPersons();

                ArchorListExportControl1.Clear();
                TabControl1.SelectionChanged -= TabControl1_OnSelectionChanged;
                TabControl1.SelectionChanged += TabControl1_OnSelectionChanged;

                if (TabControl1.SelectedIndex == 2)
                {
                    ArchorListExportControl1.LoadData(currentArea.Id);
                    TabControl1.SelectionChanged -= TabControl1_OnSelectionChanged;
                }
            }
            else
            {
                var dev = ResourceTreeView1.TopoTree.SelectedObject as DevEntity;
                if (dev != null)
                {
                    AreaCanvas1.SelectDevById(dev.Id);
                }
            }
        }
        private void SimulationWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
            AreaCanvas1.Init();

            InitCbList();

            LoadData();
        }
        //private void CreateDevInfo(int areaId,Point point)
        //{
        //    //DevEntity

        //    var area= areaId
        //}

        private Window SetDevInfo(Rectangle rect, DevEntity obj, bool isShow = true)
        {
            var parentArea = areaService.GetEntity(obj.ParentId + "");

            if (parentArea.IsPark()) //电厂
            {
                var bound      = parentArea.InitBound;
                var leftBottom = bound.GetLeftBottomPoint();

                parkArchorSettingWnd             = new ParkArchorSettingWindow();
                ArchorSettingContext.ZeroX       = leftBottom.X;
                ArchorSettingContext.ZeroY       = leftBottom.Y;
                parkArchorSettingWnd.RefreshDev += (dev) => {
                    archorSettings = bll.ArchorSettings.ToList();
                    obj.Refresh(dev);
                    AreaCanvas1.RefreshDev(dev);
                };
                parkArchorSettingWnd.ShowPointEvent += (x, y) => { AreaCanvas1.ShowPoint(x, y); };
                parkArchorSettingWnd.Closed         += (sender, e) => { parkArchorSettingWnd = null; };

                if (isShow)
                {
                    parkArchorSettingWnd.Show();
                }

                if (parkArchorSettingWnd.ShowInfo(rect, obj.Id) == false)
                {
                    parkArchorSettingWnd.Close();
                    parkArchorSettingWnd = null;
                }
                return(parkArchorSettingWnd);
            }
            else
            {
                roomArchorSettingWnd = new RoomArchorSettingWindow();
                //roomArchorSettingWnd.Owner = this;
                roomArchorSettingWnd.RefreshDev += (dev) => {
                    archorSettings = bll.ArchorSettings.ToList();
                    obj.Refresh(dev);
                    AreaCanvas1.RefreshDev(dev);
                };
                roomArchorSettingWnd.ShowPointEvent += (x, y) => { AreaCanvas1.ShowPoint(x, y); };
                roomArchorSettingWnd.Closed         += (sender, e) => { roomArchorSettingWnd = null; };
                if (isShow)
                {
                    roomArchorSettingWnd.Show();
                }
                if (roomArchorSettingWnd.ShowInfo(rect, obj.Id) == false)
                {
                    roomArchorSettingWnd.Close();
                    roomArchorSettingWnd = null;
                }
                return(roomArchorSettingWnd);
            }
        }
示例#8
0
        private void SetDevInfo(Rectangle rect, DevEntity obj)
        {
            var parentArea = areaService.GetEntity(obj.ParentId + "");

            //obj.Parent
            if (parentArea.IsPark()) //电厂
            {
                var bound = parentArea.InitBound;
                //if (bound.Points == null)
                //{
                //    bound.Points = new Bll().Points.FindAll(i => i.BoundId == bound.Id);
                //}
                var leftBottom = bound.GetLeftBottomPoint();

                parkArchorSettingWnd       = new ParkArchorSettingWindow();
                ArchorSettingContext.ZeroX = leftBottom.X;
                ArchorSettingContext.ZeroY = leftBottom.Y;
                //win2.Owner = this;
                parkArchorSettingWnd.RefreshDev += (dev) => {
                    archorSettings = bll.ArchorSettings.ToList();
                    AreaCanvas1.RefreshDev(dev);
                };
                parkArchorSettingWnd.ShowPointEvent += (x, y) => { AreaCanvas1.ShowPoint(x, y); };
                parkArchorSettingWnd.Closed         += (sender, e) => { parkArchorSettingWnd = null; };
                parkArchorSettingWnd.Show();

                if (parkArchorSettingWnd.ShowInfo(rect, obj.Id) == false)
                {
                    parkArchorSettingWnd.Close();
                    parkArchorSettingWnd = null;
                    return;
                }
            }
            else
            {
                roomArchorSettingWnd = new RoomArchorSettingWindow();
                //roomArchorSettingWnd.Owner = this;
                roomArchorSettingWnd.RefreshDev += (dev) => {
                    archorSettings = bll.ArchorSettings.ToList();
                    AreaCanvas1.RefreshDev(dev);
                };
                roomArchorSettingWnd.ShowPointEvent += (x, y) => { AreaCanvas1.ShowPoint(x, y); };
                roomArchorSettingWnd.Closed         += (sender, e) => { roomArchorSettingWnd = null; };
                roomArchorSettingWnd.Show();
                if (roomArchorSettingWnd.ShowInfo(rect, obj.Id) == false)
                {
                    roomArchorSettingWnd.Close();
                    roomArchorSettingWnd = null;
                    return;
                }
            }
        }
示例#9
0
        private void RemoveDev(DevEntity dev)
        {
            if (MessageBox.Show("确认删除设备:" + dev.Name + "?", "警告", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                var r = devService.Delete(dev.Id + "");
                if (r == null)
                {
                    MessageBox.Show("删除失败");
                }
                AreaCanvas1.RemoveDev(dev.Id);

                //topoTree.RefreshNode(dev.ParentId);
                //ResourceTreeView1.TopoTree.RemoveCurrentNode();
            }
        }
        private void TopoTreeView1_SelectedObjectChanged(object obj)
        {
            area = obj as PhysicalTopology;
            if (area == null)
            {
                return;
            }
            AreaCanvas1.ShowDev = true;
            AreaCanvas1.ShowArea(area);
            var service = new PersonService();
            var persons = service.GetListByArea(area.Id + "");

            if (persons == null)
            {
                persons = service.GetListByArea("");
            }
            AreaCanvas1.ShowPersons(persons);
        }
 private void Win_AreaModified(AreaEntity obj)
 {
     LoadData();
     if (obj.LeafNodes != null)
     {
         foreach (DevEntity leaf in obj.LeafNodes)
         {
             if (leaf.TypeName == "基站")
             {
                 var    newDevRect = AreaCanvas1.GetDev(leaf.Id);
                 Window wnd        = SetDevInfo(newDevRect, newDevRect.Tag as DevEntity, false);
                 if (wnd is RoomArchorSettingWindow)
                 {
                     (wnd as RoomArchorSettingWindow).SaveInfo(false);
                 }
                 if (wnd is ParkArchorSettingWindow)
                 {
                     (wnd as ParkArchorSettingWindow).SaveInfo(false);
                 }
                 //wnd.Close();
             }
         }
     }
 }
示例#12
0
        void InitAreaCanvas()
        {
            AreaCanvas1.Init();
            ContextMenu devContextMenu = new ContextMenu();

            devContextMenu.AddMenu("设置设备", (tag) =>
            {
                SetDevInfo(AreaCanvas1.SelectedDev, AreaCanvas1.SelectedDev.Tag as DevEntity);
            });
            devContextMenu.AddMenu("删除设备", (tag) =>
            {
                var dev = AreaCanvas1.SelectedDev.Tag as DevEntity;
                RemoveDev(dev);
            });
            devContextMenu.AddMenu("复制设备", (tag) =>
            {
                var dev       = AreaCanvas1.SelectedDev.Tag as DevEntity;
                dev.Pos.PosX += 5;
                dev.Pos.PosY += 5;
                dev.Name     += " Copy";
                dev.Code      = "";
                //dev.Ip = "";
                var dev2 = devService.Post(dev);

                var archor       = dev.DevDetail as TArchor;
                archor.X        += 5;
                archor.Y        += 5;
                archor.Name     += " Copy";
                archor.Code      = "";
                archor.Ip        = "";
                archor.DevInfoId = dev2.Id;
                var archorNew    = archorService.Post(archor);
                archorNew.Code   = "Code_" + archorNew.Id;
                archorService.Put(archorNew);

                LoadData();
            });
            AreaCanvas1.DevContextMenu = devContextMenu;
            ContextMenu areaContextMenu = new ContextMenu();

            areaContextMenu.AddMenu("设置区域", (tag) =>
            {
                var area = AreaCanvas1.SelectedArea;
                ShowAreaInfo(area);
            });
            areaContextMenu.AddMenu("删除区域", (tag) =>
            {
                var area = AreaCanvas1.SelectedArea;
                RemoveArea(area);
            });
            areaContextMenu.AddMenu("删除区域内设备", (tag) =>
            {
                var area = AreaCanvas1.SelectedArea;
                RemoveAreaDevs(area);
            });
            AreaCanvas1.AreaContextMenu = areaContextMenu;

            archorSettings             = bll.ArchorSettings.ToList();
            AreaCanvas1.GetSettingFunc = (dev) =>
            {
                object detail = dev.DevDetail;
                if (detail is TArchor)
                {
                    var archor = detail as TArchor;
                    return(archorSettings.Find(i => i.Code == archor.Code));
                }
                return(null);
            };
        }
 private void DeviceListBox1_SelectedItemChanged(DevEntity obj)
 {
     AreaCanvas1.SelectDev(obj);
 }
示例#14
0
        private void LoadAreaTree()
        {
            var tree = areaService.GetTree(1);

            if (tree == null)
            {
                return;
            }
            var devList    = tree.GetAllDev();
            var archorList = archorService.GetList();

            foreach (var dev in devList)
            {
                if (archorList != null)
                {
                    dev.DevDetail = archorList.FirstOrDefault(i => i.DevInfoId == dev.Id);
                }
            }
            var topoTree = ResourceTreeView1.TopoTree;

            topoTree.AreaMenu = new ContextMenu();
            topoTree.AreaMenu.AddMenu("添加区域", (obj) =>
            {
                var area            = topoTree.SelectedObject as AreaEntity;
                var win             = new NewAreaWindow(area);
                win.ShowPointEvent += (x, y) =>
                {
                    AreaCanvas1.ShowPoint(x, y);
                };
                if (win.ShowDialog() == true)
                {
                    var newArea = win.NewArea;
                    area.AddChild(newArea.ToTModel());
                    topoTree.RefreshCurrentNode <AreaEntity, DevEntity>(area);
                    AreaCanvas1.Refresh();
                }
            });
            topoTree.AreaMenu.AddMenu("设置区域", (tag) =>
            {
                var area = topoTree.SelectedObject as AreaEntity;
                ShowAreaInfo(area);
            });
            topoTree.AreaMenu.AddMenu("删除区域", (tag) =>
            {
                var area = topoTree.SelectedObject as AreaEntity;
                RemoveArea(area);
            });
            topoTree.AreaMenu.AddMenu("添加基站", (tag) =>
            {
                var area = topoTree.SelectedObject as AreaEntity;

                var archor      = new TArchor();
                archor.X        = 10;
                archor.Y        = 10;
                archor.Name     = "NewArchor";
                archor.Code     = "";
                archor.Ip       = "";
                archor.ParentId = area.Id;
                var archorNew   = archorService.Post(archor);
                archorNew.Code  = "Code_" + archorNew.Id;
                archorService.Put(archorNew);

                area.AddLeaf(archorNew.DevInfo);

                topoTree.RefreshCurrentNode <AreaEntity, DevEntity>(area);
                AreaCanvas1.Refresh();
            });
            //topoTree.AreaMenu.AddMenu("调整子区域坐标", (tag) =>
            //{
            //    var area = topoTree.SelectedObject as AreaEntity;
            //    var bound = area.InitBound;
            //    var x = bound.MinX;
            //    var y = bound.MinY;
            //    var boundList = new List<Bound>();
            //    foreach (var subArea in area.Children)
            //    {
            //        var subBound = subArea.InitBound;
            //        if (subBound != null)
            //        {
            //            var points = subBound.Points;
            //            if (points != null)
            //            {
            //                foreach (var point in points)
            //                {
            //                    point.X -= x;
            //                    point.Y -= y;
            //                }
            //                bll.Points.EditRange(points.ToDbModel());
            //            }
            //            subBound.SetMinMaxXY();
            //            boundList.Add(subBound);
            //        }
            //    }
            //    bll.Bounds.EditRange(boundList.ToDbModel());
            //});

            topoTree.AreaMenu.AddMenu("复制结构", (tag) =>
            {
                var area = topoTree.SelectedObject as AreaEntity;

                var area1 = areaService.GetEntity("240", true);

                area.InitBound.SetMinMaxXY();
                bll.Bounds.Edit(area.InitBound.ToDbModel());

                var children = area1.Children.CloneObjectList().ToList();

                var newBounds = new List <Bound>();
                foreach (var item in children)
                {
                    if (item.InitBound.Points == null)
                    {
                        item.InitBound.Points = bll.Points.FindAll(i => i.BoundId == item.Id).ToTModel();
                    }
                    newBounds.Add(item.InitBound);
                }

                var dbBounds = newBounds.ToDbModel();
                bll.Bounds.AddRange(dbBounds);
                for (int i = 0; i < children.Count; i++)
                {
                    AreaEntity item  = children[i];
                    item.ParentId    = area.Id;
                    item.InitBoundId = dbBounds[i].Id;
                }
                foreach (var item in dbBounds)
                {
                    var points = item.Points.CloneObjectList();
                    foreach (var point in points)
                    {
                        point.BoundId = item.Id;
                    }
                    bll.Points.AddRange(points);
                }
                var dbChildren = children.ToDbModel();
                bll.Areas.AddRange(dbChildren);

                var devs = area1.LeafNodes.CloneObjectList().ToList();;
                foreach (var item in devs)
                {
                    item.ParentId  = area.Id;
                    item.Code      = "";
                    item.IP        = "";
                    item.DevDetail = bll.Archors.Find(i => i.DevInfoId == item.Id).ToTModel();
                }
                var dbDevs = devs.ToDbModel();
                bll.DevInfos.AddRange(dbDevs);


                var archors = new List <TModel.Location.AreaAndDev.Archor>();
                for (int i = 0; i < devs.Count; i++)
                {
                    DevEntity dev    = devs[i];
                    var archor       = dev.DevDetail as TModel.Location.AreaAndDev.Archor;
                    archor.Code      = "";
                    archor.Ip        = "";
                    archor.ParentId  = area.Id;
                    archor.DevInfoId = dbDevs[i].Id;
                    archors.Add(archor);
                }
                bll.Archors.AddRange(archors.ToDbModel());


                //var archor = new TArchor();
                //archor.X = 10;
                //archor.Y = 10;
                //archor.Name = "NewArchor";
                //archor.Code = "";
                //archor.Ip = "";
                //archor.ParentId = area.Id;
                //var archorNew = archorService.Post(archor);
                //archorNew.Code = "Code_" + archorNew.Id;
                //archorService.Put(archorNew);

                //area.AddLeaf(archorNew.DevInfo);

                topoTree.RefreshCurrentNode <AreaEntity, DevEntity>(area);
                AreaCanvas1.Refresh();
            });

            topoTree.DevMenu = new ContextMenu();
            topoTree.DevMenu.AddMenu("设置设备", (tag) =>
            {
                var dev = topoTree.SelectedObject as DevEntity;
                SetDevInfo(null, dev);
            });
            topoTree.DevMenu.AddMenu("基站配置", (tag) =>
            {
                //var dev = topoTree.SelectedObject as DevEntity;
                //SetDevInfo(null, dev);
            });
            topoTree.DevMenu.AddMenu("删除设备", (tag) =>
            {
                var dev = topoTree.SelectedObject as DevEntity;
                RemoveDev(dev);
            });

            topoTree.LoadDataEx <AreaEntity, DevEntity>(tree);
            topoTree.Tree.SelectedItemChanged += Tree_SelectedItemChanged;
            topoTree.ExpandLevel(2);


            if (_archors != null)
            {
                List <int> ids = new List <int>();
                foreach (var archor in _archors)
                {
                    topoTree.SelectNode((int)archor.ParentId, archor.DevInfoId);
                    ids.Add(archor.DevInfoId);
                }
                AreaCanvas1.SelectDevsById(ids);
            }
            else
            {
                topoTree.SelectFirst();
            }
        }
 private void AreaListBox1_SelectedItemChanged(AreaEntity obj)
 {
     AreaCanvas1.SelectArea(obj);
 }
        private void InitTopoTreeAreaMenu(WPFClientControlLib.TopoTreeView topoTree)
        {
            topoTree.AreaMenu = new ContextMenu();
            topoTree.AreaMenu.AddMenu("添加区域", (obj) =>
            {
                var area            = topoTree.SelectedObject as AreaEntity;
                var win             = new NewAreaWindow(area, 0);
                win.ShowPointEvent += (x, y) =>
                {
                    AreaCanvas1.ShowPoint(x, y);
                };
                if (win.ShowDialog() == true)
                {
                    var newArea = win.NewArea;
                    area.AddChild(newArea.ToTModel());
                    topoTree.RefreshCurrentNode <AreaEntity, DevEntity>(area);
                    AreaCanvas1.Refresh();
                }
            });

            topoTree.AreaMenu.AddMenu("添加区域(柱子)", (obj) =>
            {
                var area            = topoTree.SelectedObject as AreaEntity;
                var win             = new NewAreaWindow(area, 1);
                win.ShowPointEvent += (x, y) =>
                {
                    AreaCanvas1.ShowPoint(x, y);
                };
                if (win.ShowDialog() == true)
                {
                    var newArea = win.NewArea;
                    area.AddChild(newArea.ToTModel());
                    topoTree.RefreshCurrentNode <AreaEntity, DevEntity>(area);
                    AreaCanvas1.Refresh();
                }
            });
            topoTree.AreaMenu.AddMenu("设置区域", (tag) =>
            {
                var area = topoTree.SelectedObject as AreaEntity;
                ShowAreaInfo(area);
            });
            topoTree.AreaMenu.AddMenu("删除区域", (tag) =>
            {
                var area = topoTree.SelectedObject as AreaEntity;
                RemoveArea(area);
            });
            topoTree.AreaMenu.AddMenu("添加基站", (tag) =>
            {
                var area = topoTree.SelectedObject as AreaEntity;

                var archor      = new TArchor();
                archor.X        = 10;
                archor.Y        = 10;
                archor.Name     = "NewArchor";
                archor.Code     = "";
                archor.Ip       = "";
                archor.ParentId = area.Id;
                var archorNew   = archorService.Post(archor);
                archorNew.Code  = "Code_" + archorNew.Id;
                archorService.Put(archorNew);

                area.AddLeaf(archorNew.DevInfo);

                topoTree.RefreshCurrentNode <AreaEntity, DevEntity>(area);
                AreaCanvas1.Refresh();
            });
            //topoTree.AreaMenu.AddMenu("调整子区域坐标", (tag) =>
            //{
            //    var area = topoTree.SelectedObject as AreaEntity;
            //    var bound = area.InitBound;
            //    var x = bound.MinX;
            //    var y = bound.MinY;
            //    var boundList = new List<Bound>();
            //    foreach (var subArea in area.Children)
            //    {
            //        var subBound = subArea.InitBound;
            //        if (subBound != null)
            //        {
            //            var points = subBound.Points;
            //            if (points != null)
            //            {
            //                foreach (var point in points)
            //                {
            //                    point.X -= x;
            //                    point.Y -= y;
            //                }
            //                bll.Points.EditRange(points.ToDbModel());
            //            }
            //            subBound.SetMinMaxXY();
            //            boundList.Add(subBound);
            //        }
            //    }
            //    bll.Bounds.EditRange(boundList.ToDbModel());
            //});

            topoTree.AreaMenu.AddMenu("复制结构", (tag) =>
            {
                var area = topoTree.SelectedObject as AreaEntity;

                var area1 = areaService.GetEntity("240", true);

                area.InitBound.SetMinMaxXY();
                bll.Bounds.Edit(area.InitBound.ToDbModel());

                var children = area1.Children.CloneObjectList().ToList();

                var newBounds = new List <Bound>();
                foreach (var item in children)
                {
                    if (item.InitBound.Points == null)
                    {
                        item.InitBound.Points = bll.Points.FindAll(i => i.BoundId == item.Id).ToTModel();
                    }
                    newBounds.Add(item.InitBound);
                }

                var dbBounds = newBounds.ToDbModel();
                bll.Bounds.AddRange(dbBounds);
                for (int i = 0; i < children.Count; i++)
                {
                    AreaEntity item  = children[i];
                    item.ParentId    = area.Id;
                    item.InitBoundId = dbBounds[i].Id;
                }
                foreach (var item in dbBounds)
                {
                    var points = item.Points.CloneObjectList();
                    foreach (var point in points)
                    {
                        point.BoundId = item.Id;
                    }
                    bll.Points.AddRange(points);
                }
                var dbChildren = children.ToDbModel();
                bll.Areas.AddRange(dbChildren);

                var devs = area1.LeafNodes.CloneObjectList().ToList();;
                foreach (var item in devs)
                {
                    item.ParentId  = area.Id;
                    item.Code      = "";
                    item.IP        = "";
                    item.DevDetail = bll.Archors.Find(i => i.DevInfoId == item.Id).ToTModel();
                }
                var dbDevs = devs.ToDbModel();
                bll.DevInfos.AddRange(dbDevs);


                var archors = new List <TModel.Location.AreaAndDev.Archor>();
                for (int i = 0; i < devs.Count; i++)
                {
                    DevEntity dev    = devs[i];
                    var archor       = dev.DevDetail as TModel.Location.AreaAndDev.Archor;
                    archor.Code      = "";
                    archor.Ip        = "";
                    archor.ParentId  = area.Id;
                    archor.DevInfoId = dbDevs[i].Id;
                    archors.Add(archor);
                }
                bll.Archors.AddRange(archors.ToDbModel());
                topoTree.RefreshCurrentNode <AreaEntity, DevEntity>(area);
                AreaCanvas1.Refresh();
            });
        }
        private void LoadAreaTree()
        {
            DbAreaEntity tree1 = null;

            if (FilterAreaTree == null)
            {
                tree1 = bll.GetAreaTree(true, null, true);
            }
            else
            {
                tree1 = bll.GetAreaTreeEx(false, null, FilterAreaTree);
            }


            var tree = tree1.ToTModel();

            if (tree == null)
            {
                return;
            }
            var devList    = tree.GetAllDev();
            var archorList = archorService.GetList();

            foreach (var dev in devList)
            {
                if (archorList != null)
                {
                    dev.DevDetail = archorList.FirstOrDefault(i => i.DevInfoId == dev.Id);
                }
            }
            var topoTree = ResourceTreeView1.TopoTree;
            var iId      = topoTree.SelectedObject as IId;

            InitTopoTreeAreaMenu(topoTree);
            InitTopoTreeDevMenu(topoTree);
            topoTree.LoadDataEx <AreaEntity, DevEntity>(tree);
            topoTree.Tree.SelectedItemChanged += Tree_SelectedItemChanged;
            topoTree.ExpandLevel(2);

            if (_archors != null)
            {
                List <int> ids = new List <int>();
                foreach (var archor in _archors)
                {
                    topoTree.SelectNode(typeof(AreaEntity), (int)archor.ParentId, archor.DevInfoId);
                    ids.Add(archor.DevInfoId);
                }
                AreaCanvas1.SelectDevsById(ids);//
                //AreaCanvas1.SelectDevsByIdEx(ids);//把其他的都删除了
            }
            else
            {
                if (iId == null)
                {
                    topoTree.SelectFirst();
                }
                else
                {
                    topoTree.SelectNodeById(iId);
                }
            }
        }
        void InitAreaCanvas()
        {
            AreaCanvas1.Init();
            AreaCanvas1.udpArchorList = ArchorManager.LoadArchorListResult();
            ContextMenu devContextMenu = new ContextMenu();

            devContextMenu.AddMenu("设置设备", (tag) =>
            {
                SetDevInfo(AreaCanvas1.SelectedDev, AreaCanvas1.SelectedDev.Tag as DevEntity);
            });
            devContextMenu.AddMenu("删除设备", (tag) =>
            {
                var dev = AreaCanvas1.SelectedDev.Tag as DevEntity;
                RemoveDev(dev);
            });
            devContextMenu.AddMenu("复制设备", (tag) =>
            {
                var dev       = AreaCanvas1.SelectedDev.Tag as DevEntity;
                dev.Pos.PosX += 5;
                dev.Pos.PosY += 5;
                dev.Name     += " Copy";
                dev.Code      = "";
                //dev.Ip = "";
                var dev2 = devService.Post(dev);

                var archor = dev.DevDetail as TArchor;
                if (archor != null)
                {
                    archor.X        += 5;
                    archor.Y        += 5;
                    archor.Name     += " Copy";
                    archor.Code      = "";
                    archor.Ip        = "";
                    archor.DevInfoId = dev2.Id;
                    var archorNew    = archorService.Post(archor);
                    archorNew.Code   = "Code_" + archorNew.Id;
                    archorService.Put(archorNew);
                }
                LoadData();
            });
            AreaCanvas1.DevContextMenu = devContextMenu;
            ContextMenu areaContextMenu = new ContextMenu();

            areaContextMenu.AddMenu("设置区域", (tag) =>
            {
                var area = AreaCanvas1.SelectedArea;
                ShowAreaInfo(area);
            });
            areaContextMenu.AddMenu("删除区域", (tag) =>
            {
                var area = AreaCanvas1.SelectedArea;
                RemoveArea(area);
            });
            areaContextMenu.AddMenu("删除区域内设备", (tag) =>
            {
                var area = AreaCanvas1.SelectedArea;
                RemoveAreaDevs(area);
            });
            areaContextMenu.AddMenu("添加测量点", (tag) =>
            {
                var area             = AreaCanvas1.SelectedArea;
                TrackPointWindow win = new TrackPointWindow();
                if (win.Show(area.Id, AreaCanvas1.SelectedPoint2) == true)
                {
                    var newDev = win._tp;
                    area.AddLeafNode(newDev.ToTModel());
                    AreaCanvas1.Refresh();
                    var newDevRect = AreaCanvas1.GetDev(newDev.Id);
                    Window wnd     = SetDevInfo(newDevRect, newDevRect.Tag as DevEntity);
                    if (wnd is RoomArchorSettingWindow)
                    {
                        (wnd as RoomArchorSettingWindow).SaveInfo(false);
                        //wnd.Close();
                    }
                }
                //RoomArchorSettingWindow win = new RoomArchorSettingWindow();
                //var dev = topoTree.SelectedObject as DevEntity;
                //SetDevInfo(null, null);
            });
            AreaCanvas1.AreaContextMenu = areaContextMenu;

            archorSettings             = bll.ArchorSettings.ToList();
            AreaCanvas1.GetSettingFunc = (dev) =>
            {
                object detail = dev.DevDetail;
                if (detail is TArchor)
                {
                    var archor = detail as TArchor;
                    return(archorSettings.Find(i => i.Code == archor.Code));
                }
                return(null);
            };
        }
        private void RemoveAreaDevs(AreaEntity area)
        {
            if (area.LeafNodes == null)
            {
                area.LeafNodes = devService.GetListByPid(area.Id + "");
            }

            List <DevEntity> devs = new List <DevEntity>();

            //List<DevEntity> devs2 = new List<DevEntity>();
            if (area.Type == AreaTypes.机房)
            {
                var parent = area.Parent;
                if (parent == null)
                {
                    parent = areaService.GetParent(area.Id + "");
                }
                var devs2 = parent.LeafNodes;
                if (devs2 == null)
                {
                    devs2 = devService.GetListByPid(parent.Id + "");
                }
                foreach (var item in devs2)
                {
                    if (area.InitBound.Contains(item.Pos.PosX, item.Pos.PosZ))
                    {
                        devs.Add(item);
                    }
                }
            }
            else if (area.Type == AreaTypes.楼层)
            {
                var devs2 = area.LeafNodes;
                if (devs2 == null)
                {
                    devs2 = devService.GetListByPid(area.Id + "");
                }
                foreach (var item in devs2)
                {
                    if (area.InitBound.Contains(item.Pos.PosX, item.Pos.PosZ))
                    {
                        devs.Add(item);
                    }
                }
            }

            //var devs=devService.GetListByBound(area.InitBound);
            AreaCanvas1.SelectDevs(devs);
            if (MessageBox.Show(string.Format("确认删除区域'{0}'内{1}个设备?", area.Name, devs.Count), "警告", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
            {
                foreach (var dev in devs)
                {
                    var r = devService.Delete(dev.Id + "");
                    if (r == null)
                    {
                        MessageBox.Show("删除失败:" + dev.Name);
                    }
                    AreaCanvas1.RemoveDev(dev.Id);
                }
            }
            else
            {
                AreaCanvas1.ClearSelect();
            }
        }