//gera arquivo de desenho do autômato public static void drawLatexFigure(DeterministicFiniteAutomaton G, string fileName, bool openAfterFinish = true) { string fontSize = "normalsize"; Dictionary <string, DrawingState> statesList = prepare(G); Vector max, min; getMaxAndMin(statesList, out max, out min); foreach (var item in statesList) { var y = item.Value.position.Y - min.Y + Constants.AREA_LIMIT_OFFSET; var x = item.Value.position.X - min.X + Constants.AREA_LIMIT_OFFSET; item.Value.position = new Vector(x, y); } if (!fileName.EndsWith(".txt") && !fileName.EndsWith(".tex")) { fileName += ".txt"; } StreamWriter writer = new StreamWriter(fileName); //cria cabeçalho FigureStream.WriteLatexHeader(writer, max.X + Constants.AREA_LIMIT_OFFSET, max.Y - max.Y + 2 * Constants.AREA_LIMIT_OFFSET); //inverte as cordenas y para desenho no latex foreach (var item in statesList) { item.Value.position = new Vector(item.Value.position.X, -item.Value.position.Y); FigureStream.drawLatexState(writer, item.Value, Constants.STATE_RADIUS, fontSize); } FigureStream.drawFigureLatex(writer, statesList, fontSize); //termina arquivo FigureStream.WriteLatexEnd(writer); writer.Close(); if (openAfterFinish) { System.Diagnostics.Process.Start(fileName); } }
//gera arquivo de desenho do autômato public static void drawSVG(DeterministicFiniteAutomaton G, string fileName, bool openAfterFinish = true) { Dictionary <string, DrawingState> statesList = prepare(G); Vector max, min; getMaxAndMin(statesList, out max, out min); foreach (var item in statesList) { var y = item.Value.position.Y - min.Y + Constants.AREA_LIMIT_OFFSET; var x = item.Value.position.X - min.X + Constants.AREA_LIMIT_OFFSET; item.Value.position = new Vector(x, y); } if (!fileName.EndsWith(".svg")) { fileName += ".svg"; } StreamWriter writer = new StreamWriter(fileName); //cria cabeçalho FigureStream.WriteSVGHeader(writer, max.X + Constants.AREA_LIMIT_OFFSET, max.Y - min.Y + 2 * Constants.AREA_LIMIT_OFFSET); foreach (var item in statesList) { FigureStream.drawSVGState(writer, item.Value, Constants.STATE_RADIUS); } FigureStream.drawFigureSVG(writer, statesList); //termina arquivo FigureStream.WriteSVGEnd(writer); writer.Close(); if (openAfterFinish) { System.Diagnostics.Process.Start(fileName); } }