// this is temporary method that removes old mask in order to prevent mask gaining additional values
        // final implementation should use third layer that indicates whether value was drawn or not.
        private void updatePaintAndMask()
        {
            var l = LayerPainter.GetPaintedLayer();

            utils.PaintLayerOnLayerMasked(_beforeUpdateLayer, l, HeightmapLayer);
            //LayerPainter.ResetMask(l.Resolution);
            HeightmapVersion++;
        }
        public void FinishPaint(Vector2 vector2)
        {
            if (!LayerPainter.ReadyToDraw)
            {
                return;
            }
            var rec = zoomManager.RecalcZoomDiv(vector2);

            LayerPainter.FinishBrushPath(rec);

            updatePaintAndMask();
            _heightmapView.RefreshView();
        }
        public void UpdatePaint(Vector2 vector2)
        {
            // TODO async paint.
            var rec = zoomManager.RecalcZoomDiv(vector2);

            if (LayerPainter.ReadyToDraw)
            {
                LayerPainter.UpdateBrushPath(rec);
            }

            updatePaintAndMask();

            _heightmapView.RefreshView();
        }
        public void BeginPaint(Vector2 vector2)
        {
            if (!CanPaint())
            {
                return;
            }

            _beforeUpdateLayer = new Layer2DObject(HeightmapLayer.Resolution);

            utils.CloneFromTo(HeightmapLayer, _beforeUpdateLayer);
            LayerPainter.InitializeSource(this.HeightmapLayer);
            var rec = zoomManager.RecalcZoomDiv(vector2);

            LayerPainter.BeginBrushpath(rec, SelectedPluginTool, BrushSize, (float)BrushStrenght / 100, (float)BrushFade / 100);
        }