예제 #1
0
        //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);
            }
        }
예제 #2
0
        //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);
            }
        }