Advertisement
FNSY

Untitled

Apr 15th, 2017
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.41 KB | None | 0 0
  1. package signalFlowGraphInterface;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import javafx.application.Application;
  6. import javafx.geometry.*;
  7. import javafx.scene.Scene;
  8. import javafx.scene.layout.*;
  9. import javafx.scene.paint.Color;
  10. import javafx.stage.Stage;
  11. import signalFlowGraph.AnalyzeSFG;
  12. import javafx.scene.control.*;
  13. import javafx.scene.text.*;
  14. import javafx.scene.shape.*;
  15.  
  16. public class GUI extends Application {
  17.  
  18. private AnalyzeSFG sfg;
  19. private Stage stage;
  20. private HBox h = new HBox();
  21. private VBox v = new VBox();
  22. private Pane nodesViewer;
  23. Graph graph = new Graph();
  24. Model model = graph.getModel();
  25.  
  26. public static void main(String[] args) {
  27. Application.launch(args);
  28. }
  29.  
  30. private boolean oneTimeAdd = false;
  31.  
  32. @Override
  33. public void start(Stage primaryStage) throws Exception {
  34. stage = primaryStage;
  35. nodesViewer = new Pane();
  36. GridPane textBoxes = textBoxes();
  37. BorderPane container = new BorderPane();
  38.  
  39. // container.setGridLinesVisible(true);
  40. if (!oneTimeAdd) {
  41. h.getChildren().add(textBoxes);
  42. oneTimeAdd = true;
  43. } else {
  44. nodesViewer = nodesViewer(sfg.getNumberOfNodes());
  45. }
  46.  
  47. container.setTop(h);
  48. container.setRight(v);
  49. container.setCenter(nodesViewer);
  50. Scene scene = new Scene(container, 1200, 700);
  51. primaryStage.setScene(scene);
  52. primaryStage.setResizable(false);
  53. primaryStage.setTitle("Signal Flow Graph Solver");
  54. primaryStage.show();
  55.  
  56. }
  57.  
  58. private Pane nodesViewer(int numberOfNodes) {
  59. Pane nodesViewer = new Pane();
  60. // Circle circle;
  61. // StackPane stack;
  62. // for (int i = 0; i < numberOfNodes; i++) {
  63. // circle = new Circle();
  64. // circle.setRadius(100 / numberOfNodes);
  65. // // circle.setCenterX(200 * i);
  66. // // circle.setCenterY(200);
  67. // // circle.setLayoutX(100);
  68. // circle.setFill(Color.AQUA);
  69. //
  70. // Text text = new Text((i + 1) + "");
  71. // text.setBoundsType(TextBoundsType.VISUAL);
  72. // stack = new StackPane();
  73. // stack.getChildren().addAll(circle, text);
  74. // stack.setLayoutY(250);
  75. // stack.setLayoutX(150 * i);
  76. // nodesViewer.getChildren().add(stack);
  77. // }
  78.  
  79.  
  80. return nodesViewer;
  81.  
  82. }
  83.  
  84. private boolean[][] visited;
  85.  
  86. private void initalizeVisited() {
  87. visited = new boolean[sfg.getMatrix().length][sfg.getMatrix().length];
  88. }
  89.  
  90. // private void printMatrix(boolean[][] mat) {
  91. // for (int i = 0; i < mat.length; i++) {
  92. // for (int j = 0; j < mat.length; j++)
  93. // System.out.print(mat[i][j]+" ");
  94. // System.out.println();
  95. // }
  96. // }
  97. private void addLines() {
  98. // printMatrix(visited);
  99. double[][] matrix = sfg.getMatrix();
  100. StackPane stack;
  101. Arrow arrow;
  102. double startX, startY, endX, endY;
  103. for (int i = 1; i < sfg.getNumberOfNodes(); i++) {
  104. for (int j = 1; j < sfg.getNumberOfNodes(); j++) {
  105. if (matrix[i - 1][j - 1] != 0 && !visited[i - 1][j - 1]) {
  106. visited[i - 1][j - 1] = true;
  107. StackPane s = (StackPane) nodesViewer.getChildren().get(j);
  108. StackPane s0 = (StackPane) nodesViewer.getChildren().get(j - 1);
  109.  
  110. arrow = new Arrow();
  111. Bounds from = s0.getBoundsInParent();
  112. Bounds to = s.getBoundsInParent();
  113. startX = from.getMinX();
  114. endX = to.getMaxX();
  115. startY = from.getMaxY();
  116. endY = to.getMaxY();
  117.  
  118. arrow.setStartX(startX);
  119. arrow.setEndX(endX);
  120. arrow.setStartY(startY);
  121. arrow.setEndY(endY);
  122. System.out.println(startX);
  123. System.out.println(startY);
  124. System.out.println(endX);
  125. System.out.println(endY);
  126. nodesViewer.getChildren().add(arrow);
  127. }
  128. }
  129. }
  130. }
  131.  
  132. /**
  133. *
  134. * @return
  135. */
  136. private GridPane textBoxes() {
  137. GridPane textBoxes = new GridPane();
  138. textBoxes.setGridLinesVisible(true);
  139. TextField nodesNumber = new TextField();
  140. TextField from = new TextField();
  141. TextField to = new TextField();
  142. TextField gain = new TextField();
  143. Button enter = new Button("Enter Values");
  144. Button enterNodesNumber = new Button("Enter Nodes Number");
  145. enter.setOnAction(e -> {
  146.  
  147. if (nodeNumber(from) == 0) {
  148. sfg.addFinalNode();
  149. Label gainLabel = new Label("Gain\n" + sfg.operate());
  150. gainLabel.setFont(new Font(20));
  151. v.getChildren().addAll(gainLabel, forwardPath(), loopsPaths());
  152. try {
  153. start(stage);
  154. } catch (Exception e1) {
  155. // TODO Auto-generated catch block
  156. e1.printStackTrace();
  157. }
  158. } else
  159. this.sfg.inputs(nodeNumber(from), nodeNumber(to), gainValue(gain));
  160.  
  161. if (sfg.matrixIsCreated())
  162. addLines();
  163.  
  164. from.setText("");
  165. to.setText("");
  166. gain.setText("");
  167. // }
  168. });
  169.  
  170. enterNodesNumber.setOnAction(e -> {
  171. v = new VBox();
  172. // oneTimeAdd = false;
  173. sfg = new AnalyzeSFG();
  174. sfg.setNumberOfNodes(nodeNumber(nodesNumber));
  175. try {
  176. start(stage);
  177. } catch (Exception e1) {
  178. // TODO Auto-generated catch block
  179. e1.printStackTrace();
  180. }
  181.  
  182. sfg.createAdjacencyMatrix();
  183. initalizeVisited();
  184. addLines();
  185. nodesNumber.setText("");
  186. // clear all
  187. });
  188.  
  189. textBoxes.add(from, 0, 0);
  190. textBoxes.add(to, 0, 1);
  191. textBoxes.add(gain, 0, 2);
  192. textBoxes.add(enter, 0, 3);
  193. textBoxes.add(nodesNumber, 0, 4);
  194. textBoxes.add(enterNodesNumber, 1, 4);
  195. return textBoxes;
  196. }
  197.  
  198. /////////////////////////////
  199. private String concatString(ArrayList<String> arrList, String title) {
  200. StringBuilder concat = new StringBuilder();
  201. concat.append(title);
  202. for (int i = 0; i < arrList.size(); i++)
  203. concat.append("\n" + arrList.get(i));
  204. return concat.toString();
  205. }
  206.  
  207. private Label forwardPath() {
  208. Label label = new Label();
  209. String forwardPathsString = concatString(sfg.getForwardPath(), "FORWARD PATHS");
  210. label.setText(forwardPathsString);
  211. Font font = new Font(20);
  212. label.setFont(font);
  213. return label;
  214. }
  215.  
  216. private Label loopsPaths() {
  217. Label label = new Label();
  218. String loopsPathsString = new String();
  219.  
  220. for (int i = 0; i < sfg.getNonTouchingLoopsPath().size(); i++)
  221. loopsPathsString += concatString(sfg.getNonTouchingLoopsPath().get(i), ((i + 1) + " Non Touching Loops"));
  222.  
  223. label.setText(loopsPathsString);
  224. Font font = new Font(20);
  225. label.setFont(font);
  226. return label;
  227. }
  228.  
  229. private int nodeNumber(TextField field) {
  230. try {
  231. return Integer.parseInt(field.getText());
  232. } catch (NumberFormatException x) {
  233.  
  234. }
  235. return -1;
  236. }
  237.  
  238. private double gainValue(TextField gain) {
  239. try {
  240. return Double.parseDouble(gain.getText());
  241. } catch (NumberFormatException x) {
  242.  
  243. }
  244. return Double.NaN;
  245. }
  246.  
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement