/// <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();
    }
Example #5
0
    /// <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;
 }
Example #9
0
 /// <summary>
 /// 设置该节点下的区域范围
 /// </summary>
 public virtual void SetMonitorRangeObject(MonitorRangeObject oT)
 {
     monitorRangeObject = oT;
 }