Esempio n. 1
0
 internal static void ExportPdf(IToolContext context, string path, IContainerView containerView)
 {
     using (var stream = new SKFileWStream(path))
         using (var pdf = SKDocument.CreatePdf(stream, SKDocument.DefaultRasterDpi))
             using (var canvas = pdf.BeginPage((float)containerView.Width, (float)containerView.Height))
                 using (var skiaContainerPresenter = new SkiaExportContainerPresenter(context, containerView))
                 {
                     skiaContainerPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0);
                     pdf.Close();
                 }
 }
Esempio n. 2
0
        public void ConvertToGeometryDrawing(IToolContext context, IContainerView containerView, StringBuilder sb, string indent)
        {
            if (containerView.SelectionState?.Shapes != null && containerView.SelectionState?.Shapes.Count > 0)
            {
                var shapes = new List <IBaseShape>(containerView.SelectionState?.Shapes);

                foreach (var shape in shapes)
                {
                    if (shape is IPointShape || shape is FigureShape)
                    {
                        continue;
                    }

                    var style = context.DocumentContainer?.StyleLibrary?.Get(shape.StyleId);
                    if (style == null)
                    {
                        continue;
                    }

                    var geometry = context.PathConverter?.ToSvgPathData(context, new[] { shape })?.TrimEnd(NewLine);
                    if (geometry == null)
                    {
                        continue;
                    }

                    var stroke = style.StrokePaint;
                    var fill   = style.FillPaint;

                    if (style.IsStroked && style.IsFilled)
                    {
                        sb.AppendLine($"{indent}<GeometryDrawing Brush=\"{fill.Color.ToHex()}\" Geometry=\"{geometry}\">");
                        sb.AppendLine($"{indent}    <GeometryDrawing.Pen>");
                        sb.AppendLine($"{indent}        <Pen Brush=\"{stroke.Color.ToHex()}\" Thickness=\"{stroke.StrokeWidth}\" LineCap=\"{stroke.StrokeCap}\" LineJoin=\"{stroke.StrokeJoin}\" MiterLimit=\"{stroke.StrokeMiter}\"/>");
                        sb.AppendLine($"{indent}    </GeometryDrawing.Pen>");
                        sb.AppendLine($"{indent}</GeometryDrawing>");
                    }
                    else if (style.IsStroked && !style.IsFilled)
                    {
                        sb.AppendLine($"{indent}<GeometryDrawing Geometry=\"{geometry}\">");
                        sb.AppendLine($"{indent}    <GeometryDrawing.Pen>");
                        sb.AppendLine($"{indent}        <Pen Brush=\"{stroke.Color.ToHex()}\" Thickness=\"{stroke.StrokeWidth}\" LineCap=\"{stroke.StrokeCap}\" LineJoin=\"{stroke.StrokeJoin}\" MiterLimit=\"{stroke.StrokeMiter}\"/>");
                        sb.AppendLine($"{indent}    </GeometryDrawing.Pen>");
                        sb.AppendLine($"{indent}</GeometryDrawing>");
                    }
                    else if (!style.IsStroked && style.IsFilled)
                    {
                        sb.AppendLine($"{indent}<GeometryDrawing Brush=\"{fill.Color.ToHex()}\" Geometry=\"{geometry}\" />");
                    }
                }
            }
        }
Esempio n. 3
0
 protected override void OnChildAdded(Agent child)
 {
     base.OnChildAdded(child);
     if (!(child is Item))
     {
         return;
     }
     foreach (IAgentView agentView in this.GetAgentViews())
     {
         IContainerView containerView = agentView as IContainerView;
         if (containerView != null)
         {
             containerView.OnChildAdded((Item)child);
         }
     }
 }
Esempio n. 4
0
        internal static void ExportImage(IToolContext context, string path, IContainerView containerView, SKEncodedImageFormat format, int quality)
        {
            var info = new SKImageInfo((int)containerView.Width, (int)containerView.Height, SKImageInfo.PlatformColorType, SKAlphaType.Unpremul);

            using var bitmap = new SKBitmap(info);
            using (var canvas = new SKCanvas(bitmap))
                using (var skiaContainerPresenter = new SkiaExportContainerPresenter(context, containerView))
                {
                    skiaContainerPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0);
                }
            using var image = SKImage.FromBitmap(bitmap);
            using var data  = image.Encode(format, quality);
            if (data != null)
            {
                using var stream = File.OpenWrite(path);
                data.SaveTo(stream);
            }
        }
Esempio n. 5
0
        private void DrawPoints(IContainerView view, SKCanvas canvas, IShapeRenderer renderer, double scale)
        {
            var selected = new List <IBaseShape>(view.SelectionState.Shapes);

            foreach (var shape in selected)
            {
                if (shape is IPointShape point)
                {
                    double s = 1.0 / scale;
                    canvas.Save();
                    double dx = 0.0 - (point.X * s) + point.X;
                    double dy = 0.0 - (point.Y * s) + point.Y;
                    canvas.Translate((float)dx, (float)dy);
                    canvas.Scale((float)s);

                    point.Draw(canvas, renderer, 0.0, 0.0, scale, null, null);

                    canvas.Restore();
                }
            }
        }
Esempio n. 6
0
        protected void RaiseUpdateEvents()
        {
            foreach (IAgentView agentView in this.GetAgentViews())
            {
                agentView.OnAgentUpdated();
            }
            PhysicalAgent physicalAgent = this.Parent as PhysicalAgent;

            if (physicalAgent == null || !(this is Item))
            {
                return;
            }
            foreach (IAgentView agentView in physicalAgent.GetAgentViews())
            {
                IContainerView containerView = agentView as IContainerView;
                if (containerView != null)
                {
                    containerView.OnChildUpdated((Item)this);
                }
            }
        }
        public void ConvertToPath(IToolContext context, IContainerView containerView, StringBuilder sb, string indent)
        {
            if (containerView.SelectionState?.Shapes != null && containerView.SelectionState?.Shapes.Count > 0)
            {
                var shapes = new List <IBaseShape>(containerView.SelectionState?.Shapes);

                foreach (var shape in shapes)
                {
                    if (shape is IPointShape)
                    {
                        continue;
                    }

                    var style = context.StyleLibrary?.Get(shape.StyleId);
                    if (style == null)
                    {
                        continue;
                    }

                    var geometry = context.PathConverter?.ToSvgPathData(context, new[] { shape })?.TrimEnd(NewLine);
                    if (geometry == null)
                    {
                        continue;
                    }

                    if (style.IsStroked && style.IsFilled)
                    {
                        sb.AppendLine($"{indent}<Path Fill=\"{style.Fill.ToHex()}\" Stroke=\"{style.Stroke.ToHex()}\" StrokeThickness=\"{style.StrokeWidth}\" StrokeLineCap=\"{style.StrokeCap}\" StrokeJoin=\"{style.StrokeJoin}\" Data=\"{geometry}\"/>");
                    }
                    else if (style.IsStroked && !style.IsFilled)
                    {
                        sb.AppendLine($"{indent}<Path Stroke=\"{style.Stroke.ToHex()}\" StrokeThickness=\"{style.StrokeWidth}\" StrokeLineCap=\"{style.StrokeCap}\" StrokeJoin=\"{style.StrokeJoin}\" Data=\"{geometry}\"/>");
                    }
                    else if (!style.IsStroked && style.IsFilled)
                    {
                        sb.AppendLine($"{indent}<Path Fill=\"{style.Fill.ToHex()}\" Data=\"{geometry}\"/>");
                    }
                }
            }
        }
Esempio n. 8
0
        public string ConvertToSvgDocument(IToolContext context, IContainerView containerView)
        {
            using var stream = new MemoryStream();
            using (var wstream = new SKManagedWStream(stream))
                using (var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, (int)containerView.Width, (int)containerView.Height), wstream))
                {
                    if (containerView.SelectionState?.Shapes?.Count > 0)
                    {
                        using var skiaSelectedPresenter = new SkiaExportSelectedPresenter(context, containerView);
                        skiaSelectedPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0, 1.0);
                    }
                    else
                    {
                        using var skiaContainerPresenter = new SkiaExportContainerPresenter(context, containerView);
                        skiaContainerPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0, 1.0);
                    }
                }

            stream.Position  = 0;
            using var reader = new StreamReader(stream, Encoding.UTF8);
            var xml = reader.ReadToEnd();

            return(FormatXml(xml));
        }
Esempio n. 9
0
        internal static void ExportSkp(IToolContext context, string path, IContainerView containerView)
        {
            var recorder = new SKPictureRecorder();
            var rect     = new SKRect(0f, 0f, (float)containerView.Width, (float)containerView.Height);
            var canvas   = recorder.BeginRecording(rect);

            using (var skiaContainerPresenter = new SkiaExportContainerPresenter(context, containerView))
            {
                skiaContainerPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0);
            }
            var picture    = recorder.EndRecording();
            var dimensions = new SKSizeI((int)containerView.Width, (int)containerView.Height);

            using (var image = SKImage.FromPicture(picture, dimensions))
            {
                var data = image.EncodedData;
                if (data != null)
                {
                    using var stream = File.OpenWrite(path);
                    data.SaveTo(stream);
                }
            }
            picture.Dispose();
        }
 protected override void Context()
 {
     _individualItem = IndividualItems.Settings;
     _view           = A.Fake <IContainerView>();
 }
Esempio n. 11
0
 public void ConvertToCanvas(IToolContext context, IContainerView containerView, StringBuilder sb, string indent)
 {
     sb.AppendLine($"{indent}<Canvas Width=\"{containerView.Width}\" Height=\"{containerView.Height}\">");
     ConvertToPath(context, containerView, sb, indent + "    ");
     sb.AppendLine($"{indent}</Canvas>");
 }
Esempio n. 12
0
 private void DrawShapesWorking(IContainerView view, SKCanvas canvas, IShapeRenderer renderer, double scale)
 {
     view.WorkingContainer.Draw(canvas, renderer, 0.0, 0.0, scale, null, null);
 }
 public SkiaExportSelectedPresenter(IToolContext context, IContainerView view)
 {
     _context = context;
     _view    = view;
 }
Esempio n. 14
0
 public void ConvertToDrawingGroup(IToolContext context, IContainerView containerView, StringBuilder sb, string indent)
 {
     sb.AppendLine($"{indent}<DrawingGroup>");
     ConvertToGeometryDrawing(context, containerView, sb, indent + "    ");
     sb.AppendLine($"{indent}</DrawingGroup>");
 }
Esempio n. 15
0
 public static void HideControl <TSubPresenterItem>(this IContainerView view, TSubPresenterItem itemToHide) where TSubPresenterItem : ISubPresenterItem
 {
     view.SetControlVisible(itemToHide, false);
 }
Esempio n. 16
0
 public static void DisableControl <TSubPresenterItem>(this IContainerView view, TSubPresenterItem itemToDisable) where TSubPresenterItem : ISubPresenterItem
 {
     view.SetControlEnabled(itemToDisable, false);
 }
Esempio n. 17
0
 public static void ShowControl <TSubPresenterItem>(this IContainerView view, TSubPresenterItem itemToShow) where TSubPresenterItem : ISubPresenterItem
 {
     view.SetControlVisible(itemToShow, true);
 }
Esempio n. 18
0
 public void SetContainerView(IContainerView containerView)
 {
     this._containerView = containerView;
 }
Esempio n. 19
0
 public void ConvertToDrawingPresenter(IToolContext context, IContainerView containerView, StringBuilder sb, string indent)
 {
     sb.AppendLine($"{indent}<DrawingPresenter Width=\"{containerView.Width}\" Height=\"{containerView.Height}\" Stretch=\"Uniform\">");
     ConvertToDrawingGroup(context, containerView, sb, indent + "    ");
     sb.AppendLine($"{indent}</DrawingPresenter>");
 }
Esempio n. 20
0
        public void Export(IToolContext context, string path, IContainerView containerView)
        {
            try
            {
                var outputExtension = Path.GetExtension(path);

                if (string.Compare(outputExtension, ".svg", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportSvg(context, path, containerView);
                }
                else if (string.Compare(outputExtension, ".pdf", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportPdf(context, path, containerView);
                }
                else if (string.Compare(outputExtension, ".xps", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportXps(context, path, containerView);
                }
                else if (string.Compare(outputExtension, ".skp", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportSkp(context, path, containerView);
                }
                else if (string.Compare(outputExtension, ".bmp", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Bmp, 100);
                }
                else if (string.Compare(outputExtension, ".gif", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Gif, 100);
                }
                else if (string.Compare(outputExtension, ".ico", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Ico, 100);
                }
                else if (string.Compare(outputExtension, ".jpeg", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Jpeg, 100);
                }
                else if (string.Compare(outputExtension, ".jpg", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Jpeg, 100);
                }
                else if (string.Compare(outputExtension, ".png", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Png, 100);
                }
                else if (string.Compare(outputExtension, ".wbmp", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Wbmp, 100);
                }
                else if (string.Compare(outputExtension, ".webp", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Webp, 100);
                }
                else if (string.Compare(outputExtension, ".pkm", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Pkm, 100);
                }
                else if (string.Compare(outputExtension, ".ktx", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Ktx, 100);
                }
                else if (string.Compare(outputExtension, ".astc", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Astc, 100);
                }
                else if (string.Compare(outputExtension, ".dng", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    ExportImage(context, path, containerView, SKEncodedImageFormat.Dng, 100);
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                System.Diagnostics.Debug.WriteLine(ex.StackTrace);
            }
        }