public void SaveCanvasAsImage(string imageFileName)
        {
            double newWidth  = this._mainImage.Source.Width;
            double newHeight = this._mainImage.Source.Height;

            double widthAspectRatio  = newWidth / this._mainCanvas.ActualWidth;
            double heightAspectRatio = newHeight / this._mainCanvas.ActualHeight;

            PhotoCanvas saveCanvas = new PhotoCanvas(this._border, newWidth,
                                                     newHeight);

            saveCanvas.ChangeMainImage(this._mainImage.Source, false);

            foreach (InsetImage insetImage in this._imageDictionary.Values)
            {
                double newX = DynamicCanvas.GetLeft(insetImage.ImageCanvas) * widthAspectRatio;
                double newY = DynamicCanvas.GetTop(insetImage.ImageCanvas) * heightAspectRatio;

                double newImageWidth = insetImage.ImageCanvas.Width * widthAspectRatio;

                saveCanvas.AddInsetPhoto(insetImage.DisplayImage.Source, newImageWidth, this._border,
                                         newX, newY);
            }

            ImageUtils.SaveDynamicCanvas(saveCanvas._mainCanvas, 96, imageFileName);
        }
 private void Update()
 {
     if (cam == null && Input.GetMouseButtonDown(0))
     {
         var        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         RaycastHit hitInfo;
         if (Physics.Raycast(ray, out hitInfo))
         {
             paintObject = hitInfo.transform.GetComponent <DynamicCanvas>();
             if (paintObject != null)
             {
                 uv = hitInfo.textureCoord;
                 var camObj = Instantiate(camPref, hitInfo.point, Quaternion.LookRotation(hitInfo.normal), hitInfo.transform) as GameObject;
                 cam = camObj.GetComponent <Camera>();
                 cam.targetTexture = rt;
                 camObj.SetActive(true);
             }
         }
     }
     else if (cam != null)
     {
         var buf = RenderTexture.GetTemporary(brush.BrushTexture.width, brush.BrushTexture.height);
         Es.Effective.GrabArea.Clip(brush.BrushTexture, brush.Scale, rt, Vector3.one * 0.5f, Es.Effective.GrabArea.GrabTextureWrapMode.Clip, buf);
         Es.Effective.ReverseUV.Horizontal(buf, buf);
         var brushBuf = brush.BrushTexture;
         brush.BrushTexture = buf;
         if (paintObject != null)
         {
             paintObject.PaintUVDirect(brush, uv);
         }
         RenderTexture.ReleaseTemporary(buf);
         brush.BrushTexture = brushBuf;
     }
 }
Example #3
0
 public void Start()
 {
     mat    = GetComponent <MeshRenderer>().sharedMaterial;
     canvas = GetComponent <DynamicCanvas>();
     tex    = canvas.GetMainTexture(mat.name);
     rtex   = canvas.GetPaintMainTexture(mat.name);
 }
Example #4
0
        private void Start()
        {
            material     = GetComponent <Renderer>().sharedMaterial;
            materialName = material.name;

            canvas = GetComponent <DynamicCanvas>();
            canvas.OnInitializedAfter = Init;
        }
Example #5
0
        private void Init(DynamicCanvas canvas)
        {
            var heightPaint = canvas.GetPaintHeightTexture(materialName);

            if (heightPaint != null)
            {
                InitHeightMap(heightPaint);
            }
        }
Example #6
0
        private void DragStarted()
        {
            _isDragging = true;
            var ui = (UIElement)MyVisualTreeHelper.GetParent <ContentPresenter>(_draggedDeviceVisual);

            _dragStartLeft = DynamicCanvas.GetLeft(ui);
            _dragStartTop  = DynamicCanvas.GetTop(ui);
            SelectElement(_draggedDeviceVisual);
            _overlayElement.IsDragging = true;
        }
 private void Init(DynamicCanvas canvas)
 {
     material           = GetComponent <MeshRenderer>().sharedMaterial;
     defaultMainTexture = canvas.GetMainTexture(material.name);
     paintMainTexture   = canvas.GetPaintMainTexture(material.name);
     defaultNormalMap   = canvas.GetNormalTexture(material.name);
     paintNormalMap     = canvas.GetPaintNormalTexture(material.name);
     defaultHeightMap   = canvas.GetHeightTexture(material.name);
     paintHeightMap     = canvas.GetPaintHeightTexture(material.name);
     StartCoroutine(TextureLerp());
 }
Example #8
0
 internal static void SetTop(UIElement element, PanelType panelType, double top)
 {
     if (panelType == PanelType.Canvas)
     {
         Canvas.SetTop(element, top);
     }
     else
     {
         DynamicCanvas.SetTop(element, top);
     }
 }
Example #9
0
 internal static void SetLeft(UIElement element, PanelType panelType, double left)
 {
     if (panelType == PanelType.Canvas)
     {
         Canvas.SetLeft(element, left);
     }
     else
     {
         DynamicCanvas.SetLeft(element, left);
     }
 }
Example #10
0
 internal static double GetTop(UIElement element, PanelType panelType)
 {
     if (panelType == PanelType.Canvas)
     {
         return(Canvas.GetTop(element));
     }
     else
     {
         return(DynamicCanvas.GetTop(element));
     }
 }
        private void CreateMainImage()
        {
            _mainImage         = new Image();
            _mainImage.Name    = "ImageHolder";
            _mainImage.Stretch = System.Windows.Media.Stretch.Fill;

            _mainCanvas.Children.Add(_mainImage);

            DynamicCanvas.SetTop(_mainImage, _border);
            DynamicCanvas.SetLeft(_mainImage, _border);
            DynamicCanvas.SetZIndex(_mainImage, -500);
        }
        private DynamicCanvas CreatePhotoCanvas(Uri imageUri)
        {
            _mainCanvas            = new DynamicCanvas();
            _mainCanvas.Name       = "ImageCanvas";
            _mainCanvas.Background = Brushes.White;

            if (imageUri != null)
            {
                SetMainImage(ImageUtils.GetImageFromUri(imageUri), false);
            }



            return(_mainCanvas);
        }
Example #13
0
        public static void SaveDynamicCanvas(DynamicCanvas canvas, int dpi, string filename)
        {
            Size size = new Size(canvas.Width, canvas.Height);

            canvas.Measure(size);
            canvas.Arrange(new Rect(size));
            var rtb = new RenderTargetBitmap(
                (int)canvas.Width,   //width
                (int)canvas.Height,  //height
                dpi,                 //dpi x
                dpi,                 //dpi y
                PixelFormats.Pbgra32 // pixelformat
                );

            rtb.Render(canvas);

            SaveRTBAsPNG(rtb, filename);
        }
        public bool AddInsetPhoto(Uri imageUri)
        {
            InsetImage insetImage  = new InsetImage(imageUri);
            Canvas     imageCanvas = insetImage.ImageCanvas;

            if (imageCanvas != null)
            {
                _imageDictionary.Add(imageCanvas.Name, insetImage);

                _mainCanvas.Children.Add(imageCanvas);

                DynamicCanvas.SetLeft(imageCanvas, DefaultLeft);
                DynamicCanvas.SetTop(imageCanvas, DefaultTop);

                AddInsetImageUndo(imageCanvas);
                return(true);
            }

            return(false);
        }
Example #15
0
        private void DragFinished(bool cancelled)
        {
            Mouse.Capture(null);
            lock (_updaterLock)
            {
                if (_isDragging)
                {
                    if (cancelled == false)
                    {
                        var ui = (UIElement)MyVisualTreeHelper.GetParent <ContentPresenter>(_draggedDeviceVisual);
                        DynamicCanvas.SetTop(ui, _dragStartTop + _overlayElement.TopOffset);
                        DynamicCanvas.SetLeft(ui, _dragStartLeft + _overlayElement.LeftOffset);
                    }

                    SelectElement(_draggedDeviceVisual);
                    _overlayElement.IsDragging = false;
                }

                _isDragging  = false;
                _isMouseDown = false;
            }
        }
        public bool AddInsetPhoto(ImageSource imageSource, double imageWidth,
                                  double borderWidth, double imageX, double imageY)
        {
            InsetImage insetImage = new InsetImage(imageWidth,
                                                   imageSource, borderWidth);
            Canvas imageCanvas = insetImage.ImageCanvas;

            if (imageCanvas != null)
            {
                _imageDictionary.Add(imageCanvas.Name, insetImage);

                _mainCanvas.Children.Add(imageCanvas);

                DynamicCanvas.SetLeft(imageCanvas, imageX);
                DynamicCanvas.SetTop(imageCanvas, imageY);

                AddInsetImageUndo(imageCanvas);

                return(true);
            }

            return(false);
        }
 private void Awake()
 {
     canvas = GetComponent <DynamicCanvas>();
     canvas.OnInitializedAfter = Init;
 }