/// <summary> /// 点击物体 /// </summary> /// <param name="clickedObject"></param> public void Instance_GameObjectClicked(GameObject clickedObject) { Debug.Log("Instance_GameObjectClicked!"); MonitorRangeObject objT = clickedObject.GetComponent <MonitorRangeObject>(); //currentMRObj = clickedObject.GetComponent<MonitorRangeObject>(); if (objT) { Show(objT); } }
private static void DeleteArea(GameObject objt) { //GameObject objt = gs[i]; MonitorRangeObject monitorRangeObject = objt.GetComponent <MonitorRangeObject>(); PhysicalTopology pt = monitorRangeObject.info; //if (gs.Count >= 0) //{ // objt = gs[gs.Count - 1]; // monitorRangeObject = objt.GetComponent<MonitorRangeObject>(); // pt = monitorRangeObject.info; //} //if (pt == null) // return; Loom.StartSingleThread(() => { bool b = CommunicationObject.Instance.DeleteMonitorRange(pt); Loom.DispatchToMainThread(() => { if (b) { Debug.LogError("删除成功!"); UGUIMessageBox.Show("删除成功!"); } else { Debug.LogError("删除失败!"); UGUIMessageBox.Show("删除失败,区域下存在设备!"); return; } if (pt != null) { RangeNode node = monitorRangeObject.rangeNode; RangeNode parentnode = node.parentNode; parentnode.subNodes.Remove(node); DepNode depnode = monitorRangeObject.depNode; DepNode parentdepnode = depnode.ParentNode; parentdepnode.ChildNodes.Remove(depnode); RoomFactory.Instance.NodeDic_Remove(monitorRangeObject.depNode); EditorObjectSelection.Instance.ClearSelection(false); Destroy(monitorRangeObject.gameObject); PersonnelTreeManage.Instance.areaDivideTree.RemoveAreaChild(pt.Id); } }); }); }
private void SetCurrentMRObj(MonitorRangeObject mrobj) { if (currentMRObj != mrobj) { if (currentMRObj != null) { currentMRObj.areaNameUIController.SetImageRaycast(true); } if (mrobj != null && mrobj.areaNameUIController != null) { mrobj.areaNameUIController.SetImageRaycast(false); } } currentMRObj = mrobj; }
/// <summary> /// 显示 /// </summary> public void Show(MonitorRangeObject mrobj) { ShowContent(); SetCurrentMRObj(mrobj); SetWindowActive(true); NameInput.text = mrobj.info.Name; TypeTxt.text = ""; if (mrobj.info.Transfrom.IsOnLocationArea) { TypeTxt.text = "定位监控区域"; } else if (mrobj.info.Transfrom.IsOnAlarmArea) { TypeTxt.text = "告警区域"; } else { TypeTxt.text = "普通区域"; } //if (mrobj.info.Transfrom.IsRelative) //{ //float posx = mrobj.transform.localPosition.x * mrobj.transform.parent.lossyScale.x; //float posy = mrobj.transform.localPosition.y * mrobj.transform.parent.lossyScale.y; //float posz = mrobj.transform.localPosition.z * mrobj.transform.parent.lossyScale.z; //Vector3 posT = LocationManager.GetDisRealSizeVector(new Vector3(posx, posy, posz)); APosInput.text = Math.Round(mrobj.info.Transfrom.Z, 2).ToString(); BPosInput.text = Math.Round(mrobj.info.Transfrom.X, 2).ToString(); HPosInput.text = Math.Round(mrobj.info.Transfrom.Y, 2).ToString(); //} //else //{ // Vector3 posT = LocationManager.GetDisRealSizeVector(transform.localPosition); // APosInput.text = Math.Round(posT.z, 2).ToString(); // BPosInput.text = Math.Round(posT.x, 2).ToString(); // HPosInput.text = Math.Round(posT.y, 2).ToString(); //} AngleInput.text = Math.Round(mrobj.info.Transfrom.RY, 2).ToString(); //Vector3 sizeT = mrobj.gameObject.GetGlobalSize(); //sizeT = LocationManager.GetDisRealSizeVector(sizeT); LengthInput.text = Math.Round(mrobj.info.Transfrom.SZ, 2).ToString(); WidthInput.text = Math.Round(mrobj.info.Transfrom.SX, 2).ToString(); HeightInput.text = Math.Round(mrobj.info.Transfrom.SY, 2).ToString(); }
/// <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) {//因为这里的计算出来的比例为真实大小比例,而不是相对比例 } }
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); } }); }); }
/// <summary> /// 设置监控区域 /// </summary> /// <param name="oT"></param> public override void SetMonitorRangeObject(MonitorRangeObject oT) { monitorRangeObject = oT; InitContainer(); }
/// <summary> /// 设置区域 /// </summary> /// <param name="obj"></param> public void SetMonitorRangeObject(MonitorRangeObject obj) { monitorRangeObject = obj; }
/// <summary> /// 设置该节点下的区域范围 /// </summary> public virtual void SetMonitorRangeObject(MonitorRangeObject oT) { monitorRangeObject = oT; }