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"); } }
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); }
public void UpdateTransform(SceneViewport sceneViewport) { var screenPosition = sceneViewport.WorldToScreenPosition(_worldPosition); _gizmoPath.SetValue(Canvas.LeftProperty, screenPosition.X); _gizmoPath.SetValue(Canvas.TopProperty, screenPosition.Y); UpdateGeometry(); }
public void ViewLoaded(SceneViewport viewport, GizmoCanvas gizmoCanvasFront, GizmoCanvas gizmoCanvasBack) { SceneViewport = viewport; GizmoCanvasFront = gizmoCanvasFront; GizmoCanvasBack = gizmoCanvasBack; Clear(); LoadCurrentDocument(); UpdateAllGizmoTransforms(); }
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); }
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(); }
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; }
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); }
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); }
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; }