示例#1
0
        private IEnumerable <RenderTargetBitmap> ProduceAnimationFrames(Animation animation, int firstFrame, int lastFrame)
        {
            if (_document == null)
            {
                throw new Exception("Call PrepareDocument() first");
            }

            var bounds       = GetAnimationWorldBounds(animation, _document);
            var cameraCenter = new Vector(bounds.X + bounds.Width * 0.5, bounds.Y + bounds.Height * 0.5);

            var scale = GetCoercedScale();

            var width  = 500; //(int)Math.Ceiling(bounds.Width * scale);
            var height = 500; //(int) Math.Ceiling(bounds.Height * scale);

            ConfigureViewport(width, height);

            for (var i = firstFrame; i <= lastFrame; i++)
            {
                _document.ApplyAnimationToScene(animation.Id, i);

                SceneViewport.Clear();
                SceneViewport.PanTo(cameraCenter);
                SceneViewport.SetZoom(scale);

                AddSpritesToViewport(_document);
                var renderTarget = new RenderTargetBitmap(width, height, 144, 144, PixelFormats.Default);
                renderTarget.Render(SceneViewport);
                yield return(renderTarget);

                SavePng(renderTarget, $"{animation.Name}_{i:000}.png");
            }
        }
示例#2
0
        public void Draw(SceneViewport viewport, Matrix4x4 parentTransform)
        {
            var view = viewport.Camera.View.ToOpenTK();
            var proj = viewport.Camera.Projection.ToOpenTK();

            Model.Draw(ShaderStore.Instance.Get("default"), ref view, ref proj, 0);
        }
示例#3
0
        public void UpdateTransform(SceneViewport sceneViewport)
        {
            var screenPosition = sceneViewport.WorldToScreenPosition(_worldPosition);

            _gizmoPath.SetValue(Canvas.LeftProperty, screenPosition.X);
            _gizmoPath.SetValue(Canvas.TopProperty, screenPosition.Y);

            UpdateGeometry();
        }
示例#4
0
        public void ViewLoaded(SceneViewport viewport, GizmoCanvas gizmoCanvasFront, GizmoCanvas gizmoCanvasBack)
        {
            SceneViewport    = viewport;
            GizmoCanvasFront = gizmoCanvasFront;
            GizmoCanvasBack  = gizmoCanvasBack;

            Clear();
            LoadCurrentDocument();
            UpdateAllGizmoTransforms();
        }
示例#5
0
        public void Draw(SceneViewport viewport, Matrix4x4 parentTransform)
        {
            sShader.Use();
            viewport.Camera.Bind(sShader);
            sShader.SetUniform("uColor", Color);
            sShader.SetUniform("uModel", parentTransform.ToOpenTK());

            sVertexBuffer.Bind();
            GL.DrawArrays(PrimitiveType.Triangles, 0, 36);
        }
示例#6
0
        public void Draw(SceneViewport viewport, Matrix4x4 parentTransform)
        {
            mShader.Use();
            viewport.Camera.Bind(mShader);
            mShader.SetUniform("uColor", Color);
            mShader.SetUniform("uBlendColor", BlendColor);
            mShader.SetUniform("uMinZ", mMinZ);

            GL.BindVertexArray(mVertexArray);
            GL.DrawArrays(PrimitiveType.Lines, 0, mVertexBuffer.Count);
        }
        public void Initialize(SceneViewport sceneViewport)
        {
            var source = PresentationSource.FromVisual(sceneViewport);

            _dpiX    = 96f * source.CompositionTarget.TransformToDevice.M11;
            _dpiY    = 96f * source.CompositionTarget.TransformToDevice.M22;
            DpiLabel = $"{_dpiX}x{_dpiY}";

            _spriteProducer.SceneViewport = sceneViewport;
            _spriteProducer.PrepareDocument();
            UpdatePreview();
        }
示例#8
0
        public void UpdateTransform(SceneViewport sceneViewport)
        {
            var originScreen = sceneViewport.WorldToScreenPosition(Vector2.Zero);
            var originCanvas = new Vector(originScreen.X, originScreen.Y);

            _lineX.X1 = 0;
            _lineX.X2 = sceneViewport.ActualWidth;
            _lineX.Y1 = _lineX.Y2 = originCanvas.Y;

            _lineY.Y1 = 0;
            _lineY.Y2 = sceneViewport.ActualHeight;
            _lineY.X1 = _lineY.X2 = originCanvas.X;
        }
示例#9
0
        private Rect AddSpritesToViewport(Document document)
        {
            var globalAabb         = Rect.Empty;
            var visibleSpriteNodes = GetVisibleSpriteNodesInDrawOrder(document);

            foreach (var spriteNode in visibleSpriteNodes)
            {
                SceneViewport.AddSpriteNode(spriteNode.Id, _spriteBitmapStore.Get(spriteNode.SpriteRef.RelativePath));
                SceneViewport.SetTransform(spriteNode.Id, spriteNode.GetAnimateTransformation().GlobalTransform.ToWpfMatrix());
                var aabb = SceneViewport.GetBoundingBox(spriteNode.Id);
                globalAabb = CombineAabb(aabb, globalAabb);
            }

            return(globalAabb);
        }
示例#10
0
        private Rect CalculateMaxBounds(Animation animation, Document document)
        {
            var globalAabb = Rect.Empty;

            for (var i = animation.BeginFrame; i <= animation.EndFrame; i++)
            {
                document.ApplyAnimationToScene(animation.Id, i);

                SceneViewport.Clear();
                var aabb = AddSpritesToViewport(document);

                globalAabb = CombineAabb(globalAabb, aabb);
            }

            return(globalAabb);
        }
        internal void OnMouseDown(object sender, MouseButtonEventArgs e)
        {
            var mousePosition = e.GetPosition(SceneViewport);

            switch (e.ChangedButton)
            {
            case MouseButton.Left:
            {
                SceneViewport.CaptureMouse();
                _currentMouseTool.MouseLeftDown(mousePosition);
                break;
            }

            case MouseButton.Middle:
                SceneViewport.CaptureMouse();
                _currentMiddleMouseDragOperation = new PanCameraOperation(this, mousePosition.ToVector());
                break;
            }
        }
        internal void OnMouseUp(object sender, MouseButtonEventArgs e)
        {
            SceneViewport.ReleaseMouseCapture();

            // end any mousedrag operation
            if (e.ChangedButton == MouseButton.Left)
            {
                _currentLeftMouseDragOperation?.Finish();
                _currentLeftMouseDragOperation = null;
            }

            if (e.ChangedButton == MouseButton.Middle)
            {
                _currentMiddleMouseDragOperation?.Finish();
                _currentMiddleMouseDragOperation = null;
            }

            var mousePosition = e.GetPosition(SceneViewport);

            _currentMouseTool.MouseLeftUp(mousePosition);
        }
示例#13
0
        public void UpdateTransform(SceneViewport sceneViewport)
        {
            // todo replace with rectangle following transform

            var bounds = sceneViewport.GetBoundingBox(_nodeId);

            if (bounds.IsEmpty)
            {
                Canvas.SetLeft(_rectangle, -1);
                Canvas.SetTop(_rectangle, -1);

                _rectangle.Width  = 0;
                _rectangle.Height = 0;
                return;
            }

            _rectangle.Width  = bounds.Width;
            _rectangle.Height = bounds.Height;

            Canvas.SetLeft(_rectangle, bounds.X);
            Canvas.SetTop(_rectangle, bounds.Y);
        }
 public SetCameraToSceneViewCommand(SceneViewport sceneViewport, Camera camera)
 {
     _sceneViewport = sceneViewport;
     _camera        = camera;
 }