示例#1
0
        public override float GetBoundingRadius()
        {
            float radius = base.GetBoundingRadius();

            if (Type != TypeEnum.Laser_Barrier || LaserPath == null || m_actorMeshes.Count == 0)
            {
                return(radius);
            }
            var points = LaserPath.GetPoints();

            if (points.Count < 2)
            {
                return(radius);
            }

            for (int pathPointIndex = 0; pathPointIndex < 2; pathPointIndex++)
            {
                if (pathPointIndex >= points.Count)
                {
                    break;
                }
                PathPoint_v2 point = points[pathPointIndex];

                float dist = (Transform.Position - point.Transform.Position).Length;
                if (dist > radius)
                {
                    radius = dist;
                }
            }

            return(radius);
        }
示例#2
0
        public override void Draw(WSceneView view)
        {
            if (Type == TypeEnum.Laser_Barrier && LaserPath != null)
            {
                Matrix4 centerTrs = Matrix4.CreateTranslation(Transform.Position);
                m_objRender.Render(view.ViewMatrix, view.ProjMatrix, centerTrs);

                if (m_actorMeshes.Count > 0)
                {
                    var wallMountModel = m_actorMeshes[0];

                    for (int i = 0; i < 4; i++)
                    {
                        if (ColorOverrides.ColorsEnabled[i])
                        {
                            wallMountModel.SetTevColorOverride(i, ColorOverrides.Colors[i]);
                        }

                        if (ColorOverrides.ConstColorsEnabled[i])
                        {
                            wallMountModel.SetTevkColorOverride(i, ColorOverrides.ConstColors[i]);
                        }
                    }

                    var points = LaserPath.GetPoints();
                    if (points.Count < 2)
                    {
                        return;
                    }

                    Vector3 p1         = points[0].Transform.Position;
                    Vector3 p2         = points[1].Transform.Position;
                    Vector3 path_delta = p2 - p1;
                    float   y_rot1     = (float)Math.Atan2(path_delta.X, path_delta.Z);
                    float   y_rot2     = (float)Math.Atan2(-path_delta.X, -path_delta.Z);

                    Quaternion firstPointRotation  = Quaternion.FromAxisAngle(Vector3.UnitY, y_rot1);
                    Quaternion secondPointRotation = Quaternion.FromAxisAngle(Vector3.UnitY, y_rot2);

                    Matrix4 firstTrs  = Matrix4.CreateFromQuaternion(firstPointRotation) * Matrix4.CreateTranslation(points[0].Transform.Position);
                    Matrix4 secondTrs = Matrix4.CreateFromQuaternion(secondPointRotation) * Matrix4.CreateTranslation(points[1].Transform.Position);

                    wallMountModel.Render(view.ViewMatrix, view.ProjMatrix, firstTrs);
                    wallMountModel.Render(view.ViewMatrix, view.ProjMatrix, secondTrs);
                }
            }
            else
            {
                base.Draw(view);
            }
        }
示例#3
0
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.T))
        {
            RunTest();
        }
        if (video && tex2d)
        {
            EdgeDetect.image = tex2d;
            EdgeDetect.Process();

            //var path = LaserPath.ConvertEdge(EdgeDetect.chains);
            //path = LaserPath.OptimizePath(path, 16);
        }
        //LaserPath.color = Color.HSVToRGB(Mathf.Clamp((EdgeDetect.brightness - 0.5f) * 2 + 1 / 3f, 1 / 6f, 1 / 2f), 1, 1);
        LaserPath.color = EdgeDetect.brightness > 0.5f ? Color.cyan : Color.yellow;
        var path = LaserPath.ConvertEdge(new List <EdgeChain>(EdgeDetect.chains));

        DrawLaserPath(path);
        SerialUtil.instance.dataToSend = path;
    }