private int InaccurateNum = 10;//角度误差值 //private int DirectionX = -1; //private int DirectionY = 1; //private int DirectionZ = -1; private Area CaculateAreaPoint() { if (areaInfo == null) { return(null); } SetPosToDynamic();//把pos设置一个动态区域属性,动态区域不参与告警计算。 //Todo:通过位置列表,计算出区域的顶点和旋转角度 if (posList != null && posList.Count >= 2) { Position p1 = posList[0]; Position p2 = posList[1]; //左右手坐标系转换,X轴对称 float angleOfLine = GetUnityAngle(Math.Atan2((p2.Z - p1.Z), (p1.X - p2.X)) * 180 / Math.PI);//角度1 if (posList.Count >= 3) { Position p3 = posList[2]; float angleOfLine2 = GetUnityAngle(Math.Atan2((p3.Z - p2.Z), (p2.X - p3.X)) * 180 / Math.PI);//角度2 //double angleOfLine3 = GetUnityAngle(Math.Atan2((p3.Z - p1.Z), (p1.X - p3.X)) * 180 / Math.PI);//角度3 //double angleOfLine5 = GetUnityAngle(Math.Atan2((p1.Z - p2.Z), (p2.X - p1.X)) * 180 / Math.PI); //double angleOfLine6 = GetUnityAngle(Math.Atan2((p2.Z - p3.Z), (p3.X - p2.X)) * 180 / Math.PI); //double angleOfLine7 = GetUnityAngle(Math.Atan2((p1.Z - p3.Z), (p3.X - p1.X)) * 180 / Math.PI); if ((angleOfLine2 - angleOfLine) < InaccurateNum) { areaInfo.RY = angleOfLine; areaInfo.Z = p2.Z; TransformM m = areaInfo.GetTransformM(); areaInfo.InitBound.SetInitBound(m.ToTModel()); return(areaInfo); } } } return(null); }
/// <summary> /// 获取TransfromM信息 /// </summary> /// <returns></returns> public TransformM GetTransformM() { if (!HaveTransform()) { return(null); } TransformM transform = new TransformM(); transform.X = this.X ?? 0; transform.Y = this.Y ?? 0; transform.Z = this.Z ?? 0; transform.SX = this.SX ?? 0; transform.SY = this.SY ?? 0; transform.SZ = this.SZ ?? 0; transform.RX = this.RX ?? 0; transform.RY = this.RY ?? 0; transform.RZ = this.RZ ?? 0; transform.IsRelative = this.IsRelative; transform.IsCreateAreaByData = this.IsCreateAreaByData; transform.IsOnAlarmArea = this.IsOnAlarmArea; transform.IsOnLocationArea = this.IsOnLocationArea; transform.IsDynamicArea = this.IsDynamicArea; transform.ModelName = this.ModelName; return(transform); }
/// <summary> /// 初始化设备存放处 /// </summary> private void InitContainer() { if (IsDevContainerInit) { return; } IsDevContainerInit = true; if (_roomDevContainer == null) { _roomDevContainer = new GameObject("RoomDevContainer"); _roomDevContainer.transform.parent = transform; } if (monitorRangeObject != null) { _roomDevContainer.transform.localScale = GetContainerScale(transform.lossyScale); Vector3 floorSize = monitorRangeObject.gameObject.GetSize(); _roomDevContainer.transform.position = monitorRangeObject.transform.position + new Vector3(floorSize.x / 2, -floorSize.y / 2, floorSize.z / 2); _roomDevContainer.transform.eulerAngles = new Vector3(0, 180, 0); } else { _roomDevContainer.transform.localScale = GetContainerScale(transform.lossyScale); //_roomDevContainer.transform.localScale = transform.lossyScale; _roomDevContainer.transform.eulerAngles = new Vector3(0, 180, 0); PhysicalTopology topoNode = TopoNode; PhysicalTopology buildingNode = ParentNode.TopoNode; if (topoNode == null || buildingNode == null) { Debug.Log("TopoNode is null..."); return; } TransformM tm = buildingNode.Transfrom; //Vector3 pos2D = new Vector3((float)(tm.X - tm.SX / 2f), (float)(tm.Y - tm.SY / 2 + topoNode.Transfrom.SY), (float)(tm.Z - tm.SZ / 2));//建筑物的右下角坐标 //Log.Info("建筑物的右下角坐标:" + pos2D); //Vector3 buildPos = LocationManager.GetRealVector(pos2D); //_roomDevContainer.transform.position = buildPos; if (topoNode.Transfrom != null) { Vector3 pos2D = new Vector3((float)(tm.X - tm.SX / 2f), (float)(tm.Y - tm.SY / 2 + topoNode.Transfrom.SY), (float)(tm.Z - tm.SZ / 2));//建筑物的右下角坐标 Log.Info("建筑物的右下角坐标:" + pos2D); Vector3 buildPos = LocationManager.GetRealVector(pos2D); _roomDevContainer.transform.position = buildPos; } else { Vector3 pos2D = new Vector3((float)(tm.X - tm.SX / 2f), 0, (float)(tm.Z - tm.SZ / 2));//建筑物的右下角坐标 Vector3 buildPos = LocationManager.GetRealVector(pos2D); buildPos.y = transform.position.y - gameObject.GetSize().y / 2; _roomDevContainer.transform.position = buildPos; } } }
/// <summary> /// 用两点(对角点)初始化区域范围 /// </summary> public void SetInitBound(float x1, float y1, float x2, float y2, float thicknessT, bool isRelative, float heightT = 1, bool isOnNormalArea = true, bool isOnAlarmArea = false, bool isOnLocationArea = false) { InitBound = new Bound(x1, y1, x2, y2, heightT, thicknessT, isRelative); EditBound = new Bound(x1, y1, x2, y2, heightT, thicknessT, isRelative); TransformM transfrom = new TransformM(InitBound); transfrom.IsCreateAreaByData = isOnNormalArea; transfrom.IsOnAlarmArea = isOnAlarmArea; transfrom.IsOnLocationArea = isOnLocationArea; this.SetTransform(transfrom); }
/// <summary> /// 创建Transform关联 /// </summary> /// <returns></returns> public List <PhysicalTopology> CreateTransformMRelation(List <PhysicalTopology> listT) { List <TransformM> transformMs = db.TransformMs.ToList(); foreach (PhysicalTopology p in listT) { TransformM t = transformMs.Find((item) => item.Id == p.TransfromId); if (t != null) { p.Transfrom = t; } } return(listT); }
/// <summary> /// 根据现实世界位置,设置位置 /// </summary> /// <param name="angleVec"></param> public void SetPos(Vector3 realPos) { if (!info.Transfrom.IsCreateAreaByData) { return; } Vector3 pos = new Vector3((float)realPos.x, (float)realPos.y, (float)realPos.z); Vector3 targetposT = LocationManager.GetRealSizeVector(pos); if (!info.Transfrom.IsRelative) { targetposT += LocationManager.Instance.axisZero; } else { if (rangeNode.parentNode != null) { PhysicalTopology buldingNode = rangeNode.parentNode.info; TransformM tm = buldingNode.Transfrom; Vector3 buildPos = Vector3.zero; if (tm != null && tm.IsCreateAreaByData) { Vector3 pos2D = new Vector3((float)(tm.SX / 2f), (float)(tm.SY / 2), (float)(tm.SZ / 2));//建筑物的左下角坐标 buildPos = -LocationManager.GetRealSizeVector(pos2D); buildPos += rangeNode.parentNode.rangeObject.transform.position; } else { Vector3 pSize = rangeNode.parentNode.rangeObject.gameObject.GetGlobalSize(); buildPos += rangeNode.parentNode.rangeObject.transform.position; buildPos += new Vector3((float)(pSize.x / 2f), (float)(-(pSize.y + rangeNode.parentNode.rangeObject.yOffset) / 2), (float)(pSize.z / 2));//建筑物的左下角坐标 } targetposT += buildPos; } } transform.localPosition = targetposT; info.Transfrom.X = realPos.x; info.Transfrom.Y = realPos.y; info.Transfrom.Z = realPos.z; }
public bool SetInitBound(Area topo, Point[] points, BoundInfo boundInfo) { Bound initBound = new Bound(points, boundInfo); Bound editBound = new Bound(points, boundInfo); var transfrom = new TransformM(initBound); var b1 = Bounds.Add(initBound); var b2 = Bounds.Add(editBound); transfrom.IsCreateAreaByData = boundInfo.IsCreateAreaByData; transfrom.IsOnAlarmArea = boundInfo.IsOnAlarmArea; transfrom.IsOnLocationArea = boundInfo.IsOnLocationArea; //TransformMs.Add(transfrom); topo.SetTransform(transfrom); topo.InitBound = initBound; topo.EditBound = editBound; var b3 = Areas.Edit(topo); return(b1 && b2 && b3); }
public void SetInitBound(TransformM tranM) { double bottomHeightT = tranM.Y - (tranM.SY / 2); Init((float)(bottomHeightT), (float)tranM.SY); Point p1 = new Point((float)(tranM.X - tranM.SX / 2), (float)(tranM.Z + tranM.SZ / 2), 0); Point p2 = new Point((float)(tranM.X + tranM.SX / 2), (float)(tranM.Z + tranM.SZ / 2), 0); Point p3 = new Point((float)(tranM.X + tranM.SX / 2), (float)(tranM.Z - tranM.SZ / 2), 0); Point p4 = new Point((float)(tranM.X - tranM.SX / 2), (float)(tranM.Z - tranM.SZ / 2), 0); Point[] points = new Point[] { p1, p2, p3, p4 }; points = GetNewPoints(points, tranM);//获取旋转后的点 SetInitBound(points); //double pX = (MinX + MaxX)/2.0; //double pY = (MinY + MaxY)/2.0; //double pZ = (MinZ + MaxZ)/2.0; }
private void SetInitBound(Area topo, Point[] points, float thicknessT, bool isRelative = true, float bottomHeightT = 0, bool isOnNormalArea = true, bool isOnAlarmArea = false, bool isOnLocationArea = false) { Bound initBound = new Bound(points, bottomHeightT, thicknessT, isRelative); Bound editBound = new Bound(points, bottomHeightT, thicknessT, isRelative); var transfrom = new TransformM(initBound); Bounds.Add(initBound); Bounds.Add(editBound); transfrom.IsCreateAreaByData = isOnNormalArea; transfrom.IsOnAlarmArea = isOnAlarmArea; transfrom.IsOnLocationArea = isOnLocationArea; //TransformMs.Add(transfrom); topo.SetTransform(transfrom); topo.InitBound = initBound; topo.EditBound = editBound; Areas.Edit(topo); }
private void SetInitBound(PhysicalTopology topo, double x1, double y1, double x2, double y2, double thicknessT, bool isRelative = true, double bottomHeightT = 0, bool isOnNormalArea = true, bool isOnAlarmArea = false, bool isOnLocationArea = false) { Bound initBound = new Bound(x1, y1, x2, y2, bottomHeightT, thicknessT, isRelative); Bound editBound = new Bound(x1, y1, x2, y2, bottomHeightT, thicknessT, isRelative); TransformM transfrom = new TransformM(initBound); Bounds.Add(initBound); Bounds.Add(editBound); transfrom.IsCreateAreaByData = isOnNormalArea; transfrom.IsOnAlarmArea = isOnAlarmArea; transfrom.IsOnLocationArea = isOnLocationArea; TransformMs.Add(transfrom); topo.Transfrom = transfrom; topo.InitBound = initBound; topo.EditBound = editBound; PhysicalTopologys.Edit(topo); }
/// <summary> /// 获取实际尺寸,就是CAD尺寸 /// </summary> public void GetRealPos(DepNode depnodeT, ref Vector3 v) { if (depnodeT == null || depnodeT.TopoNode == null || depnodeT.TopoNode.Transfrom == null) { return; } TransformM tm = depnodeT.TopoNode.Transfrom; Vector3 vt = new Vector3((float)tm.X, (float)tm.Y, (float)tm.Z); v += vt; if (depnodeT.TopoNode.IsRelative) { GetRealPos(depnodeT.ParentNode, ref v); } else { return; } }
public bool SetInitBound(Area topo, Point[] points, float thicknessT) { Bound initBound = new Bound(points, 0, thicknessT, true); Bound editBound = new Bound(points, 0, thicknessT, true); var transfrom = new TransformM(initBound); var b1 = Bounds.Add(initBound); var b2 = Bounds.Add(editBound); transfrom.IsCreateAreaByData = true; transfrom.IsOnAlarmArea = false; transfrom.IsOnLocationArea = false; //TransformMs.Add(transfrom); topo.SetTransform(transfrom); topo.InitBound = initBound; topo.EditBound = editBound; var b3 = Areas.Edit(topo); return(b1 && b2 && b3); }
/// <summary> /// 初始化位置和大小信息 /// </summary> private void UpdatePosSizeInfo(TransformM tranM) { if (tranM == null) { return; } MonitorRangeObject rangeParent = null; if (depNode != null && depNode.ParentNode != null) { rangeParent = depNode.ParentNode.monitorRangeObject; } rangeNode.rangeObject = this; //创建自身区域范围 if (!tranM.IsCreateAreaByData && info.Type == AreaTypes.范围) //tranM.IsOnAlarmArea && { Debug.LogErrorFormat("告警区域:[{0}],没根据CAD数据来创建(IsCreateAreaByData没设置为true),可能导致创建出错!", info.Name); } if (tranM.IsCreateAreaByData) //利用数据创建区域范围 { //Log.Info("MonitorRangeObject.UpdatePosSizeInfo","brach 1"); UpdatePosSizeByTransform(tranM); } else//利用自身大小创建区域范围 { if (followTarget != null) { //Log.Info("MonitorRangeObject.UpdatePosSizeInfo", "brach 2"); UpdatePosSizeByFollowTarget(); } else { //Log.Info("MonitorRangeObject.UpdatePosSizeInfo", "brach 3"); UpdatePosSizeByTransform(tranM); } } if (transform.parent != null) {//因为这里的计算出来的比例为真实大小比例,而不是相对比例 } }
private async void SetInitBoundAsync(Area topo, float x1, float y1, float x2, float y2, BoundInfo boundInfo) { Bound initBound = new Bound(x1, y1, x2, y2, boundInfo); Bound editBound = new Bound(x1, y1, x2, y2, boundInfo); var transfrom = new TransformM(initBound); var b1 = await Bounds.AddAsync(initBound); var b2 = await Bounds.AddAsync(editBound); transfrom.IsCreateAreaByData = boundInfo.IsCreateAreaByData; transfrom.IsOnAlarmArea = boundInfo.IsOnAlarmArea; transfrom.IsOnLocationArea = boundInfo.IsOnLocationArea; //TransformMs.Add(transfrom); topo.SetTransform(transfrom); topo.InitBound = initBound; topo.EditBound = editBound; var b3 = Areas.EditAsync(topo); //var b = b1 && b2 && b3; }
private bool SetInitBound(Area topo, float x1, float y1, float x2, float y2, float thicknessT, bool isRelative = true, float bottomHeightT = 0, bool isOnNormalArea = true, bool isOnAlarmArea = false, bool isOnLocationArea = false) { Bound initBound = new Bound(x1, y1, x2, y2, bottomHeightT, thicknessT, isRelative); Bound editBound = new Bound(x1, y1, x2, y2, bottomHeightT, thicknessT, isRelative); var transfrom = new TransformM(initBound); var b1 = Bounds.Add(initBound); var b2 = Bounds.Add(editBound); transfrom.IsCreateAreaByData = isOnNormalArea; transfrom.IsOnAlarmArea = isOnAlarmArea; transfrom.IsOnLocationArea = isOnLocationArea; //TransformMs.Add(transfrom); topo.SetTransform(transfrom); topo.InitBound = initBound; topo.EditBound = editBound; var b3 = Areas.Edit(topo); return(b1 && b2 && b3); }
public void SetTransform(TransformM transform) { if (transform == null) { return; } this.X = (float)transform.X; this.Y = (float)transform.Y; this.Z = (float)transform.Z; this.SX = (float)transform.SX; this.SY = (float)transform.SY; this.SZ = (float)transform.SZ; this.RX = (float)transform.RX; this.RY = (float)transform.RY; this.RZ = (float)transform.RZ; this.IsRelative = transform.IsRelative; this.IsCreateAreaByData = transform.IsCreateAreaByData; this.IsOnAlarmArea = transform.IsOnAlarmArea; this.IsOnLocationArea = transform.IsOnLocationArea; }
/// <summary> /// 根据旋转角度,获取新的顶点 /// </summary> /// <param name="pGroup"></param> /// <param name="m"></param> /// <returns></returns> private Point[] GetNewPoints(Point[] pGroup, TransformM m) { //x0= (x - rx0)*cos(a) - (y - ry0)*sin(a) + rx0 ; //y0 = (x - rx0) * sin(a) + (y - ry0) * cos(a) + ry0; if (pGroup != null && m != null) { if (m.RY == 0) { return(pGroup); } Shape = 1;//不规则多边形 foreach (Point p in pGroup) { double angle = m.RY + 90; double x1 = (p.X - m.X) * Math.Cos(angle) - (p.Y - m.Z) * Math.Sin(angle) + m.X; double y1 = (p.X - m.X) * Math.Sin(angle) + (p.Y - m.Z) * Math.Cos(angle) + m.Z; p.X = (float)x1; p.Y = (float)y1; } } return(pGroup); }
private void UpdatePosSizeByTransform(TransformM tranM) { Vector3 pos = new Vector3((float)tranM.X, (float)tranM.Y, (float)tranM.Z); Vector3 angles = new Vector3((float)tranM.RX, (float)tranM.RY, (float)tranM.RZ); Vector3 size = new Vector3((float)tranM.SX, (float)tranM.SY, (float)tranM.SZ); targetPos = LocationManager.GetRealSizeVector(pos); Vector3 realsize = LocationManager.GetRealSizeVector(size); targetScale = new Vector3(Mathf.Abs(realsize.x / oriSize.x), Mathf.Abs(realsize.y / oriSize.y), Mathf.Abs(realsize.z / oriSize.z)); if (!info.Transfrom.IsRelative) //绝对坐标,加上二维和三维转换时的坐标偏移就行 { //Log.Info("MonitorRangeObject.UpdatePosSizeByTransform", "brach 0 : axisZero"); targetPos += LocationManager.Instance.axisZero; } else //相对坐标,要考虑父物体的坐标 { if (rangeNode.parentNode != null) { RangeNode parentRangeNode = rangeNode.parentNode; var parentRangeObject = parentRangeNode.rangeObject; PhysicalTopology parentArea = parentRangeNode.info; TransformM parentTransform = parentArea.Transfrom; //Log.Info("MonitorRangeObject.UpdatePosSizeByTransform", string.Format("parentArea:"+ parentArea.Name)); //接下来计算建筑物的左下角坐标 Vector3 buildPos = Vector3.zero; if (parentTransform != null && parentTransform.IsCreateAreaByData) { //Log.Info("MonitorRangeObject.UpdatePosSizeByTransform", "brach 1 : by parentTransform"); Vector3 sizeT = new Vector3((float)(parentTransform.SX / 2f), (float)(parentTransform.SY / 2), (float)(parentTransform.SZ / 2)); //二维坐标尺寸 var offset = LocationManager.GetRealSizeVector(sizeT); //三维坐标尺寸,也就是偏移量 buildPos = parentRangeObject.transform.position - offset; //父物体(中心)位置-父物体一半大小=父物体左下角坐标 //Log.Info("MonitorRangeObject.UpdatePosSizeByTransform",string.Format("sizeT:{0},sizeR:{1},buildPos:{2}", sizeT, offset, buildPos)); } else { if (parentRangeObject) { //Log.Info("MonitorRangeObject.UpdatePosSizeByTransform", "brach 2 : parentRangeObject"); Vector3 sizeR = parentRangeObject.gameObject.GetGlobalSize();//父物体真实大小 Vector3 offset = new Vector3((float)(sizeR.x / 2f), (float)(-(sizeR.y + parentRangeObject.yOffset) / 2), (float)(sizeR.z / 2)); // buildPos = parentRangeObject.transform.position + offset; //父物体(中心)位置-偏移=父物体左下角坐标 //Log.Info("MonitorRangeObject.UpdatePosSizeByTransform",string.Format("sizeR:{0},offset:{1},buildPos:{2}", sizeR, offset, buildPos)); } else { if (rangeNode.parentNode.info.Type == Types.范围) { //Log.Info("MonitorRangeObject.UpdatePosSizeByTransform", "brach 3"); targetPos += LocationManager.Instance.axisZero; } else { //Log.Info("MonitorRangeObject.UpdatePosSizeByTransform", "brach 4"); } } } targetPos += buildPos; //Log.Info("MonitorRange.UpdatePosSizeByTransform",string.Format("targetPos:{0},buildPos:{1}", targetPos, buildPos)); //ShowTestPoint(buildPos, "buildPos_"+ parentArea.Name); //ShowTestPoint(targetPos, "targetPos_"+info.Name); } else { //Log.Error("MonitorRange.UpdatePosSizeByTransform", "rangeNode.parentNode == null"); } } targetAngles = new Vector3((float)tranM.RX, (float)tranM.RY, (float)tranM.RZ); }
public static string TransformMToString(TransformM t) { return(string.Format("({0},{1},{2}),({3},{4},{5}),({6},{7},{8}) Id={9}", t.X, t.Y, t.Z, t.RX, t.RY, t.RZ, t.SX, t.SY, t.SZ, t.Id)); }
public void CreateArea() { DepNode parentDep = FactoryDepManager.currentDep;//当前区域,要在当前区域下创建子区域(告警区域) if (parentDep == null) { Log.Error("RangeEditWindow.CreateArea", "depnodeT == null"); return; } if (parentDep.TopoNode == null) { Log.Error("RangeEditWindow.CreateArea", "depnodeT.TopoNode == null"); return; } if (parentDep.TopoNode.Type == AreaTypes.范围 || parentDep.TopoNode.Type == AreaTypes.分组 || parentDep.TopoNode.Type == AreaTypes.CAD || parentDep.TopoNode.Type == AreaTypes.大楼 || parentDep.TopoNode.Type == AreaTypes.机房 ) { UGUIMessageBox.Show("不能在该区域类型下创建子区域,类型:" + parentDep.TopoNode.Type + ",请切换到楼层或者厂区。"); return; } Log.Info("RangeEditWindow.CreateArea", string.Format("type:{0},name:{1}", parentDep.TopoNode.Type, parentDep.TopoNode.Name)); PhysicalTopology p = CreateDefaultArea(); TransformM tm = parentDep.TopoNode.Transfrom; Vector3 centerPos = Vector3.zero; if (tm != null) { Log.Info("RangeEditWindow.CreateArea", string.Format("SX:{0},SY:{1},SZ:{2}", tm.SX, tm.SY, tm.SZ)); centerPos = new Vector3((float)(tm.SX / 2f), (float)(tm.SY / 2), (float)(tm.SZ / 2));//父物体的尺寸的一半也就是父物体的中心 } //if(RoomFactory.Instance.FactoryType==FactoryTypeEnum.BaoXin) //{ // pos2D = new Vector3(LocationManager.Instance.axisZero.x,pos2D.y, LocationManager.Instance.axisZero.z); //} //Vector3 buildPos = Vector3.zero; //buildPos = -LocationManager.GetRealSizeVector(pos2D); p.ParentId = parentDep.TopoNode.Id; //判断是否是楼层或楼层以下级别的,是的话,设置IsRelative="true" bool b = MonitorRangeManager.IsBelongtoFloor(parentDep); Log.Info("RangeEditWindow.CreateArea", string.Format("IsBelongtoFloor:{0}", b)); if (b)//如果是楼层及楼层以下级别就设置成相对的 { p.IsRelative = true; p.Transfrom.IsRelative = true; } else { p.IsRelative = false; p.Transfrom.IsRelative = false; //pos2D = new Vector3((float)tm.X, (float)tm.Y, (float)tm.Z); centerPos = Vector3.zero; GetRealPos(parentDep, ref centerPos); } //Vector3 pos = parentDep.monitorRangeObject.transform.position; Vector3 realpos = centerPos; if (parentDep.TopoNode.Type == AreaTypes.楼层)//宝信项目坐标系偏移,应该也是兼容其他项目的 { realpos.x += parentDep.TopoNode.InitBound.MinX; realpos.z += parentDep.TopoNode.InitBound.MinY; } SetAreaTransform(p, realpos); Loom.StartSingleThread(() => { Log.Info("RangeEditWindow.CreateArea", string.Format("realpos:{0}", realpos)); PhysicalTopology newArea = CommunicationObject.Instance.AddMonitorRange(p);//发送信息给服务端 Loom.DispatchToMainThread(() => { try { if (newArea != null && newArea.Transfrom != null) { var newT = newArea.Transfrom; Log.Info("RangeEditWindow.CreateArea", string.Format("newPos:({0},{1},{2})", newT.X, newT.Y, newT.Z)); RangeNode parentRangeNode = parentDep.monitorRangeObject.rangeNode;//区域的根节点 RangeNode newNode = parentRangeNode.NewNode(); MonitorRangeManager.Instance.CreateRangesByRootNode(newArea, newNode); MonitorRangeObject monitorRangeObject = newNode.rangeObject; monitorRangeObject.SetIsNewAdd(true); monitorRangeObject.SetEditEnable(true); monitorRangeObject.SetRendererEnable(true); //monitorRangeObject.SetSelectedUI(true); newNode.rangeObject.gameObject.layer = LayerMask.NameToLayer(Layers.Range); EditorObjectSelection.Instance.ClearSelection(false); EditorObjectSelection.Instance.SetSelectedObjects(new List <GameObject>() { monitorRangeObject.gameObject }, false); //if (depnodeT.ChildNodes == null) //{ // //depnodeT.ChildNodes.Add() RangeController rangeController = RoomFactory.Instance.AddRange(parentDep, newArea); //} Debug.LogError("CreateArea:成功!"); rangeController.monitorRangeObject = monitorRangeObject; Show(monitorRangeObject); MonitorRangeManager.Instance.AddRangeToList(monitorRangeObject); //PersonnelTreeManage.Instance.areaDivideTree.RefreshShowAreaDivideTree(); PersonnelTreeManage.Instance.areaDivideTree.AddAreaChild(parentDep.TopoNode, newArea); //monitorRangeObject.Focus(); } else//else要有 { UGUIMessageBox.Show("服务端创建子区域失败!"); } } catch (Exception e) { Log.Error("RangeEditWindow.CreateArea", "" + e); } }); }); }
private PhysicalTopology AddTopoNode(string name, string kks, PhysicalTopology parent, Types type, TransformM transform = null, string otherName = "") { if (string.IsNullOrEmpty(kks)) { KKSCode kksCode = KKSCodes.DbSet.FirstOrDefault(i => i.Name.Contains(name)); if (kksCode != null) { kks = kksCode.Code; } } if (!string.IsNullOrEmpty(kks)) { PhysicalTopology topoNode = new PhysicalTopology() { Name = name, Parent = parent, Type = type, Transfrom = transform, }; PhysicalTopologys.Add(topoNode); KKSCode kksCode = KKSCodes.DbSet.FirstOrDefault(i => i.Code == kks); NodeKKS kks1 = null; if (kksCode != null) { kks1 = new NodeKKS() { KKS = kks, NodeType = type, NodeId = topoNode.Id, KKSId = kksCode.Id }; NodeKKSs.Add(kks1); } else { kks1 = new NodeKKS() { KKS = kks, NodeType = type, NodeId = topoNode.Id }; NodeKKSs.Add(kks1); } topoNode.Nodekks = kks1; topoNode.NodekksId = kks1.Id; PhysicalTopologys.Edit(topoNode); return(topoNode); } else { PhysicalTopology topoNode = new PhysicalTopology() { Name = name, Parent = parent, Type = type, Transfrom = transform }; PhysicalTopologys.Add(topoNode); return(topoNode); } }
private Area AddTopoNode(string name, string kks, Area parent, AreaTypes type, TransformM transform = null, string otherName = "") { if (string.IsNullOrEmpty(kks)) { KKSCode kksCode = KKSCodes.DbSet.FirstOrDefault(i => i.Name.Contains(name) && i.MainType == "土建"); if (kksCode != null) { kks = kksCode.Code; } } if (!string.IsNullOrEmpty(kks)) { var topoNode = new Area() { Name = name, ParentId = parent.Id, Type = type, //Transfrom = transform, }; topoNode.SetTransform(transform); Areas.Add(topoNode); KKSCode kksCode = KKSCodes.DbSet.FirstOrDefault(i => i.Code == kks); NodeKKS kks1 = null; if (kksCode != null) { kks1 = new NodeKKS() { KKS = kks, NodeType = type, NodeId = topoNode.Id, KKSId = kksCode.Id }; NodeKKSs.Add(kks1); } else { kks1 = new NodeKKS() { KKS = kks, NodeType = type, NodeId = topoNode.Id }; NodeKKSs.Add(kks1); } topoNode.KKS = kks1.KKS; //topoNode.Nodekks = kks1; //topoNode.NodekksId = kks1.Id; Areas.Edit(topoNode); return(topoNode); } else { var topoNode = new Area() { Name = name, ParentId = parent.Id, Type = type, //Transfrom = transform }; topoNode.SetTransform(transform); bool result = Areas.Add(topoNode); return(topoNode); } }
private void InitChuLingPark(Area root) { #region 初灵大楼 var transformMTT = new TransformM() { X = 2293.5f, Y = 1, Z = 1715.5f, RX = 0, RY = 0, RZ = 0, SX = 1, SY = 1, SZ = 1 }; var gaoxin = AddTopoNode("高新软件园", "", root, AreaTypes.分组, transformMTT); var gaoxinBuldingGroup1 = AddTopoNode("左侧区域", "", gaoxin, AreaTypes.分组); var chulingRoot = AddTopoNode("初灵大楼", "", gaoxinBuldingGroup1, AreaTypes.大楼); var transformMTT1 = new TransformM() { X = 2293.5f, Y = 1, Z = 1715.5f, RX = 0, RY = 0, RZ = 0, SX = 1, SY = 1, SZ = 1 }; var chulingFloor1 = AddTopoNode("初灵大楼一层", "", chulingRoot, AreaTypes.楼层, transformMTT1); //PhysicalTopologys.AddRange(gaoxin, gaoxinBuldingGroup1,chulingRoot, chulingFloor1); var chulingFloor1Room1 = AddTopoNode("莘科机房", "", chulingFloor1, AreaTypes.机房); var chulingFloor1Room2 = AddTopoNode("莘科储物间", "", chulingFloor1, AreaTypes.机房); var chulingFloor1Room3 = AddTopoNode("莘科办公室", "", chulingFloor1, AreaTypes.机房); var chulingFloor1Room4 = AddTopoNode("莘科办公室(小)", "", chulingFloor1, AreaTypes.机房); var chulingFloor1Room5 = AddTopoNode("一楼走道", "", chulingFloor1, AreaTypes.机房); //PhysicalTopologys.AddRange(chulingFloor1Room1, chulingFloor1Room2, chulingFloor1Room3, chulingFloor1Room4, chulingFloor1Room5); var chulingFloor2 = AddTopoNode("初灵大楼二层", "", chulingRoot, AreaTypes.大楼); var chulingFloor2Room1 = AddTopoNode("财务室", "", chulingFloor2, AreaTypes.机房); var chulingFloor2Room2 = AddTopoNode("健身区", "", chulingFloor2, AreaTypes.机房); var chulingFloor2Room3 = AddTopoNode("监控区域2", "", chulingFloor2, AreaTypes.机房); //PhysicalTopologys.AddRange(chulingFloor2, chulingFloor2Room1, chulingFloor2Room2, chulingFloor2Room3); //var chulingFloor2Room4 = AddTopoNode("范围1", "", chulingFloor1Room1, AreaTypes.范围); //var chulingFloor2Room5 = AddTopoNode("范围2", "", chulingFloor1Room1, AreaTypes.范围); //Map map1 = new Map() { Name = "一楼地图", MinX = -100, MinY = -100, MinZ = 0, MaxX = 6068, MaxY = 2098, MaxZ = 400, TopoNode = chulingFloor1 }; //Map map2 = new Map() { Name = "二楼地图", MinX = -100, MinY = -100, MinZ = 450, MaxX = 6068, MaxY = 2080, MaxZ = 900, TopoNode = chulingFloor2 }; //List<Map> maps = new List<Map>() { map1, map2 }; //Maps.AddRange(maps); var transformM1 = new TransformM() { X = 2293.5f, Y = 10, Z = 1715.5f, RX = 0, RY = 0, RZ = 0, SX = 1, SY = 1, SZ = 1 }; var area1 = AddTopoNode("范围1", "", gaoxin, AreaTypes.区域, transformM1); var transformM2 = new TransformM() { X = 2293.5f, Y = 10, Z = 1715.5f, RX = 0, RY = 0, RZ = 0, SX = 1, SY = 1, SZ = 1 }; var area2 = AddTopoNode("范围2", "", gaoxin, AreaTypes.区域, transformM2); //PhysicalTopologys.AddRange(area1, area2); var transformM3 = new TransformM() { X = 2293.5f, Y = 10, Z = 1715.5f, RX = 0, RY = 0, RZ = 0, SX = 1, SY = 1, SZ = 1 }; var area3 = AddTopoNode("范围3", "", chulingFloor1, AreaTypes.范围, transformM3); var transformM4 = new TransformM() { X = 2293.5f, Y = 10, Z = 1715.5f, RX = 0, RY = 0, RZ = 0, SX = 1, SY = 1, SZ = 1 }; var area4 = AddTopoNode("范围4", "", chulingFloor1, AreaTypes.范围, transformM4); Archor archor1 = new Archor() { Code = "85A4", Name = "基站1", X = 3000, Y = 870, Z = 200, Type = 0, IsAutoIp = true, Ip = "", ServerIp = "", ServerPort = 0, Power = 0, AliveTime = 0, Enable = IsStart.是 }; Archor archor2 = new Archor() { Code = "85D8", Name = "基站2", X = 4960, Y = 1925, Z = 200, Type = 0, IsAutoIp = true, Ip = "", ServerIp = "", ServerPort = 0, Power = 0, AliveTime = 0, Enable = IsStart.是 }; Archor archor3 = new Archor() { Code = "85E8", Name = "基站3", X = 4960, Y = 1125, Z = 200, Type = 0, IsAutoIp = true, Ip = "", ServerIp = "", ServerPort = 0, Power = 0, AliveTime = 0, Enable = IsStart.是 }; Archor archor4 = new Archor() { Code = "85D4", Name = "基站4", X = 3500, Y = 1965, Z = 200, Type = 0, IsAutoIp = true, Ip = "", ServerIp = "", ServerPort = 0, Power = 0, AliveTime = 0, Enable = IsStart.是 }; Archor archor5 = new Archor() { Code = "85B2", Name = "基站5", X = 4960, Y = 870, Z = 200, Type = 0, IsAutoIp = true, Ip = "", ServerIp = "", ServerPort = 0, Power = 0, AliveTime = 0, Enable = IsStart.是 }; Archor archor6 = new Archor() { Code = "85D2", Name = "基站6", X = 3500, Y = 1005, Z = 200, Type = 0, IsAutoIp = true, Ip = "", ServerIp = "", ServerPort = 0, Power = 0, AliveTime = 0, Enable = IsStart.是 }; Archor archor7 = new Archor() { Code = "85A8", Name = "基站7", X = 5025, Y = 1630, Z = 500, Type = 0, IsAutoIp = true, Ip = "", ServerIp = "", ServerPort = 0, Power = 0, AliveTime = 0, Enable = IsStart.是 }; Archor archor8 = new Archor() { Code = "85D6", Name = "基站8", X = 5585, Y = 1953, Z = 500, Type = 0, IsAutoIp = true, Ip = "", ServerIp = "", ServerPort = 0, Power = 0, AliveTime = 0, Enable = IsStart.是 }; Archor archor9 = new Archor() { Code = "85CE", Name = "基站9", X = 5585, Y = 1623, Z = 500, Type = 0, IsAutoIp = true, Ip = "", ServerIp = "", ServerPort = 0, Power = 0, AliveTime = 0, Enable = IsStart.是 }; Archor archor10 = new Archor() { Code = "85CC", Name = "基站10", X = 5025, Y = 1930, Z = 500, Type = 0, IsAutoIp = true, Ip = "", ServerIp = "", ServerPort = 0, Power = 0, AliveTime = 0, Enable = IsStart.是 }; List <Archor> archors0 = new List <Archor>() { archor1, archor2, archor3, archor4 }; List <Archor> archors1 = new List <Archor>() { archor5, archor6 }; List <Archor> archors2 = new List <Archor>() { archor7, archor8, archor9, archor10 }; AddArchorDevs(archors0, chulingFloor1Room3); AddArchorDevs(archors1, chulingFloor1Room5); AddArchorDevs(archors2, chulingFloor2Room3); #endregion }