public Simulations(Dictionary <string, string> megagridAddressDictionary, Digest digest) { foreach (KeyValuePair <string, string> kvp in megagridAddressDictionary) { if (!simulations.ContainsKey(kvp.Value.Trim())) { SimulationModel simModel = new SimulationModel(); CompiledCode code = digest.FindByName(kvp.Value); Grid grid = Pivot.ToGrid(new Code(code.minimalCode)); RectList rects = Pivot.ToRects(grid); simModel.grid = grid; RasterLib.RasterApi.BuildCircuit(rects, true); simModel.rects = rects; simModel.Build(); simulations.Add(kvp.Value.Trim(), simModel); } } }
public static int Analyze(string inputFilenameWithPath, Digest digest, string outputFolder, RasterLib.DownSolver.enables enables) { string filename = Path.GetFileNameWithoutExtension(inputFilenameWithPath); List <CodeCompilerError> results = new List <CodeCompilerError>(); Console.WriteLine("Analyzing: " + inputFilenameWithPath); string buildFolder = outputFolder; DateTime dt = File.GetLastWriteTime(inputFilenameWithPath); using (StreamReader reader = File.OpenText(inputFilenameWithPath)) { string name = reader.ReadLine().TrimEnd().TrimEnd(','); if (name.CompareTo(filename) != 0) { results.Add(new CodeCompilerError(inputFilenameWithPath, 0, String.Format("Filename '{0}' mismatch to '{1}'", filename, name), CodeCompilerError.Severity.Warning)); } string fullcode = ""; while (!reader.EndOfStream) { string line = reader.ReadLine(); if (line.Length > 0 && line[0] == '#') { //Ignore comment } else { fullcode += line + "\n"; } } DownSolver ds = new DownSolver(inputFilenameWithPath, enables); CompiledCode ca = new CompiledCode(); ca.name = name; ca.minimalCode = MultiLineCodeToSingleLineCode(fullcode); ca.filename = filename + ".glyc"; ca.path = ".";// Path.GetDirectoryName(inputFilenameWithPath); ca.timestamp = dt; if (digest.FindByName(ca.name) != null) { results.Add(new CodeCompilerError(inputFilenameWithPath, 0, String.Format("{0} already exists in digest!", name), CodeCompilerError.Severity.Error)); } else { digest.codes.Add(ca); } ca.tokenCount = ds.Tokens.Count; if (ds.Rects != null) { ca.rectCount = ds.Rects.Count; } if (ds.Quads != null) { ca.quadCount = ds.Quads.Count; } if (ds.Triangles != null) { ca.triCount = ds.Triangles.Count; } ca.SizeX = ds.Grid.SizeX; ca.SizeY = ds.Grid.SizeY; ca.SizeZ = ds.Grid.SizeZ; if (ds.SerializedRects != null) { ca.SerializedRects = ds.SerializedRects.SerializedData; } if (ds.SerializedRectsMipMap != null) { ca.SerializedRectsMipMapX16 = ds.SerializedRectsMipMap.SerializedData; } if (ds.GridIsometricLarge != null) { ca.isometricGridLargeFilename = buildFolder + filename + "_isometric_large.png"; GraphicsApi.SaveFlatPng(ca.isometricGridLargeFilename, ds.GridIsometricLarge); } if (ds.GridIsometric != null) { ca.isometricGridFilename = buildFolder + filename + "_isometric.png"; GraphicsApi.SaveFlatPng(ca.isometricGridFilename, ds.GridIsometric); } if (ds.GridIsometricThumb != null) { ca.isometricGridThumbFilename = buildFolder + filename + "_isometric_thumb.png"; GraphicsApi.SaveFlatPng(ca.isometricGridThumbFilename, ds.GridIsometricThumb); } if (ds.GridOrthogonal != null) { ca.orthogonalGridFilename = buildFolder + filename + "_orthogonal.png"; GraphicsApi.SaveFlatPng(ca.orthogonalGridFilename, ds.GridOrthogonal); } if ((enables & RasterLib.DownSolver.enables.DoDocs) != 0) { GraphicsLib.Creators.DocumentationCreator.DocumentByCode(outputFolder, name, ca.minimalCode); } foreach (CodeCompilerError result in results) { Console.WriteLine(result); if (result.severity == CodeCompilerError.Severity.Error) { return(-1); } } if (results.Count > 0) { Console.WriteLine(); } return(0); } }