/** * Construye la cadena de atributos visuales para un estado en particular * * @param e El estado que vamos a dibujar * @param marcado Si es true, significa que está marcado y tiene un color especial * @return */ private String getColorEstado(Estado e, boolean marcado) { String style = "["; // Características gráficas de cada estado String shape = e.isEstadofinal() ? "shape=doublecircle" : "shape=circle"; style += shape; /** * Estilos Especiales. * * <p>Definen los estilos para estados finales e iniciales. Si el nodo está marcado, define los * atributos de un nodo marcado. */ String coloresp = marcado ? "color=green4" : "color=blue4"; String fillcolor = marcado ? "style=filled,fillcolor=green" : "style=filled,fillcolor=blue"; String fontcolor = marcado ? "fontcolor=white" : "fontcolor=white"; String label = e.isEstadoinicial() ? ",label=inicio" : ""; if (e.isEstadofinal() || e.isEstadoinicial() || marcado) { style += "," + fillcolor + "," + coloresp + "," + fontcolor + label; } return style + "];"; }
/** * Construye la sintaxis adecuada para generar el gráfico por medio de la aplicación "dot" del * toolkit de GraphViz. <br> * <br> * De acuerdo a ciertos criterios del entorno de simulación, establece los colores y otras * características del grafo. <br> * <br> * El estado inicial y los finales también tienen un formato especial <br> * <br> * La sintaxis de GraphViz (El lenguaje DOT) se define aquí * <href="http://www.graphviz.org/doc/info/lang.html">DOT Language</href> * * @return String Cadena completa formateada del automata en versión grapviz */ public String getDotSyntax() { String result_header = "Digraph AFN {\n" + "\trankdir=LR;\n\toverlap=scale;\n"; String result_nodes = "\tnode [shape = circle];\n"; String result_edges = ""; ListaEstados estados = this.automata.getEstados(); for (Estado e : estados) { boolean mark = false; if (this.enSimulacion) { mark = (e.getId() == this.EstadoActual.getId()); if (!mark && this.EstadoSiguiente != null) { mark = (e.getId() == this.EstadoSiguiente.getId()); } } String EstadoStyle = this.getColorEstado(e, mark); result_nodes += "\t" + e.getId() + " " + EstadoStyle + "\n"; for (Arco enlace : e.getEnlaces()) { Estado orig = enlace.getOrigen(); Estado dest = enlace.getDestino(); String label = enlace.getEtiqueta(); mark = ((label.compareTo(this.CaracterActual) == 0) && (orig.getId() == this.EstadoActual.getId())); String EnlaceStyle = this.getEnlaceStyle(enlace, label, mark); result_edges += "\t" + orig.getId() + " -> " + dest.getId() + " " + EnlaceStyle + "\n"; } } String result = result_header + result_nodes + result_edges + "}"; return result; }