shared.dataInput:
Added shared.enums.XMLFileType, which is used to specify if a string contains a file path or file contents. Updated the XML readers to use it. Testing: Moved the networking tests and resources into racevisionGame module. Moved the remaining tests from visualiser into racevisionGame, and added a few empty tests to implement later.
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
package network;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static seng302.Networking.Utils.AC35UnitConverter.*;
|
||||
|
||||
/**
|
||||
* Created by fwy13 on 4/05/17.
|
||||
*/
|
||||
public class AC35UnitConverter {
|
||||
|
||||
@Test
|
||||
public void testConvertGPS(){
|
||||
assertTrue(convertGPS(0) == 0);
|
||||
assertTrue(convertGPS(Integer.MAX_VALUE) == (double)Integer.MAX_VALUE * 180.0 / Math.pow(2, 31));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testConvertGPSToInt(){
|
||||
assertTrue(convertGPSToInt(0) == 0);
|
||||
assertTrue(convertGPSToInt(180) == (int)2147483648.0);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConvertHeading(){
|
||||
assertTrue(convertHeading(0) == 0);
|
||||
assertTrue(convertHeading(65536) == 360.0);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testConvertTrueWindAngle(){
|
||||
assertTrue(convertTrueWindAngle(0) == 0);
|
||||
assertTrue(convertTrueWindAngle(32768) == 180.0);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package network;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import seng302.Networking.Exceptions.InvalidMessageException;
|
||||
import seng302.Networking.MessageDecoders.XMLMessageDecoder;
|
||||
import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
||||
import seng302.Networking.Messages.AC35Data;
|
||||
import seng302.Networking.Messages.Enums.MessageType;
|
||||
import seng302.Networking.Messages.XMLMessage;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
/**
|
||||
* Created by hba56 on 21/04/17.
|
||||
*/
|
||||
public class BinaryMessageDecoderTest {
|
||||
@Test
|
||||
public void decodeTest(){
|
||||
try{
|
||||
StringBuilder xmlString;
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(
|
||||
this.getClass().getResourceAsStream(("../../raceXML/Regatta.xml"))));
|
||||
String line;
|
||||
xmlString = new StringBuilder();
|
||||
while((line=br.readLine())!= null){
|
||||
xmlString.append(line.trim());
|
||||
}
|
||||
long time = System.currentTimeMillis();
|
||||
XMLMessageEncoder testEncoder = new XMLMessageEncoder((short)1, time, (byte)7, (short)1, (short)xmlString.length(), xmlString.toString());
|
||||
|
||||
byte[] encodedMessage = testEncoder.encode();
|
||||
|
||||
BinaryMessageEncoder testMessage = new BinaryMessageEncoder(MessageType.XMLMESSAGE, time, 1, (short)encodedMessage.length, encodedMessage);
|
||||
|
||||
BinaryMessageDecoder decoder = new BinaryMessageDecoder(testMessage.getFullMessage());
|
||||
|
||||
AC35Data message = null;
|
||||
try {
|
||||
message = decoder.decode();
|
||||
}
|
||||
catch (InvalidMessageException e) {
|
||||
Assert.assertFalse(e.getMessage(), true);
|
||||
}
|
||||
|
||||
if (!(message instanceof XMLMessage)){
|
||||
Assert.assertFalse(true);
|
||||
}
|
||||
XMLMessage xmlMessage = (XMLMessage) message;
|
||||
|
||||
|
||||
//message length
|
||||
Assert.assertEquals((short) encodedMessage.length, decoder.getMessageBodyLength());
|
||||
//time stamp
|
||||
Assert.assertEquals(time, decoder.getHeaderTimeStamp());
|
||||
//source ID
|
||||
Assert.assertEquals((short) 1, decoder.getHeaderSourceID());
|
||||
//message type
|
||||
Assert.assertEquals(26, decoder.getHeaderMessageType());
|
||||
|
||||
XMLMessageDecoder decoderXML = new XMLMessageDecoder(decoder.getMessageBody());
|
||||
decoderXML.decode();
|
||||
|
||||
//tests from seng302.Networking.MessageDecoders.XMLMessageDecoderTest to make sure the file is still good
|
||||
Assert.assertEquals((byte)1, decoderXML.getMessageVersionNumber());
|
||||
Assert.assertEquals((short)1, decoderXML.getAckNumber());
|
||||
Assert.assertEquals(time, decoderXML.getTimeStamp());
|
||||
Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType());
|
||||
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
||||
Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength());
|
||||
|
||||
// Reader reader = decoderXML.getXmlMessageInputStream().getCharacterStream();
|
||||
// int c;
|
||||
// String contents = "";
|
||||
// while((c = reader.read()) != -1) {
|
||||
// contents += (char)c;
|
||||
// }
|
||||
// Assert.assertEquals(xmlString.toString(), contents);
|
||||
|
||||
}catch (IOException e){
|
||||
Assert.assertFalse(e.getMessage(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
package network;
|
||||
|
||||
import org.junit.Test;
|
||||
import seng302.Networking.Utils.ByteConverter;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
|
||||
/**
|
||||
* Created by fwy13 on 25/04/17.
|
||||
*/
|
||||
public class ByteConverterTest {
|
||||
|
||||
@Test
|
||||
public void testLargerIntToByte(){
|
||||
int int1 = 1532158456; //100 in bytes
|
||||
byte[] bytes1 = {(byte)0xF8, (byte)0xE1, 0x52, 0x5B};//this is in little endian
|
||||
assertTrue(testArrayContents(ByteConverter.intToBytes(int1), bytes1));
|
||||
byte[] bytes2 = {0x5B, 0x52, (byte)0xE1, (byte)0xF8};// this is big endian
|
||||
assertTrue(testArrayContents(ByteConverter.intToBytes(int1, ByteConverter.IntegerSize, ByteOrder.BIG_ENDIAN), bytes2));
|
||||
//test chopping
|
||||
byte[] chopped1 = ByteConverter.intToBytes(int1, 3, ByteOrder.LITTLE_ENDIAN);
|
||||
byte[] bytes3 = {(byte)0xF8, (byte)0xE1, 0x52};
|
||||
assertTrue(testArrayContents(chopped1, bytes3));
|
||||
byte[] chopped2 = ByteConverter.intToBytes(int1, 2, ByteOrder.LITTLE_ENDIAN);
|
||||
byte[] bytes4 = {(byte)0xF8, (byte)0xE1};
|
||||
assertTrue(testArrayContents(chopped2, bytes4));
|
||||
byte[] chopped3 = ByteConverter.intToBytes(int1, 1, ByteOrder.LITTLE_ENDIAN);
|
||||
byte[] bytes5 = {(byte)0xF8};
|
||||
assertTrue(testArrayContents(chopped3, bytes5));
|
||||
|
||||
byte[] chopped4 = ByteConverter.intToBytes(int1, 3, ByteOrder.BIG_ENDIAN);
|
||||
byte[] bytes6 = {0x52, (byte)0xE1, (byte)0xF8};
|
||||
assertTrue(testArrayContents(chopped4, bytes6));
|
||||
byte[] chopped5 = ByteConverter.intToBytes(int1, 2, ByteOrder.BIG_ENDIAN);
|
||||
byte[] bytes7 = {(byte)0xE1, (byte)0xF8};
|
||||
assertTrue(testArrayContents(chopped5, bytes7));
|
||||
byte[] chopped6 = ByteConverter.intToBytes(int1, 1, ByteOrder.BIG_ENDIAN);
|
||||
byte[] bytes8 = {(byte)0xF8};
|
||||
assertTrue(testArrayContents(chopped6, bytes8));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testByteToInt(){
|
||||
int int1 = 100; //100 in bytes
|
||||
byte[] bytes1 = {100, 0, 0, 0};//this is in little endian
|
||||
assertTrue(ByteConverter.bytesToInt(bytes1) == int1);
|
||||
assertTrue(ByteConverter.bytesToInt(bytes1, ByteOrder.LITTLE_ENDIAN) == int1);
|
||||
byte[] bytes2 = {0, 0, 0, 100};// this is big endian
|
||||
assertTrue(ByteConverter.bytesToInt(bytes2, ByteOrder.BIG_ENDIAN) == int1);
|
||||
//check single bytes to integers
|
||||
assertTrue(ByteConverter.bytesToInt((byte)100) == int1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testByteToLong(){
|
||||
long lng1 = 15; //100 in bytes
|
||||
byte[] bytes1 = {15, 0, 0, 0, 0, 0, 0, 0};//this is in little endian
|
||||
assertTrue(ByteConverter.bytesToLong(bytes1) == lng1);
|
||||
assertTrue(ByteConverter.bytesToLong(bytes1, ByteOrder.LITTLE_ENDIAN) == lng1);
|
||||
byte[] bytes2 = {0, 0, 0, 0, 0, 0, 0, 15};// this is big endian
|
||||
assertTrue(ByteConverter.bytesToLong(bytes2, ByteOrder.BIG_ENDIAN) == lng1);
|
||||
//check single bytes to integers
|
||||
assertTrue(ByteConverter.bytesToLong((byte)15) == lng1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testByteToShort(){
|
||||
short short1 = 20; //100 in bytes
|
||||
byte[] bytes1 = {20, 0};//this is in little endian
|
||||
assertTrue(ByteConverter.bytesToShort(bytes1) == short1);
|
||||
assertTrue(ByteConverter.bytesToShort(bytes1, ByteOrder.LITTLE_ENDIAN) == short1);
|
||||
byte[] bytes2 = {0, 20};// this is big endian
|
||||
assertTrue(ByteConverter.bytesToShort(bytes2, ByteOrder.BIG_ENDIAN) == short1);
|
||||
//check single bytes to integers
|
||||
assertTrue(ByteConverter.bytesToShort((byte)20) == short1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testByteToChar(){
|
||||
char char1 = 20; //100 in bytes
|
||||
byte[] bytes1 = {20, 0};//this is in little endian
|
||||
assertTrue(ByteConverter.bytesToChar(bytes1) == char1);
|
||||
assertTrue(ByteConverter.bytesToChar(bytes1, ByteOrder.LITTLE_ENDIAN) == char1);
|
||||
byte[] bytes2 = {0, 20};// this is big endian
|
||||
assertTrue(ByteConverter.bytesToChar(bytes2, ByteOrder.BIG_ENDIAN) == char1);
|
||||
//check single bytes to integers
|
||||
assertTrue(ByteConverter.bytesToChar((byte)20) == char1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIntToByte(){
|
||||
int int1 = 100; //100 in bytes
|
||||
byte[] bytes1 = {100, 0, 0, 0};//this is in little endian
|
||||
assertTrue(testArrayContents(ByteConverter.intToBytes(int1), bytes1));
|
||||
byte[] bytes2 = {0, 0, 0, 100};// this is big endian
|
||||
assertTrue(testArrayContents(ByteConverter.intToBytes(int1, ByteConverter.IntegerSize, ByteOrder.BIG_ENDIAN), bytes2));
|
||||
//test chopping
|
||||
byte[] chopped1 = ByteConverter.intToBytes(int1, 3, ByteOrder.LITTLE_ENDIAN);
|
||||
byte[] bytes3 = {100, 0, 0};
|
||||
assertTrue(testArrayContents(chopped1, bytes3));
|
||||
byte[] chopped2 = ByteConverter.intToBytes(int1, 2, ByteOrder.LITTLE_ENDIAN);
|
||||
byte[] bytes4 = {100, 0};
|
||||
assertTrue(testArrayContents(chopped2, bytes4));
|
||||
byte[] chopped3 = ByteConverter.intToBytes(int1, 1, ByteOrder.LITTLE_ENDIAN);
|
||||
byte[] bytes5 = {100};
|
||||
assertTrue(testArrayContents(chopped3, bytes5));
|
||||
|
||||
byte[] chopped4 = ByteConverter.intToBytes(int1, 3, ByteOrder.BIG_ENDIAN);
|
||||
byte[] bytes6 = {0, 0, 100};
|
||||
assertTrue(testArrayContents(chopped4, bytes6));
|
||||
byte[] chopped5 = ByteConverter.intToBytes(int1, 2, ByteOrder.BIG_ENDIAN);
|
||||
byte[] bytes7 = {0, 100};
|
||||
assertTrue(testArrayContents(chopped5, bytes7));
|
||||
byte[] chopped6 = ByteConverter.intToBytes(int1, 1, ByteOrder.BIG_ENDIAN);
|
||||
byte[] bytes8 = {100};
|
||||
assertTrue(testArrayContents(chopped6, bytes8));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLongToBytes(){
|
||||
long lng1 = 15; //100 in bytes
|
||||
byte[] bytes1 = {15, 0, 0, 0, 0, 0, 0, 0};//this is in little endian
|
||||
assertTrue(testArrayContents(ByteConverter.longToBytes(lng1), bytes1));
|
||||
byte[] bytes2 = {0, 0, 0, 0, 0, 0, 0, 15};// this is big endian
|
||||
assertTrue(testArrayContents(ByteConverter.longToBytes(lng1, ByteConverter.LongSize, ByteOrder.BIG_ENDIAN), bytes2));
|
||||
//test chopping
|
||||
byte[] chopped1 = ByteConverter.longToBytes(lng1, 3, ByteOrder.LITTLE_ENDIAN);
|
||||
byte[] bytes3 = {15, 0, 0};
|
||||
assertTrue(testArrayContents(chopped1, bytes3));
|
||||
byte[] chopped2 = ByteConverter.longToBytes(lng1, 2, ByteOrder.LITTLE_ENDIAN);
|
||||
byte[] bytes4 = {15, 0};
|
||||
assertTrue(testArrayContents(chopped2, bytes4));
|
||||
byte[] chopped3 = ByteConverter.longToBytes(lng1, 1, ByteOrder.LITTLE_ENDIAN);
|
||||
byte[] bytes5 = {15};
|
||||
assertTrue(testArrayContents(chopped3, bytes5));
|
||||
|
||||
byte[] chopped4 = ByteConverter.longToBytes(lng1, 3, ByteOrder.BIG_ENDIAN);
|
||||
byte[] bytes6 = {0, 0, 15};
|
||||
assertTrue(testArrayContents(chopped4, bytes6));
|
||||
byte[] chopped5 = ByteConverter.longToBytes(lng1, 2, ByteOrder.BIG_ENDIAN);
|
||||
byte[] bytes7 = {0, 15};
|
||||
assertTrue(testArrayContents(chopped5, bytes7));
|
||||
byte[] chopped6 = ByteConverter.longToBytes(lng1, 1, ByteOrder.BIG_ENDIAN);
|
||||
byte[] bytes8 = {15};
|
||||
assertTrue(testArrayContents(chopped6, bytes8));
|
||||
}
|
||||
|
||||
public boolean testArrayContents(byte[] bytes1, byte[] bytes2){
|
||||
if (bytes1.length != bytes2.length){
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < bytes1.length; i++){
|
||||
if (bytes1[i] != bytes2[i]){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package network.MessageDecoders;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import seng302.Networking.MessageEncoders.RaceVisionByteEncoder;
|
||||
import seng302.Networking.Messages.BoatLocation;
|
||||
|
||||
|
||||
/**
|
||||
* Created by hba56 on 23/04/17.
|
||||
*/
|
||||
public class BoatLocationDecoderTest {
|
||||
@Test
|
||||
public void getByteArrayTest(){
|
||||
long time = System.currentTimeMillis();
|
||||
BoatLocation testMessage = new BoatLocation((byte) 1, time, 2,
|
||||
3, (byte) 1, 180, -180, 4, 5,
|
||||
(short) 6, (short) 7, 8, 9, 10, 11,
|
||||
(short) 12, 13, 14 , (short) 15,
|
||||
16, 17, (short) 18);
|
||||
RaceVisionByteEncoder raceVisionByteEncoder = new RaceVisionByteEncoder();
|
||||
byte [] testEncodedMessage = raceVisionByteEncoder.boatLocation(testMessage);
|
||||
|
||||
BoatLocationDecoder testDecoder = new BoatLocationDecoder(testEncodedMessage);
|
||||
BoatLocation decodedTest = testDecoder.getMessage();
|
||||
|
||||
Assert.assertEquals(testMessage.getMessageVersionNumber(), decodedTest.getMessageVersionNumber());
|
||||
Assert.assertEquals(testMessage.getTime(), decodedTest.getTime());
|
||||
Assert.assertEquals(testMessage.getSequenceNumber(), decodedTest.getSequenceNumber());
|
||||
Assert.assertEquals(testMessage.getDeviceType(), decodedTest.getDeviceType());
|
||||
Assert.assertEquals(testMessage.getLatitude(), decodedTest.getLatitude());
|
||||
Assert.assertEquals(testMessage.getLongitude(), decodedTest.getLongitude());
|
||||
Assert.assertEquals(testMessage.getAltitude(), decodedTest.getAltitude());
|
||||
Assert.assertEquals(testMessage.getHeading(), decodedTest.getHeading());
|
||||
Assert.assertEquals(testMessage.getPitch(), decodedTest.getPitch());
|
||||
Assert.assertEquals(testMessage.getRoll(), decodedTest.getRoll());
|
||||
Assert.assertEquals(testMessage.getBoatSpeed(), decodedTest.getBoatSpeed());
|
||||
|
||||
Assert.assertEquals(testMessage.getBoatCOG(), decodedTest.getBoatCOG());
|
||||
Assert.assertEquals(testMessage.getBoatSOG(), decodedTest.getBoatSOG());
|
||||
Assert.assertEquals(testMessage.getApparentWindSpeed(), decodedTest.getApparentWindSpeed());
|
||||
Assert.assertEquals(testMessage.getTrueWindSpeed(), decodedTest.getTrueWindSpeed());
|
||||
Assert.assertEquals(testMessage.getTrueWindDirection(), decodedTest.getTrueWindDirection());
|
||||
Assert.assertEquals(testMessage.getTrueWindAngle(), decodedTest.getTrueWindAngle());
|
||||
Assert.assertEquals(testMessage.getCurrentDrift(), decodedTest.getCurrentDrift());
|
||||
Assert.assertEquals(testMessage.getCurrentSet(), decodedTest.getCurrentSet());
|
||||
Assert.assertEquals(testMessage.getRudderAngle(), decodedTest.getRudderAngle());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package network.MessageDecoders;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import seng302.Networking.MessageEncoders.RaceVisionByteEncoder;
|
||||
import seng302.Networking.Messages.CourseWind;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
/**
|
||||
* Created by hba56 on 23/04/17.
|
||||
*/
|
||||
public class CourseWindDecoderTest {
|
||||
@Test
|
||||
public void getByteArrayTest(){
|
||||
long time = System.currentTimeMillis();
|
||||
CourseWind testCourseWind1 = new CourseWind(1, time, 2,
|
||||
3, 4, 5,
|
||||
7, 6);
|
||||
|
||||
long time2 = System.currentTimeMillis();
|
||||
CourseWind testCourseWind2 = new CourseWind(2, time2, 2,
|
||||
3, 4, 5,
|
||||
7, 6);
|
||||
|
||||
ArrayList<CourseWind> testCourseWinds = new ArrayList<CourseWind>();
|
||||
testCourseWinds.add(testCourseWind1);
|
||||
testCourseWinds.add(testCourseWind2);
|
||||
|
||||
|
||||
RaceVisionByteEncoder raceVisionByteEncoder = new RaceVisionByteEncoder();
|
||||
|
||||
byte[] testEncodedCourseWind = raceVisionByteEncoder.courseWind((byte) 1, testCourseWinds);
|
||||
|
||||
CourseWindDecoder testDecoder = new CourseWindDecoder(testEncodedCourseWind);
|
||||
|
||||
ArrayList<CourseWind> testDecodedCourseWinds = testDecoder.getLoopMessages();
|
||||
|
||||
Assert.assertEquals(testCourseWinds.get(0).getID(), testDecodedCourseWinds.get(0).getID());
|
||||
Assert.assertEquals(testCourseWinds.get(0).getTime(), testDecodedCourseWinds.get(0).getTime());
|
||||
Assert.assertEquals(testCourseWinds.get(0).getRaceID(), testDecodedCourseWinds.get(0).getRaceID());
|
||||
Assert.assertEquals(testCourseWinds.get(0).getWindDirection(), testDecodedCourseWinds.get(0).getWindDirection());
|
||||
Assert.assertEquals(testCourseWinds.get(0).getWindSpeed(), testDecodedCourseWinds.get(0).getWindSpeed());
|
||||
Assert.assertEquals(testCourseWinds.get(0).getBestUpwindAngle(), testDecodedCourseWinds.get(0).getBestUpwindAngle());
|
||||
Assert.assertEquals(testCourseWinds.get(0).getBestDownwindAngle(), testDecodedCourseWinds.get(0).getBestDownwindAngle());
|
||||
Assert.assertEquals(testCourseWinds.get(0).getFlags(), testDecodedCourseWinds.get(0).getFlags());
|
||||
|
||||
Assert.assertEquals(testCourseWinds.get(1).getID(), testDecodedCourseWinds.get(1).getID());
|
||||
Assert.assertEquals(testCourseWinds.get(1).getTime(), testDecodedCourseWinds.get(1).getTime());
|
||||
Assert.assertEquals(testCourseWinds.get(1).getRaceID(), testDecodedCourseWinds.get(1).getRaceID());
|
||||
Assert.assertEquals(testCourseWinds.get(1).getWindDirection(), testDecodedCourseWinds.get(1).getWindDirection());
|
||||
Assert.assertEquals(testCourseWinds.get(1).getWindSpeed(), testDecodedCourseWinds.get(1).getWindSpeed());
|
||||
Assert.assertEquals(testCourseWinds.get(1).getBestUpwindAngle(), testDecodedCourseWinds.get(1).getBestUpwindAngle());
|
||||
Assert.assertEquals(testCourseWinds.get(1).getBestDownwindAngle(), testDecodedCourseWinds.get(1).getBestDownwindAngle());
|
||||
Assert.assertEquals(testCourseWinds.get(1).getFlags(), testDecodedCourseWinds.get(1).getFlags());
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package network.MessageDecoders;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import seng302.Networking.MessageEncoders.RaceVisionByteEncoder;
|
||||
|
||||
/**
|
||||
* Created by hba56 on 23/04/17.
|
||||
*/
|
||||
public class RaceStartStatusDecoderTest {
|
||||
@Test
|
||||
public void getByteArrayTest(){
|
||||
long time = System.currentTimeMillis();
|
||||
|
||||
RaceVisionByteEncoder raceVisionByteEncoder = new RaceVisionByteEncoder();
|
||||
long time2 = System.currentTimeMillis();
|
||||
byte[] encodedRaceStartStatus = raceVisionByteEncoder.raceStartStatus(time, (short)1,
|
||||
time2, 2, (char)3);
|
||||
|
||||
RaceStartStatusDecoder testDecoder = new RaceStartStatusDecoder(encodedRaceStartStatus);
|
||||
|
||||
Assert.assertEquals(0b1, testDecoder.getMessageVersion());
|
||||
Assert.assertEquals(time, testDecoder.getTime());
|
||||
Assert.assertEquals(1, testDecoder.getAck());
|
||||
Assert.assertEquals(time2, testDecoder.getStartTime());
|
||||
Assert.assertEquals(2, testDecoder.getRaceID());
|
||||
Assert.assertEquals((char)3, testDecoder.getNotification());
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package network.MessageDecoders;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import seng302.Networking.MessageEncoders.RaceVisionByteEncoder;
|
||||
import seng302.Networking.Messages.BoatStatus;
|
||||
import seng302.Networking.Messages.RaceStatus;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by hba56 on 23/04/17.
|
||||
*/
|
||||
public class RaceStatusDecoderTest {
|
||||
@Test
|
||||
public void getByteArrayTest(){
|
||||
long time = System.currentTimeMillis();
|
||||
|
||||
//Create data to serialize.
|
||||
int boat1SourceID = 5;
|
||||
int boat2SourceID = 8;
|
||||
byte boat1Status = 2;
|
||||
byte boat2Status = 2;
|
||||
byte boat1LegNumber = 5;
|
||||
byte boat2LegNumber = 3;
|
||||
byte boat1PenaltiesAwarded = 4;
|
||||
byte boat2PenaltiesAwarded = 0;
|
||||
byte boat1PenaltiesServed = 2;
|
||||
byte boat2PenaltiesServed = 0;
|
||||
long boat1TimeAtNextMark = time + (1000 * 3);
|
||||
long boat2TimeAtNextMark = time + (1000 * 2);
|
||||
long boat1TimeAtFinish = boat1TimeAtNextMark + (1000 * 15);
|
||||
long boat2TimeAtFinish = boat2TimeAtNextMark + (1000 * 7);
|
||||
|
||||
BoatStatus boatStatus1 = new BoatStatus(boat1SourceID, boat1Status, boat1LegNumber, boat1PenaltiesAwarded, boat1PenaltiesServed, boat1TimeAtNextMark, boat1TimeAtFinish);
|
||||
BoatStatus boatStatus2 = new BoatStatus(boat2SourceID, boat2Status, boat2LegNumber, boat2PenaltiesAwarded, boat2PenaltiesServed, boat2TimeAtNextMark, boat2TimeAtFinish);
|
||||
|
||||
int raceID = 585;
|
||||
int raceStatus = 3;
|
||||
long raceStartTime = time - (1000 * 31);
|
||||
int windDirection = 2341;
|
||||
int windSpeed = 10201;
|
||||
int raceType = 1;
|
||||
ArrayList<BoatStatus> boatStatuses = new ArrayList<>(2);
|
||||
boatStatuses.add(boatStatus1);
|
||||
boatStatuses.add(boatStatus2);
|
||||
|
||||
RaceStatus raceStatusObject = new RaceStatus(time, raceID, raceStatus, raceStartTime, windDirection, windSpeed, raceType, boatStatuses);
|
||||
|
||||
|
||||
byte[] encodedRaceStatus = RaceVisionByteEncoder.raceStatus(raceStatusObject);
|
||||
|
||||
RaceStatusDecoder decoderTest = new RaceStatusDecoder(encodedRaceStatus);
|
||||
|
||||
Assert.assertEquals(0b10, decoderTest.getVersionNum());
|
||||
Assert.assertEquals(time, decoderTest.getTime());
|
||||
Assert.assertEquals(raceID, decoderTest.getRace());
|
||||
Assert.assertEquals(raceStatus, decoderTest.getRaceState());
|
||||
Assert.assertEquals(raceStartTime, decoderTest.getStartTime());
|
||||
Assert.assertEquals(windDirection, decoderTest.getRaceWindDir());
|
||||
Assert.assertEquals(windSpeed, decoderTest.getRaceWindSpeed());
|
||||
|
||||
|
||||
BoatStatus boat1 = decoderTest.getBoats().get(0);
|
||||
|
||||
Assert.assertEquals(boat1SourceID, boat1.getSourceID());
|
||||
Assert.assertEquals(boat1Status, boat1.getBoatStatus());
|
||||
Assert.assertEquals(boat1LegNumber, boat1.getLegNumber());
|
||||
Assert.assertEquals(boat1PenaltiesAwarded, boat1.getNumPenaltiesAwarded());
|
||||
Assert.assertEquals(boat1PenaltiesServed, boat1.getNumPenaltiesServed());
|
||||
Assert.assertEquals(boat1TimeAtNextMark, boat1.getEstTimeAtNextMark());
|
||||
Assert.assertEquals(boat1TimeAtFinish, boat1.getEstTimeAtFinish());
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package network.MessageDecoders;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
/**
|
||||
* Created by hba56 on 20/04/17.
|
||||
*/
|
||||
public class XMLMessageDecoderTest {
|
||||
@Test
|
||||
public void getByteArrayTest(){
|
||||
try{
|
||||
StringBuilder xmlString;
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(
|
||||
this.getClass().getResourceAsStream(("../../../raceXML/Regatta.xml"))));
|
||||
String line;
|
||||
xmlString = new StringBuilder();
|
||||
while((line=br.readLine())!= null){
|
||||
xmlString.append(line.trim());
|
||||
}
|
||||
long time = System.currentTimeMillis();
|
||||
XMLMessageEncoder testEncoder = new XMLMessageEncoder((short)1, time, (byte)7, (short)1, (short)xmlString.length(), xmlString.toString());
|
||||
|
||||
byte[] encodedXML = testEncoder.encode();
|
||||
|
||||
XMLMessageDecoder decoderXML = new XMLMessageDecoder(encodedXML);
|
||||
decoderXML.decode();
|
||||
|
||||
|
||||
Assert.assertEquals((byte)1, decoderXML.getMessageVersionNumber());
|
||||
Assert.assertEquals((short)1, decoderXML.getAckNumber());
|
||||
Assert.assertEquals(time, decoderXML.getTimeStamp());
|
||||
Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType());
|
||||
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
||||
Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength());
|
||||
|
||||
}catch (IOException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package network;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
/**
|
||||
* Created by hba56 on 19/04/17.
|
||||
*/
|
||||
public class XMLMessageEncoderTest {
|
||||
@Test
|
||||
public void getByteArrayTest(){
|
||||
StringBuilder xmlString;
|
||||
try{
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(
|
||||
this.getClass().getResourceAsStream(("../../raceXML/Regatta.xml"))));
|
||||
String line;
|
||||
xmlString = new StringBuilder();
|
||||
while((line=br.readLine())!= null){
|
||||
xmlString.append(line.trim());
|
||||
}
|
||||
XMLMessageEncoder testEncoder = new XMLMessageEncoder((short)1, System.currentTimeMillis(), (byte)7, (short)1, (short)xmlString.length(), xmlString.toString());
|
||||
|
||||
byte[] encodedXML = testEncoder.encode();
|
||||
|
||||
//1 + 2 + 6 + 1 + 2 + 2 + 374
|
||||
Assert.assertEquals(388, encodedXML.length);
|
||||
}catch (IOException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getByteArrayNullTest(){
|
||||
StringBuilder xmlString;
|
||||
try{
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(
|
||||
this.getClass().getResourceAsStream(("../../raceXML/Regatta.xml"))));
|
||||
String line;
|
||||
xmlString = new StringBuilder();
|
||||
while((line=br.readLine())!= null){
|
||||
xmlString.append(line.trim());
|
||||
}
|
||||
XMLMessageEncoder testEncoder = new XMLMessageEncoder((short)1, System.currentTimeMillis(), (byte)7, (short)1, (short)1, xmlString.toString());
|
||||
|
||||
byte[] encodedXML = testEncoder.encode();
|
||||
|
||||
Assert.assertEquals(null, encodedXML);
|
||||
}catch (IOException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
//package seng302.Mock;
|
||||
//
|
||||
//import org.junit.Before;
|
||||
//import org.junit.Test;
|
||||
//
|
||||
//import java.util.HashMap;
|
||||
//import java.util.Map;
|
||||
//
|
||||
//import static org.junit.Assert.assertEquals;
|
||||
//
|
||||
///**
|
||||
// * Created by jjg64 on 21/04/17.
|
||||
// */
|
||||
//public class BoatsXMLTest {
|
||||
// private BoatXMLReader boatXMLReader;
|
||||
//
|
||||
// @Before
|
||||
// public void setup() {
|
||||
// try {
|
||||
// boatXMLReader = new BoatXMLReader("mockXML/boatXML/boatTest.xml", false);
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// //fail("Cannot find mockXML/raceXML/raceTest.xml in the resources folder");
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void testInvalidParticipant() {
|
||||
// Map<Integer, StreamedBoat> inputParticipants = new HashMap<>();
|
||||
// inputParticipants.put(420, new StreamedBoat(420));
|
||||
// boatXMLReader.setParticipants(inputParticipants);
|
||||
// boatXMLReader.read();
|
||||
// assertEquals(boatXMLReader.getBoats().size(), 0);
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void testValidParticipant() {
|
||||
// Map<Integer, StreamedBoat> inputParticipants = new HashMap<>();
|
||||
// inputParticipants.put(101, new StreamedBoat(101));
|
||||
// boatXMLReader.setParticipants(inputParticipants);
|
||||
// boatXMLReader.read();
|
||||
// assertEquals(boatXMLReader.getBoats().size(), 1);
|
||||
// StreamedBoat boat = (StreamedBoat) boatXMLReader.getBoats().get(0);
|
||||
// assertEquals(boat.getSourceID(), 101);
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@@ -0,0 +1,26 @@
|
||||
//package seng302.Mock;
|
||||
//
|
||||
//import org.junit.Test;
|
||||
//import org.xml.sax.SAXException;
|
||||
//
|
||||
//import javax.xml.parsers.ParserConfigurationException;
|
||||
//import java.io.IOException;
|
||||
//import java.text.ParseException;
|
||||
//
|
||||
///**
|
||||
// * Created by jjg64 on 1/05/17.
|
||||
// */
|
||||
//public class FailBoatXMLTest {
|
||||
// private final String path = "mockXML/boatXML/";
|
||||
//
|
||||
// @Test(expected = NumberFormatException.class)
|
||||
// public void invalidSourceID() throws SAXException, ParserConfigurationException, ParseException, IOException {
|
||||
// new BoatXMLReader(path + "invalidSourceID.xml");
|
||||
// }
|
||||
//
|
||||
// @Test(expected = NullPointerException.class)
|
||||
// public void insufficientInformation() throws SAXException, ParserConfigurationException, ParseException, IOException {
|
||||
// new BoatXMLReader(path + "insufficientInformation.xml");
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@@ -0,0 +1,5 @@
|
||||
package shared.dataInput;
|
||||
|
||||
public class RaceXMLReaderTest {
|
||||
//TODO
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package shared.dataInput;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
/**
|
||||
* Created by jjg64 on 19/04/17.
|
||||
* Tests RegattaXMLReader
|
||||
*/
|
||||
public class RegattaXMLReaderTest {
|
||||
private RegattaXMLReader regatta;
|
||||
|
||||
@Before
|
||||
public void findFile() {
|
||||
try {
|
||||
regatta = new RegattaXMLReader("mockXML/regattaXML/regattaTest.xml");
|
||||
} catch (Exception e) {
|
||||
fail("Cannot find mockXML/regattaXML/regattaTest.xml in the resources folder");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void correctValuesTest() {
|
||||
assertEquals(regatta.getRegattaID(), 3);
|
||||
assertEquals(regatta.getRegattaName(), "New Zealand Test");
|
||||
assertEquals(regatta.getCourseName(), "North Head");
|
||||
assertEquals(regatta.getCentralLatitude(), -36.82791529, 0.00000001);
|
||||
assertEquals(regatta.getCentralLongitude(), 174.81218919, 0.00000001);
|
||||
assertEquals(regatta.getCentralAltitude(), 0.00, 0.00000001);
|
||||
assertEquals(regatta.getUtcOffset(), 12.0, 0.001);
|
||||
assertEquals(regatta.getMagneticVariation(), 14.1, 0.001);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package shared.dataInput;
|
||||
|
||||
public class XMLReaderTest {
|
||||
//TODO
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package visualiser.model;
|
||||
|
||||
public class GraphCoordinateTest {
|
||||
//TODO
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package visualiser.model;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* Created by connortaylorbrown on 3/05/17.
|
||||
*/
|
||||
public class RaceConnectionTest {
|
||||
private RaceConnection onlineConnection;
|
||||
private RaceConnection offlineConnection;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
onlineConnection = new RaceConnection("livedata.americascup.com", 4941);
|
||||
offlineConnection = new RaceConnection("localhost", 4942);
|
||||
}
|
||||
|
||||
/**
|
||||
* Host is not online for CI, ignore when committing.
|
||||
*/
|
||||
@Test
|
||||
@Ignore
|
||||
public void onlineConnectionStatusReady() {
|
||||
assertTrue(onlineConnection.check());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void offlineConnectionStatusOffline() {
|
||||
assertFalse(offlineConnection.check());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package visualiser.model;
|
||||
|
||||
public class RaceMapTest {
|
||||
//TODO
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package visualiser.model;
|
||||
|
||||
public class TrackPointTest {
|
||||
//TODO
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package visualiser.model;
|
||||
|
||||
public class VisualiserBoatTest {
|
||||
//TODO
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
//package visualiser.model;
|
||||
//
|
||||
//
|
||||
//import org.junit.Before;
|
||||
//import org.junit.Test;
|
||||
//import shared.dataInput.RaceXMLReader;
|
||||
//import shared.dataInput.XMLReader;
|
||||
//import shared.exceptions.InvalidRaceDataException;
|
||||
//import shared.model.GPSCoordinate;
|
||||
//
|
||||
//import java.nio.charset.StandardCharsets;
|
||||
//import java.util.List;
|
||||
//
|
||||
//import static org.junit.Assert.assertEquals;
|
||||
//import static org.junit.Assert.fail;
|
||||
//
|
||||
///**
|
||||
// * Tests only work on the current version of mockXML/raceXML/raceTest.xml
|
||||
// */
|
||||
//public class VisualiserRaceTest {
|
||||
// private RaceXMLReader streamedCourseXMLReader;
|
||||
// private List<GPSCoordinate> boundary;
|
||||
//
|
||||
// @Before
|
||||
// public void setup() {
|
||||
// try {
|
||||
// streamedCourseXMLReader = new RaceXMLReader(XMLReader.readXMLFileToString("mockXML/raceXML/raceTest.xml", StandardCharsets.UTF_8));
|
||||
// boundary = streamedCourseXMLReader.getBoundary();
|
||||
// } catch (InvalidRaceDataException e) {
|
||||
// e.printStackTrace();
|
||||
// fail("Cannot find mockXML/raceXML/raceTest.xml in the resources folder");
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void testAllBoundaryPointsRead() {
|
||||
// assertEquals(boundary.size(), 10);
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void testBoundaryPointData() {
|
||||
// // First point
|
||||
// assertEquals(boundary.get(0).getLatitude(), -36.8325, 1e-6);
|
||||
// assertEquals(boundary.get(0).getLongitude(), 174.8325, 1e-6);
|
||||
//
|
||||
// // Last point
|
||||
// assertEquals(boundary.get(boundary.size() - 1).getLatitude(), -36.83417, 1e-6);
|
||||
// assertEquals(boundary.get(boundary.size() - 1).getLongitude(), 174.84767, 1e-6);
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void testMapEdges() {
|
||||
// double maxLatitude = streamedCourseXMLReader.getMapBottomRight().getLatitude() - streamedCourseXMLReader.getPadding();
|
||||
// double maxLongitude = streamedCourseXMLReader.getMapBottomRight().getLongitude() - streamedCourseXMLReader.getPadding();
|
||||
// double minLatitude = streamedCourseXMLReader.getMapTopLeft().getLatitude() - streamedCourseXMLReader.getPadding();
|
||||
// double minLongitude = streamedCourseXMLReader.getMapTopLeft().getLongitude() - streamedCourseXMLReader.getPadding();
|
||||
//
|
||||
// assertEquals(maxLatitude, -36.81033, 1e-6);
|
||||
// assertEquals(maxLongitude, 174.88217, 1e-6);
|
||||
// assertEquals(minLatitude, -36.83417, 1e-6);
|
||||
// assertEquals(minLongitude, 174.81983, 1e-6);
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void testRaceSettings() {
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void correctLegSequence() {
|
||||
// List<Leg> legs = streamedCourseXMLReader.getLegs();
|
||||
// String[] expectedNames = {
|
||||
// "StartLine",
|
||||
// "M1",
|
||||
// "M2",
|
||||
// "Gate"
|
||||
// };
|
||||
// for(int i = 0; i < legs.size(); i++) {
|
||||
// assertEquals(expectedNames[i], legs.get(i).getName());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * raceTest.xml is not compliant with this test. Markers are positioned far out of bounds.
|
||||
// */
|
||||
// @Test
|
||||
// @Ignore
|
||||
// public void markersWithinRaceBoundaries() {
|
||||
// GPSCoordinate topLeft = streamedCourseXMLReader.getMapTopLeft();
|
||||
// GPSCoordinate bottomRight = streamedCourseXMLReader.getMapBottomRight();
|
||||
//
|
||||
// for(Marker compoundMark : streamedCourseXMLReader.getMarkers()) {
|
||||
// GPSCoordinate centre = compoundMark.getAverageGPSCoordinate();
|
||||
// assertTrue(centre.getLatitude() < bottomRight.getLatitude());
|
||||
// assertTrue(centre.getLatitude() > topLeft.getLatitude());
|
||||
// assertTrue(centre.getLongitude() > bottomRight.getLongitude());
|
||||
// assertTrue(centre.getLongitude() < topLeft.getLongitude());
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<RegattaConfig>
|
||||
<RegattaID>1</RegattaID>
|
||||
<RegattaName>Seng302 Mock Test</RegattaName>
|
||||
<CourseName>Bermuda AC35</CourseName>
|
||||
<CentralLatitude>-32.296577</CentralLatitude>
|
||||
<CentralLongitude>64.854304</CentralLongitude>
|
||||
<CentralAltitude>0.00</CentralAltitude>
|
||||
<UtcOffset>-4</UtcOffset>
|
||||
<MagneticVariation>-14.78</MagneticVariation>
|
||||
</RegattaConfig>
|
||||
@@ -0,0 +1,251 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<BoatConfig>
|
||||
|
||||
<Modified>2012-05-17T07:49:40+0200</Modified>
|
||||
|
||||
<Version>12</Version>
|
||||
|
||||
<Settings>
|
||||
|
||||
<RaceBoatType Type="AC45"/>
|
||||
|
||||
<BoatDimension BoatLength="14.019" HullLength="13.449"/>
|
||||
|
||||
<ZoneSize MarkZoneSize="40.347" CourseZoneSize="40.347"/>
|
||||
|
||||
<ZoneLimits Limit1="200" Limit2="100" Limit3="40.347" Limit4="0" Limit5="-100"/>
|
||||
|
||||
</Settings>
|
||||
|
||||
<BoatShapes>
|
||||
|
||||
<BoatShape ShapeID="0">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-2.659"/>
|
||||
|
||||
<Vtx Seq="2" Y="18.359" X="-2.659"/>
|
||||
|
||||
<Vtx Seq="3" Y="18.359" X="2.659"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="2.659"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="1">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-1.278"/>
|
||||
|
||||
<Vtx Seq="2" Y="8.876" X="-1.278"/>
|
||||
|
||||
<Vtx Seq="3" Y="8.876" X="1.278"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="1.278"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="2">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-1.1"/>
|
||||
|
||||
<Vtx Seq="2" Y="8.3" X="-1.1"/>
|
||||
|
||||
<Vtx Seq="3" Y="8.3" X="1.1"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="1.1"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="3">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-0.75"/>
|
||||
|
||||
<Vtx Seq="2" Y="3" X="-0.75"/>
|
||||
|
||||
<Vtx Seq="3" Y="3" X="0.75"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="0.75"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="4">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-3.46"/>
|
||||
|
||||
<Vtx Seq="2" Y="13.449" X="-3.46"/>
|
||||
|
||||
<Vtx Seq="3" Y="14.019" X="0"/>
|
||||
|
||||
<Vtx Seq="4" Y="13.449" X="3.46"/>
|
||||
|
||||
<Vtx Seq="5" Y="0" X="3.46"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
<Catamaran>
|
||||
|
||||
<Vtx Seq="1" Y="1.769" X="-2.752"/>
|
||||
|
||||
<Vtx Seq="2" Y="0" X="-2.813"/>
|
||||
|
||||
<Vtx Seq="3" Y="0" X="-3.34"/>
|
||||
|
||||
<Vtx Seq="4" Y="5.351" X="-3.46"/>
|
||||
|
||||
<Vtx Seq="5" Y="10.544" X="-3.387"/>
|
||||
|
||||
<Vtx Seq="6" Y="13.449" X="-3.075"/>
|
||||
|
||||
<Vtx Seq="7" Y="10.851" X="-2.793"/>
|
||||
|
||||
<Vtx Seq="8" Y="6.669" X="-2.699"/>
|
||||
|
||||
<Vtx Seq="9" Y="6.669" X="2.699"/>
|
||||
|
||||
<Vtx Seq="10" Y="10.851" X="2.793"/>
|
||||
|
||||
<Vtx Seq="11" Y="13.449" X="3.075"/>
|
||||
|
||||
<Vtx Seq="12" Y="10.544" X="3.387"/>
|
||||
|
||||
<Vtx Seq="13" Y="5.351" X="3.46"/>
|
||||
|
||||
<Vtx Seq="14" Y="0" X="3.34"/>
|
||||
|
||||
<Vtx Seq="15" Y="0" X="2.813"/>
|
||||
|
||||
<Vtx Seq="16" Y="1.769" X="2.752"/>
|
||||
|
||||
</Catamaran>
|
||||
|
||||
<Bowsprit>
|
||||
|
||||
<Vtx Seq="1" Y="6.669" X="-0.2"/>
|
||||
|
||||
<Vtx Seq="2" Y="11.377" X="-0.2"/>
|
||||
|
||||
<Vtx Seq="3" Y="14.019" X="0"/>
|
||||
|
||||
<Vtx Seq="4" Y="11.377" X="0.2"/>
|
||||
|
||||
<Vtx Seq="5" Y="6.669" X="0.2"/>
|
||||
|
||||
</Bowsprit>
|
||||
|
||||
<Trampoline>
|
||||
|
||||
<Vtx Seq="1" Y="2" X="-2.699"/>
|
||||
|
||||
<Vtx Seq="2" Y="6.438" X="-2.699"/>
|
||||
|
||||
<Vtx Seq="3" Y="6.438" X="2.699"/>
|
||||
|
||||
<Vtx Seq="4" Y="2" X="2.699"/>
|
||||
|
||||
</Trampoline>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="5"/>
|
||||
|
||||
</BoatShapes>
|
||||
|
||||
<Boats>
|
||||
|
||||
<Boat Type="RC" SourceID="121" ShapeID="0" HullNum="RG01" StoweName="PRO" ShortName="PRO"
|
||||
|
||||
BoatName="Regardless">
|
||||
|
||||
<GPSposition Z="6.840" Y="7.800" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="7.800" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="122" ShapeID="1" HullNum="LC05" StoweName="CON" ShortName="Constellation"
|
||||
|
||||
BoatName="Constellation">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="123" ShapeID="1" HullNum="LC04" StoweName="MIS" ShortName="Mischief"
|
||||
|
||||
BoatName="Mischief">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="124" ShapeID="1" HullNum="LC03" ShortName="Atalanta" BoatName="Atalanta">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat SourceID="125" ShapeID="1" StoweName="VOL" HullNum="LC01" ShortName="Volunteer"
|
||||
|
||||
BoatName="Volunteer">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="126" ShapeID="1" HullNum="LC13" StoweName="MS2" ShortName="Defender"
|
||||
|
||||
BoatName="Defender">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="128" ShapeID="1" HullNum="LC01" ShortName="Shamrock" BoatName="Shamrock">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Yacht" SourceID="101" ShapeID="4" HullNum="AC4501" StoweName="KOR" ShortName="TEAM KOREA"
|
||||
|
||||
BoatName="TEAM KOREA" Country="KOR">
|
||||
|
||||
<GPSposition Z="1.738" Y="0.625" X="0.001"/>
|
||||
|
||||
<MastTop Z="21.496" Y="4.233" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
</Boats>
|
||||
|
||||
</BoatConfig>
|
||||
+249
@@ -0,0 +1,249 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<BoatConfig>
|
||||
|
||||
<Modified>2012-05-17T07:49:40+0200</Modified>
|
||||
|
||||
<Version>12</Version>
|
||||
|
||||
<Settings>
|
||||
|
||||
<RaceBoatType Type="AC45"/>
|
||||
|
||||
<BoatDimension BoatLength="14.019" HullLength="13.449"/>
|
||||
|
||||
<ZoneSize MarkZoneSize="40.347" CourseZoneSize="40.347"/>
|
||||
|
||||
<ZoneLimits Limit1="200" Limit2="100" Limit3="40.347" Limit4="0" Limit5="-100"/>
|
||||
|
||||
</Settings>
|
||||
|
||||
<BoatShapes>
|
||||
|
||||
<BoatShape ShapeID="0">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-2.659"/>
|
||||
|
||||
<Vtx Seq="2" Y="18.359" X="-2.659"/>
|
||||
|
||||
<Vtx Seq="3" Y="18.359" X="2.659"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="2.659"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="1">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-1.278"/>
|
||||
|
||||
<Vtx Seq="2" Y="8.876" X="-1.278"/>
|
||||
|
||||
<Vtx Seq="3" Y="8.876" X="1.278"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="1.278"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="2">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-1.1"/>
|
||||
|
||||
<Vtx Seq="2" Y="8.3" X="-1.1"/>
|
||||
|
||||
<Vtx Seq="3" Y="8.3" X="1.1"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="1.1"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="3">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-0.75"/>
|
||||
|
||||
<Vtx Seq="2" Y="3" X="-0.75"/>
|
||||
|
||||
<Vtx Seq="3" Y="3" X="0.75"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="0.75"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="4">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-3.46"/>
|
||||
|
||||
<Vtx Seq="2" Y="13.449" X="-3.46"/>
|
||||
|
||||
<Vtx Seq="3" Y="14.019" X="0"/>
|
||||
|
||||
<Vtx Seq="4" Y="13.449" X="3.46"/>
|
||||
|
||||
<Vtx Seq="5" Y="0" X="3.46"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
<Catamaran>
|
||||
|
||||
<Vtx Seq="1" Y="1.769" X="-2.752"/>
|
||||
|
||||
<Vtx Seq="2" Y="0" X="-2.813"/>
|
||||
|
||||
<Vtx Seq="3" Y="0" X="-3.34"/>
|
||||
|
||||
<Vtx Seq="4" Y="5.351" X="-3.46"/>
|
||||
|
||||
<Vtx Seq="5" Y="10.544" X="-3.387"/>
|
||||
|
||||
<Vtx Seq="6" Y="13.449" X="-3.075"/>
|
||||
|
||||
<Vtx Seq="7" Y="10.851" X="-2.793"/>
|
||||
|
||||
<Vtx Seq="8" Y="6.669" X="-2.699"/>
|
||||
|
||||
<Vtx Seq="9" Y="6.669" X="2.699"/>
|
||||
|
||||
<Vtx Seq="10" Y="10.851" X="2.793"/>
|
||||
|
||||
<Vtx Seq="11" Y="13.449" X="3.075"/>
|
||||
|
||||
<Vtx Seq="12" Y="10.544" X="3.387"/>
|
||||
|
||||
<Vtx Seq="13" Y="5.351" X="3.46"/>
|
||||
|
||||
<Vtx Seq="14" Y="0" X="3.34"/>
|
||||
|
||||
<Vtx Seq="15" Y="0" X="2.813"/>
|
||||
|
||||
<Vtx Seq="16" Y="1.769" X="2.752"/>
|
||||
|
||||
</Catamaran>
|
||||
|
||||
<Bowsprit>
|
||||
|
||||
<Vtx Seq="1" Y="6.669" X="-0.2"/>
|
||||
|
||||
<Vtx Seq="2" Y="11.377" X="-0.2"/>
|
||||
|
||||
<Vtx Seq="3" Y="14.019" X="0"/>
|
||||
|
||||
<Vtx Seq="4" Y="11.377" X="0.2"/>
|
||||
|
||||
<Vtx Seq="5" Y="6.669" X="0.2"/>
|
||||
|
||||
</Bowsprit>
|
||||
|
||||
<Trampoline>
|
||||
|
||||
<Vtx Seq="1" Y="2" X="-2.699"/>
|
||||
|
||||
<Vtx Seq="2" Y="6.438" X="-2.699"/>
|
||||
|
||||
<Vtx Seq="3" Y="6.438" X="2.699"/>
|
||||
|
||||
<Vtx Seq="4" Y="2" X="2.699"/>
|
||||
|
||||
</Trampoline>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="5"/>
|
||||
|
||||
</BoatShapes>
|
||||
|
||||
<Boats>
|
||||
|
||||
<Boat Type="RC" SourceID="121" ShapeID="0" HullNum="RG01" StoweName="PRO" ShortName="PRO"
|
||||
|
||||
BoatName="Regardless">
|
||||
|
||||
<GPSposition Z="6.840" Y="7.800" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="7.800" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="122" ShapeID="1" HullNum="LC05" StoweName="CON" ShortName="Constellation"
|
||||
|
||||
BoatName="Constellation">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="123" ShapeID="1" HullNum="LC04" StoweName="MIS" ShortName="Mischief"
|
||||
|
||||
BoatName="Mischief">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="124" ShapeID="1" HullNum="LC03" ShortName="Atalanta" BoatName="Atalanta">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat SourceID="125" ShapeID="1" StoweName="VOL" HullNum="LC01" ShortName="Volunteer"
|
||||
|
||||
BoatName="Volunteer">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="126" ShapeID="1" HullNum="LC13" StoweName="MS2" ShortName="Defender"
|
||||
|
||||
BoatName="Defender">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="128" ShapeID="1" HullNum="LC01" ShortName="Shamrock" BoatName="Shamrock">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Yacht" SourceID="101">
|
||||
|
||||
<GPSposition Z="1.738" Y="0.625" X="0.001"/>
|
||||
|
||||
<MastTop Z="21.496" Y="4.233" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
</Boats>
|
||||
|
||||
</BoatConfig>
|
||||
@@ -0,0 +1,251 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<BoatConfig>
|
||||
|
||||
<Modified>2012-05-17T07:49:40+0200</Modified>
|
||||
|
||||
<Version>12</Version>
|
||||
|
||||
<Settings>
|
||||
|
||||
<RaceBoatType Type="AC45"/>
|
||||
|
||||
<BoatDimension BoatLength="14.019" HullLength="13.449"/>
|
||||
|
||||
<ZoneSize MarkZoneSize="40.347" CourseZoneSize="40.347"/>
|
||||
|
||||
<ZoneLimits Limit1="200" Limit2="100" Limit3="40.347" Limit4="0" Limit5="-100"/>
|
||||
|
||||
</Settings>
|
||||
|
||||
<BoatShapes>
|
||||
|
||||
<BoatShape ShapeID="0">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-2.659"/>
|
||||
|
||||
<Vtx Seq="2" Y="18.359" X="-2.659"/>
|
||||
|
||||
<Vtx Seq="3" Y="18.359" X="2.659"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="2.659"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="1">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-1.278"/>
|
||||
|
||||
<Vtx Seq="2" Y="8.876" X="-1.278"/>
|
||||
|
||||
<Vtx Seq="3" Y="8.876" X="1.278"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="1.278"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="2">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-1.1"/>
|
||||
|
||||
<Vtx Seq="2" Y="8.3" X="-1.1"/>
|
||||
|
||||
<Vtx Seq="3" Y="8.3" X="1.1"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="1.1"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="3">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-0.75"/>
|
||||
|
||||
<Vtx Seq="2" Y="3" X="-0.75"/>
|
||||
|
||||
<Vtx Seq="3" Y="3" X="0.75"/>
|
||||
|
||||
<Vtx Seq="4" Y="0" X="0.75"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="4">
|
||||
|
||||
<Vertices>
|
||||
|
||||
<Vtx Seq="1" Y="0" X="-3.46"/>
|
||||
|
||||
<Vtx Seq="2" Y="13.449" X="-3.46"/>
|
||||
|
||||
<Vtx Seq="3" Y="14.019" X="0"/>
|
||||
|
||||
<Vtx Seq="4" Y="13.449" X="3.46"/>
|
||||
|
||||
<Vtx Seq="5" Y="0" X="3.46"/>
|
||||
|
||||
</Vertices>
|
||||
|
||||
<Catamaran>
|
||||
|
||||
<Vtx Seq="1" Y="1.769" X="-2.752"/>
|
||||
|
||||
<Vtx Seq="2" Y="0" X="-2.813"/>
|
||||
|
||||
<Vtx Seq="3" Y="0" X="-3.34"/>
|
||||
|
||||
<Vtx Seq="4" Y="5.351" X="-3.46"/>
|
||||
|
||||
<Vtx Seq="5" Y="10.544" X="-3.387"/>
|
||||
|
||||
<Vtx Seq="6" Y="13.449" X="-3.075"/>
|
||||
|
||||
<Vtx Seq="7" Y="10.851" X="-2.793"/>
|
||||
|
||||
<Vtx Seq="8" Y="6.669" X="-2.699"/>
|
||||
|
||||
<Vtx Seq="9" Y="6.669" X="2.699"/>
|
||||
|
||||
<Vtx Seq="10" Y="10.851" X="2.793"/>
|
||||
|
||||
<Vtx Seq="11" Y="13.449" X="3.075"/>
|
||||
|
||||
<Vtx Seq="12" Y="10.544" X="3.387"/>
|
||||
|
||||
<Vtx Seq="13" Y="5.351" X="3.46"/>
|
||||
|
||||
<Vtx Seq="14" Y="0" X="3.34"/>
|
||||
|
||||
<Vtx Seq="15" Y="0" X="2.813"/>
|
||||
|
||||
<Vtx Seq="16" Y="1.769" X="2.752"/>
|
||||
|
||||
</Catamaran>
|
||||
|
||||
<Bowsprit>
|
||||
|
||||
<Vtx Seq="1" Y="6.669" X="-0.2"/>
|
||||
|
||||
<Vtx Seq="2" Y="11.377" X="-0.2"/>
|
||||
|
||||
<Vtx Seq="3" Y="14.019" X="0"/>
|
||||
|
||||
<Vtx Seq="4" Y="11.377" X="0.2"/>
|
||||
|
||||
<Vtx Seq="5" Y="6.669" X="0.2"/>
|
||||
|
||||
</Bowsprit>
|
||||
|
||||
<Trampoline>
|
||||
|
||||
<Vtx Seq="1" Y="2" X="-2.699"/>
|
||||
|
||||
<Vtx Seq="2" Y="6.438" X="-2.699"/>
|
||||
|
||||
<Vtx Seq="3" Y="6.438" X="2.699"/>
|
||||
|
||||
<Vtx Seq="4" Y="2" X="2.699"/>
|
||||
|
||||
</Trampoline>
|
||||
|
||||
</BoatShape>
|
||||
|
||||
<BoatShape ShapeID="5"/>
|
||||
|
||||
</BoatShapes>
|
||||
|
||||
<Boats>
|
||||
|
||||
<Boat Type="RC" SourceID="afdhg" ShapeID="0" HullNum="RG01" StoweName="PRO" ShortName="PRO"
|
||||
|
||||
BoatName="Regardless">
|
||||
|
||||
<GPSposition Z="6.840" Y="7.800" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="7.800" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="122" ShapeID="1" HullNum="LC05" StoweName="CON" ShortName="Constellation"
|
||||
|
||||
BoatName="Constellation">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="123" ShapeID="1" HullNum="LC04" StoweName="MIS" ShortName="Mischief"
|
||||
|
||||
BoatName="Mischief">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="124" ShapeID="1" HullNum="LC03" ShortName="Atalanta" BoatName="Atalanta">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat SourceID="125" ShapeID="1" StoweName="VOL" HullNum="LC01" ShortName="Volunteer"
|
||||
|
||||
BoatName="Volunteer">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="126" ShapeID="1" HullNum="LC13" StoweName="MS2" ShortName="Defender"
|
||||
|
||||
BoatName="Defender">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Mark" SourceID="128" ShapeID="1" HullNum="LC01" ShortName="Shamrock" BoatName="Shamrock">
|
||||
|
||||
<GPSposition Z="5.334" Y="3.804" X="0.000"/>
|
||||
|
||||
<FlagPosition Z="0.000" Y="3.426" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
<Boat Type="Yacht" SourceID="101" ShapeID="4" HullNum="AC4501" StoweName="KOR" ShortName="TEAM KOREA"
|
||||
|
||||
BoatName="TEAM KOREA" Country="KOR">
|
||||
|
||||
<GPSposition Z="1.738" Y="0.625" X="0.001"/>
|
||||
|
||||
<MastTop Z="21.496" Y="4.233" X="0.000"/>
|
||||
|
||||
</Boat>
|
||||
|
||||
</Boats>
|
||||
|
||||
</BoatConfig>
|
||||
@@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<Race>
|
||||
|
||||
<RaceID>11080703</RaceID>
|
||||
|
||||
<RaceType>Match</RaceType>
|
||||
|
||||
<CreationTimeDate>2011-08-06T13:25:00-0000</CreationTimeDate>
|
||||
|
||||
<RaceStartTime Time="2011-08-06T13:30:00-0700" Postpone="false"/>
|
||||
|
||||
<Participants>
|
||||
|
||||
<Yacht SourceID="107" Entry="Port"/>
|
||||
|
||||
<Yacht SourceID="108" Entry="Stbd"/>
|
||||
|
||||
</Participants>
|
||||
|
||||
<Course>
|
||||
|
||||
<CompoundMark CompoundMarkID="1" Name="StartLine">
|
||||
|
||||
<Mark SeqID="1" Name="PRO" TargetLat="-36.83" TargetLng="174.83" SourceID="101"/>
|
||||
|
||||
<Mark SeqID="2" Name="PIN" TargetLat="-36.84" TargetLng="174.81" SourceID="102"/>
|
||||
|
||||
</CompoundMark>
|
||||
|
||||
<CompoundMark CompoundMarkID="2" Name="M1">
|
||||
|
||||
<Mark Name="M1" TargetLat="-36.63566590" TargetLng="174.88543944" SourceID="103"/>
|
||||
|
||||
</CompoundMark>
|
||||
|
||||
<CompoundMark CompoundMarkID="3" Name="M2">
|
||||
|
||||
<Mark Name="M2" TargetLat="-36.83" TargetLng="174.80" SourceID="102"/>
|
||||
|
||||
</CompoundMark>
|
||||
|
||||
<CompoundMark CompoundMarkID="4" Name="Gate">
|
||||
|
||||
<Mark SeqID="1" Name="G1" TargetLat="-36.63566590" TargetLng="174.97205159" SourceID="104"/>
|
||||
|
||||
<Mark SeqID="2" Name="G2" TargetLat="-36.64566590" TargetLng="174.98205159" SourceID="105"/>
|
||||
|
||||
</CompoundMark>
|
||||
|
||||
</Course>
|
||||
|
||||
<CompoundMarkSequence>
|
||||
|
||||
<Corner SeqID="1" CompoundMarkID="1" Rounding="SP" ZoneSize="3"/>
|
||||
|
||||
<Corner SeqID="2" CompoundMarkID="2" Rounding="Port" ZoneSize="3"/>
|
||||
|
||||
<Corner SeqID="3" CompoundMarkID="3" Rounding="Stbd" ZoneSize="6"/>
|
||||
|
||||
<Corner SeqID="4" CompoundMarkID="4" Rounding="PS" ZoneSize="6"/>
|
||||
|
||||
<Corner SeqID="5" CompoundMarkID="1" Rounding="SP" ZoneSize="3"/>
|
||||
|
||||
</CompoundMarkSequence>
|
||||
|
||||
<CourseLimit>
|
||||
|
||||
<Limit SeqID="1" Lat="-36.8325" Lon="174.8325"/>
|
||||
|
||||
<Limit SeqID="2" Lat="-36.82883" Lon="174.81983"/>
|
||||
|
||||
<Limit SeqID="3" Lat="-36.82067" Lon="174.81983"/>
|
||||
|
||||
<Limit SeqID="4" Lat="-36.811" Lon="174.8265"/>
|
||||
|
||||
<Limit SeqID="5" Lat="-36.81033" Lon="174.83833"/>
|
||||
|
||||
<Limit SeqID="6" Lat="-36.81533" Lon="174.8525"/>
|
||||
|
||||
<Limit SeqID="7" Lat="-36.81533" Lon="174.86733"/>
|
||||
|
||||
<Limit SeqID="8" Lat="-36.81633" Lon="174.88217"/>
|
||||
|
||||
<Limit SeqID="9" Lat="-36.83383" Lon="174.87117"/>
|
||||
|
||||
<Limit SeqID="10" Lat="-36.83417" Lon="174.84767"/>
|
||||
|
||||
</CourseLimit>
|
||||
|
||||
</Race>
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RegattaConfig>
|
||||
|
||||
<RegattaID>3</RegattaID>
|
||||
|
||||
<RegattaName>New Zealand Test</RegattaName>
|
||||
|
||||
<CourseName>North Head</CourseName>
|
||||
|
||||
<CentralLatitude>-36.82791529</CentralLatitude>
|
||||
|
||||
<CentralLongitude>174.81218919</CentralLongitude>
|
||||
|
||||
<CentralAltitude>0.00</CentralAltitude>
|
||||
|
||||
<UtcOffset>12</UtcOffset>
|
||||
|
||||
<MagneticVariation>14.1</MagneticVariation>
|
||||
|
||||
</RegattaConfig>
|
||||
@@ -0,0 +1,268 @@
|
||||
<race>
|
||||
<boats>
|
||||
<boat>
|
||||
<name>ORACLE TEAM USA</name>
|
||||
<speed>20</speed>
|
||||
<abbr>USA</abbr>
|
||||
<colour>BLUEVIOLET</colour>
|
||||
</boat>
|
||||
<boat>
|
||||
<name>Land Rover BAR</name>
|
||||
<speed>30</speed>
|
||||
<abbr>GBR</abbr>
|
||||
<colour>BLACK</colour>
|
||||
</boat>
|
||||
<boat>
|
||||
<name>SoftBank Team Japan</name>
|
||||
<speed>25</speed>
|
||||
<abbr>JPN</abbr>
|
||||
<colour>RED</colour>
|
||||
</boat>
|
||||
<boat>
|
||||
<name>Groupama Team France</name>
|
||||
<speed>20</speed>
|
||||
<abbr>FRA</abbr>
|
||||
<colour>ORANGE</colour>
|
||||
</boat>
|
||||
<boat>
|
||||
<name>Artemis Racing</name>
|
||||
<speed>29</speed>
|
||||
<abbr>SWE</abbr>
|
||||
<colour>DARKOLIVEGREEN</colour>
|
||||
</boat>
|
||||
<boat>
|
||||
<name>Emirates Team New Zealand</name>
|
||||
<speed>62</speed>
|
||||
<abbr>NZL</abbr>
|
||||
<colour>LIMEGREEN</colour>
|
||||
</boat>
|
||||
</boats>
|
||||
<legs>
|
||||
<leg>
|
||||
<name>Start to Mark 1</name>
|
||||
<start>
|
||||
<compoundMark>
|
||||
<coordinate>
|
||||
<latitude>32.296577</latitude>
|
||||
<longitude>-64.854304</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.293771</latitude>
|
||||
<longitude>-64.855242</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
</start>
|
||||
<finish>
|
||||
<compoundMark>
|
||||
<coordinate>
|
||||
<latitude>32.293039</latitude>
|
||||
<longitude>-64.843983</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
</finish>
|
||||
</leg>
|
||||
<leg>
|
||||
<name>Mark 1 to Leeward Gate</name>
|
||||
<start>
|
||||
<compoundMark>
|
||||
<coordinate>
|
||||
<latitude>32.293039</latitude>
|
||||
<longitude>-64.843983</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
</start>
|
||||
<finish>
|
||||
<compoundMark>
|
||||
<coordinate>
|
||||
<latitude>32.309693</latitude>
|
||||
<longitude>-64.835249</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.308046</latitude>
|
||||
<longitude>-64.831785</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
</finish>
|
||||
</leg>
|
||||
<leg>
|
||||
<name>Leeward Gate to Windward Gate</name>
|
||||
<start>
|
||||
<compoundMark>
|
||||
<coordinate>
|
||||
<latitude>32.309693</latitude>
|
||||
<longitude>-64.835249</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.308046</latitude>
|
||||
<longitude>-64.831785</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
</start>
|
||||
<finish>
|
||||
<compoundMark>
|
||||
<coordinate>
|
||||
<latitude>32.284680</latitude>
|
||||
<longitude>-64.850045</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.280164</latitude>
|
||||
<longitude>-64.847591</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
</finish>
|
||||
</leg>
|
||||
<leg>
|
||||
<name>Windward Gate to Leeward Gate</name>
|
||||
<start>
|
||||
<compoundMark>
|
||||
<coordinate>
|
||||
<latitude>32.284680</latitude>
|
||||
<longitude>-64.850045</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.280164</latitude>
|
||||
<longitude>-64.847591</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
</start>
|
||||
<finish>
|
||||
<compoundMark>
|
||||
<coordinate>
|
||||
<latitude>32.309693</latitude>
|
||||
<longitude>-64.835249</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.308046</latitude>
|
||||
<longitude>-64.831785</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
</finish>
|
||||
</leg>
|
||||
<leg>
|
||||
<name>Leeward Gate to Finish</name>
|
||||
<start>
|
||||
<compoundMark>
|
||||
<coordinate>
|
||||
<latitude>32.309693</latitude>
|
||||
<longitude>-64.835249</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.308046</latitude>
|
||||
<longitude>-64.831785</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
</start>
|
||||
<finish>
|
||||
<compoundMark>
|
||||
<coordinate>
|
||||
<latitude>32.317379</latitude>
|
||||
<longitude>-64.839291</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.317257</latitude>
|
||||
<longitude>-64.836260</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
</finish>
|
||||
</leg>
|
||||
</legs>
|
||||
<course>
|
||||
<boundaries>
|
||||
<coordinate>
|
||||
<latitude>32.313922</latitude>
|
||||
<longitude>-64.837168</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.317379</latitude>
|
||||
<longitude>-64.839291</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.317911</latitude>
|
||||
<longitude>-64.836996</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.317257</latitude>
|
||||
<longitude>-64.836260</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.304273</latitude>
|
||||
<longitude>-64.822834</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.279097</latitude>
|
||||
<longitude>-64.841545</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.279604</latitude>
|
||||
<longitude>-64.849871</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.289545</latitude>
|
||||
<longitude>-64.854162</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.290198</latitude>
|
||||
<longitude>-64.858711</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.297164</latitude>
|
||||
<longitude>-64.856394</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.296148</latitude>
|
||||
<longitude>-64.849184</longitude>
|
||||
</coordinate>
|
||||
</boundaries>
|
||||
<compoundMark>
|
||||
<name>Start Line</name>
|
||||
<coordinate>
|
||||
<latitude>32.296577</latitude>
|
||||
<longitude>-64.854304</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.293771</latitude>
|
||||
<longitude>-64.855242</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
<compoundMark>
|
||||
<name>Mark</name>
|
||||
<coordinate>
|
||||
<latitude>32.293039</latitude>
|
||||
<longitude>-64.843983</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
<compoundMark>
|
||||
<name>Windward Gate</name>
|
||||
<coordinate>
|
||||
<latitude>32.284680</latitude>
|
||||
<longitude>-64.850045</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.280164</latitude>
|
||||
<longitude>-64.847591</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
<compoundMark>
|
||||
<name>Leeward Gate</name>
|
||||
<coordinate>
|
||||
<latitude>32.309693</latitude>
|
||||
<longitude>-64.835249</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.308046</latitude>
|
||||
<longitude>-64.831785</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
<compoundMark>
|
||||
<name>Finish Line</name>
|
||||
<coordinate>
|
||||
<latitude>32.317379</latitude>
|
||||
<longitude>-64.839291</longitude>
|
||||
</coordinate>
|
||||
<coordinate>
|
||||
<latitude>32.317257</latitude>
|
||||
<longitude>-64.836260</longitude>
|
||||
</coordinate>
|
||||
</compoundMark>
|
||||
</course>
|
||||
</race>
|
||||
Reference in New Issue
Block a user