Initial commit

This commit is contained in:
DonRenando 2017-01-18 10:43:17 +01:00
commit 6138e26c0c
14 changed files with 467 additions and 0 deletions

23
.idea/compiler.xml Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Javac" />
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>

1
.idea/description.html Normal file
View File

@ -0,0 +1 @@
<html>Simple <b>Java</b> application that includes a class with <code>main()</code> method</html>

5
.idea/encodings.xml Normal file
View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
</project>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="ivy-java-1.2.17">
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/ivy-java-1.2.17.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/lib/ivy-java-1.2.17.jar!/" />
</SOURCES>
</library>
</component>

12
.idea/misc.xml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<entry_points version="2.0" />
</component>
<component name="ProjectKey">
<option name="state" value="project://63537948-39a4-48a0-9c97-34259a0fa913" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/Projet_IHM.iml" filepath="$PROJECT_DIR$/Projet_IHM.iml" />
</modules>
</component>
</project>

7
.idea/vcs.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="" />
</component>
</project>

12
Projet_IHM.iml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="ivy-java-1.2.17" level="project" />
</component>
</module>

BIN
lib/ivy-java-1.2.17.jar Normal file

Binary file not shown.

79
src/Fenetre.java Normal file
View File

@ -0,0 +1,79 @@
import fr.dgac.ivy.IvyException;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
/**
* Created by renando on 16/01/17.
*/
class Fenetre extends JFrame {
private ivyTranslater monIvy;
//private Automate a;
Fenetre(Panel panel) {
super("IHM TP Lines");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Panel panel1 = panel;
this.add(panel);
try {
this.monIvy = new ivyTranslater();
} catch (IvyException e) {
e.printStackTrace();
}
panel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent mouseEvent) {
}
@Override
public void mousePressed(MouseEvent mouseEvent) {
if (SwingUtilities.isLeftMouseButton(mouseEvent))
panel.getStroke().addPoint(mouseEvent.getX(), mouseEvent.getY());
panel.stroke = new Stroke();
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
monIvy.sendMsg("coord=" + panel.getStroke().toString());
}
@Override
public void mouseEntered(MouseEvent mouseEvent) {
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
}
});
panel.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent mouseEvent) {
if (SwingUtilities.isLeftMouseButton(mouseEvent))
panel.getStroke().addPoint(mouseEvent.getX(), mouseEvent.getY());
panel.repaint();
}
@Override
public void mouseMoved(MouseEvent mouseEvent) {
}
});
setSize(600, 600);
setVisible(true);
}
}

10
src/Main.java Normal file
View File

@ -0,0 +1,10 @@
/**
* Created by renando on 18/01/17.
*/
public class Main {
public static void main(String[] args) {
Panel panel = new Panel();
new Fenetre(panel);
}
}

40
src/Panel.java Normal file
View File

@ -0,0 +1,40 @@
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Point2D;
/**
* Created by renando on 16/01/17.
*/
public class Panel extends JComponent {
public Stroke stroke;
public Panel() {
super();
stroke = new Stroke();
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
Graphics2D g2 = (Graphics2D) graphics;
for (Point2D.Double p : stroke.getPoints()) {
int x = (int) p.getX();
int y = (int) p.getY();
g2.drawOval(x, y, 2, 2);
}
}
public Stroke getStroke() {
return stroke;
}
public void setStroke(Stroke stroke) {
this.stroke = stroke;
}
}

202
src/Stroke.java Normal file
View File

@ -0,0 +1,202 @@
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
public class Stroke {
private static final int NB_POINTS = 32;
private static final int SQUARE_SIZE = 100;
ArrayList<Point2D.Double> listePoint;
Point2D.Double centroid;
public Stroke() {
listePoint = new ArrayList<Point2D.Double>();
}
public void init() {
listePoint = null;
centroid = null;
listePoint = new ArrayList<Point2D.Double>();
}
public boolean isEmpty() {
return listePoint == null || listePoint.size() == 0;
}
public int size() {
return listePoint.size();
}
public Point2D.Double getPoint(int i) {
return listePoint.get(i);
}
public Point2D.Double getCentroid() {
return centroid;
}
public double getCentroidX() {
return centroid.x;
}
public double getCentroidY() {
return centroid.y;
}
public void addPoint(Point2D.Double p) {
listePoint.add(p);
}
public void addPoint(int x, int y) {
listePoint.add(new Point2D.Double(x, y));
}
public void normalize() {
resample();
rotateToZero();
scaleToSquare();
translateToOrigin();
}
public double getPathLength() {
double dist = 0.0;
for (int i = 1; i < listePoint.size(); i++) {
Point2D.Double p0 = listePoint.get(i - 1);
Point2D.Double p1 = listePoint.get(i);
dist += p0.distance(p1);
}
return dist;
}
public ArrayList<Point2D.Double> resample() {
double l = getPathLength() / (NB_POINTS - 1);
double D = 0;
ArrayList<Point2D.Double> newPoints = new ArrayList<Point2D.Double>();
newPoints.add(listePoint.get(0));
for (int i = 1; i < listePoint.size(); i++) {
Point2D.Double p0 = listePoint.get(i - 1);
Point2D.Double p1 = listePoint.get(i);
double d = p0.distance(p1);
if (D + d >= l) {
double x = p0.getX() + ((l - D) / d) * (p1.getX() - p0.getX());
double y = p0.getY() + ((l - D) / d) * (p1.getY() - p0.getY());
Point2D.Double q = new Point2D.Double(x, y);
newPoints.add(q);
listePoint.add(i, q);
D = 0;
} else {
D += d;
}
}
if (newPoints.size() < NB_POINTS)
newPoints.add(listePoint.get(listePoint.size() - 1));
listePoint = newPoints;
return newPoints;
}
public Point2D.Double calculCentroid() {
double x = 0.0;
double y = 0.0;
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
x += p.getX();
y += p.getY();
}
return new Point2D.Double(x / listePoint.size(), y / listePoint.size());
}
public ArrayList<Point2D.Double> rotateToZero() {
ArrayList<Point2D.Double> newPoints = new ArrayList<Point2D.Double>();
centroid = calculCentroid();
Point2D.Double p0 = listePoint.get(0);
double theta = Math.atan2(centroid.getY() - p0.getY(), centroid.getX() - p0.getX());
theta *= -1;
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
double x = ((p.getX() - centroid.getX()) * Math.cos(theta)) - ((p.getY() - centroid.getY()) * Math.sin(theta)) + centroid.getX();
double y = ((p.getX() - centroid.getX()) * Math.sin(theta)) + ((p.getY() - centroid.getY()) * Math.cos(theta)) + centroid.getY();
Point2D.Double q = new Point2D.Double(x, y);
newPoints.add(q);
}
listePoint = newPoints;
return newPoints;
}
public Rectangle2D.Double getBoundingBox() {
Point2D.Double p0 = listePoint.get(0);
double minX = p0.getX();
double maxX = p0.getX();
double minY = p0.getY();
double maxY = p0.getY();
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
if (minX > p.getX()) minX = p.getX();
if (minY > p.getY()) minY = p.getY();
if (maxX < p.getX()) maxX = p.getX();
if (maxY < p.getY()) maxY = p.getY();
}
return new Rectangle2D.Double(minX, minY, maxX - minX, maxY - minY);
}
public ArrayList<Point2D.Double> scaleToSquare() {
ArrayList<Point2D.Double> newPoints = new ArrayList<Point2D.Double>();
Rectangle2D.Double boundingBox = getBoundingBox();
System.out.println(boundingBox);
if (boundingBox.getHeight() > 10) {
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
double x = (p.getX() - boundingBox.getX()) * (SQUARE_SIZE / boundingBox.getWidth());
double y = (p.getY() - boundingBox.getY()) * (SQUARE_SIZE / boundingBox.getHeight());
Point2D.Double q = new Point2D.Double(x, y);
newPoints.add(q);
}
}
// Pour lisser une droite ...
else {
Point2D.Double p0 = listePoint.get(0);
double y = p0.getY();
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
double x = (p.getX() - boundingBox.getX()) * (SQUARE_SIZE / boundingBox.getWidth());
Point2D.Double q = new Point2D.Double(x, y);
newPoints.add(q);
}
}
listePoint = newPoints;
return newPoints;
}
public ArrayList<Point2D.Double> translateToOrigin() {
ArrayList<Point2D.Double> newPoints = new ArrayList<Point2D.Double>();
centroid = calculCentroid();
for (int i = 0; i < listePoint.size(); i++) {
Point2D.Double p = listePoint.get(i);
double x = p.getX() - centroid.getX() + SQUARE_SIZE;
double y = p.getY() - centroid.getY() + SQUARE_SIZE;
Point2D.Double q = new Point2D.Double(x, y);
newPoints.add(q);
}
centroid = new Point2D.Double(SQUARE_SIZE, SQUARE_SIZE);
listePoint = newPoints;
return newPoints;
}
public ArrayList<Point2D.Double> getPoints() {
return listePoint;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (Point2D.Double p : listePoint) {
sb.append(p.getX());
sb.append(",");
sb.append(p.getY());
sb.append(";");
}
sb.deleteCharAt(sb.lastIndexOf(";"));
return sb.toString();
}
}

57
src/ivyTranslater.java Normal file
View File

@ -0,0 +1,57 @@
import fr.dgac.ivy.Ivy;
import fr.dgac.ivy.IvyClient;
import fr.dgac.ivy.IvyException;
import fr.dgac.ivy.IvyMessageListener;
class ivyTranslater implements IvyMessageListener {
private final Ivy bus;
private String argument;
ivyTranslater() throws IvyException {
// initialization, name and ready message
bus = new Ivy("IvyTranslater", "Geste", null);
// classical subscription
bus.bindMsg("sra5 Parsed=(.*) Confidence", this);
// inner class subscription ( think awt )
bus.bindMsg("^Bye$", (client, args) -> {
// leaves the bus, and as it is the only thread, quits
bus.stop();
});
bus.start("127.255.255.255:2010"); // starts the bus on the default domain
}
// callback associated to the "Hello" messages"
void recevoire(Panel panel) throws IvyException {
panel.stroke = new Stroke();
bus.bindMsg("^coord=(.*)", (client, args) -> {
if (args[0] != null) {
panel.stroke = new Stroke();
String[] listeCoor = args[0].split(";");
String x;
String y;
for (String coor : listeCoor) {
x = coor.split(",")[0].replace(".0", "");
y = coor.split(",")[1].replace(".0", "");
panel.getStroke().addPoint(Integer.parseInt(x), Integer.parseInt(y));
}
panel.repaint();
}
});
}
void sendMsg(String msg) {
try {
bus.sendMsg(msg);
} catch (IvyException e) {
e.printStackTrace();
}
}
@Override
public void receive(IvyClient ivyClient, String[] strings) {
}
}