예제 #1
0
 void ucEquip_MouseMove(object sender, MouseEventArgs e)
 {
     if (isMove)
     {
         UCEquipIcon uc = e.Source as UCEquipIcon;
         Point       p  = e.GetPosition(this);//获取鼠标移动中的相对窗体坐标
         double      x  = preMousePoint.X + (p.X - preObjectPoint.X);
         double      y  = preMousePoint.Y + (p.Y - preObjectPoint.Y);
         if (x > canvas.ActualWidth - uc.ActualWidth)
         {
             x = canvas.ActualWidth - uc.ActualWidth;
         }
         if (x < 0)
         {
             x = 0;
         }
         if (y > canvas.ActualHeight - uc.ActualHeight)
         {
             y = canvas.ActualHeight - uc.ActualHeight;
         }
         if (y < 0)
         {
             y = 0;
         }
         Canvas.SetLeft(uc, x);
         Canvas.SetTop(uc, y);
     }
 }
예제 #2
0
        private void InitDrawEquip(EquipType equipType)
        {
            if (drawItem != null)
            {
                canvas.Children.Remove(drawItem as UCEquipIcon);
                drawItem = null;
            }
            UCEquipIcon ucEquip   = new UCEquipIcon();
            Binding     bindWidth = new Binding()
            {
                Path = new PropertyPath("UCEquipLength"), Source = this
            };

            bindWidth.Converter = new PicWidthToUCWidthConverter();
            Binding bindHeight = new Binding()
            {
                Path = new PropertyPath("UCEquipLength"), Source = this
            };

            bindHeight.Converter = new PicHeightToUCHeightConverter();
            ucEquip.SetBinding(UCEquipIcon.WidthProperty, bindWidth);
            ucEquip.SetBinding(UCEquipIcon.HeightProperty, bindHeight);
            Equipment equip = new Equipment();

            ucEquip.Equip      = equip;
            equip.Type         = equipType;
            ucEquip.Visibility = Visibility.Hidden;
            drawItem           = ucEquip;
            canvas.Children.Add(ucEquip as UCEquipIcon);
        }
예제 #3
0
 private void canvas_MouseMove(object sender, MouseEventArgs e)
 {
     if (drawItem != null)
     {
         if (drawItem.GetType() == typeof(UCEquipIcon))
         {
             UCEquipIcon element = drawItem as UCEquipIcon;
             element.Visibility = Visibility.Visible;
             Canvas.SetLeft(element, e.GetPosition(canvas).X - 25);
             Canvas.SetTop(element, e.GetPosition(canvas).Y + 5);
         }
         else //除了UCEquipIcon就是线
         {
             canvas.Cursor = Cursors.Pen;
         }
     }
 }
예제 #4
0
        void ucEquip_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            UCEquipIcon uc = e.Source as UCEquipIcon;

            if (drawItem == null)  //不在画图状态,选定此设备,移动物体准备
            {
                if (selectedItem == null)
                {
                    selectedItem  = uc;
                    uc.IsSelected = true;
                }
                else if (selectedItem == uc)
                {
                }
                else
                {
                    if (selectedItem.GetType().Equals(typeof(UCEquipIcon)))
                    {
                        (selectedItem as UCEquipIcon).IsSelected = false;
                    }
                    else
                    {
                        (selectedItem as Line).StrokeThickness = 2d;
                    }
                    selectedItem  = uc;
                    uc.IsSelected = true;
                }
                preObjectPoint = e.GetPosition(this);                              //获取点击前鼠标相对窗体坐标
                preMousePoint  = new Point(Canvas.GetLeft(uc), Canvas.GetTop(uc)); //获取点击前物体的坐标
                isMove         = true;                                             //开始移动了
                canvas.Cursor  = Cursors.SizeAll;
                uc.CaptureMouse();                                                 //鼠标捕获此圆
            }
            else //画图状态,只有画线起作用
            {
            }
            e.Handled = true;
        }
예제 #5
0
        void ucEquip_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            if (isMove)
            {
                UCEquipIcon uc = e.Source as UCEquipIcon;
                isMove        = false;    //结束移动了
                canvas.Cursor = Cursors.Arrow;
                uc.ReleaseMouseCapture(); //鼠标释放此圆

                //考虑在移动最后结束的时候,将数据库中有的设备(index>0)坐标变化及时写入数据库
                if (App.databaseConState == true && uc.Equip.Index > 0)
                {
                    Equipment equip = uc.Equip;
                    int       id    = equip.Index;
                    double    x     = equip.X;
                    double    y     = equip.Y;
                    if (App.idAndEquipList.ContainsKey(id))
                    {
                        App.idAndEquipList[id].X = x;
                        App.idAndEquipList[id].Y = y;
                    }
                    else
                    {
                        tbStatusMessage.Text = "App.idAndEquipList全局列表不包含此设备";
                    }
                    if (App.DBHelper.ExecuteReturnBool(string.Format("UPDATE Equipments SET Equip_X = {0},Equip_Y = {1} WHERE Equip_Index = {2}", x, y, id)))
                    {
                        tbStatusMessage.Text = string.Format("{0}位置更新 {1},{2}", equip.Name, x, y);
                    }
                    else
                    {
                        tbStatusMessage.Text = equip.Name + "位置更新失败";
                    }
                }
            }
        }
예제 #6
0
        /// <summary>
        /// 根据设备类信息和上个设备图标信息来生成本设备图标并定位
        /// </summary>
        /// <param name="equip"></param>
        /// <param name="ucLastEquip"></param>
        /// <returns></returns>
        private UCEquipIcon GetUCEquipIcon(Equipment equip)
        {
            //将图标长宽绑定到程序设置的UCEquipLength变量上来,这个变量后面可以让用户调节
            Binding bindWidth = new Binding()
            {
                Path = new PropertyPath("UCEquipLength"), Source = this
            };

            bindWidth.Converter = new PicWidthToUCWidthConverter();
            Binding bindHeight = new Binding()
            {
                Path = new PropertyPath("UCEquipLength"), Source = this
            };

            bindHeight.Converter = new PicHeightToUCHeightConverter();

            //图标控件的坐标绑定到设备类的坐标上
            Binding bindX = new Binding {
                Path = new PropertyPath("X"), Source = equip, Mode = BindingMode.TwoWay
            };
            Binding bindY = new Binding {
                Path = new PropertyPath("Y"), Source = equip, Mode = BindingMode.TwoWay
            };

            //图标控件的中心点绑定到设备类的坐标上
            Binding bindCenterX = new Binding {
                Path = new PropertyPath("X"), Source = equip
            };

            bindCenterX.Converter          = new PointToCenterPointConverter();
            bindCenterX.ConverterParameter = ucEquipLength;

            Binding bindCenterY = new Binding {
                Path = new PropertyPath("Y"), Source = equip
            };

            bindCenterY.Converter          = new PointYToCenterPointYConverter();
            bindCenterY.ConverterParameter = ucEquipLength;
            UCEquipIcon ucEquipIcon = null;

            this.Dispatcher.Invoke(new Action(() =>
            {
                ucEquipIcon = new UCEquipIcon();
                ucEquipIcon.SetBinding(UCEquipIcon.WidthProperty, bindWidth);
                ucEquipIcon.SetBinding(UCEquipIcon.HeightProperty, bindHeight);
                ucEquipIcon.SetBinding(Canvas.LeftProperty, bindX);
                ucEquipIcon.SetBinding(Canvas.TopProperty, bindY);
                ucEquipIcon.SetBinding(UCEquipIcon.CenterPointXProperty, bindCenterX);
                ucEquipIcon.SetBinding(UCEquipIcon.CenterPointYProperty, bindCenterY);
                canvas.Children.Add(ucEquipIcon);
            }));
            //图标控件和设备类互相引用
            ucEquipIcon.Equip = equip;
            equip.UCEquipIcon = ucEquipIcon;
            //图标控件的属性和事件
            ucEquipIcon.MouseLeftButtonDown  += new MouseButtonEventHandler(ucEquip_MouseLeftButtonDown);
            ucEquipIcon.MouseMove            += new MouseEventHandler(ucEquip_MouseMove);
            ucEquipIcon.MouseLeftButtonUp    += new MouseButtonEventHandler(ucEquip_MouseLeftButtonUp);
            ucEquipIcon.MouseRightButtonDown += new MouseButtonEventHandler(ucEquip_MouseRightButtonDown);

            return(ucEquipIcon);
        }
예제 #7
0
        /// <summary>
        /// 探测网络拓扑全过程,应该要在新线程中工作,后面改
        /// </summary>
        private void StartDetecNetwork(Object stateInfo)
        {
            string       strIP;
            VbCollection equipInfo;

            AddMessage("网络拓扑探测和绘制开始");
            while (WaitForDetectList.Count > 0)
            {
                if (!isDetecting)
                {
                    AddMessage("网络拓扑探测和绘制被强制结束");
                    return;
                }
                WaitForDetectInfomation waitInfo = WaitForDetectList[0];
                IpAddress ip        = waitInfo.Ip;
                Equipment lastEquip = waitInfo.Equip;
                int       step      = waitInfo.Step;
                WaitForDetectList.RemoveAt(0);
                //需要获取的单个snmp变量信息包括设备描述、objectid(enterprises.311.1.1.3.1.2,可用来判断设备厂家,待验证)

                /*objectid验证整理    enterprises = 1.3.6.1.4.1
                 * 虚拟机2003操作系统:enterprises.311.1.1.3.1.2
                 */

                if (ipAlreadyFindList.ContainsKey(ip))
                {   //这里应该不可能执行到,试一下
//                     MessageBox.Show("这里应该不可能执行到,试一下");
//                     continue;
                    //下一跳设备已经存在,只画线即可
                    if (ipAlreadyFindList[ip].Equip.AdminIPAddress.ToString() == "67.250.5.1" && lastEquip.AdminIPAddress.ToString() == "3.250.5.1")
                    {
                    }
                    DrawLine(ipAlreadyFindList[ip].Equip, lastEquip);
                    AddMessage("直接画线" + ip.ToString() + "到" + lastEquip.AdminIPAddress.ToString());
                    continue;
                }
                equipInfo = SnmpHelper.GetResultsFromOids(ip, equipInfoRequestOids, out tipMessage);
                if (equipInfo == null)
                {
                    AddMessage(string.Format("出错,错误信息:{0}", tipMessage));
                    AddMessage(string.Format("SNMP获取ip:{0}设备system信息失败,进入下一轮", ip.ToString()));
                    continue;
                }
                string sysDescr    = equipInfo[0].Value.ToString();
                string sysObjectID = equipInfo[1].Value.ToString();
                byte   sysServices = Convert.ToByte(equipInfo[2].Value.ToString());//可以根据此值尝试获取设备类型,当数据库中没有值的时候使用此猜测值。

                //开始建立ucequip,equipment,搜索静态列表是否有这个设备,取得名字等信息
                strIP = ip.ToString();
                Equipment equip = GetEquipment(strIP, sysDescr, lastEquip);
                equip.EquipBrand = SnmpHelper.GetBrandFromObjectID(sysObjectID);
                if (equip == null)
                {
                    AddMessage(string.Format("SNMP获取ip:{0}设备信息失败,进入下一轮", strIP));
                    continue;
                }
                equipAlreadyFindList.Add(equip.Index, equip);
                AddMessage("发现设备信息,设备名称:" + equip.Name);

                UCEquipIcon ucEquipIcon = GetUCEquipIcon(equip);
                if (ucEquipIcon == null)
                {
                    AddMessage(string.Format("添加设备{0}图标、定位失败,进入下一轮", strIP));
                    continue;
                }
                AddMessage(string.Format("添加设备图标,坐标x:{0},y:{1}", equip.X, equip.Y));
                //GetTextBlock(ucEquipIcon);
                FilterRouteInfo(equip, step);
                if (equip.AdminIPAddress.ToString() == "67.250.5.1" && lastEquip.AdminIPAddress.ToString() == "3.250.5.1")
                {
                }
                if (lastEquip != null)
                {
                    DrawLine(equip, lastEquip);
                }
            }
            IsDetecting = false;
            AddMessage("网络拓扑发现和绘制完毕");
        }