Merge remote-tracking branch 'remotes/origin/splitIntoTwoModules' into NetworkedVisualiser
# Conflicts: # visualiser/src/main/java/seng302/VisualiserInput.java
This commit is contained in:
@@ -8,6 +8,7 @@ import java.nio.ByteOrder;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import static seng302.Networking.Utils.ByteConverter.bytesToLong;
|
import static seng302.Networking.Utils.ByteConverter.bytesToLong;
|
||||||
|
import static seng302.Networking.Utils.ByteConverter.bytesToShort;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hba56 on 20/04/17.
|
* Created by hba56 on 20/04/17.
|
||||||
@@ -45,15 +46,6 @@ public class XMLMessageDecoder {
|
|||||||
this.xmlMessage = new String(xmlMessagebytes);
|
this.xmlMessage = new String(xmlMessagebytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private short bytesToShort(byte[] bytesShort){
|
|
||||||
ByteBuffer byteBuffer = ByteBuffer.allocate(2);
|
|
||||||
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
|
|
||||||
byteBuffer.put(bytesShort[0]);
|
|
||||||
byteBuffer.put(bytesShort[1]);
|
|
||||||
short shortVal = byteBuffer.getShort(0);
|
|
||||||
return shortVal;
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte getMessageVersionNumber() {
|
public byte getMessageVersionNumber() {
|
||||||
return messageVersionNumber;
|
return messageVersionNumber;
|
||||||
}
|
}
|
||||||
@@ -83,7 +75,7 @@ public class XMLMessageDecoder {
|
|||||||
* @return xml string as inputsource
|
* @return xml string as inputsource
|
||||||
*/
|
*/
|
||||||
public InputSource getXmlMessageInputSource() {
|
public InputSource getXmlMessageInputSource() {
|
||||||
InputSource is = new InputSource(new StringReader(xmlMessage));
|
InputSource is = new InputSource(new StringReader(xmlMessage.trim()));
|
||||||
return is;
|
return is;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public class BoatXMLReader extends XMLReader {
|
|||||||
* @throws ParserConfigurationException error
|
* @throws ParserConfigurationException error
|
||||||
*/
|
*/
|
||||||
public BoatXMLReader(String filePath) throws IOException, SAXException, ParserConfigurationException, ParseException {
|
public BoatXMLReader(String filePath) throws IOException, SAXException, ParserConfigurationException, ParseException {
|
||||||
this(filePath, false);
|
this(filePath, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,19 +89,14 @@ public class BoatXMLReader extends XMLReader {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the information about one boat
|
* Reads the information about one boat
|
||||||
* Ignored values: ShapeID, StoweName, HullNum, Skipper
|
* Ignored values: ShapeID, StoweName, HullNum, Skipper, Type
|
||||||
*/
|
*/
|
||||||
private void readSingleBoat(Node boat) {
|
private void readSingleBoat(Node boat) {
|
||||||
StreamedBoat streamedBoat;
|
StreamedBoat streamedBoat;
|
||||||
String type = "None";
|
|
||||||
int sourceID = -1;
|
|
||||||
String boatName = null;
|
|
||||||
String shortName = null;
|
|
||||||
String country = null;
|
String country = null;
|
||||||
if (exists(boat, "Type")) type = boat.getAttributes().getNamedItem("Type").getTextContent();
|
int sourceID = Integer.parseInt(boat.getAttributes().getNamedItem("SourceID").getTextContent());
|
||||||
if (exists(boat, "SourceID")) sourceID = Integer.parseInt(boat.getAttributes().getNamedItem("SourceID").getTextContent());
|
String boatName = boat.getAttributes().getNamedItem("BoatName").getTextContent();
|
||||||
if (exists(boat, "BoatName")) boatName = boat.getAttributes().getNamedItem("BoatName").getTextContent();
|
String shortName = boat.getAttributes().getNamedItem("ShortName").getTextContent();
|
||||||
if (exists(boat, "ShortName")) shortName = boat.getAttributes().getNamedItem("ShortName").getTextContent();
|
|
||||||
if (exists(boat, "Country")) country = boat.getAttributes().getNamedItem("Country").getTextContent();
|
if (exists(boat, "Country")) country = boat.getAttributes().getNamedItem("Country").getTextContent();
|
||||||
|
|
||||||
// Ignore all non participating boats
|
// Ignore all non participating boats
|
||||||
@@ -137,10 +132,6 @@ public class BoatXMLReader extends XMLReader {
|
|||||||
this.participants = participants;
|
this.participants = participants;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<Integer, StreamedBoat> getStreamedBoatMap() {
|
|
||||||
return streamedBoatMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Boat> getBoats() {
|
public List<Boat> getBoats() {
|
||||||
return new ArrayList<>(streamedBoatMap.values());
|
return new ArrayList<>(streamedBoatMap.values());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,4 +49,8 @@ public class StreamedBoat extends Boat {
|
|||||||
}
|
}
|
||||||
return azimuth;
|
return azimuth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSourceID() {
|
||||||
|
return sourceID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,24 @@
|
|||||||
package seng302;
|
package seng302.Networking;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
import seng302.Mock.*;
|
import seng302.Mock.*;
|
||||||
import seng302.Networking.BinaryMessageDecoder;
|
import seng302.Networking.BinaryMessageDecoder;
|
||||||
|
import seng302.Networking.MessageDecoders.*;
|
||||||
import seng302.Networking.Utils.*;
|
import seng302.Networking.Utils.*;
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
import java.text.ParseException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static seng302.Networking.Utils.ByteConverter.bytesToInt;
|
import static seng302.Networking.Utils.ByteConverter.bytesToInt;
|
||||||
import static seng302.Networking.Utils.ByteConverter.bytesToShort;
|
import static seng302.Networking.Utils.ByteConverter.bytesToShort;
|
||||||
|
import static seng302.Networking.Utils.MessageType.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TCP server to act as the mock AC35 streaming interface
|
* TCP server to act as the mock AC35 streaming interface
|
||||||
@@ -28,14 +33,16 @@ public class VisualiserInput implements Runnable
|
|||||||
|
|
||||||
long heartbeatSeqNum;
|
long heartbeatSeqNum;
|
||||||
|
|
||||||
private StreamedCourse course;
|
private StreamedCourse course = null;
|
||||||
|
|
||||||
private Map<Integer, BoatLocationMessage> boatLocation;
|
private Map<Integer, BoatLocationMessage> boatLocation;
|
||||||
|
|
||||||
public VisualiserInput(StreamedCourse course) throws IOException{
|
public VisualiserInput(Socket connectionSocket) throws IOException{
|
||||||
connectionSocket = new Socket(InetAddress.getLocalHost(), 4942);
|
|
||||||
|
|
||||||
this.course = course;
|
//connectionSocket = new Socket(InetAddress.getLocalHost(), 4942);
|
||||||
|
this.connectionSocket = connectionSocket;
|
||||||
|
|
||||||
|
this.course = new StreamedCourse();
|
||||||
this.boatLocation = new HashMap<>();
|
this.boatLocation = new HashMap<>();
|
||||||
this.connectionSocket = connectionSocket;
|
this.connectionSocket = connectionSocket;
|
||||||
|
|
||||||
@@ -80,11 +87,14 @@ public class VisualiserInput implements Runnable
|
|||||||
*/
|
*/
|
||||||
private static byte[] getBytes(InputStream inStream) throws IOException {
|
private static byte[] getBytes(InputStream inStream) throws IOException {
|
||||||
byte[] headerBytes = new byte[15];
|
byte[] headerBytes = new byte[15];
|
||||||
int i = inStream.read(headerBytes);
|
inStream.read(headerBytes);
|
||||||
byte[] messageLenBytes = Arrays.copyOfRange(headerBytes, 13, 15);
|
byte[] messageLenBytes = Arrays.copyOfRange(headerBytes, 13, 15);
|
||||||
short messageLen = bytesToShort(messageLenBytes);
|
short messageLen = bytesToShort(messageLenBytes);
|
||||||
byte[] messageBytesWithCRC = new byte[messageLen+4];
|
byte[] messageBytesWithCRC = new byte[messageLen+4];
|
||||||
int j = inStream.read(messageBytesWithCRC);
|
while (inStream.available() < messageLen + 4){
|
||||||
|
//WE NEED THIS!!!!
|
||||||
|
}
|
||||||
|
inStream.read(messageBytesWithCRC, 0, messageLen + 4);
|
||||||
ByteBuffer binaryMessageBytes = ByteBuffer.allocate(headerBytes.length+messageBytesWithCRC.length);
|
ByteBuffer binaryMessageBytes = ByteBuffer.allocate(headerBytes.length+messageBytesWithCRC.length);
|
||||||
binaryMessageBytes.put(headerBytes);
|
binaryMessageBytes.put(headerBytes);
|
||||||
binaryMessageBytes.put(messageBytesWithCRC);
|
binaryMessageBytes.put(messageBytesWithCRC);
|
||||||
@@ -200,7 +210,8 @@ public class VisualiserInput implements Runnable
|
|||||||
public static void main(String argv[]) throws Exception
|
public static void main(String argv[]) throws Exception
|
||||||
{
|
{
|
||||||
//this is the test data that streams form the AC35 website
|
//this is the test data that streams form the AC35 website
|
||||||
VisualiserInput receiver = new VisualiserInput(new StreamedCourse());
|
Socket socket = new Socket("livedata.americascup.com",4941);
|
||||||
|
VisualiserInput receiver = new VisualiserInput(socket);
|
||||||
receiver.run();
|
receiver.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public class BoatsXMLTest {
|
|||||||
inputParticipants.put(420, new StreamedBoat(420));
|
inputParticipants.put(420, new StreamedBoat(420));
|
||||||
boatXMLReader.setParticipants(inputParticipants);
|
boatXMLReader.setParticipants(inputParticipants);
|
||||||
boatXMLReader.read();
|
boatXMLReader.read();
|
||||||
assertEquals(boatXMLReader.getStreamedBoatMap().size(), 0);
|
assertEquals(boatXMLReader.getBoats().size(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -40,6 +40,8 @@ public class BoatsXMLTest {
|
|||||||
inputParticipants.put(101, new StreamedBoat(101));
|
inputParticipants.put(101, new StreamedBoat(101));
|
||||||
boatXMLReader.setParticipants(inputParticipants);
|
boatXMLReader.setParticipants(inputParticipants);
|
||||||
boatXMLReader.read();
|
boatXMLReader.read();
|
||||||
assertTrue(boatXMLReader.getStreamedBoatMap().containsKey(101));
|
assertEquals(boatXMLReader.getBoats().size(), 1);
|
||||||
|
StreamedBoat boat = (StreamedBoat) boatXMLReader.getBoats().get(0);
|
||||||
|
assertEquals(boat.getSourceID(), 101);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package seng302.Mock;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.ExpectedException;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by jjg64 on 1/05/17.
|
||||||
|
*/
|
||||||
|
public class FailBoatXMLTest {
|
||||||
|
String path = "mockXML/boatXML/";
|
||||||
|
|
||||||
|
@Test(expected = SAXException.class)
|
||||||
|
public void emptyFile() throws SAXException, ParserConfigurationException, ParseException, IOException {
|
||||||
|
new BoatXMLReader("empty.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
@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,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>
|
||||||
Reference in New Issue
Block a user