コード例 #1
0
        public static int Run(Options options)
        {
            Console.WriteLine($"{Path.GetFileName(options.Input)} -> {Path.GetFileName(options.Output)}");

            var reader = new CircuitDiagramDocumentReader();
            CircuitDiagramDocument circuit;

            using (var fs = File.Open(options.Input, FileMode.Open, FileAccess.Read))
            {
                circuit = reader.ReadCircuit(fs);
            }

            var loggerFactory = new LoggerFactory();

            if (options.Verbose)
            {
                loggerFactory.AddConsole(LogLevel.Information);
            }

            var descriptionLookup = new DirectoryComponentDescriptionLookup(loggerFactory, options.ComponentsDirectory ?? Path.GetDirectoryName(options.Input), true);
            var renderer          = new CircuitRenderer(descriptionLookup);
            var drawingContext    = new SkiaDrawingContext((int)circuit.Size.Width, (int)circuit.Size.Height, SKColors.White);

            renderer.RenderCircuit(circuit, drawingContext);

            using (var outputFs = File.OpenWrite(options.Output))
            {
                drawingContext.WriteAsPng(outputFs);
            }

            return(0);
        }
コード例 #2
0
        public static int Run(Options options)
        {
            Console.WriteLine($"{Path.GetFileName(options.Input)} -> {Path.GetFileName(options.Output)}");

            var reader = new CircuitDiagramDocumentReader();
            CircuitDiagramDocument circuit;

            using (var fs = File.Open(options.Input, FileMode.Open, FileAccess.Read))
            {
                circuit = reader.ReadCircuit(fs);
            }

            var loggerFactory = new LoggerFactory();

            if (options.Verbose)
            {
                loggerFactory.AddConsole(LogLevel.Information);
            }

            var descriptionLookup = new DirectoryComponentDescriptionLookup(loggerFactory, options.ComponentsDirectory ?? Path.GetDirectoryName(options.Input), true);
            var renderer          = new CircuitRenderer(descriptionLookup);
            var drawingContext    = new SkiaDrawingContext((int)circuit.Size.Width, (int)circuit.Size.Height, SKColors.White);

            try
            {
                renderer.RenderCircuit(circuit, drawingContext);
            }
            catch (MissingComponentDescriptionException ex)
            {
                Console.Error.WriteLine($"Unable to find component {ex.MissingType}.");

                var allDescriptions = descriptionLookup.GetAllDescriptions().OrderBy(x => x.ComponentName).ToList();

                if (!allDescriptions.Any())
                {
                    Console.Error.Write("No components were loaded. Is the --components option set correctly?");
                }
                else
                {
                    Console.Error.WriteLine("Ensure this component is available in the --components directory. The following components were loaded:");

                    foreach (var description in allDescriptions)
                    {
                        Console.Error.WriteLine($"  - {description.ComponentName} ({description.Metadata.GUID})");
                    }
                }

                return(1);
            }

            using (var outputFs = File.OpenWrite(options.Output))
            {
                drawingContext.WriteAsPng(outputFs);
            }

            return(0);
        }
コード例 #3
0
        public void SetUp()
        {
            var resourceName = Assembly.GetExecutingAssembly().GetManifestResourceNames().First(x => x.EndsWith("Data.TestCircuit.cddx"));

            using (var resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
                using (var ms = new MemoryStream())
                {
                    resourceStream.CopyTo(ms);
                    ms.Seek(0, SeekOrigin.Begin);

                    var reader = new CircuitDiagramDocumentReader();
                    document = reader.ReadCircuit(ms);
                }
        }
コード例 #4
0
        private void OpenDocument()
        {
            var ofd = new OpenFileDialog
            {
                Title            = "Open",
                Filter           = "Circuit Diagram Document (*.cddx)|*.cddx|All Files (*.*)|*.*",
                InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
            };

            if (ofd.ShowDialog() == true)
            {
                var reader = new CircuitDiagramDocumentReader();
                using (var fs = new FileStream(ofd.FileName, FileMode.Open))
                    Document = documentService.OpenDocument(fs);
            }
        }
コード例 #5
0
ファイル: CircuitApp.cs プロジェクト: ywscr/circuitdiagram
        public static void Run(string[] args)
        {
            string input = null;
            IReadOnlyList <string> componentDirectories = Array.Empty <string>();
            string output = null;

            var cliOptions = ArgumentSyntax.Parse(args, options =>
            {
                options.ApplicationName = "cdcli circuit";

                options.DefineOptionList("components", ref componentDirectories, "Path to components directory.");
                options.DefineOption("o|output", ref output, "Path to output file.");
                options.DefineParameter("input", ref input, "Path to input circuit.");
            });

            if (input == null)
            {
                cliOptions.ReportError("Input file must be specified.");
            }
            if (componentDirectories == null)
            {
                cliOptions.ReportError("Components directory must be specified.");
            }
            if (output == null)
            {
                cliOptions.ReportError("Output path must be specified.");
            }

            Console.WriteLine($"{Path.GetFileName(input)} -> {Path.GetFileName(output)}");

            var reader = new CircuitDiagramDocumentReader();
            CircuitDiagramDocument circuit;

            using (var fs = File.Open(input, FileMode.Open, FileAccess.Read))
                circuit = reader.ReadCircuit(fs);

            var descriptionLookup = new DirectoryComponentDescriptionLookup(componentDirectories.ToArray());
            var renderer          = new CircuitRenderer(descriptionLookup);
            var drawingContext    = new SkiaDrawingContext((int)circuit.Size.Width, (int)circuit.Size.Height, SKColors.White);

            renderer.RenderCircuit(circuit, drawingContext);

            using (var outputFs = File.OpenWrite(output))
                drawingContext.WriteAsPng(outputFs);
        }
コード例 #6
0
ファイル: CircuitApp.cs プロジェクト: wyldesw/circuitdiagram
        public int Run(Options options)
        {
            _logger.LogInformation($"{Path.GetFileName(options.Input)} -> {Path.GetFileName(options.Output)}");

            CircuitDocument circuit;
            var             inputFileExtension = Path.GetExtension(options.Input);

            switch (inputFileExtension)
            {
            case ".cddx":
            {
                var reader = new CircuitDiagramDocumentReader();
                using (var fs = File.Open(options.Input, FileMode.Open, FileAccess.Read))
                {
                    circuit = reader.ReadCircuit(fs);
                }
                break;
            }

            default:
            {
                _logger.LogError($"Unknown file type: '{inputFileExtension}'.");
                return(1);
            }
            }

            var renderer = new CircuitRenderer(_componentDescriptionLookup);

            var bufferRenderer = new SkiaBufferedDrawingContext();

            renderer.RenderCircuit(circuit, bufferRenderer);

            IPngDrawingContext context;

            switch (options.Renderer)
            {
            case PngRenderer.Skia:
                context = new SkiaDrawingContext((int)circuit.Size.Width, (int)circuit.Size.Height, SKColors.White);
                break;

            case PngRenderer.ImageSharp:
                context = new ImageSharpDrawingContext((int)circuit.Size.Width, (int)circuit.Size.Height, SixLabors.ImageSharp.Color.White);
                break;

            default:
                _logger.LogError("Unsupported renderer.");
                return(1);
            }

            try
            {
                renderer.RenderCircuit(circuit, context);
            }
            catch (MissingComponentDescriptionException ex)
            {
                _logger.LogError($"Unable to find component {ex.MissingType}.");

                var allDescriptions = _componentDescriptionLookup.GetAllDescriptions().OrderBy(x => x.ComponentName).ToList();

                if (!allDescriptions.Any())
                {
                    _logger.LogInformation("No components were loaded. Is the --components option set correctly?");
                }
                else
                {
                    _logger.LogInformation("Ensure this component is available in the --components directory. The following components were loaded:");

                    foreach (var description in allDescriptions)
                    {
                        _logger.LogInformation($"  - {description.ComponentName} ({description.Metadata.GUID})");
                    }
                }

                return(1);
            }

            using (var outputFs = File.OpenWrite(options.Output))
            {
                context.WriteAsPng(outputFs);
            }

            return(0);
        }
コード例 #7
0
 public DocumentService(CircuitDiagramDocumentReader reader)
 {
     this.reader = reader;
 }