mock.app.App now tells mock.app.Event that the xml file strings are XMLFileType.Contents.
Made network.MessageEncoders.RaceVisionByteEncoder methods static (they were effectively static already). shared.dataInput.XMLReader#readXMLFileToString(..) now throws an XMLReaderException if the file cannot be found. visualiser.Controllers.StartController assumed XML messages were resource paths instead of file contents - fixed. Testing: networking tests now work again.
This commit is contained in:
@@ -9,6 +9,7 @@ import org.w3c.dom.Document;
|
|||||||
import org.xml.sax.InputSource;
|
import org.xml.sax.InputSource;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
import shared.dataInput.XMLReader;
|
import shared.dataInput.XMLReader;
|
||||||
|
import shared.enums.XMLFileType;
|
||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
@@ -38,7 +39,7 @@ public class App extends Application {
|
|||||||
String raceXML = XMLReader.readXMLFileToString("mock/mockXML/raceTest.xml", StandardCharsets.UTF_8);
|
String raceXML = XMLReader.readXMLFileToString("mock/mockXML/raceTest.xml", StandardCharsets.UTF_8);
|
||||||
String boatXML = XMLReader.readXMLFileToString("mock/mockXML/boatTest.xml", StandardCharsets.UTF_8);
|
String boatXML = XMLReader.readXMLFileToString("mock/mockXML/boatTest.xml", StandardCharsets.UTF_8);
|
||||||
|
|
||||||
Event raceEvent = new Event(raceXML, regattaXML, boatXML, boatPolars);
|
Event raceEvent = new Event(raceXML, regattaXML, boatXML, XMLFileType.Contents, boatPolars);
|
||||||
raceEvent.start();
|
raceEvent.start();
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -2,11 +2,7 @@ package mock.app;
|
|||||||
|
|
||||||
import mock.model.MockRace;
|
import mock.model.MockRace;
|
||||||
import mock.model.Polars;
|
import mock.model.Polars;
|
||||||
import network.Messages.Enums.MessageType;
|
|
||||||
import network.Messages.Enums.XMLMessageType;
|
|
||||||
import network.Messages.LatestMessages;
|
import network.Messages.LatestMessages;
|
||||||
import network.Messages.XMLMessage;
|
|
||||||
import org.xml.sax.SAXException;
|
|
||||||
import shared.dataInput.*;
|
import shared.dataInput.*;
|
||||||
import shared.enums.XMLFileType;
|
import shared.enums.XMLFileType;
|
||||||
import shared.exceptions.InvalidBoatDataException;
|
import shared.exceptions.InvalidBoatDataException;
|
||||||
@@ -15,9 +11,7 @@ import shared.exceptions.InvalidRegattaDataException;
|
|||||||
import shared.exceptions.XMLReaderException;
|
import shared.exceptions.XMLReaderException;
|
||||||
import shared.model.Constants;
|
import shared.model.Constants;
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.ParseException;
|
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
@@ -30,16 +24,31 @@ public class Event {
|
|||||||
private String raceXML;
|
private String raceXML;
|
||||||
private String regattaXML;
|
private String regattaXML;
|
||||||
private String boatXML;
|
private String boatXML;
|
||||||
|
|
||||||
|
private XMLFileType xmlFileType;
|
||||||
|
|
||||||
private Polars boatPolars;
|
private Polars boatPolars;
|
||||||
|
|
||||||
private MockOutput mockOutput;
|
private MockOutput mockOutput;
|
||||||
private LatestMessages latestMessages;
|
private LatestMessages latestMessages;
|
||||||
|
|
||||||
|
|
||||||
public Event(String raceXML, String regattaXML, String boatXML, Polars boatPolars) {
|
/**
|
||||||
|
* Constructs an event, using various XML files.
|
||||||
|
* @param raceXML The race.xml file.
|
||||||
|
* @param regattaXML The regatta.xml file.
|
||||||
|
* @param boatXML The boat.xml file.
|
||||||
|
* @param type How to read the file - e.g., load as resource.
|
||||||
|
* @param boatPolars
|
||||||
|
*/
|
||||||
|
public Event(String raceXML, String regattaXML, String boatXML, XMLFileType type, Polars boatPolars) {
|
||||||
|
|
||||||
this.raceXML = getRaceXMLAtCurrentTime(raceXML);
|
this.raceXML = getRaceXMLAtCurrentTime(raceXML);
|
||||||
this.boatXML = boatXML;
|
this.boatXML = boatXML;
|
||||||
this.regattaXML = regattaXML;
|
this.regattaXML = regattaXML;
|
||||||
|
|
||||||
|
this.xmlFileType = type;
|
||||||
|
|
||||||
this.boatPolars = boatPolars;
|
this.boatPolars = boatPolars;
|
||||||
|
|
||||||
this.latestMessages = new LatestMessages();
|
this.latestMessages = new LatestMessages();
|
||||||
@@ -55,26 +64,26 @@ public class Event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends the initial race data and then begins race simulation
|
* Sends the initial race data and then begins race simulation.
|
||||||
|
* @throws InvalidRaceDataException Thrown if the race xml file cannot be parsed.
|
||||||
|
* @throws XMLReaderException Thrown if any of the xml files cannot be parsed.
|
||||||
|
* @throws InvalidBoatDataException Thrown if the boat xml file cannot be parsed.
|
||||||
|
* @throws InvalidRegattaDataException Thrown if the regatta xml file cannot be parsed.
|
||||||
*/
|
*/
|
||||||
public void start() {
|
public void start() throws InvalidRaceDataException, XMLReaderException, InvalidBoatDataException, InvalidRegattaDataException {
|
||||||
try {
|
|
||||||
sendXMLs();
|
sendXMLs();
|
||||||
|
|
||||||
//Parse the XML files into data sources.
|
//Parse the XML files into data sources.
|
||||||
RaceDataSource raceDataSource = new RaceXMLReader(this.raceXML, XMLFileType.ResourcePath);
|
RaceDataSource raceDataSource = new RaceXMLReader(this.raceXML, this.xmlFileType);
|
||||||
BoatDataSource boatDataSource = new BoatXMLReader(this.boatXML, XMLFileType.ResourcePath);
|
BoatDataSource boatDataSource = new BoatXMLReader(this.boatXML, this.xmlFileType);
|
||||||
RegattaDataSource regattaDataSource = new RegattaXMLReader(this.regattaXML, XMLFileType.ResourcePath);
|
RegattaDataSource regattaDataSource = new RegattaXMLReader(this.regattaXML, this.xmlFileType);
|
||||||
|
|
||||||
//Create and start race.
|
//Create and start race.
|
||||||
MockRace newRace = new MockRace(boatDataSource, raceDataSource, regattaDataSource, this.latestMessages, this.boatPolars, Constants.RaceTimeScale);
|
MockRace newRace = new MockRace(boatDataSource, raceDataSource, regattaDataSource, this.latestMessages, this.boatPolars, Constants.RaceTimeScale);
|
||||||
|
|
||||||
new Thread(newRace).start();
|
new Thread(newRace).start();
|
||||||
|
|
||||||
} catch (XMLReaderException | InvalidBoatDataException | InvalidRaceDataException | InvalidRegattaDataException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
//TODO if this occurs, we should print and error and abort.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ public class RaceVisionByteEncoder {
|
|||||||
return raceStatusMessage.array();
|
return raceStatusMessage.array();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] displayTextMessage(RaceMessage[] message){
|
public static byte[] displayTextMessage(RaceMessage[] message){
|
||||||
//ByteBuffer result = ByteBuffer.allocate(4 + numLines * 32);
|
//ByteBuffer result = ByteBuffer.allocate(4 + numLines * 32);
|
||||||
int messageVersionNumber = 0b1;//version number
|
int messageVersionNumber = 0b1;//version number
|
||||||
short ackNum = 0;//no clue what this does just a placeholder for 2 bytes.
|
short ackNum = 0;//no clue what this does just a placeholder for 2 bytes.
|
||||||
@@ -125,7 +125,7 @@ public class RaceVisionByteEncoder {
|
|||||||
return result.array();
|
return result.array();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] raceStartStatus(long time, short ack, long startTime, int raceID, char notification){
|
public static byte[] raceStartStatus(long time, short ack, long startTime, int raceID, char notification){
|
||||||
int messageVersion = 0b1;
|
int messageVersion = 0b1;
|
||||||
byte[] timestamp = longToBytes(time, 6);
|
byte[] timestamp = longToBytes(time, 6);
|
||||||
byte[] ackNumber = intToBytes(ack, 2);
|
byte[] ackNumber = intToBytes(ack, 2);
|
||||||
@@ -144,7 +144,7 @@ public class RaceVisionByteEncoder {
|
|||||||
return result.array();
|
return result.array();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] yachtEventCode(long time, short acknowledgeNumber, int raceID, int destSourceID, int incidentID,
|
public static byte[] yachtEventCode(long time, short acknowledgeNumber, int raceID, int destSourceID, int incidentID,
|
||||||
int eventID){
|
int eventID){
|
||||||
int messageVersion = 0b10;
|
int messageVersion = 0b10;
|
||||||
byte[] encodeTime = longToBytes(time, 6);
|
byte[] encodeTime = longToBytes(time, 6);
|
||||||
@@ -165,7 +165,7 @@ public class RaceVisionByteEncoder {
|
|||||||
return result.array();
|
return result.array();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] chatterText(int messageType, String message){
|
public static byte[] chatterText(int messageType, String message){
|
||||||
int messageVersion = 0b1;
|
int messageVersion = 0b1;
|
||||||
byte[] type = intToBytes(messageType, 1);
|
byte[] type = intToBytes(messageType, 1);
|
||||||
byte[] text = message.getBytes();
|
byte[] text = message.getBytes();
|
||||||
@@ -268,7 +268,7 @@ public class RaceVisionByteEncoder {
|
|||||||
return result.array();
|
return result.array();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] markRounding(int time, int ackNumber, int raceID, int sourceID, int boatStatus, int roundingSide, int markType, int markID){
|
public static byte[] markRounding(int time, int ackNumber, int raceID, int sourceID, int boatStatus, int roundingSide, int markType, int markID){
|
||||||
int messageVersionNumber = 0b1;
|
int messageVersionNumber = 0b1;
|
||||||
byte[] byteTime = longToBytes(time, 6);
|
byte[] byteTime = longToBytes(time, 6);
|
||||||
byte[] byteAck = intToBytes(ackNumber, 2);
|
byte[] byteAck = intToBytes(ackNumber, 2);
|
||||||
@@ -292,7 +292,7 @@ public class RaceVisionByteEncoder {
|
|||||||
return result.array();
|
return result.array();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] courseWind(byte windID, ArrayList<CourseWind> courseWinds){
|
public static byte[] courseWind(byte windID, ArrayList<CourseWind> courseWinds){
|
||||||
int messageVersionNumber = 0b1;
|
int messageVersionNumber = 0b1;
|
||||||
byte byteWindID = windID;
|
byte byteWindID = windID;
|
||||||
byte[] loopcount = intToBytes(courseWinds.size(), 1);
|
byte[] loopcount = intToBytes(courseWinds.size(), 1);
|
||||||
@@ -313,7 +313,7 @@ public class RaceVisionByteEncoder {
|
|||||||
return result.array();
|
return result.array();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] averageWind(int time, int rawPeriod, int rawSampleSpeed, int period2, int speed2, int period3, int speed3, int period4, int speed4){
|
public static byte[] averageWind(int time, int rawPeriod, int rawSampleSpeed, int period2, int speed2, int period3, int speed3, int period4, int speed4){
|
||||||
int messageVersionNumber = 0b1;
|
int messageVersionNumber = 0b1;
|
||||||
byte[] byteTime = longToBytes(time,6);
|
byte[] byteTime = longToBytes(time,6);
|
||||||
byte[] byteRawPeriod = intToBytes(rawPeriod, 2);
|
byte[] byteRawPeriod = intToBytes(rawPeriod, 2);
|
||||||
|
|||||||
@@ -30,15 +30,15 @@ public class BoatXMLReader extends XMLReader implements BoatDataSource {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for Boat XML using a file read as a resource.
|
* Constructor for Boat XML using a file.
|
||||||
*
|
*
|
||||||
* @param fileContents Contents of xml file.
|
* @param file The file to read.
|
||||||
* @param type How to read the file - e.g., load as resource.
|
* @param type How to read the file - e.g., load as resource.
|
||||||
* @throws XMLReaderException Thrown if the file cannot be parsed.
|
* @throws XMLReaderException Thrown if the file cannot be parsed.
|
||||||
* @throws InvalidBoatDataException Thrown if the file cannot be parsed correctly.
|
* @throws InvalidBoatDataException Thrown if the file cannot be parsed correctly.
|
||||||
*/
|
*/
|
||||||
public BoatXMLReader(String fileContents, XMLFileType type) throws XMLReaderException, InvalidBoatDataException {
|
public BoatXMLReader(String file, XMLFileType type) throws XMLReaderException, InvalidBoatDataException {
|
||||||
super(fileContents, type);
|
super(file, type);
|
||||||
|
|
||||||
//Attempt to read boat xml file.
|
//Attempt to read boat xml file.
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -83,14 +83,14 @@ public class RaceXMLReader extends XMLReader implements RaceDataSource {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for Streamed Race XML
|
* Constructor for Streamed Race XML
|
||||||
* @param fileContents Contents of xml file.
|
* @param file The file to read.
|
||||||
* @param type How to read the file - e.g., load as resource.
|
* @param type How to read the file - e.g., load as resource.
|
||||||
* @throws XMLReaderException Thrown if an XML reader cannot be constructed for the given file.
|
* @throws XMLReaderException Thrown if an XML reader cannot be constructed for the given file.
|
||||||
* @throws InvalidRaceDataException Thrown if the XML file is invalid in some way.
|
* @throws InvalidRaceDataException Thrown if the XML file is invalid in some way.
|
||||||
*/
|
*/
|
||||||
public RaceXMLReader(String fileContents, XMLFileType type) throws XMLReaderException, InvalidRaceDataException {
|
public RaceXMLReader(String file, XMLFileType type) throws XMLReaderException, InvalidRaceDataException {
|
||||||
|
|
||||||
super(fileContents, type);
|
super(file, type);
|
||||||
|
|
||||||
|
|
||||||
//Attempt to read race xml file.
|
//Attempt to read race xml file.
|
||||||
|
|||||||
@@ -65,15 +65,15 @@ public class RegattaXMLReader extends XMLReader implements RegattaDataSource {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for Regatta XML using a file read as a resource.
|
* Constructor for Regatta XML using a file.
|
||||||
*
|
*
|
||||||
* @param fileContents Contents of xml file.
|
* @param file The file.
|
||||||
* @param type How to read the file - e.g., load as resource.
|
* @param type How to read the file - e.g., load as resource.
|
||||||
* @throws XMLReaderException Thrown if the file cannot be parsed.
|
* @throws XMLReaderException Thrown if the file cannot be parsed.
|
||||||
* @throws InvalidRegattaDataException Thrown if the file cannot be parsed correctly.
|
* @throws InvalidRegattaDataException Thrown if the file cannot be parsed correctly.
|
||||||
*/
|
*/
|
||||||
public RegattaXMLReader(String fileContents, XMLFileType type) throws XMLReaderException, InvalidRegattaDataException {
|
public RegattaXMLReader(String file, XMLFileType type) throws XMLReaderException, InvalidRegattaDataException {
|
||||||
super(fileContents, type);
|
super(file, type);
|
||||||
|
|
||||||
//Attempt to read boat xml file.
|
//Attempt to read boat xml file.
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -173,6 +173,11 @@ public abstract class XMLReader {
|
|||||||
|
|
||||||
InputStream fileStream = XMLReader.class.getClassLoader().getResourceAsStream(path);
|
InputStream fileStream = XMLReader.class.getClassLoader().getResourceAsStream(path);
|
||||||
|
|
||||||
|
//Resource can't be found.
|
||||||
|
if (fileStream == null) {
|
||||||
|
throw new XMLReaderException("Could not open resource: " + path, new IOException());
|
||||||
|
}
|
||||||
|
|
||||||
Document doc = XMLReader.parseInputStream(fileStream);
|
Document doc = XMLReader.parseInputStream(fileStream);
|
||||||
|
|
||||||
doc.getDocumentElement().normalize();
|
doc.getDocumentElement().normalize();
|
||||||
|
|||||||
@@ -116,9 +116,9 @@ public class StartController extends Controller implements Observer {
|
|||||||
private void startRace(LatestMessages latestMessages) throws XMLReaderException, InvalidRaceDataException, InvalidBoatDataException, InvalidRegattaDataException {
|
private void startRace(LatestMessages latestMessages) throws XMLReaderException, InvalidRaceDataException, InvalidBoatDataException, InvalidRegattaDataException {
|
||||||
|
|
||||||
//Create data sources from latest messages for the race.
|
//Create data sources from latest messages for the race.
|
||||||
RaceDataSource raceDataSource = new RaceXMLReader(latestMessages.getRaceXMLMessage().getXmlMessage(), XMLFileType.ResourcePath);
|
RaceDataSource raceDataSource = new RaceXMLReader(latestMessages.getRaceXMLMessage().getXmlMessage(), XMLFileType.Contents);
|
||||||
BoatDataSource boatDataSource = new BoatXMLReader(latestMessages.getBoatXMLMessage().getXmlMessage(), XMLFileType.ResourcePath);
|
BoatDataSource boatDataSource = new BoatXMLReader(latestMessages.getBoatXMLMessage().getXmlMessage(), XMLFileType.Contents);
|
||||||
RegattaDataSource regattaDataSource = new RegattaXMLReader(latestMessages.getRegattaXMLMessage().getXmlMessage(), XMLFileType.ResourcePath);
|
RegattaDataSource regattaDataSource = new RegattaXMLReader(latestMessages.getRegattaXMLMessage().getXmlMessage(), XMLFileType.Contents);
|
||||||
|
|
||||||
//Create race.
|
//Create race.
|
||||||
this.visualiserRace = new VisualiserRace(boatDataSource, raceDataSource, regattaDataSource, latestMessages, this.colors);
|
this.visualiserRace = new VisualiserRace(boatDataSource, raceDataSource, regattaDataSource, latestMessages, this.colors);
|
||||||
|
|||||||
@@ -1,17 +1,24 @@
|
|||||||
package network;
|
package network;
|
||||||
|
|
||||||
|
import network.Exceptions.InvalidMessageException;
|
||||||
|
import network.MessageDecoders.XMLMessageDecoder;
|
||||||
|
import network.MessageEncoders.RaceVisionByteEncoder;
|
||||||
|
import network.Messages.AC35Data;
|
||||||
|
import network.Messages.Enums.MessageType;
|
||||||
|
import network.Messages.Enums.XMLMessageType;
|
||||||
|
import network.Messages.XMLMessage;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import seng302.Networking.Exceptions.InvalidMessageException;
|
import shared.dataInput.XMLReader;
|
||||||
import seng302.Networking.MessageDecoders.XMLMessageDecoder;
|
import shared.exceptions.XMLReaderException;
|
||||||
import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
|
||||||
import seng302.Networking.Messages.AC35Data;
|
|
||||||
import seng302.Networking.Messages.Enums.MessageType;
|
|
||||||
import seng302.Networking.Messages.XMLMessage;
|
|
||||||
|
|
||||||
|
import javax.xml.transform.TransformerException;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hba56 on 21/04/17.
|
* Created by hba56 on 21/04/17.
|
||||||
@@ -20,18 +27,19 @@ public class BinaryMessageDecoderTest {
|
|||||||
@Test
|
@Test
|
||||||
public void decodeTest(){
|
public void decodeTest(){
|
||||||
try{
|
try{
|
||||||
StringBuilder xmlString;
|
String xmlString = XMLReader.readXMLFileToString("network/raceXML/Regatta.xml", StandardCharsets.UTF_8);
|
||||||
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();
|
long time = System.currentTimeMillis();
|
||||||
|
|
||||||
|
XMLMessage xmlMessagePre = new XMLMessage(
|
||||||
|
(byte)1,
|
||||||
|
1,
|
||||||
|
time,
|
||||||
|
XMLMessageType.REGATTA,
|
||||||
|
(short)1,
|
||||||
|
xmlString );
|
||||||
|
|
||||||
|
byte[] encodedMessage = RaceVisionByteEncoder.xmlMessage(xmlMessagePre);
|
||||||
|
|
||||||
BinaryMessageEncoder testMessage = new BinaryMessageEncoder(MessageType.XMLMESSAGE, time, 1, (short)encodedMessage.length, encodedMessage);
|
BinaryMessageEncoder testMessage = new BinaryMessageEncoder(MessageType.XMLMESSAGE, time, 1, (short)encodedMessage.length, encodedMessage);
|
||||||
|
|
||||||
@@ -67,7 +75,7 @@ public class BinaryMessageDecoderTest {
|
|||||||
Assert.assertEquals((byte)1, decoderXML.getMessageVersionNumber());
|
Assert.assertEquals((byte)1, decoderXML.getMessageVersionNumber());
|
||||||
Assert.assertEquals((short)1, decoderXML.getAckNumber());
|
Assert.assertEquals((short)1, decoderXML.getAckNumber());
|
||||||
Assert.assertEquals(time, decoderXML.getTimeStamp());
|
Assert.assertEquals(time, decoderXML.getTimeStamp());
|
||||||
Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType());
|
Assert.assertEquals(XMLMessageType.REGATTA, decoderXML.getXmlMsgSubType());
|
||||||
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
||||||
Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength());
|
Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength());
|
||||||
|
|
||||||
@@ -79,8 +87,8 @@ public class BinaryMessageDecoderTest {
|
|||||||
// }
|
// }
|
||||||
// Assert.assertEquals(xmlString.toString(), contents);
|
// Assert.assertEquals(xmlString.toString(), contents);
|
||||||
|
|
||||||
}catch (IOException e){
|
} catch (XMLReaderException | TransformerException e){
|
||||||
Assert.assertFalse(e.getMessage(), true);
|
fail("couldn't read file" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package network.MessageDecoders;
|
package network.MessageDecoders;
|
||||||
|
|
||||||
|
import network.MessageEncoders.RaceVisionByteEncoder;
|
||||||
|
import network.Messages.BoatLocation;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import seng302.Networking.MessageEncoders.RaceVisionByteEncoder;
|
|
||||||
import seng302.Networking.Messages.BoatLocation;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -18,8 +18,8 @@ public class BoatLocationDecoderTest {
|
|||||||
(short) 6, (short) 7, 8, 9, 10, 11,
|
(short) 6, (short) 7, 8, 9, 10, 11,
|
||||||
(short) 12, 13, 14 , (short) 15,
|
(short) 12, 13, 14 , (short) 15,
|
||||||
16, 17, (short) 18);
|
16, 17, (short) 18);
|
||||||
RaceVisionByteEncoder raceVisionByteEncoder = new RaceVisionByteEncoder();
|
|
||||||
byte [] testEncodedMessage = raceVisionByteEncoder.boatLocation(testMessage);
|
byte [] testEncodedMessage = RaceVisionByteEncoder.boatLocation(testMessage);
|
||||||
|
|
||||||
BoatLocationDecoder testDecoder = new BoatLocationDecoder(testEncodedMessage);
|
BoatLocationDecoder testDecoder = new BoatLocationDecoder(testEncodedMessage);
|
||||||
BoatLocation decodedTest = testDecoder.getMessage();
|
BoatLocation decodedTest = testDecoder.getMessage();
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package network.MessageDecoders;
|
package network.MessageDecoders;
|
||||||
|
|
||||||
|
import network.MessageEncoders.RaceVisionByteEncoder;
|
||||||
|
import network.Messages.CourseWind;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import seng302.Networking.MessageEncoders.RaceVisionByteEncoder;
|
|
||||||
import seng302.Networking.Messages.CourseWind;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@@ -29,9 +29,7 @@ public class CourseWindDecoderTest {
|
|||||||
testCourseWinds.add(testCourseWind2);
|
testCourseWinds.add(testCourseWind2);
|
||||||
|
|
||||||
|
|
||||||
RaceVisionByteEncoder raceVisionByteEncoder = new RaceVisionByteEncoder();
|
byte[] testEncodedCourseWind = RaceVisionByteEncoder.courseWind((byte) 1, testCourseWinds);
|
||||||
|
|
||||||
byte[] testEncodedCourseWind = raceVisionByteEncoder.courseWind((byte) 1, testCourseWinds);
|
|
||||||
|
|
||||||
CourseWindDecoder testDecoder = new CourseWindDecoder(testEncodedCourseWind);
|
CourseWindDecoder testDecoder = new CourseWindDecoder(testEncodedCourseWind);
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -1,8 +1,8 @@
|
|||||||
package network.MessageDecoders;
|
package network.MessageDecoders;
|
||||||
|
|
||||||
|
import network.MessageEncoders.RaceVisionByteEncoder;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import seng302.Networking.MessageEncoders.RaceVisionByteEncoder;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hba56 on 23/04/17.
|
* Created by hba56 on 23/04/17.
|
||||||
@@ -12,9 +12,8 @@ public class RaceStartStatusDecoderTest {
|
|||||||
public void getByteArrayTest(){
|
public void getByteArrayTest(){
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
|
|
||||||
RaceVisionByteEncoder raceVisionByteEncoder = new RaceVisionByteEncoder();
|
|
||||||
long time2 = System.currentTimeMillis();
|
long time2 = System.currentTimeMillis();
|
||||||
byte[] encodedRaceStartStatus = raceVisionByteEncoder.raceStartStatus(time, (short)1,
|
byte[] encodedRaceStartStatus = RaceVisionByteEncoder.raceStartStatus(time, (short)1,
|
||||||
time2, 2, (char)3);
|
time2, 2, (char)3);
|
||||||
|
|
||||||
RaceStartStatusDecoder testDecoder = new RaceStartStatusDecoder(encodedRaceStartStatus);
|
RaceStartStatusDecoder testDecoder = new RaceStartStatusDecoder(encodedRaceStartStatus);
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
package network.MessageDecoders;
|
package network.MessageDecoders;
|
||||||
|
|
||||||
|
import network.MessageEncoders.RaceVisionByteEncoder;
|
||||||
|
import network.Messages.BoatStatus;
|
||||||
|
import network.Messages.RaceStatus;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import seng302.Networking.MessageEncoders.RaceVisionByteEncoder;
|
|
||||||
import seng302.Networking.Messages.BoatStatus;
|
|
||||||
import seng302.Networking.Messages.RaceStatus;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hba56 on 23/04/17.
|
* Created by hba56 on 23/04/17.
|
||||||
@@ -36,12 +37,12 @@ public class RaceStatusDecoderTest {
|
|||||||
BoatStatus boatStatus2 = new BoatStatus(boat2SourceID, boat2Status, boat2LegNumber, boat2PenaltiesAwarded, boat2PenaltiesServed, boat2TimeAtNextMark, boat2TimeAtFinish);
|
BoatStatus boatStatus2 = new BoatStatus(boat2SourceID, boat2Status, boat2LegNumber, boat2PenaltiesAwarded, boat2PenaltiesServed, boat2TimeAtNextMark, boat2TimeAtFinish);
|
||||||
|
|
||||||
int raceID = 585;
|
int raceID = 585;
|
||||||
int raceStatus = 3;
|
byte raceStatus = 3;
|
||||||
long raceStartTime = time - (1000 * 31);
|
long raceStartTime = time - (1000 * 31);
|
||||||
int windDirection = 2341;
|
int windDirection = 2341;
|
||||||
int windSpeed = 10201;
|
int windSpeed = 10201;
|
||||||
int raceType = 1;
|
int raceType = 1;
|
||||||
ArrayList<BoatStatus> boatStatuses = new ArrayList<>(2);
|
List<BoatStatus> boatStatuses = new ArrayList<>(2);
|
||||||
boatStatuses.add(boatStatus1);
|
boatStatuses.add(boatStatus1);
|
||||||
boatStatuses.add(boatStatus2);
|
boatStatuses.add(boatStatus2);
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
package network.MessageDecoders;
|
package network.MessageDecoders;
|
||||||
|
|
||||||
|
import network.MessageEncoders.RaceVisionByteEncoder;
|
||||||
|
import network.Messages.Enums.XMLMessageType;
|
||||||
|
import network.Messages.XMLMessage;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
import shared.dataInput.XMLReader;
|
||||||
|
import shared.exceptions.XMLReaderException;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import javax.xml.transform.TransformerException;
|
||||||
import java.io.IOException;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.io.InputStreamReader;
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hba56 on 20/04/17.
|
* Created by hba56 on 20/04/17.
|
||||||
@@ -15,18 +20,21 @@ public class XMLMessageDecoderTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getByteArrayTest(){
|
public void getByteArrayTest(){
|
||||||
try{
|
try{
|
||||||
StringBuilder xmlString;
|
String xmlString = XMLReader.readXMLFileToString("network/raceXML/Regatta.xml", StandardCharsets.UTF_8);
|
||||||
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();
|
long time = System.currentTimeMillis();
|
||||||
XMLMessageEncoder testEncoder = new XMLMessageEncoder((short)1, time, (byte)7, (short)1, (short)xmlString.length(), xmlString.toString());
|
|
||||||
|
XMLMessage message = new XMLMessage(
|
||||||
|
(byte)1,
|
||||||
|
1,
|
||||||
|
time,
|
||||||
|
XMLMessageType.REGATTA,
|
||||||
|
(short)1,
|
||||||
|
xmlString );
|
||||||
|
|
||||||
|
byte[] encodedXML = RaceVisionByteEncoder.xmlMessage(message);
|
||||||
|
|
||||||
|
|
||||||
byte[] encodedXML = testEncoder.encode();
|
|
||||||
|
|
||||||
XMLMessageDecoder decoderXML = new XMLMessageDecoder(encodedXML);
|
XMLMessageDecoder decoderXML = new XMLMessageDecoder(encodedXML);
|
||||||
decoderXML.decode();
|
decoderXML.decode();
|
||||||
@@ -35,12 +43,12 @@ public class XMLMessageDecoderTest {
|
|||||||
Assert.assertEquals((byte)1, decoderXML.getMessageVersionNumber());
|
Assert.assertEquals((byte)1, decoderXML.getMessageVersionNumber());
|
||||||
Assert.assertEquals((short)1, decoderXML.getAckNumber());
|
Assert.assertEquals((short)1, decoderXML.getAckNumber());
|
||||||
Assert.assertEquals(time, decoderXML.getTimeStamp());
|
Assert.assertEquals(time, decoderXML.getTimeStamp());
|
||||||
Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType());
|
Assert.assertEquals(XMLMessageType.REGATTA, decoderXML.getXmlMsgSubType());
|
||||||
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
||||||
Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength());
|
Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength());
|
||||||
|
|
||||||
}catch (IOException e){
|
} catch (XMLReaderException | TransformerException e){
|
||||||
e.printStackTrace();
|
fail("couldn't read file" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-3
@@ -1,14 +1,17 @@
|
|||||||
package network;
|
package network.Utils;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static network.Utils.AC35UnitConverter.convertGPS;
|
||||||
|
import static network.Utils.AC35UnitConverter.convertGPSToInt;
|
||||||
|
import static network.Utils.AC35UnitConverter.convertHeading;
|
||||||
|
import static network.Utils.AC35UnitConverter.convertTrueWindAngle;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static seng302.Networking.Utils.AC35UnitConverter.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by fwy13 on 4/05/17.
|
* Created by fwy13 on 4/05/17.
|
||||||
*/
|
*/
|
||||||
public class AC35UnitConverter {
|
public class AC35UnitConverterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testConvertGPS(){
|
public void testConvertGPS(){
|
||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
package network;
|
package network.Utils;
|
||||||
|
|
||||||
|
import network.Utils.ByteConverter;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import seng302.Networking.Utils.ByteConverter;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
|
|
||||||
@@ -1,57 +1,50 @@
|
|||||||
package network;
|
package network;
|
||||||
|
|
||||||
|
import network.MessageEncoders.RaceVisionByteEncoder;
|
||||||
|
import network.Messages.Enums.XMLMessageType;
|
||||||
|
import network.Messages.XMLMessage;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
import shared.dataInput.XMLReader;
|
||||||
|
import shared.exceptions.XMLReaderException;
|
||||||
|
|
||||||
|
import javax.xml.transform.TransformerException;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hba56 on 19/04/17.
|
* Created by hba56 on 19/04/17.
|
||||||
*/
|
*/
|
||||||
public class XMLMessageEncoderTest {
|
public class XMLMessageEncoderTest {
|
||||||
@Test
|
@Test
|
||||||
public void getByteArrayTest(){
|
public void getByteArrayTest() {
|
||||||
StringBuilder xmlString;
|
try {
|
||||||
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();
|
String xmlString = XMLReader.readXMLFileToString("network/raceXML/Regatta.xml", StandardCharsets.UTF_8);
|
||||||
|
|
||||||
//1 + 2 + 6 + 1 + 2 + 2 + 374
|
|
||||||
Assert.assertEquals(388, encodedXML.length);
|
XMLMessage message = new XMLMessage(
|
||||||
}catch (IOException e){
|
(byte)1,
|
||||||
e.printStackTrace();
|
1,
|
||||||
|
System.currentTimeMillis(),
|
||||||
|
XMLMessageType.REGATTA,
|
||||||
|
(short)1,
|
||||||
|
xmlString );
|
||||||
|
|
||||||
|
int xmlMessageLength = xmlString.getBytes().length;
|
||||||
|
|
||||||
|
byte[] encodedXML = RaceVisionByteEncoder.xmlMessage(message);
|
||||||
|
|
||||||
|
//1 + 2 + 6 + 1 + 2 + 2 + xml.byteLength
|
||||||
|
Assert.assertEquals(14 + xmlMessageLength, encodedXML.length);
|
||||||
|
|
||||||
|
} catch (XMLReaderException | TransformerException e){
|
||||||
|
fail("couldn't read file" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ package shared.dataInput;
|
|||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
import shared.enums.XMLFileType;
|
||||||
import shared.exceptions.InvalidBoatDataException;
|
import shared.exceptions.InvalidBoatDataException;
|
||||||
import shared.exceptions.XMLReaderException;
|
import shared.exceptions.XMLReaderException;
|
||||||
import shared.model.Boat;
|
import shared.model.Boat;
|
||||||
@@ -46,7 +47,7 @@ public class BoatXMLReaderTest {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
boatData = new BoatXMLReader(boatXMLString);
|
boatData = new BoatXMLReader(boatXMLString, XMLFileType.Contents);
|
||||||
|
|
||||||
boats = new ArrayList<>(boatData.getBoats().values());
|
boats = new ArrayList<>(boatData.getBoats().values());
|
||||||
marks = new ArrayList<>(boatData.getMarkerBoats().values());
|
marks = new ArrayList<>(boatData.getMarkerBoats().values());
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package shared.dataInput;
|
|||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import shared.enums.XMLFileType;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
@@ -16,7 +17,7 @@ public class RegattaXMLReaderTest {
|
|||||||
@Before
|
@Before
|
||||||
public void findFile() {
|
public void findFile() {
|
||||||
try {
|
try {
|
||||||
regatta = new RegattaXMLReader("mockXML/regattaXML/regattaTest.xml");
|
regatta = new RegattaXMLReader("shared/mockXML/regattaXML/regattaTest.xml", XMLFileType.ResourcePath);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
fail("Cannot find mockXML/regattaXML/regattaTest.xml in the resources folder");
|
fail("Cannot find mockXML/regattaXML/regattaTest.xml in the resources folder");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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>
|
||||||
Reference in New Issue
Block a user