public static Location.TModel.Location.AreaAndDev.PhysicalTopology ToTModel( this DbModel.Location.AreaAndDev.Area item1) { if (item1 == null) { return(null); } var item2 = new Location.TModel.Location.AreaAndDev.PhysicalTopology(); item2.Id = item1.Id; item2.Name = item1.Name; item2.ParentId = item1.ParentId; //item2.Parent = item1.Parent; item2.Number = item1.Number; item2.Type = item1.Type; item2.Describe = item1.Describe; //item2.Tag = item1.Tag; item2.Children = item1.Children.ToTModel(); item2.LeafNodes = item1.LeafNodes.ToTModel(); item2.KKS = item1.KKS; item2.TransfromId = item1.Id; item2.Transfrom = item1.GetTransformM().ToTModel(); item2.InitBoundId = item1.InitBoundId; item2.InitBound = item1.InitBound.ToTModel(); item2.EditBoundId = item1.EditBoundId; //item2.EditBound = item1.EditBound.ToTModel();//这个没用 不用传递 item2.IsRelative = item1.IsRelative; item2.IsCreateAreaByData = item1.IsCreateAreaByData; item2.IsOnAlarmArea = item1.IsOnAlarmArea; item2.IsOnLocationArea = item1.IsOnLocationArea; return(item2); }
private void Win_AreaModified(TEntity area) { ShowInfo(area); if (AreaModified != null) { AreaModified(area); } }
public void ShowArea(AreaEntity area, List <bus_anchor_switch_area> switchAreas = null) { try { _switchAreas = switchAreas; CurrentArea = area; CbView.SelectionChanged -= CbView_OnSelectionChanged; CbView.SelectionChanged += CbView_OnSelectionChanged; if (area == null) { return; } if (area.IsPark()) //电厂 { SelectedArea = area; int scale = 3; DevSize = 3; Clear(); DrawPark(area, scale, DevSize); InitCbScale(scale); InitCbDevSize(new double[] { 0.5, 1, 2, 3, 4, 5 }, DevSize); //ShowPersons(area.Persons); ShowSwitchArea(area, switchAreas, scale); } else if (area.Type == AreaTypes.楼层) { //GetSettingFunc = null; SelectedArea = area; int scale = 20; DevSize = 0.4; DrawFloor(area, scale, DevSize); InitCbScale(scale); InitCbDevSize(new double[] { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6 }, DevSize); //ShowPersons(area.Persons); } else if (area.Type == AreaTypes.分组) { SelectAreas(area.Children); } else { SelectArea(area); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
public void ShowInfo(TEntity item) { _item = item; PropertyGrid1.SelectedObject = null; PropertyGrid1.SelectedObject = _item; if (item.Parent != null) { this.Title = item.Parent.Name + "->" + item.Name; } else { this.Title = item.Name; } }
public static DbModel.Location.AreaAndDev.Area ToDbModel( this Location.TModel.Location.AreaAndDev.PhysicalTopology item1) { if (item1 == null) { return(null); } var item2 = new DbModel.Location.AreaAndDev.Area(); item2.Id = item1.Id; //item2.Abutment_Id = item1.Abutment_Id; item2.Name = item1.Name; item2.KKS = item1.KKS; item2.ParentId = item1.ParentId; //item2.Abutment_ParentId = item1.Abutment_ParentId; //item2.X = item1.X; //item2.Y = item1.Y; //item2.Z = item1.Z; //item2.RX = item1.RX; //item2.RY = item1.RY; //item2.RZ = item1.RZ; //item2.SX = item1.SX; //item2.SY = item1.SY; //item2.SZ = item1.SZ; //item2.IsRelative = item1.IsRelative; //item2.IsOnNormalArea = item1.IsOnNormalArea; //item2.IsOnAlarmArea = item1.IsOnAlarmArea; //item2.IsOnLocationArea = item1.IsOnLocationArea; item2.SetTransform(item1.Transfrom.ToDbModel()); item2.Number = item1.Number; item2.Type = item1.Type; item2.Describe = item1.Describe; item2.Children = item1.Children.ToDbModel(); item2.LeafNodes = item1.LeafNodes.ToDbModel(); item2.InitBoundId = item1.InitBoundId; item2.InitBound = item1.InitBound.ToDbModel(); item2.EditBoundId = item1.EditBoundId; item2.EditBound = item1.EditBound.ToDbModel(); item2.IsRelative = item1.IsRelative; item2.IsCreateAreaByData = item1.IsCreateAreaByData; item2.IsOnAlarmArea = item1.IsOnAlarmArea; item2.IsOnLocationArea = item1.IsOnLocationArea; item2.IsDynamicArea = item1.IsDynamicArea; item2.ModelName = item1.ModelName; return(item2); }
private void ShowAreaName(AreaEntity area, double mX, double mY) { if (IsShowAreaName && area.Type != AreaTypes.CAD && !string.IsNullOrEmpty(area.Name)) { Label lb = new Label(); lb.Content = area.Name; var ft = MeasureText(area.Name, lb.FontSize, lb.FontFamily.ToString()); var w = ft.WidthIncludingTrailingWhitespace; var h = ft.Height; Canvas.SetLeft(lb, mX - w / 2); Canvas.SetTop(lb, mY - h / 2); Canvas1.Children.Add(lb); lb.Foreground = Brushes.Gray; lb.LayoutTransform = ScaleTransform1; lb.Focusable = false; } }
private void SetAreaStyle(AreaEntity area, Shape shape) { if (area.Type == AreaTypes.CAD) { if (area.Name == "Block" || area.Name == "Polyline") { var brush = new SolidColorBrush(Color.FromArgb(128, 80, 80, 80)); shape.Fill = brush; shape.Stroke = Brushes.Gray; } else if (area.Name == "Line") { shape.Fill = Brushes.Transparent; shape.Stroke = Brushes.Gray; } else { shape.Fill = Brushes.Transparent; shape.Stroke = Brushes.Gray; } } else if (area.Type == AreaTypes.SwitchArea) { shape.Fill = Brushes.Transparent; shape.Stroke = Brushes.Green; } else if (area.Type == AreaTypes.大楼) { shape.Fill = Brushes.AliceBlue; shape.Stroke = Brushes.Blue; } else if (area.Type == AreaTypes.范围) { shape.Fill = Brushes.Transparent; //SetShapeStrokeDash(polygon); shape.Stroke = Brushes.Orange; } else { shape.Fill = Brushes.Transparent; shape.Stroke = Brushes.Black; } shape.StrokeThickness = 1; }
private void ShowSwitchArea(AreaEntity area, List <bus_anchor_switch_area> switchAreas, int scale) { if (IsShowSwitchArea == false) { return; } if (switchAreas != null) { var subSwitchAreas = switchAreas; if (ShowFloor == 1)//1层 { subSwitchAreas = switchAreas.FindAll(i => i.min_z == 0 || i.min_z == 150); } else if (ShowFloor == 2)//2层 { subSwitchAreas = switchAreas.FindAll(i => i.min_z == 450 || i.min_z == 600); } else if (ShowFloor == 3)//3层 { subSwitchAreas = switchAreas.FindAll(i => i.min_z == 880); } else if (ShowFloor == 4)//4层 { subSwitchAreas = switchAreas.FindAll(i => i.min_z > 880); } else { } foreach (var item in subSwitchAreas) { AreaEntity switchArea = new AreaEntity(); float x1 = item.start_x / 100.0f + 2059; float x2 = item.end_x / 100.0f + 2059; float y1 = item.start_y / 100.0f + 1565; float y2 = item.end_y / 100.0f + 1565; switchArea.InitBound = new Location.TModel.Location.AreaAndDev.Bound(x1, y1, x2, y2, item.min_z, item.max_z, false); switchArea.Parent = area; switchArea.Name = item.area_id; switchArea.Type = AreaTypes.SwitchArea; AddAreaRect(switchArea, null, scale); } } }
private void DrawFloor(AreaEntity area, double scale, double devSize) { Clear(); var bound = area.InitBound; if (bound == null) { return; } if (bound.MaxX == 0) { bound.SetMinMaxXY(); } Scale = scale; CanvasMargin = 10; OffsetX = -CanvasMargin / 2; OffsetY = -CanvasMargin / 2; Canvas1.Width = (bound.MaxX + CanvasMargin) * scale; Canvas1.Height = (bound.MaxY + CanvasMargin) * scale; DrawMode = 2; AddAreaRect(area, null, scale); if (area.Children != null) { area.Children.Sort(); foreach (var level1Item in area.Children) //机房 { level1Item.Parent = area; AddAreaRect(level1Item, area, scale, true); ShowDevs(level1Item.GetLeafNodes(), scale, devSize);//机房内设备 } } ShowDevs(area.GetLeafNodes(), scale, devSize);//楼层内设备 AddZeroPoint(scale, new Vector(0, 0)); }
private void SetAreaRoomOffset(AreaEntity area, AreaEntity parent, ref double roomOffX, ref double roomOffY) { if (DrawMode == 1) //大图模式 { if (parent != null && parent.Type == AreaTypes.楼层 && parent.Parent != null) //当前是机房 { roomOffX = parent.InitBound.MinX + parent.Parent.InitBound.MinX; roomOffY = parent.InitBound.MinY + parent.Parent.InitBound.MinY; } if (area.Type == AreaTypes.楼层 && parent != null && parent.InitBound != null)//当前是楼层 { roomOffX = /*area.InitBound.MinX + */ parent.InitBound.MinX; roomOffY = /*area.InitBound.MinY +*/ parent.InitBound.MinY; } } else//小图模式 { if (parent != null && parent.Type == AreaTypes.楼层)//当前是机房 { roomOffX = parent.InitBound.MinX; roomOffY = parent.InitBound.MinY; } } }
private void AddAreaRect(AreaEntity area, AreaEntity parent, double scale = 1, bool isTransparent = false) { if (area == null) { return; } var bound = area.InitBound; if (bound == null) { return; } { if (parent == null) { parent = area.Parent; } double roomOffX = 0; double roomOffY = 0; SetAreaRoomOffset(area, parent, ref roomOffX, ref roomOffY); List <Point> points = GetPoints(scale, bound, roomOffX, roomOffY); Shape areaShape = null; if (bound.Shape == 2)//圆形 { Ellipse ellipse = new Ellipse(); ellipse.Width = bound.GetSizeX() * scale; ellipse.Height = bound.GetSizeY() * scale; double left = (bound.GetCenterX() - OffsetX - roomOffX - bound.GetSizeX() / 2) * scale; double top = (bound.GetCenterY() - OffsetY - roomOffY - bound.GetSizeY() / 2) * scale; Canvas.SetLeft(ellipse, left); Canvas.SetTop(ellipse, top); areaShape = ellipse; } else { Polygon polygon = new Polygon(); foreach (var item in points) { polygon.Points.Add(item); } areaShape = polygon; } AreaDict[area.Id] = areaShape; Canvas1.Children.Add(areaShape); SetAreaStyle(area, areaShape); areaShape.Tag = area; areaShape.ToolTip = area.Name; areaShape.ContextMenu = AreaContextMenu; areaShape.MouseUp += Area_MouseDown; areaShape.MouseEnter += Area_MouseEnter; areaShape.MouseLeave += Area_MouseLeave; double mX = 0; double mY = 0; int c = 0; foreach (var item in points) { mX += item.X; mY += item.Y; c++; } mX /= c; mY /= c; ShowAreaName(area, mX, mY); } }
private Rectangle AddDevRect(DevEntity dev, double scale, double size, bool showDevName) { if (DevDict.ContainsKey(dev.Id)) { DevDict[dev.Id].Remove(); } AreaEntity parent = dev.Parent; double roomOffX = 0; double roomOffY = 0; if (DrawMode == 1)//大图模式 { if (parent != null) { if (parent.Type == AreaTypes.楼层 && parent.Parent != null) { roomOffX = parent.InitBound.MinX + parent.Parent.InitBound.MinX; roomOffY = parent.InitBound.MinY + parent.Parent.InitBound.MinY; } else if (parent.Type == AreaTypes.机房 && parent.Parent != null) { roomOffX = parent.Parent.Parent.InitBound.MinX + parent.Parent.InitBound.MinX; roomOffY = parent.Parent.Parent.InitBound.MinY + parent.Parent.InitBound.MinY; } } } else //小图模式 { if (parent != null) { if (parent.Type == AreaTypes.楼层) { roomOffX = parent.InitBound.MinX; roomOffY = parent.InitBound.MinY; } else if (parent.Type == AreaTypes.机房) { roomOffX = parent.Parent.InitBound.MinX; roomOffY = parent.Parent.InitBound.MinY; } } } double ax = dev.Pos.PosX + roomOffX; double ay = dev.Pos.PosZ + roomOffY; if (DrawMode == 1 && GetSettingFunc != null)//大图模式 { ArchorSetting setting = GetSettingFunc(dev); if (setting != null) { setting.CalAbsolute();//检测配置的数据是否正确 ax = setting.AbsoluteX.ToDouble(); ay = setting.AbsoluteY.ToDouble(); } } double x = (ax - OffsetX) * scale - size * scale / 2; double y = (ay - OffsetY) * scale - size * scale / 2; DevShape devShape = new DevShape(Canvas1); if (showDevName) { if (udpArchorList == null) { string path = AppDomain.CurrentDomain.BaseDirectory + "\\Data\\基站信息\\UDPArchorList.xml"; udpArchorList = XmlSerializeHelper.LoadFromFile <UDPArchorList>(path); } Label lb = new Label(); lb.Content = GetDevName(dev); Canvas.SetLeft(lb, x + size * scale); Canvas.SetTop(lb, y); Canvas1.Children.Add(lb); lb.LayoutTransform = ScaleTransform1; var udpArchor = udpArchorList.Find(i => i.Id == GetArchorCode(dev)); if (udpArchor != null) { lb.Foreground = Brushes.Blue; } devShape.Label = lb; } //if (ViewMode == 0) // y = Canvas1.Height - size * scale - y; //上下颠倒一下,不然就不是CAD上的上北下南的状况了 Rectangle devRect = new Rectangle() { //Margin = new Thickness(x, y, 0, 0), Width = size * scale, Height = size * scale, Fill = GetDevRectFillColor(dev), Stroke = Brushes.Black, StrokeThickness = 1, Tag = dev, ToolTip = GetDevNameEx(dev) }; devShape.Rect = devRect; devShape.Id = dev.Id; devRect.ContextMenu = DevContextMenu; Canvas.SetLeft(devRect, x); Canvas.SetTop(devRect, y); DevDict[dev.Id] = devShape; devRect.MouseDown += DevRect_MouseDown; devRect.MouseEnter += DevRect_MouseEnter; devRect.MouseLeave += DevRect_MouseLeave; Canvas1.Children.Add(devRect); return(devRect); }
private void DrawPark(AreaEntity area, int scale, double devSize) { var bound = area.InitBound; //if (bound == null) //{ // bound=area.CreateBoundByChildren(); //} if (bound == null) { return; } //bound=area.SetBoundByDevs(); Scale = scale; CanvasMargin = 20; OffsetX = bound.MinX - CanvasMargin; OffsetY = bound.MinY - CanvasMargin; Canvas1.Width = (bound.MaxX - OffsetX + CanvasMargin) * scale; Canvas1.Height = (bound.MaxY - OffsetY + CanvasMargin) * scale; DrawMode = 1; AddAreaRect(area, null, scale); if (area.Children != null) { foreach (var level1Item in area.Children) //建筑群 { level1Item.Parent = area; AddAreaRect(level1Item, area, scale); if (level1Item.Children != null) { foreach (var level2Item in level1Item.Children) //建筑 { level2Item.Parent = level1Item; AddAreaRect(level2Item, level1Item, scale); if (ShowFloor > 0) { var floor = level2Item.GetChild(ShowFloor - 1);//楼层 if (floor != null) { if (level2Item.InitBound != null) { AddAreaRect(floor, level2Item, scale);//楼层画出来 } if (floor.Children != null) { foreach (var room in floor.Children)//机房 { if (room == null) { continue; } room.Parent = floor; AddAreaRect(room, floor, scale); ShowDevs(room.GetLeafNodes(), scale, devSize / 5);//机房内设备 } } ShowDevs(floor.GetLeafNodes(), scale, devSize / 5);//楼层内设备 } } } } } } ShowDevs(area.GetLeafNodes(), scale, devSize); AddZeroPoint(scale, new Vector(bound.MinX, bound.MinY)); }