visualizer
This commit is contained in:
@@ -1,9 +1,17 @@
|
|||||||
package gov.nasa.xpc.ex;
|
package gov.nasa.xpc.ex;
|
||||||
|
|
||||||
import gov.nasa.xpc.XPlaneConnect;
|
import gov.nasa.xpc.XPlaneConnect;
|
||||||
|
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.SocketException;
|
import java.net.SocketException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.border.Border;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An example program demonstrating the basic features of the X-Plane Connect toolbox.
|
* An example program demonstrating the basic features of the X-Plane Connect toolbox.
|
||||||
@@ -58,15 +66,103 @@ public class Main
|
|||||||
|
|
||||||
|
|
||||||
System.out.println("Trying something new!!");
|
System.out.println("Trying something new!!");
|
||||||
int aircraft = 0;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// JFrame container = new JFrame();
|
|
||||||
// Dimension size = new Dimension(500, 500);
|
|
||||||
// container.setPreferredSize(size);
|
|
||||||
// container.setVisible(true);
|
|
||||||
|
|
||||||
|
JFrame frame = new JFrame();
|
||||||
|
frame.setPreferredSize(new Dimension(300,100));
|
||||||
|
frame.setLayout(new GridLayout(1,2));
|
||||||
|
frame.setVisible(true);
|
||||||
|
|
||||||
|
JPanel display = new JPanel();
|
||||||
|
display.setPreferredSize(new Dimension(100,100));
|
||||||
|
display.setLayout(new GridLayout(2,4));
|
||||||
|
|
||||||
|
Font fontTitles = new Font("Impact", 1,40);
|
||||||
|
Font fontData = new Font("Monospaced", 1,30);
|
||||||
|
JLabel titleOne = new JLabel("Elevator");
|
||||||
|
titleOne.setFont(fontTitles);
|
||||||
|
titleOne.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
titleOne.setVerticalAlignment(SwingConstants.BOTTOM);
|
||||||
|
JLabel titleTwo = new JLabel("Roll");
|
||||||
|
titleTwo.setFont(fontTitles);
|
||||||
|
titleTwo.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
titleTwo.setVerticalAlignment(SwingConstants.BOTTOM);
|
||||||
|
JLabel titleThree = new JLabel("Yaw");
|
||||||
|
titleThree.setFont(fontTitles);
|
||||||
|
titleThree.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
titleThree.setVerticalAlignment(SwingConstants.BOTTOM);
|
||||||
|
JLabel titleFour = new JLabel("Throttle");
|
||||||
|
titleFour.setFont(fontTitles);
|
||||||
|
titleFour.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
titleFour.setVerticalAlignment(SwingConstants.BOTTOM);
|
||||||
|
JLabel one = new JLabel();
|
||||||
|
one.setFont(fontData);
|
||||||
|
one.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
one.setVerticalAlignment(SwingConstants.TOP);
|
||||||
|
JLabel two = new JLabel();
|
||||||
|
two.setFont(fontData);
|
||||||
|
two.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
two.setVerticalAlignment(SwingConstants.TOP);
|
||||||
|
JLabel three = new JLabel();
|
||||||
|
three.setFont(fontData);
|
||||||
|
three.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
three.setVerticalAlignment(SwingConstants.TOP);
|
||||||
|
JLabel four = new JLabel();
|
||||||
|
four.setFont(fontData);
|
||||||
|
four.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
four.setVerticalAlignment(SwingConstants.TOP);
|
||||||
|
|
||||||
|
one.setText("Test");
|
||||||
|
two.setText("Test");
|
||||||
|
three.setText("Test");
|
||||||
|
four.setText("Test");
|
||||||
|
display.add(titleOne);
|
||||||
|
display.add(titleTwo);
|
||||||
|
display.add(titleThree);
|
||||||
|
display.add(titleFour);
|
||||||
|
display.add(one);
|
||||||
|
display.add(two);
|
||||||
|
display.add(three);
|
||||||
|
display.add(four);
|
||||||
|
|
||||||
|
JPanel visualizer = new JPanel();
|
||||||
|
visualizer.setLayout(new GridLayout(1,2));
|
||||||
|
|
||||||
|
|
||||||
|
//Col 1 of Visualizer
|
||||||
|
JPanel grid = new JPanel();
|
||||||
|
grid.setMinimumSize(new Dimension(100,100));
|
||||||
|
//grid.setOpaque(true);
|
||||||
|
// grid.setLayout(null);
|
||||||
|
grid.setBackground(Color.black);
|
||||||
|
grid.setVisible(true);
|
||||||
|
Integer layer1 = 0;
|
||||||
|
Integer layer2 = 1;
|
||||||
|
// grid.setLayout(new GridLayout(1,1));
|
||||||
|
grid.setLayout(new OverlayLayout(grid));
|
||||||
|
|
||||||
|
yokePosition yoke = new yokePosition(grid.getWidth(), grid.getHeight());
|
||||||
|
axis axis = new axis(grid.getWidth(), grid.getHeight());
|
||||||
|
|
||||||
|
// grid.setLayer(axis, layer1);
|
||||||
|
grid.add(axis);
|
||||||
|
grid.add(yoke);
|
||||||
|
// grid.setLayer(yoke, layer2);
|
||||||
|
|
||||||
|
Border greenLine = BorderFactory.createLineBorder(Color.green);
|
||||||
|
grid.setBorder(greenLine);
|
||||||
|
|
||||||
|
visualizer.add(grid);
|
||||||
|
|
||||||
|
|
||||||
|
//Col 2 of Visualizer
|
||||||
|
|
||||||
|
|
||||||
|
frame.add(display);
|
||||||
|
frame.add(visualizer);
|
||||||
|
frame.pack();
|
||||||
|
|
||||||
// JLabel text = new JLabel("Hello");
|
// JLabel text = new JLabel("Hello");
|
||||||
// JLabel text2 = new JLabel("Hello");
|
// JLabel text2 = new JLabel("Hello");
|
||||||
@@ -79,30 +175,34 @@ public class Main
|
|||||||
// container.add(display);
|
// container.add(display);
|
||||||
// container.pack();
|
// container.pack();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int aircraft = 0;
|
||||||
boolean takeoff = true;
|
boolean takeoff = true;
|
||||||
boolean climb = false;
|
boolean climb = false;
|
||||||
boolean cruise = false;
|
boolean cruise = false;
|
||||||
boolean throttleFull = false;
|
boolean throttleFull = false;
|
||||||
boolean brakeOff = false;
|
boolean brakeOff = false;
|
||||||
boolean switchTrack = false;
|
boolean switchTrack = false;
|
||||||
|
String dref = "sim/cockpit2/gauges/indicators/airspeed_kts_pilot";
|
||||||
|
String dref2 = "sim/flightmodel/position/true_phi";
|
||||||
|
String drefHDG = "sim/cockpit2/gauges/indicators/heading_AHARS_deg_mag_pilot";
|
||||||
|
String drefHDGBug = "sim/cockpit/autopilot/heading_mag";
|
||||||
|
String drefAltitude = "sim/cockpit2/gauges/indicators/altitude_ft_pilot";
|
||||||
|
|
||||||
|
File file = new File("/Users/flyingtopher/Desktop/Code Citadel/School/2. Research/Fork Clone/XPlaneConnectCSP/Java/Examples/Model-1/src/output");
|
||||||
|
if (!file.exists()) {
|
||||||
|
file.createNewFile();
|
||||||
|
}
|
||||||
|
FileWriter fw = new FileWriter(file, true);
|
||||||
|
BufferedWriter bw = new BufferedWriter(fw);
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
|
|
||||||
//THE GETTERS
|
//THE GETTERS
|
||||||
double[] posi1 = xpc.getPOSI(aircraft); // FIXME: change this to 64-bit double
|
double[] posi1 = xpc.getPOSI(aircraft); // FIXME: change this to 64-bit double
|
||||||
float[] ctrl1 = xpc.getCTRL(aircraft);
|
float[] ctrl1 = xpc.getCTRL(aircraft);
|
||||||
|
|
||||||
// String dref = "sim/cockpit2/gauges/indicators/airspeed_kts_copilot";
|
|
||||||
String dref = "sim/cockpit2/gauges/indicators/airspeed_kts_pilot";
|
|
||||||
String dref2 = "sim/flightmodel/position/true_phi";
|
|
||||||
String drefHDG = "sim/cockpit2/gauges/indicators/heading_AHARS_deg_mag_pilot";
|
|
||||||
String drefHDGBug = "sim/cockpit/autopilot/heading_mag";
|
|
||||||
String drefAltitude = "sim/cockpit2/gauges/indicators/altitude_ft_pilot";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
float[] value = xpc.getDREF(dref);
|
float[] value = xpc.getDREF(dref);
|
||||||
float[] value2 = xpc.getDREF(dref2);
|
float[] value2 = xpc.getDREF(dref2);
|
||||||
float[] valueHDG = xpc.getDREF(drefHDG);
|
float[] valueHDG = xpc.getDREF(drefHDG);
|
||||||
@@ -110,19 +210,65 @@ public class Main
|
|||||||
float[] valueAltitude = xpc.getDREF(drefAltitude);
|
float[] valueAltitude = xpc.getDREF(drefAltitude);
|
||||||
float bugged = 50;
|
float bugged = 50;
|
||||||
float rwyHDG = valueHDGBug[0];
|
float rwyHDG = valueHDGBug[0];
|
||||||
// float[] value2 = xpc.getDREF(dref2);
|
|
||||||
// System.out.println(String.valueOf(value[0]));
|
|
||||||
|
|
||||||
// System.out.format("Loc: (%4f, %4f, %4f) Aileron:%2f Elevator:%2f Rudder:%2f\n",
|
/*
|
||||||
// posi1[0], posi1[1], posi1[2], ctrl1[1], ctrl1[0], ctrl1[2]);
|
* Outputs
|
||||||
|
*/
|
||||||
|
// System.out.format("\r[Elevator: %2f] [Roll: %2f] [Yaw: %2f] ---- [Throttle:%2f] ---- [Flaps: %2f] -- [Data Ref: %2f] -- [T/O: %b ][Cruise: %b ]",
|
||||||
|
// ctrl1[0], ctrl1[1], ctrl1[2], ctrl1[3], ctrl1[5], valueAltitude[0], takeoff, cruise);
|
||||||
|
|
||||||
|
String log = String.format("[Elevator: %2f] [Roll: %2f] [Yaw: %2f] [Throttle:%2f] [Flaps: %2f] [Data Ref: %2f] [T/O: %b ][Cruise: %b ]",
|
||||||
// System.out.f ormat("\rControl Surfaces: [Elevator: %2f] [Roll: %2f] [Yaw: %2f] ||| Power: [Throttle:%2f] ||| Secondary Control Surfaces: [Flaps: %2f]",
|
|
||||||
// ctrl1[0], ctrl1[1], ctrl1[2], ctrl1[3], ctrl1[5]);
|
|
||||||
|
|
||||||
System.out.format("\r[Elevator: %2f] [Roll: %2f] [Yaw: %2f] ---- [Throttle:%2f] ---- [Flaps: %2f] -- [Data Ref: %2f] -- [T/O: %b ][Cruise: %b ]",
|
|
||||||
ctrl1[0], ctrl1[1], ctrl1[2], ctrl1[3], ctrl1[5], valueAltitude[0], takeoff, cruise);
|
ctrl1[0], ctrl1[1], ctrl1[2], ctrl1[3], ctrl1[5], valueAltitude[0], takeoff, cruise);
|
||||||
|
|
||||||
|
one.setText(String.valueOf(ctrl1[0]));
|
||||||
|
if(ctrl1[0] >= 0 ){
|
||||||
|
one.setForeground(Color.green);
|
||||||
|
} else {
|
||||||
|
one.setForeground(Color.red);
|
||||||
|
}
|
||||||
|
two.setText(String.valueOf(ctrl1[1]));
|
||||||
|
if(ctrl1[1] >= 0 ){
|
||||||
|
two.setForeground(Color.green);
|
||||||
|
} else {
|
||||||
|
two.setForeground(Color.red);
|
||||||
|
}
|
||||||
|
three.setText(String.valueOf(ctrl1[2]));
|
||||||
|
if(ctrl1[2] >= 0 ){
|
||||||
|
three.setForeground(Color.green);
|
||||||
|
} else {
|
||||||
|
three.setForeground(Color.red);
|
||||||
|
}
|
||||||
|
four.setText(String.valueOf(ctrl1[3]));
|
||||||
|
if(ctrl1[3] >= 0 ){
|
||||||
|
four.setForeground(Color.green);
|
||||||
|
} else {
|
||||||
|
four.setForeground(Color.red);
|
||||||
|
}
|
||||||
|
|
||||||
|
yoke.setXBound(grid.getWidth());
|
||||||
|
yoke.setYBound(grid.getHeight());
|
||||||
|
yoke.setX(ctrl1[1]);
|
||||||
|
yoke.setY(ctrl1[0]);
|
||||||
|
yoke.repaint();
|
||||||
|
|
||||||
|
axis.setXBound(grid.getWidth());
|
||||||
|
axis.setYBound(grid.getHeight());
|
||||||
|
axis.repaint();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Writing Data to a File
|
||||||
|
try {
|
||||||
|
bw.write(log + "\n");
|
||||||
|
bw.flush();
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("Log Data Failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Flight Controls
|
||||||
|
*/
|
||||||
// //Basic Autopilot For Roll (based on yoke position)
|
// //Basic Autopilot For Roll (based on yoke position)
|
||||||
// float[] rollRight = {-998.0f, ctrl1[1]-(ctrl1[1]/2)};
|
// float[] rollRight = {-998.0f, ctrl1[1]-(ctrl1[1]/2)};
|
||||||
// float[] rollLeft = {-998.0f, ctrl1[1]-(ctrl1[1]/2)};
|
// float[] rollLeft = {-998.0f, ctrl1[1]-(ctrl1[1]/2)};
|
||||||
@@ -140,6 +286,7 @@ public class Main
|
|||||||
// } else if(value[0] > 0) {
|
// } else if(value[0] > 0) {
|
||||||
// xpc.sendCTRL(pitchDown);
|
// xpc.sendCTRL(pitchDown);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if(valueAltitude[0] > 1000f && !switchTrack){
|
if(valueAltitude[0] > 1000f && !switchTrack){
|
||||||
System.out.println("In switch");
|
System.out.println("In switch");
|
||||||
takeoff = false;
|
takeoff = false;
|
||||||
@@ -232,11 +379,6 @@ public class Main
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// text.setText(String.valueOf(value[0]));
|
|
||||||
// display.add(elevator);
|
|
||||||
// System.out.println("");
|
|
||||||
try {
|
try {
|
||||||
Thread.sleep(0);
|
Thread.sleep(0);
|
||||||
}
|
}
|
||||||
@@ -261,32 +403,6 @@ public class Main
|
|||||||
// System.out.println("Un-pausing");
|
// System.out.println("Un-pausing");
|
||||||
// xpc.pauseSim(false);
|
// xpc.pauseSim(false);
|
||||||
|
|
||||||
|
|
||||||
//Let sim run for 10 seconds
|
|
||||||
try { Thread.sleep(10000); } catch (InterruptedException ex) {}
|
|
||||||
|
|
||||||
System.out.println("Stowing landing gear");
|
|
||||||
xpc.sendDREF("sim/cockpit/switches/gear_handle_status", 1);
|
|
||||||
|
|
||||||
//Let sim run for 10 seconds
|
|
||||||
try { Thread.sleep(10000); } catch (InterruptedException ex) {}
|
|
||||||
|
|
||||||
System.out.println("Checking gear and sim status");
|
|
||||||
String[] drefs = new String[]
|
|
||||||
{
|
|
||||||
"sim/cockpit/switches/gear_handle_status",
|
|
||||||
"sim/operation/override/override_planepath"
|
|
||||||
};
|
|
||||||
float[][] results = xpc.getDREFs(drefs);
|
|
||||||
|
|
||||||
if(results[0][0] == 1)
|
|
||||||
{
|
|
||||||
System.out.println("Gear stowed.");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
System.out.println("Error stowing gear");
|
|
||||||
}
|
|
||||||
System.out.println("Example complete");
|
System.out.println("Example complete");
|
||||||
}
|
}
|
||||||
catch (SocketException ex)
|
catch (SocketException ex)
|
||||||
@@ -299,4 +415,85 @@ public class Main
|
|||||||
}
|
}
|
||||||
System.out.println("Exiting");
|
System.out.println("Exiting");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Helper Methods
|
||||||
|
// public static void logData (BufferedWriter bw, String log) {
|
||||||
|
// bw.write(log);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class axis extends JComponent {
|
||||||
|
|
||||||
|
int xBound = 0;
|
||||||
|
int yBound = 0;
|
||||||
|
|
||||||
|
axis(int currentX, int currentY){
|
||||||
|
xBound = currentX;
|
||||||
|
yBound = currentY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paint(Graphics g)
|
||||||
|
{
|
||||||
|
Graphics2D g2 = (Graphics2D) g;
|
||||||
|
g2.setColor(Color.green);
|
||||||
|
g2.drawLine(xBound/2, 0, xBound/2, yBound);
|
||||||
|
g2.drawLine(0, yBound/2, xBound, yBound/2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setXBound(int newX){
|
||||||
|
this.xBound = newX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setYBound(int newY){
|
||||||
|
this.yBound = newY;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class yokePosition extends JComponent {
|
||||||
|
float x = 0;
|
||||||
|
int xBound = 0;
|
||||||
|
float y = 0;
|
||||||
|
int yBound = 0;
|
||||||
|
|
||||||
|
yokePosition(int currentX, int currentY){
|
||||||
|
xBound = currentX;
|
||||||
|
yBound = currentY;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
yokePosition(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paint(Graphics g)
|
||||||
|
{
|
||||||
|
Graphics2D g2 = (Graphics2D) g;
|
||||||
|
g2.setColor(Color.red);
|
||||||
|
int currX = (int)(x*xBound) + xBound/2;
|
||||||
|
int currY = (int)(y*yBound) + yBound/2;
|
||||||
|
System.out.println("CurrX, CurrY: " + currX +", " + currY);
|
||||||
|
g2.drawOval(currX, currY, 50, 50);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setX(float newX){
|
||||||
|
this.x = newX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setXBound(int newX){
|
||||||
|
this.xBound = newX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setY(float newY){
|
||||||
|
this.y = newY;
|
||||||
|
}
|
||||||
|
public void setYBound(int newY){
|
||||||
|
this.yBound = newY;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
56823
Java/Examples/Model-1/src/output
Normal file
56823
Java/Examples/Model-1/src/output
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user