From 2ce1c0786ee3d3c2b86394c84e5f11ef2f99a628 Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Mon, 7 Aug 2017 02:01:41 +1200 Subject: [PATCH] The course points can now be rotated, - Created markToGPSCoordinate Class - Added Rotation to marks #story[1092] --- .../main/java/mock/xml/RaceXMLCreator.java | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/racevisionGame/src/main/java/mock/xml/RaceXMLCreator.java b/racevisionGame/src/main/java/mock/xml/RaceXMLCreator.java index 271b427a..55f1b25c 100644 --- a/racevisionGame/src/main/java/mock/xml/RaceXMLCreator.java +++ b/racevisionGame/src/main/java/mock/xml/RaceXMLCreator.java @@ -7,6 +7,7 @@ import shared.exceptions.XMLReaderException; import shared.model.CompoundMark; import shared.model.Corner; import shared.model.GPSCoordinate; +import shared.model.Mark; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; @@ -56,21 +57,9 @@ public class RaceXMLCreator { Race.Course.CompoundMark cm = raceFactory.createRaceCourseCompoundMark(); cm.setName(mark.getName()); cm.setCompoundMarkID(String.valueOf(mark.getId())); - if (mark.getMark1() != null){ - Race.Course.CompoundMark.Mark m1 = raceFactory.createRaceCourseCompoundMarkMark(); - m1.setName(mark.getMark1().getName()); - m1.setTargetLat(String.valueOf(mark.getMark1().getPosition().getLatitude())); - m1.setTargetLng(String.valueOf(mark.getMark1().getPosition().getLongitude())); - m1.setSourceID(String.valueOf(mark.getMark1().getSourceID())); - cm.getMark().add(m1); - } - //make this not copy paste later but just need the concept working right now - if (mark.getMark2() != null){ - Race.Course.CompoundMark.Mark m2 = raceFactory.createRaceCourseCompoundMarkMark(); - m2.setName(mark.getMark1().getName()); - m2.setTargetLat(String.valueOf(mark.getMark1().getPosition().getLatitude())); - m2.setTargetLng(String.valueOf(mark.getMark1().getPosition().getLongitude())); - m2.setSourceID(String.valueOf(mark.getMark1().getSourceID())); + cm.getMark().add(setMarkFromMark(raceFactory, mark.getMark1())); + Race.Course.CompoundMark.Mark m2 = setMarkFromMark(raceFactory, mark.getMark2()); + if (m2 != null) { cm.getMark().add(m2); } course.getCompoundMark().add(cm); @@ -91,6 +80,18 @@ public class RaceXMLCreator { return race; } + public static Race.Course.CompoundMark.Mark setMarkFromMark(RaceFactory raceFactory, Mark mark){ + if (mark != null) { + Race.Course.CompoundMark.Mark m = raceFactory.createRaceCourseCompoundMarkMark(); + m.setName(mark.getName()); + m.setTargetLat(String.valueOf(mark.getPosition().getLatitude())); + m.setTargetLng(String.valueOf(mark.getPosition().getLongitude())); + m.setSourceID(String.valueOf(mark.getSourceID())); + return m; + } + return null; + } + public static String alterRaceToWind(String s, double degrees) throws XMLReaderException, InvalidRaceDataException, JAXBException { RaceXMLReader reader = new RaceXMLReader(s, XMLFileType.ResourcePath); @@ -103,6 +104,15 @@ public class RaceXMLCreator { limit.setLon(String.valueOf(rotatedLim.getLongitude())); } + for(Race.Course.CompoundMark compoundMark: race.getCourse().getCompoundMark()){ + for (Race.Course.CompoundMark.Mark mark: compoundMark.getMark()){ + System.out.println(mark); + GPSCoordinate rotatedMark = rotate(center, markToGPSCoordinate(mark), degrees); + mark.setTargetLat(String.valueOf(rotatedMark.getLatitude())); + mark.setTargetLng(String.valueOf(rotatedMark.getLongitude())); + } + } + JAXBContext context = JAXBContext.newInstance(Race.class); Marshaller jaxbMarshaller = context.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); @@ -127,6 +137,10 @@ public class RaceXMLCreator { return new GPSCoordinate(resLat, resLon); } + public static GPSCoordinate markToGPSCoordinate(Race.Course.CompoundMark.Mark mark){ + return new GPSCoordinate(Double.parseDouble(mark.getTargetLat()), Double.parseDouble(mark.getTargetLng())); + } + public static GPSCoordinate getCenter(Race race){ double avgLat = 0; double avgLng = 0;