Delete gl2d + move camera depending of size of the l-system + fix Pair.hashCode

This commit is contained in:
Quentin Legot 2021-04-06 16:39:12 +02:00
parent a4bd08dc4f
commit acc7e17482
9 changed files with 15 additions and 230 deletions

View File

@ -13,7 +13,7 @@
<javac srcdir="${project.sources.dir}" destdir="${project.bin.dir}" debug="on" optimize="off" deprecation="on" includeantruntime="false"> <javac srcdir="${project.sources.dir}" destdir="${project.bin.dir}" debug="on" optimize="off" deprecation="on" includeantruntime="false">
<classpath refid="project.classpath"/> <classpath refid="project.classpath"/>
</javac> </javac>
<copy todir="${basedir}/${project.bin.dir}"> <copy todir="${basedir}/${project.bin.dir}/${project.resources.dir}">
<fileset dir="${basedir}/${project.resources.dir}"> <fileset dir="${basedir}/${project.resources.dir}">
<exclude name="**/*.java"/> <exclude name="**/*.java"/>
</fileset> </fileset>

View File

@ -1,45 +0,0 @@
package lsystem;
import lsystem.screen.gl2d.SwingGLCanvas2D;
import lsystem.screen.main.MainFrame;
public class Main2D {
/*public static MainFrame mainFrame;
public static SwingGLCanvas2D joglFrame;
public static void main(String[] args) {
new Thread(() -> {
mainFrame = new MainFrame();
mainFrame.setVisible(true);
}).start();
new Thread(() -> joglFrame = new SwingGLCanvas2D()).start();
} */
/* public static void main(String[] args) {
MainFrame frame = new MainFrame();
frame.setVisible(true);
SwingGLCanvas2D canvas = new SwingGLCanvas2D();
canvas.setVisible(true);
new Thread(() ->{
SwingGLCanvas2D joglFrame = new SwingGLCanvas2D();
String axiom="X";
ArrayList<Pair<String, String>> rules = new ArrayList<>();
rules.add(new Pair<>("X=Y+[[X]-X]-Y[-YX]+X", "Y=YY"));
joglFrame.setLSystem(axiom,rules,5);
joglFrame.setVisible(true);
}).start();
} */
public static MainFrame mainFrame;
public static SwingGLCanvas2D joglFrame;
public static void main(String[] args) {
new Thread(() -> {
mainFrame = new MainFrame();
mainFrame.setVisible(true);
}).start();
new Thread(() -> joglFrame = new SwingGLCanvas2D()).start();
}
}

View File

@ -1,44 +0,0 @@
package lsystem.screen.gl2d;
import com.jogamp.opengl.GL2;
import com.jogamp.opengl.GLAutoDrawable;
import lsystem.engine.Element;
import lsystem.engine.ElementProperties;
import lsystem.screen.AbstractListener;
import lsystem.screen.gl3d.DrawHelper;
public class JoglEventListener2D extends AbstractListener {
public JoglEventListener2D(SwingGLCanvas2D swingGLCanvas) {
super(swingGLCanvas);
}
@Override
public void drawLSystem(GL2 gl, Element element) {
drawAll(gl, element, new lsystem.screen.gl2d.Point2(-1.0f, -1.0f));
}
private void drawAll(GL2 gl, Element actual, lsystem.screen.gl2d.Point2 origin) {
if (actual.property == ElementProperties.DRAW) {
System.out.println("DESSIN");
lsystem.screen.gl2d.Point2 newOrigin = new lsystem.screen.gl2d.Point2(origin, actual.getRotation2D());
DrawHelper.drawStick(gl, origin, newOrigin);
}
System.out.println(actual.children.isEmpty());
for (Element children : actual.children) {
System.out.println("CHILD");
drawAll(gl, children, new lsystem.screen.gl2d.Point2(origin, actual.getRotation2D()));
}
}
@Override
public void display(GLAutoDrawable glAutoDrawable) {
GL2 gl = glAutoDrawable.getGL().getGL2();
drawLSystem(gl, canvas.getLSystem());
drawAll(gl, canvas.getLSystem(), new lsystem.screen.gl2d.Point2(-1.0f, -1.0f));
}
}

View File

@ -1,114 +0,0 @@
package lsystem.screen.gl2d;
public class Point2 {
private float x;
private float y;
public Point2 () {
}
public Point2 (float x, float y) {
this.x = x;
this.y = y;
}
public Point2 (Point2 old, int angle) {
angle = compactAngle(angle);
//Point a = new Point();
//x = getNewOrigin(old, angle, 0.1f);
getNewOrigin(old, angle, 0.1f);
}
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
}
public void getNewOrigin (Point2 old, int angle, float echelle) {
int newX=0, newY=0;
switch (angle) {
case 0:
newX = 1;
newY = 1;
break;
case 45:
newX = 1;
newY = 0;
break;
case 90:
newX = 1;
newY = -1;
break;
case 135:
newX = 0;
newY = -1;
break;
case 180:
newX = -1;
newY = -1;
break;
case 225:
newX = -1;
newY = 0;
break;
case 270:
newX = -1;
newY = 1;
break;
case 315:
newX = 0;
newY = 1;
break;
}
this.x = old.getX() + echelle * newX;
this.y+= old.getY() + echelle * newY;
//return old;
}
public String toString () {
return "("+this.x+";"+this.y+")";
}
public static int compactAngle (int angle) {
angle = angle - ((angle / 360) * 360);
switch (angle) {
case -315:
angle = 45;
break;
case -270:
angle = 90;
break;
case -225:
angle = 135;
break;
case -180:
angle = 180;
break;
case -135:
angle = 225;
break;
case -90:
angle = 270;
break;
case -45:
angle = 315;
break;
}
return angle;
}
}

View File

@ -1,12 +0,0 @@
package lsystem.screen.gl2d;
import lsystem.screen.AbstractCanvas;
public class SwingGLCanvas2D extends AbstractCanvas {
@Override
protected void addEventsListeners() {
glCanvas.addGLEventListener(new JoglEventListener2D(this));
}
}

View File

@ -3,7 +3,6 @@ package lsystem.screen.gl3d;
import com.jogamp.opengl.GL2; import com.jogamp.opengl.GL2;
import com.jogamp.opengl.util.gl2.GLUT; import com.jogamp.opengl.util.gl2.GLUT;
import lsystem.screen.AbstractCanvas; import lsystem.screen.AbstractCanvas;
import lsystem.screen.gl2d.Point2;
public class DrawHelper { public class DrawHelper {
@ -89,14 +88,6 @@ public class DrawHelper {
+ canvas.camera[3] + " pitch = " + canvas.camera[4] + " roll = " + canvas.camera[5]); + canvas.camera[3] + " pitch = " + canvas.camera[4] + " roll = " + canvas.camera[5]);
} }
public static void drawStick(GL2 gl, Point2 origin, Point2 newOrigin) {
gl.glBegin(GL2.GL_LINES);
gl.glVertex2f(origin.getX(), origin.getY());
gl.glVertex2f(newOrigin.getX(), newOrigin.getY());
gl.glEnd();
}
} }

View File

@ -10,6 +10,7 @@ import lsystem.screen.AbstractListener;
public class GLEventListener extends AbstractListener { public class GLEventListener extends AbstractListener {
private final float[] light_0_position = {1000f, 1000f, 1000f, 1f}; private final float[] light_0_position = {1000f, 1000f, 1000f, 1f};
private boolean firstGen;
public GLEventListener(GLCanvas swingGLCanvas) { public GLEventListener(GLCanvas swingGLCanvas) {
@ -38,6 +39,7 @@ public class GLEventListener extends AbstractListener {
gl.glDepthFunc(GL2.GL_LEQUAL); gl.glDepthFunc(GL2.GL_LEQUAL);
gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST); gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST);
super.init(glAutoDrawable); super.init(glAutoDrawable);
firstGen = true;
} }
@Override @Override
@ -55,10 +57,11 @@ public class GLEventListener extends AbstractListener {
gl.glRotatef(90f, -1f, 0f, 0f); gl.glRotatef(90f, -1f, 0f, 0f);
gl.glColor3f(0f, 1f, 0f); gl.glColor3f(0f, 1f, 0f);
drawLSystem(gl, canvas.getLSystem()); drawLSystem(gl, canvas.getLSystem());
firstGen = false;
gl.glPopMatrix(); gl.glPopMatrix();
DrawHelper.drawAxes(gl, glut); DrawHelper.drawAxes(gl, glut);
DrawHelper.drawDebugInformation(gl, glut, canvas); // DrawHelper.drawDebugInformation(gl, glut, canvas);
gl.glFlush(); gl.glFlush();
fps++; fps++;
} }
@ -67,10 +70,14 @@ public class GLEventListener extends AbstractListener {
gl.glPushMatrix(); gl.glPushMatrix();
gl.glRotatef(element.rotation[0] * 360, 1f, 0f, 0f); gl.glRotatef(element.rotation[0] * 360, 1f, 0f, 0f);
gl.glRotatef(element.rotation[1] * 360, 0f, 1f, 0f); gl.glRotatef(element.rotation[1] * 360, 0f, 1f, 0f);
gl.glRotated(-Math.sin(element.rotation[0]) * 180, 0f, 0f, 1f); gl.glRotated(-Math.sin(element.rotation[0]) * 180 - Math.sin(element.rotation[1]) * 180, 0f, 0f, 1f);
gl.glRotated(-Math.sin(element.rotation[1]) * 180, 0f, 0f, 1f);
gl.glTranslated(-Math.sin(element.rotation[0]), -Math.sin(element.rotation[1]), -Math.sin(element.rotation[0] + element.rotation[1])); gl.glTranslated(-Math.sin(element.rotation[0]), -Math.sin(element.rotation[1]), -Math.sin(element.rotation[0] + element.rotation[1]));
if(element.property == ElementProperties.DRAW) { if(element.property == ElementProperties.DRAW) {
if(firstGen) {
canvas.camera[1] += 0.10f;
canvas.camera[2] += 0.10f;
}
glut.glutSolidCylinder(0.25f, 1f, 10, 10); glut.glutSolidCylinder(0.25f, 1f, 10, 10);
gl.glTranslatef(0f, 0f, 1f); gl.glTranslatef(0f, 0f, 1f);
} }

View File

@ -17,7 +17,7 @@ public class Listener implements ActionListener, KeyListener, MouseWheelListener
String type; String type;
Integer nbAxioms = 0; Integer nbAxioms = 0;
Thread parserThread = null; Thread parserThread = null;
ImageIcon staticIcon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(getClass().getClassLoader().getResource("loading-gif.gif"))); ImageIcon staticIcon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(getClass().getClassLoader().getResource("./resources/loading-gif.gif")));
public Listener(MainFrame frame, Integer index, String type, Tab tab){ public Listener(MainFrame frame, Integer index, String type, Tab tab){

View File

@ -1,5 +1,7 @@
package lsystem.utils; package lsystem.utils;
import java.util.Objects;
/** /**
* tuple containing 2 unknown type elements * tuple containing 2 unknown type elements
* *
@ -41,7 +43,7 @@ public class Pair<U, K> {
@Override @Override
public int hashCode() { public int hashCode() {
return 31 + left.hashCode() * right.hashCode(); return Objects.hash(left.hashCode(), right.hashCode());
} }
@Override @Override