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);
 }
Esempio n. 2
0
        /// <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;
            }
        }
    }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 6
0
    /// <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;
    }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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;
        }
    }
Esempio n. 12
0
        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);
        }
Esempio n. 13
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)
        {//因为这里的计算出来的比例为真实大小比例,而不是相对比例
        }
    }
Esempio n. 14
0
        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;
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        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;
        }
Esempio n. 17
0
 /// <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);
 }
Esempio n. 18
0
    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);
    }
Esempio n. 19
0
 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);
            }
        }
Esempio n. 22
0
        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);
            }
        }
Esempio n. 23
0
        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
        }