Beispiel #1
0
        public void Update()
        {
            var ray = Scene.MainCamera.Unproject(_control.ScreenMousePosition);

            _renderer.Mesh.Vertices[0] = ray.Origin;
            _renderer.Mesh.Vertices[1] = ray.Direction + ray.Origin;
            _renderer.UpdateMesh();

            ray.Direction.Normalize();

            var hit = SceneObject.Scene.RaycastMeshes(ray);

            if (hit == null)
            {
                return;
            }

            if (hit.Renderer.Material != null)
            {
                hit.Renderer.Material = _selectedMaterial;
            }

            _hitPointTransform.LocalPosition = hit.Point;
            _renderer.IsEnabled         = true;
            _hitPointRenderer.IsEnabled = true;
        }
Beispiel #2
0
        private void Highlight()
        {
            switch (_selectedAxis)
            {
            case Axis.X:
                for (int i = 80; i < 120; i++)
                {
                    _renderer.Mesh.Colors[i] = new Vector3(1, 1, 0);
                }
                break;

            case Axis.Y:
                for (int i = 40; i < 80; i++)
                {
                    _renderer.Mesh.Colors[i] = new Vector3(1, 1, 0);
                }
                break;

            case Axis.Z:
                for (int i = 0; i < 40; i++)
                {
                    _renderer.Mesh.Colors[i] = new Vector3(1, 1, 0);
                }
                break;

            case Axis.All:
                for (int i = 0; i < 120; i++)
                {
                    _renderer.Mesh.Colors[i] = new Vector3(1, 1, 0);
                }
                break;

            case Axis.None:
                return;

            default:
                throw new NotImplementedException();
            }

            _renderer.UpdateMesh();
        }
Beispiel #3
0
        public void SetTarget(MeshRenderable target)
        {
            if (IsDisposed)
            {
                Log.Error("object disposed");
                return;
            }

            if (target == null)
            {
                _renderer.IsEnabled = false;
                return;
            }
            if (target.Mesh == null)
            {
                _renderer.IsEnabled = false;
                return;
            }
            if (target.Mesh.Bounds == null)
            {
                _renderer.IsEnabled = false;
                return;
            }

            _target = target;

            var size     = target.Mesh.Bounds.Size / 2;
            var vertices = new Vector3[] {
                new Vector3(-1, -1, -1) * size,
                new Vector3(-1, 1, -1) * size,
                new Vector3(1, 1, -1) * size,
                new Vector3(1, -1, -1) * size,

                new Vector3(-1, -1, 1) * size,
                new Vector3(-1, 1, 1) * size,
                new Vector3(1, 1, 1) * size,
                new Vector3(1, -1, 1) * size
            };

            _mesh.Vertices = vertices;

            _renderer.Mesh = _mesh;
            _renderer.UpdateMesh();
            _renderer.IsEnabled = true;

            Update();
        }
Beispiel #4
0
        private void Unhighlight()
        {
            _lineMesh.Colors = new Vector3[] {
                new Vector3(1, 0, 0),
                new Vector3(1, 0, 0), //X

                new Vector3(0, 1, 0),
                new Vector3(0, 1, 0), //Y

                new Vector3(0, 0, 1),
                new Vector3(0, 0, 1), //Z

                new Vector3(1, 0, 0),
                new Vector3(1, 0, 0),
                new Vector3(0, 1, 0),
                new Vector3(0, 1, 0),
                new Vector3(1, 0, 0),
                new Vector3(1, 0, 0),
                new Vector3(0, 1, 0),
                new Vector3(0, 1, 0), //XY

                new Vector3(0, 1, 0),
                new Vector3(0, 1, 0),
                new Vector3(0, 0, 1),
                new Vector3(0, 0, 1),
                new Vector3(0, 1, 0),
                new Vector3(0, 1, 0),
                new Vector3(0, 0, 1),
                new Vector3(0, 0, 1), //YZ

                new Vector3(1, 0, 0),
                new Vector3(1, 0, 0),
                new Vector3(0, 0, 1),
                new Vector3(0, 0, 1),
                new Vector3(1, 0, 0),
                new Vector3(1, 0, 0),
                new Vector3(0, 0, 1),
                new Vector3(0, 0, 1), //XZ
            };
            _lineRenderer.UpdateMesh();

            if (_arrowMesh.Colors == null)
            {
                _arrowMesh.Colors = new Vector3Buffer(_coneVertexCount * 3);
            }
            for (int i = 0; i < _coneVertexCount * 3; i++)
            {
                if (i < _coneVertexCount)
                {
                    _arrowMesh.Colors[i] = new Vector3(1, 0, 0);
                }
                else if (i < _coneVertexCount * 2)
                {
                    _arrowMesh.Colors[i] = new Vector3(0, 1, 0);
                }
                else if (i < _coneVertexCount * 3)
                {
                    _arrowMesh.Colors[i] = new Vector3(0, 0, 1);
                }
            }
            _arrowRenderer.UpdateMesh();
        }