diff --git a/src/jogl/Help.java b/src/jogl/Help.java deleted file mode 100644 index 4a9ecd4..0000000 --- a/src/jogl/Help.java +++ /dev/null @@ -1,61 +0,0 @@ -package jogl; - -public class Help{ - - public Help() { - - } - public String getHelp() { - String help = "Alphabet{X,Y,Z}\r\n" - + "\r\n" - + "\r\n" - + "Structure d'une requête:\r\n" - + "\r\n" - + "{\r\n" - + " Axiom = Lettre ;\r\n" - + " 1ère expression ;\r\n" - + " 2nde expression ;\r\n" - + " It = Nb d'itérations;\r\n" - + "}\r\n" - + "\r\n" - + "\r\n" - + "Une lettre de l'alphabet = avance d'une unité dans une direction.\r\n" - + "Exemple:\r\n" - + "\r\n" - + " X -> avance d'une unité sur l'axe X\r\n" - + " 0.25X -> avance de 0.25 unité sur l'axe X\r\n" - + " 12Z -> avance de 12 unités sur l'axe Z\r\n" - + "\r\n" - + "On peut combiner les directions:\r\n" - + "Exemple:\r\n" - + " \r\n" - + " X=Y -> avance d'une unité sur l'axe X et une sur l'axe Y\r\n" - + " 2Y3X0.3Z -> avance de deux unités sur l'axe Y,\r\n" - + " de trois unités sur l'axe X\r\n" - + " de 0.3 unités sur l'axe Z.\r\n" - + "\r\n" - + "Les expressions sont de la forme {X = 2X0.2YZ}\r\n" - + "\r\n" - + "On pourra changer de direction avec l'alphabet{x,y,z}\r\n" - + "x y et z font par défault une rotation de 45° autour de leur axe.\r\n" - + "Exemple:\r\n" - + " x = 45°\r\n" - + " 2x = 90°\r\n" - + "\r\n" - + "Ainsi on pourra écrire:\r\n" - + "\r\n" - + " X = X2y0.2Z0.2x\r\n" - + "\r\n" - + "On pourra ajouter plus tard ce qui suit :\r\n" - + "\r\n" - + "On peut ajouter le principe d'ouverture et de fermeture des branches aux expressions,\r\n" - + "on utilisera donc pour ce faire les \"[ ]\".\r\n" - + "\r\n" - + "Ainsi, dans l'expression: {X = [X]+Y}\r\n" - + "\r\n" - + "On exécutera d'abord l'instruction entre crochets, puis, une fois son nombre maximum d'itérations\r\n" - + "atteint, on ajoutera un mouvement Y."; - return help; - } -} - diff --git a/src/lsystem/screen/Constants.java b/src/lsystem/screen/Constants.java new file mode 100644 index 0000000..8c3dd04 --- /dev/null +++ b/src/lsystem/screen/Constants.java @@ -0,0 +1,57 @@ +package lsystem.screen; + +public class Constants { + + public static final int WIDTH = 600; + public static final int HEIGHT = 400; + public static final String HELP = "Alphabet{X,Y,Z}\r\n" + + "\r\n" + + "\r\n" + + "Structure d'une requête:\r\n" + + "\r\n" + + "{\r\n" + + " Axiom = Lettre ;\r\n" + + " 1ère expression ;\r\n" + + " 2nde expression ;\r\n" + + " It = Nb d'itérations;\r\n" + + "}\r\n" + + "\r\n" + + "\r\n" + + "Une lettre de l'alphabet = avance d'une unité dans une direction.\r\n" + + "Exemple:\r\n" + + "\r\n" + + " X -> avance d'une unité sur l'axe X\r\n" + + " 0.25X -> avance de 0.25 unité sur l'axe X\r\n" + + " 12Z -> avance de 12 unités sur l'axe Z\r\n" + + "\r\n" + + "On peut combiner les directions:\r\n" + + "Exemple:\r\n" + + " \r\n" + + " X=Y -> avance d'une unité sur l'axe X et une sur l'axe Y\r\n" + + " 2Y3X0.3Z -> avance de deux unités sur l'axe Y,\r\n" + + " de trois unités sur l'axe X\r\n" + + " de 0.3 unités sur l'axe Z.\r\n" + + "\r\n" + + "Les expressions sont de la forme {X = 2X0.2YZ}\r\n" + + "\r\n" + + "On pourra changer de direction avec l'alphabet{x,y,z}\r\n" + + "x y et z font par défault une rotation de 45° autour de leur axe.\r\n" + + "Exemple:\r\n" + + " x = 45°\r\n" + + " 2x = 90°\r\n" + + "\r\n" + + "Ainsi on pourra écrire:\r\n" + + "\r\n" + + " X = X2y0.2Z0.2x\r\n" + + "\r\n" + + "On pourra ajouter plus tard ce qui suit :\r\n" + + "\r\n" + + "On peut ajouter le principe d'ouverture et de fermeture des branches aux expressions,\r\n" + + "on utilisera donc pour ce faire les \"[ ]\".\r\n" + + "\r\n" + + "Ainsi, dans l'expression: {X = [X]+Y}\r\n" + + "\r\n" + + "On exécutera d'abord l'instruction entre crochets, puis, une fois son nombre maximum d'itérations\r\n" + + "atteint, on ajoutera un mouvement Y."; +} + diff --git a/src/jogl/Article1.java b/src/lsystem/screen/Jogl.java similarity index 88% rename from src/jogl/Article1.java rename to src/lsystem/screen/Jogl.java index 4fad9e8..9cf2ccd 100644 --- a/src/jogl/Article1.java +++ b/src/lsystem/screen/Jogl.java @@ -1,4 +1,4 @@ -package jogl; +package lsystem.screen; import java.awt.*; import java.awt.event.*; @@ -18,34 +18,24 @@ import com.jogamp.opengl.util.Animator; * */ -public class Article1 implements GLEventListener { +public class Jogl implements GLEventListener { - public static void main(String[] args) { + public static void initialize(String[] args) { // Création de la fenêtre - Frame frame = new Frame("Article1"); - + Frame frame = new Frame("L-système 3D"); // Création du canvas pour dessiner dessus GLCanvas canvas = new GLCanvas(); - // Nous attachons ensuite le méchanisme de callback à notre surface dessinable - canvas.addGLEventListener((GLEventListener) new Article1()); - + canvas.addGLEventListener((GLEventListener) new Jogl()); // dessin -> fenêtre frame.add(canvas); - // Création de l'animator final Animator animator = new Animator(canvas); - // croix rouge = fermeture de la fenêtre frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { // Thread pour arrêter l'animator avant la fenêtre - new Thread(new Runnable() { - public void run() { - animator.stop(); - System.exit(0); - } - }).start(); + new Thread(animator::stop).start(); } }); @@ -60,15 +50,12 @@ public class Article1 implements GLEventListener { // init() sera appelée une fois au début de l'animation. C'est dans cette méthode // que nous nous chargerons de toutes les opérations d'initialisation public void init(GLAutoDrawable drawable) { - // GLEventListener renvoie un contexte (drawable) // que nous allons utiliser pour instancier un objet de type GL // qui nous permettra d'utiliser les fonctions OpenGL GL gl = drawable.getGL(); - // désactiver la synchronisation verticale indépendamment de la plateforme utilisée gl.setSwapInterval(1); - } // Appelée que si la fenêtre d'affichage est redimensionnée diff --git a/src/jogl/MainFrame.java b/src/lsystem/screen/MainFrame.java similarity index 80% rename from src/jogl/MainFrame.java rename to src/lsystem/screen/MainFrame.java index 6d52a27..dddfe82 100644 --- a/src/jogl/MainFrame.java +++ b/src/lsystem/screen/MainFrame.java @@ -1,11 +1,12 @@ -package jogl; +package lsystem.screen; +import lsystem.screen.listener.HelpListener; +import lsystem.screen.listener.NewGenListener; + import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; @@ -19,7 +20,7 @@ import javax.swing.JToolBar; import javax.swing.SwingConstants; -public class MainFrame extends JFrame implements ActionListener{ +public class MainFrame extends JFrame { private static final long serialVersionUID = -7898079642230075807L; @@ -31,9 +32,7 @@ public class MainFrame extends JFrame implements ActionListener{ private JButton close; private int nbRules; - public MainFrame(){ - - + public MainFrame(){ nbRules = 1; nbTabs = 0; basePanel = new JPanel(); @@ -42,57 +41,43 @@ public class MainFrame extends JFrame implements ActionListener{ JToolBar toolBar = new JToolBar(); newGen = new JButton("Nouvelle génération"); - newGen.addActionListener(this); + newGen.addActionListener(new NewGenListener()); toolBar.add(newGen); help = new JButton("Aide"); - help.addActionListener(this); + help.addActionListener(new HelpListener()); toolBar.add(help); this.setTitle("L-system interface"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - this.setSize(600,400); + this.setSize(Constants.WIDTH, Constants.HEIGHT); this.setLocationRelativeTo(null); this.add(tabs); this.add(toolBar, BorderLayout.NORTH); - } - @Override - public void actionPerformed(ActionEvent e) { - if(e.getSource() == newGen) - newTab(); - else if(e.getSource() == help) - newHelp(); - else if(e.getSource() == close) - closeTab(); - else - throw new Error("This event does not trigger any action"); - - } public void newHelp() { JPanel helpTab = new JPanel(); JTextArea helpText = new JTextArea(); + helpText.setText(Constants.HELP); helpText.setEditable(false); - helpText.setText(new Help().getHelp()); helpTab.add(helpText); tabs.addTab("Aide",(new JScrollPane(helpTab))); } public void newTab() { - nbTabs ++; JPanel tab = new JPanel(); JTextArea axiomList = new JTextArea(); - axiomList.setEditable(false); axiomList.setText("Axiome : \n"); + axiomList.setEditable(false); JTextArea rulesList = new JTextArea(); - rulesList.setEditable(false); rulesList.setText("Règles : \n"); + rulesList.setEditable(false); JLabel axiome = new JLabel("Axiome"); - JLabel rules = new JLabel("Règle "+nbRules); + JLabel rules = new JLabel("Règle "+ nbRules); JTextField axiomeField = new JTextField(); JTextField rulesField = new JTextField(); tab.add(axiome); diff --git a/src/lsystem/screen/listener/HelpListener.java b/src/lsystem/screen/listener/HelpListener.java new file mode 100644 index 0000000..e5f1183 --- /dev/null +++ b/src/lsystem/screen/listener/HelpListener.java @@ -0,0 +1,11 @@ +package lsystem.screen.listener; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class HelpListener implements ActionListener { + @Override + public void actionPerformed(ActionEvent e) { + + } +} diff --git a/src/lsystem/screen/listener/NewGenListener.java b/src/lsystem/screen/listener/NewGenListener.java new file mode 100644 index 0000000..954b01e --- /dev/null +++ b/src/lsystem/screen/listener/NewGenListener.java @@ -0,0 +1,11 @@ +package lsystem.screen.listener; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class NewGenListener implements ActionListener { + @Override + public void actionPerformed(ActionEvent e) { + + } +}