/*
* Copyright (C) 2010-2014 - Andreas Maier, Marco B�gel
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/
package edu.stanford.rsl.apps.gui;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import edu.stanford.rsl.conrad.geometry.Projection;
import edu.stanford.rsl.conrad.geometry.Rotations;
import edu.stanford.rsl.conrad.geometry.Rotations.BasicAxis;
import edu.stanford.rsl.conrad.numerics.SimpleMatrix;
import edu.stanford.rsl.conrad.numerics.SimpleOperators;
import edu.stanford.rsl.conrad.numerics.SimpleVector;
import edu.stanford.rsl.conrad.utils.CONRAD;
import edu.stanford.rsl.conrad.utils.Configuration;
import edu.stanford.rsl.conrad.utils.DoubleArrayUtil;
import edu.stanford.rsl.conrad.utils.UserUtil;
/**
* This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
* Builder, which is free for non-commercial use. If Jigloo is being used
* commercially (ie, by a corporation, company or business for any purpose
* whatever) then you should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details. Use of Jigloo implies
* acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
* PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
* ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class TrajectoryEditor extends JFrame {
/**
*
*/
private static final long serialVersionUID = 5844637548975765171L;
private JLabel jLabelLeft;
private JLabel jLabelMatrixRight;
private JLabel JLabelPMatrix;
private JTextField jA11;
private JButton jApplyToPMatrices;
private JButton jDeleteMatrix;
private JButton jDefineRotation;
private JButton jDefineNoise;
private JButton jFixPrimaryAngles;
private JTextField jB33;
private JTextField jB32;
private JTextField jB31;
private JTextField jB23;
private JTextField jB22;
private JTextField jB21;
private JTextField jB13;
private JTextField jB12;
private JTextField jB11;
private JTextField jA31;
private JTextField jA32;
private JTextField jA33;
private JTextField jA34;
private JTextField jA41;
private JTextField jA42;
private JTextField jA43;
private JTextField jA44;
private JTextField jA21;
private JTextField jA22;
private JTextField jA23;
private JTextField jA24;
private JTextField jA14;
private JTextField jA13;
private JTextField jA12;
private JLabel jLabelP;
private void initGUI() {
try {
{
this.setBackground(Color.WHITE);
GridBagLayout thisLayout = new GridBagLayout();
thisLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0 };
thisLayout.rowHeights = new int[] { 36, 12, 61, 65, 240 };
thisLayout.columnWeights = new double[] { 0.0, 0.0, 0.1 };
thisLayout.columnWidths = new int[] { 167, 201, 7 };
getContentPane().setLayout(thisLayout);
{
jLabelLeft = new JLabel();
getContentPane().add(
jLabelLeft,
new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER,
GridBagConstraints.NONE, new Insets(0, 0,
0, 0), 0, 0));
jLabelLeft.setText("Matrix Left");
}
{
jLabelMatrixRight = new JLabel();
getContentPane().add(
jLabelMatrixRight,
new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER,
GridBagConstraints.NONE, new Insets(0, 0,
0, 0), 0, 0));
jLabelMatrixRight.setText("Matrix Right");
}
{
JLabelPMatrix = new JLabel();
getContentPane().add(
JLabelPMatrix,
new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER,
GridBagConstraints.NONE, new Insets(0, 0,
0, 0), 0, 0));
JLabelPMatrix.setText("Projection Matrix");
}
{
jLabelP = new JLabel();
getContentPane().add(
jLabelP,
new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTH,
GridBagConstraints.NONE, new Insets(0, 0,
-10, 0), 0, 0));
jLabelP.setText("x P x");
}
{
jA11 = new JTextField();
getContentPane().add(
jA11,
new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTHWEST,
GridBagConstraints.NONE, new Insets(5, 5,
0, 0), 0, 0));
jA11.setText("1");
}
{
jA12 = new JTextField();
getContentPane().add(
jA12,
new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTH,
GridBagConstraints.NONE, new Insets(5, 0,
0, 40), 0, 0));
jA12.setText("0");
}
{
jA13 = new JTextField();
getContentPane().add(
jA13,
new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTH,
GridBagConstraints.NONE, new Insets(5, 0,
0, -40), 0, 0));
jA13.setText("0");
}
{
jA14 = new JTextField();
getContentPane().add(
jA14,
new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTHEAST,
GridBagConstraints.NONE, new Insets(5, 0,
0, 5), 0, 0));
jA14.setText("0");
}
{
jA24 = new JTextField();
getContentPane().add(
jA24,
new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTHEAST,
GridBagConstraints.NONE, new Insets(0, 0,
5, 5), 0, 0));
jA24.setText("0");
}
{
jA23 = new JTextField();
getContentPane().add(
jA23,
new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTH,
GridBagConstraints.NONE, new Insets(0, 0,
5, -40), 0, 0));
jA23.setText("0");
}
{
jA22 = new JTextField();
getContentPane().add(
jA22,
new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTH,
GridBagConstraints.NONE, new Insets(0, 0,
5, 40), 0, 0));
jA22.setText("1");
}
{
jA21 = new JTextField();
getContentPane().add(
jA21,
new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTHWEST,
GridBagConstraints.NONE, new Insets(0, 5,
5, 0), 0, 0));
jA21.setText("0");
}
{
jA44 = new JTextField();
getContentPane().add(
jA44,
new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTHEAST,
GridBagConstraints.NONE, new Insets(0, 0,
5, 5), 0, 0));
jA44.setText("1");
}
{
jA43 = new JTextField();
getContentPane().add(
jA43,
new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTH,
GridBagConstraints.NONE, new Insets(0, 0,
5, -40), 0, 0));
jA43.setText("0");
}
{
jA42 = new JTextField();
getContentPane().add(
jA42,
new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTH,
GridBagConstraints.NONE, new Insets(0, 0,
5, 40), 0, 0));
jA42.setText("0");
}
{
jA41 = new JTextField();
getContentPane().add(
jA41,
new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTHWEST,
GridBagConstraints.NONE, new Insets(0, 5,
5, 0), 0, 0));
jA41.setText("0");
}
{
jA34 = new JTextField();
getContentPane().add(
jA34,
new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTHEAST,
GridBagConstraints.NONE, new Insets(5, 0,
0, 5), 0, 0));
jA34.setText("0");
}
{
jA33 = new JTextField();
getContentPane().add(
jA33,
new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTH,
GridBagConstraints.NONE, new Insets(5, 0,
0, -40), 0, 0));
jA33.setText("1");
}
{
jA32 = new JTextField();
getContentPane().add(
jA32,
new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTH,
GridBagConstraints.NONE, new Insets(5, 0,
0, 40), 0, 0));
jA32.setText("0");
}
{
jA31 = new JTextField();
getContentPane().add(
jA31,
new GridBagConstraints(2, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTHWEST,
GridBagConstraints.NONE, new Insets(5, 5,
0, 0), 0, 0));
jA31.setText("0");
}
{
jB11 = new JTextField();
getContentPane().add(
jB11,
new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTHWEST,
GridBagConstraints.NONE, new Insets(5, 5,
0, 0), 0, 0));
jB11.setText("1");
}
{
jB12 = new JTextField();
getContentPane().add(
jB12,
new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTH,
GridBagConstraints.NONE, new Insets(5, 0,
0, 0), 0, 0));
jB12.setText("0");
}
{
jB13 = new JTextField();
getContentPane().add(
jB13,
new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTHEAST,
GridBagConstraints.NONE, new Insets(5, 0,
0, 5), 0, 0));
jB13.setText("0");
}
{
jB21 = new JTextField();
getContentPane().add(
jB21,
new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTHWEST,
GridBagConstraints.NONE, new Insets(0, 5,
5, 0), 0, 0));
jB21.setText("0");
}
{
jB22 = new JTextField();
getContentPane().add(
jB22,
new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTH,
GridBagConstraints.NONE, new Insets(0, 0,
5, 0), 0, 0));
jB22.setText("1");
}
{
jB23 = new JTextField();
getContentPane().add(
jB23,
new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.SOUTHEAST,
GridBagConstraints.NONE, new Insets(0, 0,
5, 5), 0, 0));
jB23.setText("0");
}
{
jB31 = new JTextField();
getContentPane().add(
jB31,
new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTHWEST,
GridBagConstraints.NONE, new Insets(5, 5,
0, 0), 0, 0));
jB31.setText("0");
}
{
jB32 = new JTextField();
getContentPane().add(
jB32,
new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTH,
GridBagConstraints.NONE, new Insets(5, 0,
0, 0), 0, 0));
jB32.setText("0");
}
{
jB33 = new JTextField();
getContentPane().add(
jB33,
new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTHEAST,
GridBagConstraints.NONE, new Insets(5, 0,
0, 5), 0, 0));
jB33.setText("1");
}
{
int insetY = 20;
jApplyToPMatrices = new JButton();
jApplyToPMatrices.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() != null) {
if (e.getSource().equals(jApplyToPMatrices)) {
applyToPMatrices();
}
}
}
});
getContentPane().add(
jApplyToPMatrices,
new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTH,
GridBagConstraints.NONE, new Insets(insetY,
0, 0, 0), 0, 0));
jApplyToPMatrices
.setText("Apply to all Projection Matrices");
jDeleteMatrix = new JButton();
jDeleteMatrix.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() != null) {
if (e.getSource().equals(jDeleteMatrix)) {
try {
deleteSome();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
});
insetY += 40;
getContentPane().add(
jDeleteMatrix,
new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTH,
GridBagConstraints.NONE, new Insets(insetY,
0, 0, 0), 0, 0));
jDeleteMatrix.setText("Delete Some Projection Matrices");
jDefineRotation = new JButton();
jDefineRotation.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() != null) {
if (e.getSource().equals(jDefineRotation)) {
try {
defineRotation();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
});
insetY += 40;
getContentPane().add(
jDefineRotation,
new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTH,
GridBagConstraints.NONE, new Insets(insetY,
0, 0, 0), 0, 0));
jDefineRotation.setText("Define A Source Rotation");
jDefineNoise = new JButton();
jDefineNoise.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() != null) {
if (e.getSource().equals(jDefineNoise)) {
try {
defineNoise();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
});
insetY += 40;
getContentPane().add(
jDefineNoise,
new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTH,
GridBagConstraints.NONE, new Insets(insetY,
0, 0, 0), 0, 0));
jDefineNoise.setText("Define Trajectory Noise");
jFixPrimaryAngles = new JButton();
jFixPrimaryAngles.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() != null) {
if (e.getSource().equals(jFixPrimaryAngles)) {
try {
fixPriamries();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
});
insetY += 40;
getContentPane().add(
jFixPrimaryAngles,
new GridBagConstraints(1, 4, 1, 1, 0.0, 0.0,
GridBagConstraints.NORTH,
GridBagConstraints.NONE, new Insets(insetY,
0, 0, 0), 0, 0));
jFixPrimaryAngles.setText("Fix Primary Angles");
}
}
{
this.setSize(512, 375);
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected void fixPriamries() throws Exception {
double maxAngle = UserUtil.queryDouble("Enter Maximal Angular Range:", 200);
int numProj = Configuration.getGlobalConfiguration()
.getGeometry().getNumProjectionMatrices();
double angleStep = maxAngle / (numProj-1);
double[] newPrimaries = new double[numProj];
double[] secondaries = null;
if (Configuration.getGlobalConfiguration().getGeometry()
.getSecondaryAngles() != null)
secondaries = new double[numProj];
for (int i = 0; i < numProj; i++) {
if (Configuration.getGlobalConfiguration().getGeometry()
.getSecondaryAngles() != null) {
secondaries[i] = Configuration.getGlobalConfiguration()
.getGeometry().getSecondaryAngles()[i];
}
newPrimaries[i] = angleStep*i;
}
Configuration.getGlobalConfiguration().getGeometry()
.setPrimaryAngleArray(newPrimaries);
Configuration.getGlobalConfiguration().getGeometry()
.setSecondaryAngleArray(secondaries);
}
private void deleteSome() throws Exception {
int maxPrimaryAngle = UserUtil.queryInt("Enter Maximum Primary Angle:",
180);
int lastValid = 0;
double[] primaries = Configuration.getGlobalConfiguration()
.getGeometry().getPrimaryAngles();
double min = DoubleArrayUtil.minOfArray(primaries);
while (primaries[lastValid] - min < maxPrimaryAngle) {
if (lastValid < primaries.length - 1)
lastValid++;
else {
CONRAD.log("Angular range is already less or equal. Nothing to be done.");
return;
}
}
double[] newPrimaries = new double[lastValid];
Projection[] newMatrices = new Projection[lastValid];
double[] secondaries = null;
if (Configuration.getGlobalConfiguration().getGeometry()
.getSecondaryAngles() != null)
secondaries = new double[lastValid];
for (int i = 0; i < lastValid; i++) {
if (Configuration.getGlobalConfiguration().getGeometry()
.getSecondaryAngles() != null) {
secondaries[i] = Configuration.getGlobalConfiguration()
.getGeometry().getSecondaryAngles()[i];
}
newPrimaries[i] = primaries[i];
newMatrices[i] = Configuration.getGlobalConfiguration()
.getGeometry().getProjectionMatrix(i);
}
Configuration.getGlobalConfiguration().getGeometry()
.setProjectionMatrices(newMatrices);
Configuration.getGlobalConfiguration().getGeometry()
.setPrimaryAngleArray(newPrimaries);
Configuration.getGlobalConfiguration().getGeometry()
.setSecondaryAngleArray(secondaries);
Configuration.getGlobalConfiguration().getGeometry()
.setNumProjectionMatrices(lastValid);
CONRAD.log("Reduced to " + lastValid + " matrices");
}
private void applyToPMatrices() {
double[][] b = new double[3][3];
b[0][0] = Double.valueOf(jB11.getText());
b[0][1] = Double.valueOf(jB12.getText());
b[0][2] = Double.valueOf(jB13.getText());
b[1][0] = Double.valueOf(jB21.getText());
b[1][1] = Double.valueOf(jB22.getText());
b[1][2] = Double.valueOf(jB23.getText());
b[2][0] = Double.valueOf(jB31.getText());
b[2][1] = Double.valueOf(jB32.getText());
b[2][2] = Double.valueOf(jB33.getText());
double[][] a = new double[4][4];
a[0][0] = Double.valueOf(jA11.getText());
a[0][1] = Double.valueOf(jA12.getText());
a[0][2] = Double.valueOf(jA13.getText());
a[0][3] = Double.valueOf(jA14.getText());
a[1][0] = Double.valueOf(jA21.getText());
a[1][1] = Double.valueOf(jA22.getText());
a[1][2] = Double.valueOf(jA23.getText());
a[1][3] = Double.valueOf(jA24.getText());
a[2][0] = Double.valueOf(jA31.getText());
a[2][1] = Double.valueOf(jA32.getText());
a[2][2] = Double.valueOf(jA33.getText());
a[2][3] = Double.valueOf(jA34.getText());
a[3][0] = Double.valueOf(jA41.getText());
a[3][1] = Double.valueOf(jA42.getText());
a[3][2] = Double.valueOf(jA43.getText());
a[3][3] = Double.valueOf(jA44.getText());
SimpleMatrix B = new SimpleMatrix(b);
SimpleMatrix A = new SimpleMatrix(a);
Projection[] pMats = Configuration.getGlobalConfiguration()
.getGeometry().getProjectionMatrices();
for (int i = 0; i < pMats.length; i++) {
SimpleMatrix tmp1 = SimpleOperators.multiplyMatrixProd(B,
pMats[i].computeP());
SimpleMatrix tmp2 = SimpleOperators.multiplyMatrixProd(tmp1, A);
pMats[i].setPMatrixSerialization(tmp2.toString());
}
Configuration.getGlobalConfiguration().getGeometry()
.setProjectionMatrices(pMats);
System.out.println("Done");
}
public static BasicAxis queryAxis(String message, String messageTitle,
BasicAxis[] axes) throws Exception {
return (BasicAxis) UserUtil.chooseObject(message, messageTitle, axes,
axes[0]);
}
private void defineRotation() {
try {
BasicAxis axis = queryAxis("Define Rotation Axis", "Rotation Axis",
new BasicAxis[] { BasicAxis.X_AXIS, BasicAxis.Y_AXIS,
BasicAxis.Z_AXIS });
double angle = Math.PI * UserUtil.queryDouble("Rotation angle (degree)", 0.0) / 180.0;
SimpleMatrix rotation = Rotations.createBasicRotationMatrix(axis,
angle);
System.out.println(rotation);
jA11.setText("" + rotation.getElement(0, 0));
jA12.setText("" + rotation.getElement(0, 1));
jA13.setText("" + rotation.getElement(0, 2));
jA21.setText("" + rotation.getElement(1, 0));
jA22.setText("" + rotation.getElement(1, 1));
jA23.setText("" + rotation.getElement(1, 2));
jA31.setText("" + rotation.getElement(2, 0));
jA32.setText("" + rotation.getElement(2, 1));
jA33.setText("" + rotation.getElement(2, 2));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static double queryDistance(String message, String messageTitle,
String[] distances) throws Exception {
return Double.parseDouble((String) UserUtil.chooseObject(message,
messageTitle, distances, distances[0]));
}
private void defineNoise() {
try {
double d = queryDistance("Choose distance", "Distance",
new String[] { "1.0", "100.0" });
double maxAngle = Math.atan(d / (2.0 * Configuration.getGlobalConfiguration().getGeometry().getSourceToDetectorDistance()));
Projection[] pMats = Configuration.getGlobalConfiguration()
.getGeometry().getProjectionMatrices();
System.out.println(Configuration.getGlobalConfiguration().getGeometry().getSourceToDetectorDistance());
System.out.println(maxAngle);
for (int i = 0; i < pMats.length; i++) {
double alpha = 2.0 * maxAngle * Math.random() - maxAngle;
double beta = 2.0 * maxAngle * Math.random() - maxAngle;
// Math.atan(2.0 * d / 2.0 * Math.random() - d / 2.0)
SimpleMatrix rotation1 = Rotations.createBasicRotationMatrix(
BasicAxis.X_AXIS, alpha);
SimpleMatrix rotation2 = Rotations.createBasicRotationMatrix(
BasicAxis.Y_AXIS, beta);
SimpleMatrix rotation = SimpleOperators.multiplyMatrixProd(
rotation1, rotation2);
SimpleVector translation = new SimpleVector(3);
translation.setElementValue(0, 2.0 * d / 2.0 * Math.random()
- d / 2.0);
translation.setElementValue(1, 2.0 * d / 2.0 * Math.random()
- d / 2.0);
translation.setElementValue(2, 2.0 * d / 2.0 * Math.random()
- d / 2.0);
jA11.setText("" + rotation.getElement(0, 0));
jA12.setText("" + rotation.getElement(0, 1));
jA13.setText("" + rotation.getElement(0, 2));
jA21.setText("" + rotation.getElement(1, 0));
jA22.setText("" + rotation.getElement(1, 1));
jA23.setText("" + rotation.getElement(1, 2));
jA31.setText("" + rotation.getElement(2, 0));
jA32.setText("" + rotation.getElement(2, 1));
jA33.setText("" + rotation.getElement(2, 2));
jA14.setText("" + translation.getElement(0));
jA24.setText("" + translation.getElement(1));
jA34.setText("" + translation.getElement(2));
double[][] a = new double[4][4];
a[0][0] = Double.valueOf(jA11.getText());
a[0][1] = Double.valueOf(jA12.getText());
a[0][2] = Double.valueOf(jA13.getText());
a[0][3] = Double.valueOf(jA14.getText());
a[1][0] = Double.valueOf(jA21.getText());
a[1][1] = Double.valueOf(jA22.getText());
a[1][2] = Double.valueOf(jA23.getText());
a[1][3] = Double.valueOf(jA24.getText());
a[2][0] = Double.valueOf(jA31.getText());
a[2][1] = Double.valueOf(jA32.getText());
a[2][2] = Double.valueOf(jA33.getText());
a[2][3] = Double.valueOf(jA34.getText());
a[3][0] = Double.valueOf(jA41.getText());
a[3][1] = Double.valueOf(jA42.getText());
a[3][2] = Double.valueOf(jA43.getText());
a[3][3] = Double.valueOf(jA44.getText());
SimpleMatrix A = new SimpleMatrix(a);
SimpleMatrix tmp2 = SimpleOperators.multiplyMatrixProd(
pMats[i].computeP(), A);
pMats[i].setPMatrixSerialization(tmp2.toString());
}
Configuration.getGlobalConfiguration().getGeometry()
.setProjectionMatrices(pMats);
System.out.println("Done");
} catch (Exception e) {
System.out.println("catching fire...");
e.printStackTrace();
}
}
public TrajectoryEditor() {
initGUI();
}
}