From 4c730ea890b27885bedcc757950167c9539936d8 Mon Sep 17 00:00:00 2001
From: William Muir
Date: Thu, 17 Aug 2017 15:40:55 +1200
Subject: [PATCH 01/29] Fixed null pointer when cant find a server
tags: #fix
---
.../java/seng302/visualiser/GameClient.java | 20 +++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java
index 968d9a92..63687191 100644
--- a/src/main/java/seng302/visualiser/GameClient.java
+++ b/src/main/java/seng302/visualiser/GameClient.java
@@ -74,6 +74,7 @@ public class GameClient {
startClientToServerThread(ipAddress, portNumber);
socketThread.addDisconnectionListener((cause) -> {
showConnectionError(cause);
+ tearDownConnection();
Platform.runLater(this::loadStartScreen);
});
socketThread.addStreamObserver(this::parsePackets);
@@ -91,7 +92,10 @@ public class GameClient {
lobbyController.setCourseName("");
}
- lobbyController.addCloseListener((exitCause) -> this.loadStartScreen());
+ lobbyController.addCloseListener((exitCause) -> {
+ this.tearDownConnection();
+ this.loadStartScreen();
+ });
this.lobbyController = lobbyController;
} catch (IOException ioe) {
showConnectionError("Unable to find server");
@@ -109,6 +113,7 @@ public class GameClient {
try {
startClientToServerThread(ipAddress, portNumber);
socketThread.addDisconnectionListener((cause) -> {
+ this.tearDownConnection();
Platform.runLater(this::loadStartScreen);
});
LobbyController lobbyController = loadLobby();
@@ -129,8 +134,7 @@ public class GameClient {
lobbyController.disableReadyButton();
server.startGame();
} else if (exitCause == CloseStatus.LEAVE) {
- server.terminate();
- server = null;
+ tearDownConnection();
loadStartScreen();
}
});
@@ -141,12 +145,20 @@ public class GameClient {
}
}
- private void loadStartScreen() {
+ private void tearDownConnection() {
socketThread.setSocketToClose();
if (server != null) {
server.terminate();
server = null;
}
+ }
+
+ private void loadStartScreen() {
+// socketThread.setSocketToClose();
+// if (server != null) {
+// server.terminate();
+// server = null;
+// }
FXMLLoader fxmlLoader = new FXMLLoader(
getClass().getResource("/views/StartScreenView.fxml"));
try {
From 2fcff65dd66b82ebdaa4a81cb9b965256a3599ed Mon Sep 17 00:00:00 2001
From: William Muir
Date: Thu, 17 Aug 2017 15:44:05 +1200
Subject: [PATCH 02/29] Fixed null pointer when cant find a server
tags: #fix
---
src/main/java/seng302/App.java | 2 +-
src/main/resources/views/StartScreenView.fxml | 4 +++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/main/java/seng302/App.java b/src/main/java/seng302/App.java
index 8c6f85ac..16470fb1 100644
--- a/src/main/java/seng302/App.java
+++ b/src/main/java/seng302/App.java
@@ -68,7 +68,7 @@ public class App extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("/views/StartScreenView.fxml"));
- primaryStage.setTitle("RaceVision");
+ primaryStage.setTitle("Party Parrots at Sea");
Scene scene = new Scene(root, 1530, 960);
scene.getStylesheets().add(getClass().getResource("/css/master.css").toString());
primaryStage.setScene(scene);
diff --git a/src/main/resources/views/StartScreenView.fxml b/src/main/resources/views/StartScreenView.fxml
index 4bd0a808..37ea3885 100644
--- a/src/main/resources/views/StartScreenView.fxml
+++ b/src/main/resources/views/StartScreenView.fxml
@@ -20,7 +20,9 @@
-
+
From c15f13bc2c269633023807af3fc0d4cf8f729489 Mon Sep 17 00:00:00 2001
From: William Muir
Date: Tue, 29 Aug 2017 14:56:06 +1200
Subject: [PATCH 03/29] Refactored some of the XMLGenerator code. Added tokens
to the generated XML
Refactor not complete. Generation needs some tidying.
#story[1250]
---
.../java/seng302/gameServer/GameState.java | 7 ++
.../seng302/gameServer/MainServerThread.java | 2 -
.../gameServer/ServerToClientThread.java | 71 +++++++++----------
.../java/seng302/model/mark/MarkOrder.java | 9 ++-
.../{Race.java => RaceXMLTemplate.java} | 26 ++++---
.../{Regatta.java => RegattaXMLTemplate.java} | 4 +-
src/main/java/seng302/model/token/Token.java | 22 ++++++
.../java/seng302/model/token/TokenType.java | 31 ++++++++
.../java/seng302/utilities/XMLGenerator.java | 12 ++--
.../server_config/xml_templates/race.ftlh | 6 ++
10 files changed, 128 insertions(+), 62 deletions(-)
rename src/main/java/seng302/model/stream/xml/generator/{Race.java => RaceXMLTemplate.java} (71%)
rename src/main/java/seng302/model/stream/xml/generator/{Regatta.java => RegattaXMLTemplate.java} (91%)
create mode 100644 src/main/java/seng302/model/token/Token.java
create mode 100644 src/main/java/seng302/model/token/TokenType.java
diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java
index 0b36ab16..e6379369 100644
--- a/src/main/java/seng302/gameServer/GameState.java
+++ b/src/main/java/seng302/gameServer/GameState.java
@@ -29,6 +29,7 @@ import seng302.model.ServerYacht;
import seng302.model.mark.CompoundMark;
import seng302.model.mark.Mark;
import seng302.model.mark.MarkOrder;
+import seng302.model.token.Token;
import seng302.utilities.GeoUtility;
import seng302.utilities.XMLParser;
@@ -65,6 +66,7 @@ public class GameState implements Runnable {
private static String hostIpAddress;
private static List players;
private static Map yachts;
+ private static List tokens;
private static Boolean isRaceStarted;
private static GameStages currentStage;
private static MarkOrder markOrder;
@@ -91,6 +93,7 @@ public class GameState implements Runnable {
windSpeed = 10000d;
this.hostIpAddress = hostIpAddress;
yachts = new HashMap<>();
+ tokens = new ArrayList<>();
players = new ArrayList<>();
GameState.hostIpAddress = hostIpAddress;
customizationFlag = false;
@@ -137,6 +140,10 @@ public class GameState implements Runnable {
return players;
}
+ public static List getTokens() {
+ return tokens;
+ }
+
public static void addPlayer(Player player) {
players.add(player);
String playerText = player.getYacht().getSourceId() + " " + player.getYacht().getBoatName()
diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java
index 83fb304c..1e37e11d 100644
--- a/src/main/java/seng302/gameServer/MainServerThread.java
+++ b/src/main/java/seng302/gameServer/MainServerThread.java
@@ -29,8 +29,6 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
private static final int MAX_WIND_SPEED = 12000;
private static final int MIN_WIND_SPEED = 8000;
- public static int windSpeed = 1000;
-
private boolean terminated;
private Thread thread;
diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java
index 3a9b4057..7d516370 100644
--- a/src/main/java/seng302/gameServer/ServerToClientThread.java
+++ b/src/main/java/seng302/gameServer/ServerToClientThread.java
@@ -30,29 +30,13 @@ import seng302.gameServer.messages.RegistrationResponseStatus;
import seng302.gameServer.messages.XMLMessage;
import seng302.gameServer.messages.XMLMessageSubType;
import seng302.gameServer.messages.YachtEventCodeMessage;
-import seng302.gameServer.messages.YachtEventCodeMessage;
import seng302.model.Player;
import seng302.model.ServerYacht;
import seng302.model.stream.packets.PacketType;
import seng302.model.stream.packets.StreamPacket;
-import seng302.model.stream.xml.generator.Race;
-import seng302.model.stream.xml.generator.Regatta;
-import seng302.utilities.XMLGenerator;
-import seng302.gameServer.messages.BoatAction;
-import seng302.gameServer.messages.BoatLocationMessage;
-import seng302.gameServer.messages.ClientType;
-import seng302.gameServer.messages.Message;
-import seng302.gameServer.messages.RegistrationResponseMessage;
-import seng302.gameServer.messages.RegistrationResponseStatus;
-import seng302.gameServer.messages.XMLMessage;
-import seng302.gameServer.messages.XMLMessageSubType;
-import seng302.gameServer.messages.YachtEventCodeMessage;
-import seng302.model.Player;
-import seng302.model.ServerYacht;
-import seng302.model.stream.packets.PacketType;
-import seng302.model.stream.packets.StreamPacket;
-import seng302.model.stream.xml.generator.Race;
-import seng302.model.stream.xml.generator.Regatta;
+import seng302.model.stream.xml.generator.RaceXMLTemplate;
+import seng302.model.stream.xml.generator.RegattaXMLTemplate;
+import seng302.model.token.Token;
import seng302.utilities.XMLGenerator;
/**
@@ -92,7 +76,7 @@ public class ServerToClientThread implements Runnable, Observer {
private ClientType clientType;
private Boolean isRegistered = false;
- private XMLGenerator xml;
+ private XMLGenerator xmlGenerator;
private List connectionListeners = new ArrayList<>();
private DisconnectListener disconnectListener;
@@ -250,34 +234,43 @@ public class ServerToClientThread implements Runnable, Observer {
logger.warn("Closed serverToClientThread" + thread, 1);
}
- public void sendSetupMessages() {
- xml = new XMLGenerator();
- Race race = new Race();
- for (ServerYacht yacht : GameState.getYachts().values()) {
- race.addBoat(yacht);
- }
+ /**
+ * Generates XML messages of each type and sends them to the client
+ */
+ // TODO: 29/08/17 wmu16 - This functionality should not even be here
+ public void sendSetupMessages() {
+ xmlGenerator = new XMLGenerator();
+ List yachts = new ArrayList<>(GameState.getYachts().values());
+ List tokens = GameState.getTokens();
+ RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
+ xmlGenerator.setRaceTemplate(raceXMLTemplate);
//@TODO calculate lat/lng values
- xml.setRegatta(
- new Regatta(
+ xmlGenerator.setRegattaTemplate(
+ new RegattaXMLTemplate(
"Party Parrot Test Server", "Bermuda Test Course",
57.6679590, 11.8503233)
);
- xml.setRace(race);
- XMLMessage xmlMessage;
- xmlMessage = new XMLMessage(xml.getRegattaAsXml(), XMLMessageSubType.REGATTA,
- xml.getRegattaAsXml().length());
- sendMessage(xmlMessage);
+ XMLMessage regattaXMLMessage = new XMLMessage(
+ xmlGenerator.getRegattaAsXml(),
+ XMLMessageSubType.REGATTA,
+ xmlGenerator.getRegattaAsXml().length());
- xmlMessage = new XMLMessage(xml.getBoatsAsXml(), XMLMessageSubType.BOAT,
- xml.getBoatsAsXml().length());
- sendMessage(xmlMessage);
+ XMLMessage boatXMLMessage = new XMLMessage(
+ xmlGenerator.getBoatsAsXml(),
+ XMLMessageSubType.BOAT,
+ xmlGenerator.getBoatsAsXml().length());
- xmlMessage = new XMLMessage(xml.getRaceAsXml(), XMLMessageSubType.RACE,
- xml.getRaceAsXml().length());
- sendMessage(xmlMessage);
+ XMLMessage raceXMLMessage = new XMLMessage(
+ xmlGenerator.getRaceAsXml(),
+ XMLMessageSubType.RACE,
+ xmlGenerator.getRaceAsXml().length());
+
+ sendMessage(regattaXMLMessage);
+ sendMessage(boatXMLMessage);
+ sendMessage(raceXMLMessage);
}
private void closeSocket() {
diff --git a/src/main/java/seng302/model/mark/MarkOrder.java b/src/main/java/seng302/model/mark/MarkOrder.java
index ab3a1848..0e250e99 100644
--- a/src/main/java/seng302/model/mark/MarkOrder.java
+++ b/src/main/java/seng302/model/mark/MarkOrder.java
@@ -11,8 +11,10 @@ import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import seng302.gameServer.messages.RoundingSide;
-import seng302.model.stream.xml.generator.Race;
+import seng302.model.ServerYacht;
+import seng302.model.stream.xml.generator.RaceXMLTemplate;
import seng302.model.stream.xml.parser.RaceXMLData;
+import seng302.model.token.Token;
import seng302.utilities.XMLGenerator;
import seng302.utilities.XMLParser;
import java.util.*;
@@ -125,7 +127,10 @@ public class MarkOrder {
private void loadRaceProperties(){
XMLGenerator generator = new XMLGenerator();
- generator.setRace(new Race());
+ // TODO: 29/08/17 wmu16 - This is terrible, having to make a template just to receive constant data
+ generator.setRaceTemplate(new RaceXMLTemplate(
+ new ArrayList<>(),
+ new ArrayList<>()));
String raceXML = generator.getRaceAsXml();
diff --git a/src/main/java/seng302/model/stream/xml/generator/Race.java b/src/main/java/seng302/model/stream/xml/generator/RaceXMLTemplate.java
similarity index 71%
rename from src/main/java/seng302/model/stream/xml/generator/Race.java
rename to src/main/java/seng302/model/stream/xml/generator/RaceXMLTemplate.java
index cf42cb2c..8ce7d5ad 100644
--- a/src/main/java/seng302/model/stream/xml/generator/Race.java
+++ b/src/main/java/seng302/model/stream/xml/generator/RaceXMLTemplate.java
@@ -5,28 +5,23 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import seng302.model.ServerYacht;
+import seng302.model.token.Token;
/**
* A Race object that can be parsed into XML
*/
-public class Race {
+public class RaceXMLTemplate {
private List yachts;
private LocalDateTime startTime;
+ private List tokens;
- public Race(){
- yachts = new ArrayList<>();
+ public RaceXMLTemplate(List yachts, List tokens) {
+ this.yachts = yachts;
+ this.tokens = tokens;
startTime = LocalDateTime.now();
}
- /**
- * Add a boat to the race
- * @param yacht The boat to add
- */
- public void addBoat(ServerYacht yacht) {
- yachts.add(yacht);
- }
-
/**
* Get a list of boats in the race
* @return A List of boats
@@ -35,6 +30,15 @@ public class Race {
return Collections.unmodifiableList(yachts);
}
+ /**
+ * Get a list of tokens in the race
+ *
+ * @return A list of tokens
+ */
+ public List getTokens() {
+ return Collections.unmodifiableList(tokens);
+ }
+
/**
* Set the time until the race starts
* @param seconds The time in seconds until the race starts
diff --git a/src/main/java/seng302/model/stream/xml/generator/Regatta.java b/src/main/java/seng302/model/stream/xml/generator/RegattaXMLTemplate.java
similarity index 91%
rename from src/main/java/seng302/model/stream/xml/generator/Regatta.java
rename to src/main/java/seng302/model/stream/xml/generator/RegattaXMLTemplate.java
index fa802e01..8bd344ba 100644
--- a/src/main/java/seng302/model/stream/xml/generator/Regatta.java
+++ b/src/main/java/seng302/model/stream/xml/generator/RegattaXMLTemplate.java
@@ -3,7 +3,7 @@ package seng302.model.stream.xml.generator;
/**
* A Race regatta that can be parsed into XML
*/
-public class Regatta {
+public class RegattaXMLTemplate {
private final Double DEFAULT_ALTITUDE = 0d;
private final Integer DEFAULT_REGATTA_ID = 0;
@@ -18,7 +18,7 @@ public class Regatta {
private Integer utcOffset;
private Double magneticVariation;
- public Regatta(String name, String courseName, Double latitude, Double longitude) {
+ public RegattaXMLTemplate(String name, String courseName, Double latitude, Double longitude) {
this.name = name;
this.id = DEFAULT_REGATTA_ID;
this.courseName = courseName;
diff --git a/src/main/java/seng302/model/token/Token.java b/src/main/java/seng302/model/token/Token.java
new file mode 100644
index 00000000..9c55c41c
--- /dev/null
+++ b/src/main/java/seng302/model/token/Token.java
@@ -0,0 +1,22 @@
+package seng302.model.token;
+
+import seng302.model.GeoPoint;
+
+/**
+ * A class describing a game token
+ * Created by wmu16 on 28/08/17.
+ */
+public class Token extends GeoPoint {
+
+ private TokenType tokenType;
+
+ public Token(TokenType tokenType, double lat, double lng) {
+ super(lat, lng);
+ this.tokenType = tokenType;
+ }
+
+ public TokenType getTokenType() {
+ return tokenType;
+ }
+
+}
diff --git a/src/main/java/seng302/model/token/TokenType.java b/src/main/java/seng302/model/token/TokenType.java
new file mode 100644
index 00000000..d5c2df01
--- /dev/null
+++ b/src/main/java/seng302/model/token/TokenType.java
@@ -0,0 +1,31 @@
+package seng302.model.token;
+
+/**
+ * An enum describing the different types of game objects
+ * Created by wmu16 on 28/08/17.
+ */
+public enum TokenType {
+ BOOST(0),
+ HANDLING(1);
+
+ private int value;
+
+ TokenType(int value) {
+ this.value = value;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public static TokenType getToken(int value) {
+ switch (value) {
+ case 0:
+ return BOOST;
+ case 1:
+ return HANDLING;
+ default:
+ return BOOST;
+ }
+ }
+}
diff --git a/src/main/java/seng302/utilities/XMLGenerator.java b/src/main/java/seng302/utilities/XMLGenerator.java
index 7fcc8efd..4915bea1 100644
--- a/src/main/java/seng302/utilities/XMLGenerator.java
+++ b/src/main/java/seng302/utilities/XMLGenerator.java
@@ -7,8 +7,8 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
-import seng302.model.stream.xml.generator.Race;
-import seng302.model.stream.xml.generator.Regatta;
+import seng302.model.stream.xml.generator.RaceXMLTemplate;
+import seng302.model.stream.xml.generator.RegattaXMLTemplate;
import seng302.gameServer.messages.XMLMessageSubType;
/**
@@ -20,8 +20,8 @@ public class XMLGenerator {
private static final String BOATS_TEMPLATE_NAME = "boats.ftlh";
private static final String RACE_TEMPLATE_NAME = "race.ftlh";
private Configuration configuration;
- private Regatta regatta;
- private Race race;
+ private RegattaXMLTemplate regatta;
+ private RaceXMLTemplate race;
/**
* Set up a configuration instance for Apache Freemake
@@ -48,7 +48,7 @@ public class XMLGenerator {
* Note: This must be set before a regatta message can be generated
* @param regatta The race regatta
*/
- public void setRegatta(Regatta regatta){
+ public void setRegattaTemplate(RegattaXMLTemplate regatta) {
this.regatta = regatta;
}
@@ -57,7 +57,7 @@ public class XMLGenerator {
* Note: This must be set before a boat or race message can be generated
* @param race The race
*/
- public void setRace(Race race){
+ public void setRaceTemplate(RaceXMLTemplate race) {
this.race = race;
}
diff --git a/src/main/resources/server_config/xml_templates/race.ftlh b/src/main/resources/server_config/xml_templates/race.ftlh
index 8fa95216..0dfb65e4 100644
--- a/src/main/resources/server_config/xml_templates/race.ftlh
+++ b/src/main/resources/server_config/xml_templates/race.ftlh
@@ -11,6 +11,12 @@
#list>
+
+ <#list tokens as token>
+
+ #list>
+
+
From 23027705da8723a0b11364d67a902fa47986d4b3 Mon Sep 17 00:00:00 2001
From: William Muir
Date: Tue, 29 Aug 2017 15:37:01 +1200
Subject: [PATCH 04/29] Sample Tokens are now sent out in RaceXML correctly
Token and TokenType class created
#story[1250]
---
src/main/java/seng302/gameServer/GameState.java | 16 ++++++++++++++++
.../server_config/xml_templates/race.ftlh | 2 +-
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java
index e6379369..fcd3fa7e 100644
--- a/src/main/java/seng302/gameServer/GameState.java
+++ b/src/main/java/seng302/gameServer/GameState.java
@@ -30,6 +30,7 @@ import seng302.model.mark.CompoundMark;
import seng302.model.mark.Mark;
import seng302.model.mark.MarkOrder;
import seng302.model.token.Token;
+import seng302.model.token.TokenType;
import seng302.utilities.GeoUtility;
import seng302.utilities.XMLParser;
@@ -94,6 +95,17 @@ public class GameState implements Runnable {
this.hostIpAddress = hostIpAddress;
yachts = new HashMap<>();
tokens = new ArrayList<>();
+
+ //TEMP TEST STUFF
+ // TODO: 29/08/17 wmu16 - Take this out!
+ tokens.add(new Token(TokenType.BOOST, 1233d, 11.83154));
+ tokens.add(new Token(TokenType.BOOST, 57.66877, 11.83382));
+ tokens.add(new Token(TokenType.BOOST, 57.66914, 11.83965));
+ tokens.add(new Token(TokenType.BOOST, 57.66684, 11.83214));
+ ;
+
+ //TEMP TEST STUFF
+
players = new ArrayList<>();
GameState.hostIpAddress = hostIpAddress;
customizationFlag = false;
@@ -140,6 +152,10 @@ public class GameState implements Runnable {
return players;
}
+ public static void addToken(Token token) {
+ tokens.add(token);
+ }
+
public static List getTokens() {
return tokens;
}
diff --git a/src/main/resources/server_config/xml_templates/race.ftlh b/src/main/resources/server_config/xml_templates/race.ftlh
index 0dfb65e4..081fc085 100644
--- a/src/main/resources/server_config/xml_templates/race.ftlh
+++ b/src/main/resources/server_config/xml_templates/race.ftlh
@@ -13,7 +13,7 @@
<#list tokens as token>
-
+
#list>
From 1c866ea8c2be9e79f2281c442f1a7b24fb60521f Mon Sep 17 00:00:00 2001
From: William Muir
Date: Tue, 29 Aug 2017 16:50:31 +1200
Subject: [PATCH 05/29] GameClient now extracts Tokens client side
#story[1250]
---
.../java/seng302/gameServer/GameState.java | 2 ++
.../model/stream/xml/parser/RaceXMLData.java | 10 ++++++++-
.../java/seng302/utilities/XMLParser.java | 22 +++++++++++++++++++
.../java/seng302/visualiser/GameClient.java | 2 ++
src/main/resources/server_config/race.xml | 2 ++
5 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java
index fcd3fa7e..bec5aaed 100644
--- a/src/main/java/seng302/gameServer/GameState.java
+++ b/src/main/java/seng302/gameServer/GameState.java
@@ -29,9 +29,11 @@ import seng302.model.ServerYacht;
import seng302.model.mark.CompoundMark;
import seng302.model.mark.Mark;
import seng302.model.mark.MarkOrder;
+import seng302.model.stream.xml.generator.RaceXMLTemplate;
import seng302.model.token.Token;
import seng302.model.token.TokenType;
import seng302.utilities.GeoUtility;
+import seng302.utilities.XMLGenerator;
import seng302.utilities.XMLParser;
/**
diff --git a/src/main/java/seng302/model/stream/xml/parser/RaceXMLData.java b/src/main/java/seng302/model/stream/xml/parser/RaceXMLData.java
index 13a0bdbc..5f1935df 100644
--- a/src/main/java/seng302/model/stream/xml/parser/RaceXMLData.java
+++ b/src/main/java/seng302/model/stream/xml/parser/RaceXMLData.java
@@ -6,6 +6,7 @@ import java.util.Map;
import seng302.model.Limit;
import seng302.model.mark.CompoundMark;
import seng302.model.mark.Corner;
+import seng302.model.token.Token;
/**
* Process a Document object containing race data in XML format and stores the data.
@@ -13,13 +14,16 @@ import seng302.model.mark.Corner;
public class RaceXMLData {
private List participants;
+ private List tokens;
private Map compoundMarks;
private List markSequence;
private List courseLimit;
- public RaceXMLData(List participants, List compoundMarks,
+ public RaceXMLData(List participants, List tokens,
+ List compoundMarks,
List markSequence, List courseLimit) {
this.participants = participants;
+ this.tokens = tokens;
this.markSequence = markSequence;
this.courseLimit = courseLimit;
this.compoundMarks = new HashMap<>();
@@ -32,6 +36,10 @@ public class RaceXMLData {
return participants;
}
+ public List getTokens() {
+ return tokens;
+ }
+
public Map getCompoundMarks() {
return compoundMarks;
}
diff --git a/src/main/java/seng302/utilities/XMLParser.java b/src/main/java/seng302/utilities/XMLParser.java
index d7556234..a903daaf 100644
--- a/src/main/java/seng302/utilities/XMLParser.java
+++ b/src/main/java/seng302/utilities/XMLParser.java
@@ -16,6 +16,8 @@ import seng302.model.mark.Corner;
import seng302.model.mark.Mark;
import seng302.model.stream.xml.parser.RaceXMLData;
import seng302.model.stream.xml.parser.RegattaXMLData;
+import seng302.model.token.Token;
+import seng302.model.token.TokenType;
/**
* Utilities for parsing XML documents
@@ -182,12 +184,32 @@ public class XMLParser {
Element docEle = doc.getDocumentElement();
return new RaceXMLData(
extractParticpantIDs(docEle),
+ extractTokens(docEle),
extractCompoundMarks(docEle),
extractMarkOrder(docEle),
extractCourseLimit(docEle)
);
}
+ /**
+ * Extracts token data
+ */
+ private static List extractTokens(Element docEle) {
+ List tokens = new ArrayList<>();
+ NodeList tokenList = docEle.getElementsByTagName("Tokens").item(0).getChildNodes();
+ for (int i = 0; i < tokenList.getLength(); i++) {
+ Node tokenNode = tokenList.item(i);
+ if (tokenNode.getNodeName().equals("Token")) {
+ String tokenType = getNodeAttributeString(tokenNode, "TokenType");
+ Double lat = getNodeAttributeDouble(tokenNode, "TargetLat");
+ Double lng = getNodeAttributeDouble(tokenNode, "TargetLng");
+ tokens.add(new Token(TokenType.valueOf(tokenType), lat, lng));
+ }
+ }
+
+ return tokens;
+ }
+
/**
* Extracts course limit data
*/
diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java
index 63687191..e73eb43b 100644
--- a/src/main/java/seng302/visualiser/GameClient.java
+++ b/src/main/java/seng302/visualiser/GameClient.java
@@ -28,6 +28,7 @@ import seng302.model.stream.parser.RaceStatusData;
import seng302.model.stream.parser.YachtEventData;
import seng302.model.stream.xml.parser.RaceXMLData;
import seng302.model.stream.xml.parser.RegattaXMLData;
+import seng302.model.token.Token;
import seng302.utilities.StreamParser;
import seng302.utilities.XMLParser;
import seng302.visualiser.controllers.FinishScreenViewController;
@@ -260,6 +261,7 @@ public class GameClient {
courseData = XMLParser.parseRace(
StreamParser.extractXmlMessage(packet)
);
+
if (raceView != null) {
raceView.updateRaceData(courseData);
}
diff --git a/src/main/resources/server_config/race.xml b/src/main/resources/server_config/race.xml
index b2379fca..eb6354d7 100644
--- a/src/main/resources/server_config/race.xml
+++ b/src/main/resources/server_config/race.xml
@@ -12,6 +12,8 @@
+
+
From dc193108494bb04b13c37d332c7fbaeffc71bb26 Mon Sep 17 00:00:00 2001
From: William Muir
Date: Tue, 29 Aug 2017 17:17:06 +1200
Subject: [PATCH 06/29] Tokens now appear client side
#story[1250]
---
.../java/seng302/gameServer/GameState.java | 2 +-
.../java/seng302/visualiser/GameView.java | 25 +++++++++++++++++++
.../controllers/RaceViewController.java | 5 +++-
3 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java
index bec5aaed..89e4492c 100644
--- a/src/main/java/seng302/gameServer/GameState.java
+++ b/src/main/java/seng302/gameServer/GameState.java
@@ -100,7 +100,7 @@ public class GameState implements Runnable {
//TEMP TEST STUFF
// TODO: 29/08/17 wmu16 - Take this out!
- tokens.add(new Token(TokenType.BOOST, 1233d, 11.83154));
+ tokens.add(new Token(TokenType.BOOST, 57.66946, 11.83154));
tokens.add(new Token(TokenType.BOOST, 57.66877, 11.83382));
tokens.add(new Token(TokenType.BOOST, 57.66914, 11.83965));
tokens.add(new Token(TokenType.BOOST, 57.66684, 11.83214));
diff --git a/src/main/java/seng302/visualiser/GameView.java b/src/main/java/seng302/visualiser/GameView.java
index 99a49021..668a9cbc 100644
--- a/src/main/java/seng302/visualiser/GameView.java
+++ b/src/main/java/seng302/visualiser/GameView.java
@@ -35,6 +35,7 @@ import seng302.model.Limit;
import seng302.model.mark.CompoundMark;
import seng302.model.mark.Corner;
import seng302.model.mark.Mark;
+import seng302.model.token.Token;
import seng302.utilities.GeoUtility;
import seng302.visualiser.fxObjects.AnnotationBox;
import seng302.visualiser.fxObjects.BoatObject;
@@ -82,6 +83,7 @@ public class GameView extends Pane {
private Group boatObjectGroup = new Group();
private Group trails = new Group();
private Group markers = new Group();
+ private Group tokens = new Group();
private List course = new ArrayList<>();
private ImageView mapImage = new ImageView();
@@ -141,6 +143,7 @@ public class GameView extends Pane {
gameObjects.add(mapImage);
gameObjects.add(raceBorder);
gameObjects.add(markers);
+ gameObjects.add(tokens);
initializeTimer();
}
@@ -435,6 +438,28 @@ public class GameView extends Pane {
raceBorder.getPoints().setAll(boundaryPoints);
}
+ /**
+ * Replaces all tokens in the course with those passed in
+ *
+ * @param newTokens the tokens to be put on the course.
+ */
+ public void updateTokens(List newTokens) {
+
+ List mapTokens = new ArrayList<>();
+
+ for (Token token : newTokens) {
+ Point2D location = findScaledXY(token.getLat(), token.getLng());
+ Marker thisMarker = new Marker(Color.YELLOW);
+ thisMarker.setLayoutX(location.getX());
+ thisMarker.setLayoutY(location.getY());
+ mapTokens.add(thisMarker);
+ }
+ Platform.runLater(() -> {
+ tokens.getChildren().clear();
+ tokens.getChildren().addAll(mapTokens);
+ });
+ }
+
// TODO: 16/08/17 initialize zooming internal to GameView only
/**
* Enables zoom. Has to be called after this is added to a scene.
diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java
index a7cd9718..b5119086 100644
--- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java
+++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java
@@ -41,6 +41,7 @@ import seng302.model.RaceState;
import seng302.model.mark.CompoundMark;
import seng302.model.mark.Mark;
import seng302.model.stream.xml.parser.RaceXMLData;
+import seng302.model.token.Token;
import seng302.visualiser.GameView;
import seng302.visualiser.controllers.annotations.Annotation;
import seng302.visualiser.controllers.annotations.ImportantAnnotationController;
@@ -139,7 +140,8 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
gameView.updateBorder(raceData.getCourseLimit());
gameView.updateCourse(
new ArrayList<>(raceData.getCompoundMarks().values()), raceData.getMarkSequence()
- );
+ );
+ gameView.updateTokens(raceData.getTokens());
gameView.enableZoom();
gameView.setBoatAsPlayer(player);
gameView.startRace();
@@ -621,5 +623,6 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
public void updateRaceData (RaceXMLData raceData) {
this.courseData = raceData;
gameView.updateBorder(raceData.getCourseLimit());
+ gameView.updateTokens(raceData.getTokens());
}
}
\ No newline at end of file
From 201405d0700843b13bfd204b951332834f1214e3 Mon Sep 17 00:00:00 2001
From: William Muir
Date: Tue, 29 Aug 2017 19:13:48 +1200
Subject: [PATCH 07/29] WIP: Marks randomly appear in course now. Mark arrows
broken.
Something about sending raceXML during the course of the race breaks the mark rounding arrows functionallity, crashing the game.
#story[1250]
---
.../java/seng302/gameServer/GameState.java | 14 +--
.../seng302/gameServer/MainServerThread.java | 90 +++++++++++++++----
.../controllers/RaceViewController.java | 2 +-
.../server_config/xml_templates/race.ftlh | 3 -
4 files changed, 80 insertions(+), 29 deletions(-)
diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java
index 89e4492c..6cc37e91 100644
--- a/src/main/java/seng302/gameServer/GameState.java
+++ b/src/main/java/seng302/gameServer/GameState.java
@@ -98,16 +98,6 @@ public class GameState implements Runnable {
yachts = new HashMap<>();
tokens = new ArrayList<>();
- //TEMP TEST STUFF
- // TODO: 29/08/17 wmu16 - Take this out!
- tokens.add(new Token(TokenType.BOOST, 57.66946, 11.83154));
- tokens.add(new Token(TokenType.BOOST, 57.66877, 11.83382));
- tokens.add(new Token(TokenType.BOOST, 57.66914, 11.83965));
- tokens.add(new Token(TokenType.BOOST, 57.66684, 11.83214));
- ;
-
- //TEMP TEST STUFF
-
players = new ArrayList<>();
GameState.hostIpAddress = hostIpAddress;
customizationFlag = false;
@@ -162,6 +152,10 @@ public class GameState implements Runnable {
return tokens;
}
+ public static void clearTokens() {
+ tokens.clear();
+ }
+
public static void addPlayer(Player player) {
players.add(player);
String playerText = player.getYacht().getSourceId() + " " + player.getYacht().getBoatName()
diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java
index 1e37e11d..2303b0c7 100644
--- a/src/main/java/seng302/gameServer/MainServerThread.java
+++ b/src/main/java/seng302/gameServer/MainServerThread.java
@@ -6,12 +6,16 @@ import seng302.model.Player;
import seng302.model.PolarTable;
import seng302.model.ServerYacht;
import seng302.model.mark.CompoundMark;
+import seng302.model.stream.xml.generator.RaceXMLTemplate;
+import seng302.model.token.Token;
+import seng302.model.token.TokenType;
import seng302.utilities.GeoUtility;
import java.io.IOException;
import java.net.ServerSocket;
import java.time.LocalDateTime;
import java.util.*;
+import seng302.utilities.XMLGenerator;
/**
* A class describing the overall server, which creates and collects server threads for each client
@@ -48,6 +52,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
terminated = false;
thread = new Thread(this, "MainServer");
startUpdatingWind();
+ startSpawningTokens();
thread.start();
}
@@ -141,6 +146,25 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
GameState.setWindDirection(direction.doubleValue());
}
+ // TODO: 29/08/17 wmu16 - This should not be in one function (init and a scheduling update)
+ public void startGame() {
+ initialiseBoatPositions();
+ Timer t = new Timer();
+
+ t.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ broadcastMessage(makeRaceStatusMessage());
+ if (GameState.getCurrentStage() == GameStages.PRE_RACE
+ || GameState.getCurrentStage() == GameStages.LOBBYING) {
+ broadcastMessage(makeRaceStartMessage());
+ }
+ }
+ }, 0, 500);
+ }
+
+
+ // TODO: 29/08/17 wmu16 - This sort of update should be in game state
private static void startUpdatingWind(){
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@@ -151,6 +175,57 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
}, 0, 500);
}
+ /**
+ * Start spawning coins every 60s after the first minute
+ */
+ private void startSpawningTokens() {
+ Timer timer = new Timer();
+ timer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ spawnNewCoins();
+ }
+ }, 0, 60000);
+ }
+
+ /**
+ * Randomly select a subset of tokens from a pre defined superset
+ * Broadasts a new race status message to show this update
+ */
+ private void spawnNewCoins() {
+
+ List allTokens = new ArrayList<>();
+ Token token1 = new Token(TokenType.BOOST, 57.66946, 11.83154);
+ Token token2 = new Token(TokenType.BOOST, 57.66877, 11.83382);
+ Token token3 = new Token(TokenType.BOOST, 57.66914, 11.83965);
+ Token token4 = new Token(TokenType.BOOST, 57.66684, 11.83214);
+ allTokens.add(token1);
+ allTokens.add(token2);
+ allTokens.add(token3);
+ allTokens.add(token4);
+
+ GameState.clearTokens();
+ Random random = new Random();
+ Collections.shuffle(allTokens);
+ for (int i = 0; i < random.nextInt(allTokens.size() - 1); i++) {
+ GameState.addToken(allTokens.get(i));
+ }
+
+ XMLGenerator xmlGenerator = new XMLGenerator();
+ List yachts = new ArrayList<>(GameState.getYachts().values());
+ List tokens = GameState.getTokens();
+ RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
+ xmlGenerator.setRaceTemplate(raceXMLTemplate);
+
+ XMLMessage raceXMLMessage = new XMLMessage(
+ xmlGenerator.getRaceAsXml(),
+ XMLMessageSubType.RACE,
+ xmlGenerator.getRaceAsXml().length());
+
+ broadcastMessage(raceXMLMessage);
+ }
+
+
static void serverLog(String message, int logLevel) {
if (logLevel <= LOG_LEVEL) {
@@ -203,21 +278,6 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
closedConnection.terminate();
}
- public void startGame() {
- initialiseBoatPositions();
- Timer t = new Timer();
-
- t.schedule(new TimerTask() {
- @Override
- public void run() {
- broadcastMessage(makeRaceStatusMessage());
- if (GameState.getCurrentStage() == GameStages.PRE_RACE || GameState.getCurrentStage() == GameStages.LOBBYING) {
- broadcastMessage(makeRaceStartMessage());
- }
- }
- }, 0, 500);
- }
-
private RaceStartStatusMessage makeRaceStartMessage() {
Long raceStartTime = GameState.getStartTime();
diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java
index b5119086..e5673ca5 100644
--- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java
+++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java
@@ -138,10 +138,10 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
Platform.runLater(() -> contentAnchorPane.getChildren().add(0, gameView));
gameView.setBoats(new ArrayList<>(participants.values()));
gameView.updateBorder(raceData.getCourseLimit());
+ gameView.updateTokens(raceData.getTokens());
gameView.updateCourse(
new ArrayList<>(raceData.getCompoundMarks().values()), raceData.getMarkSequence()
);
- gameView.updateTokens(raceData.getTokens());
gameView.enableZoom();
gameView.setBoatAsPlayer(player);
gameView.startRace();
diff --git a/src/main/resources/server_config/xml_templates/race.ftlh b/src/main/resources/server_config/xml_templates/race.ftlh
index 081fc085..88d2e22a 100644
--- a/src/main/resources/server_config/xml_templates/race.ftlh
+++ b/src/main/resources/server_config/xml_templates/race.ftlh
@@ -4,19 +4,16 @@
15082901
Fleet
-
<#list boats as boat>
#list>
-
<#list tokens as token>
#list>
-
From ace48a8404ee562c26629bbb01517dfa337e888e Mon Sep 17 00:00:00 2001
From: William Muir
Date: Tue, 29 Aug 2017 21:23:46 +1200
Subject: [PATCH 08/29] Refactored MainServer Class in prep for better sending
out of XML messages
All messages are now created through MessageFactory class
Minor tweaks to improve code base server side
Removed observer from Server to Client threads
#story[1250]
---
.../java/seng302/gameServer/GameState.java | 33 ++++-
.../seng302/gameServer/MainServerThread.java | 136 ++++--------------
.../seng302/gameServer/MessageFactory.java | 130 +++++++++++++++++
.../gameServer/ServerToClientThread.java | 68 +--------
src/main/java/seng302/model/ServerYacht.java | 22 +--
.../visualiser/ClientToServerThread.java | 4 +-
.../java/seng302/visualiser/GameView.java | 6 +
7 files changed, 211 insertions(+), 188 deletions(-)
create mode 100644 src/main/java/seng302/gameServer/MessageFactory.java
diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java
index 6cc37e91..654a57b4 100644
--- a/src/main/java/seng302/gameServer/GameState.java
+++ b/src/main/java/seng302/gameServer/GameState.java
@@ -20,6 +20,8 @@ import seng302.gameServer.messages.MarkRoundingMessage;
import seng302.gameServer.messages.MarkType;
import seng302.gameServer.messages.Message;
import seng302.gameServer.messages.RoundingBoatStatus;
+import seng302.gameServer.messages.XMLMessage;
+import seng302.gameServer.messages.XMLMessageSubType;
import seng302.gameServer.messages.YachtEventCodeMessage;
import seng302.model.GeoPoint;
import seng302.model.Limit;
@@ -51,8 +53,13 @@ public class GameState implements Runnable {
private Logger logger = LoggerFactory.getLogger(GameState.class);
- private static final Integer STATE_UPDATES_PER_SECOND = 60;
+
+ public static final int WARNING_TIME = 10 * -1000;
+ public static final int PREPATORY_TIME = 5 * -1000;
+ public static final int TIME_TILL_START = 10 * 1000;
public static Integer MAX_PLAYERS = 8;
+
+ private static final Integer STATE_UPDATES_PER_SECOND = 60;
public static Double ROUNDING_DISTANCE = 50d; // TODO: 14/08/17 wmu16 - Look into this value further
public static final Double MARK_COLLISION_DISTANCE = 15d;
public static final Double YACHT_COLLISION_DISTANCE = 25.0;
@@ -197,7 +204,7 @@ public class GameState implements Runnable {
}
public static void resetStartTime(){
- startTime = System.currentTimeMillis() + MainServerThread.TIME_TILL_START;
+ startTime = System.currentTimeMillis() + TIME_TILL_START;
}
public static Double getWindDirection() {
@@ -299,6 +306,7 @@ public class GameState implements Runnable {
yacht.updateLocation(timeInterval);
if (yacht.getBoatStatus() != BoatStatus.FINISHED) {
checkCollision(yacht);
+ checkTokenPickUp(yacht);
checkForLegProgression(yacht);
raceFinished = false;
}
@@ -331,6 +339,24 @@ public class GameState implements Runnable {
return false;
}
+ /**
+ * Checks all tokens to see if a yacht has picked one up
+ *
+ * @param serverYacht The yacht to check for
+ */
+ private void checkTokenPickUp(ServerYacht serverYacht) {
+ for (Token token : tokens) {
+ Double distance = GeoUtility.getDistance(token, serverYacht.getLocation());
+ if (distance < YACHT_COLLISION_DISTANCE) {
+ tokens.remove(token);
+ serverYacht.setPowerUp(token.getTokenType());
+ notifyMessageListeners(MessageFactory.getRaceXML());
+ break;
+ }
+ }
+ }
+
+
public static void checkCollision(ServerYacht serverYacht) {
ServerYacht collidedYacht = checkYachtCollision(serverYacht);
if (collidedYacht != null) {
@@ -703,7 +729,7 @@ public class GameState implements Runnable {
}
- public static void addMarkPassListener(NewMessageListener listener) {
+ public static void addMessageEventListener(NewMessageListener listener) {
markListeners.add(listener);
}
@@ -718,4 +744,5 @@ public class GameState implements Runnable {
public static void resetCustomizationFlag() {
customizationFlag = false;
}
+
}
diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java
index 2303b0c7..c0b59751 100644
--- a/src/main/java/seng302/gameServer/MainServerThread.java
+++ b/src/main/java/seng302/gameServer/MainServerThread.java
@@ -1,21 +1,20 @@
package seng302.gameServer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import seng302.gameServer.messages.*;
import seng302.model.GeoPoint;
import seng302.model.Player;
import seng302.model.PolarTable;
import seng302.model.ServerYacht;
import seng302.model.mark.CompoundMark;
-import seng302.model.stream.xml.generator.RaceXMLTemplate;
import seng302.model.token.Token;
import seng302.model.token.TokenType;
import seng302.utilities.GeoUtility;
import java.io.IOException;
import java.net.ServerSocket;
-import java.time.LocalDateTime;
import java.util.*;
-import seng302.utilities.XMLGenerator;
/**
* A class describing the overall server, which creates and collects server threads for each client
@@ -23,12 +22,10 @@ import seng302.utilities.XMLGenerator;
*/
public class MainServerThread implements Runnable, ClientConnectionDelegate {
+ private Logger logger = LoggerFactory.getLogger(MainServerThread.class);
+
private static final int PORT = 4942;
private static final Integer CLIENT_UPDATES_PER_SECOND = 60;
- private static final int LOG_LEVEL = 1;
- private static final int WARNING_TIME = 10 * -1000;
- private static final int PREPATORY_TIME = 5 * -1000;
- public static final int TIME_TILL_START = 10 * 1000;
private static final int MAX_WIND_SPEED = 12000;
private static final int MIN_WIND_SPEED = 8000;
@@ -45,14 +42,15 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
try {
serverSocket = new ServerSocket(PORT);
} catch (IOException e) {
- serverLog("IO error in server thread handler upon trying to make new server socket", 0);
+ logger.trace("IO error in server thread handler upon trying to make new server socket",
+ 0);
}
PolarTable.parsePolarFile(getClass().getResourceAsStream("/config/acc_polars.csv"));
- GameState.addMarkPassListener(this::broadcastMessage);
+ GameState.addMessageEventListener(this::broadcastMessage);
terminated = false;
thread = new Thread(this, "MainServer");
startUpdatingWind();
- startSpawningTokens();
+// startSpawningTokens();
thread.start();
}
@@ -67,24 +65,22 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
try {
Thread.sleep(1000 / CLIENT_UPDATES_PER_SECOND);
} catch (InterruptedException e) {
- serverLog("Interrupted exception in Main Server Thread thread sleep", 1);
+ logger.trace("Interrupted exception in Main Server Thread thread sleep", 1);
}
if (GameState.getCurrentStage() == GameStages.LOBBYING && GameState
.getCustomizationFlag()) {
// TODO: 16/08/17 ajm412: This can probably be done in a nicer way via those fancy functional interfaces.
- for (ServerToClientThread thread : serverToClientThreads) {
- thread.sendSetupMessages();
- }
+ sendSetupMessages();
GameState.resetCustomizationFlag();
}
if (GameState.getCurrentStage() == GameStages.PRE_RACE) {
- updateClients();
+ sendBoatLocations();
}
//RACING
if (GameState.getCurrentStage() == GameStages.RACING) {
- updateClients();
+ sendBoatLocations();
}
//FINISHED
@@ -105,12 +101,18 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
}
}
- public void updateClients() {
- for (ServerToClientThread serverToClientThread : serverToClientThreads) {
- serverToClientThread.sendBoatLocationPackets();
+ public void sendBoatLocations() {
+ for (ServerYacht serverYacht : GameState.getYachts().values()) {
+ broadcastMessage(MessageFactory.getBoatLocationMessage(serverYacht));
}
}
+ public void sendSetupMessages() {
+ broadcastMessage(MessageFactory.getRaceXML());
+ broadcastMessage(MessageFactory.getRegattaXML());
+ broadcastMessage(MessageFactory.getBoatXML());
+ }
+
private void broadcastMessage(Message message) {
for (ServerToClientThread serverToClientThread : serverToClientThreads) {
serverToClientThread.sendMessage(message);
@@ -154,10 +156,10 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
t.schedule(new TimerTask() {
@Override
public void run() {
- broadcastMessage(makeRaceStatusMessage());
+ broadcastMessage(MessageFactory.getRaceStatusMessage());
if (GameState.getCurrentStage() == GameStages.PRE_RACE
|| GameState.getCurrentStage() == GameStages.LOBBYING) {
- broadcastMessage(makeRaceStartMessage());
+ broadcastMessage(MessageFactory.getRaceStartStatusMessage());
}
}
}, 0, 500);
@@ -184,6 +186,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
@Override
public void run() {
spawnNewCoins();
+ broadcastMessage(MessageFactory.getRaceXML());
}
}, 0, 60000);
}
@@ -210,28 +213,6 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
for (int i = 0; i < random.nextInt(allTokens.size() - 1); i++) {
GameState.addToken(allTokens.get(i));
}
-
- XMLGenerator xmlGenerator = new XMLGenerator();
- List yachts = new ArrayList<>(GameState.getYachts().values());
- List tokens = GameState.getTokens();
- RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
- xmlGenerator.setRaceTemplate(raceXMLTemplate);
-
- XMLMessage raceXMLMessage = new XMLMessage(
- xmlGenerator.getRaceAsXml(),
- XMLMessageSubType.RACE,
- xmlGenerator.getRaceAsXml().length());
-
- broadcastMessage(raceXMLMessage);
- }
-
-
-
- static void serverLog(String message, int logLevel) {
- if (logLevel <= LOG_LEVEL) {
- System.out.println(
- "[SERVER " + LocalDateTime.now().toLocalTime().toString() + "] " + message);
- }
}
/**
@@ -241,13 +222,9 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
*/
@Override
public void clientConnected(ServerToClientThread serverToClientThread) {
- serverLog("Player Connected From " + serverToClientThread.getThread().getName(), 0);
+ logger.debug("Player Connected From " + serverToClientThread.getThread().getName(), 0);
serverToClientThreads.add(serverToClientThread);
- serverToClientThread.addConnectionListener(() -> {
- for (ServerToClientThread thread : serverToClientThreads) {
- thread.sendSetupMessages();
- }
- });
+ serverToClientThread.addConnectionListener(this::sendSetupMessages);
serverToClientThread.addDisconnectListener(this::clientDisconnected);
}
@@ -258,71 +235,20 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
*/
@Override
public void clientDisconnected(Player player) {
-// try {
-// player.getSocket().close();
-// } catch (Exception e) {
-// serverLog("Cannot disconnect the socket for the disconnected player.", 0);
-// }
- serverLog("Player " + player.getYacht().getSourceId() + "'s socket disconnected", 0);
+ logger.debug("Player " + player.getYacht().getSourceId() + "'s socket disconnected", 0);
GameState.removeYacht(player.getYacht().getSourceId());
GameState.removePlayer(player);
ServerToClientThread closedConnection = null;
for (ServerToClientThread serverToClientThread : serverToClientThreads) {
if (serverToClientThread.getSocket() == player.getSocket()) {
- closedConnection = serverToClientThread;
- } else if (GameState.getCurrentStage() != GameStages.RACING){
- serverToClientThread.sendSetupMessages();
+ serverToClientThreads.remove(closedConnection);
+ closedConnection.terminate();
}
}
- serverToClientThreads.remove(closedConnection);
- closedConnection.terminate();
- }
-
- private RaceStartStatusMessage makeRaceStartMessage() {
- Long raceStartTime = GameState.getStartTime();
-
- return new RaceStartStatusMessage(1, raceStartTime ,
- 1, RaceStartNotificationType.SET_RACE_START_TIME);
- }
-
- private RaceStatusMessage makeRaceStatusMessage() {
- // variables taken from GameServerThread
-
- List boatSubMessages = new ArrayList<>();
- RaceStatus raceStatus;
-
- for (Player player : GameState.getPlayers()) {
- ServerYacht y = player.getYacht();
- BoatSubMessage m = new BoatSubMessage(y.getSourceId(), y.getBoatStatus(),
- y.getLegNumber(),
- 0, 0, 1234L,
- 1234L);
- boatSubMessages.add(m);
+ if (GameState.getCurrentStage() != GameStages.RACING) {
+ sendSetupMessages();
}
-
- long timeTillStart = System.currentTimeMillis() - GameState.getStartTime();
-
- if (GameState.getCurrentStage() == GameStages.LOBBYING) {
- raceStatus = RaceStatus.PRESTART;
- } else if (GameState.getCurrentStage() == GameStages.PRE_RACE) {
- raceStatus = RaceStatus.PRESTART;
-
- if (timeTillStart > WARNING_TIME) {
- raceStatus = RaceStatus.WARNING;
- }
-
- if (timeTillStart > PREPATORY_TIME) {
- raceStatus = RaceStatus.PREPARATORY;
- }
- } else {
- raceStatus = RaceStatus.STARTED;
- }
-
- return new RaceStatusMessage(1, raceStatus, GameState.getStartTime(),
- GameState.getWindDirection(),
- GameState.getWindSpeedMMS().longValue(), GameState.getPlayers().size(),
- RaceType.MATCH_RACE, 1, boatSubMessages);
}
public void terminate() {
diff --git a/src/main/java/seng302/gameServer/MessageFactory.java b/src/main/java/seng302/gameServer/MessageFactory.java
new file mode 100644
index 00000000..76410c1e
--- /dev/null
+++ b/src/main/java/seng302/gameServer/MessageFactory.java
@@ -0,0 +1,130 @@
+package seng302.gameServer;
+
+import java.util.ArrayList;
+import java.util.List;
+import seng302.gameServer.messages.BoatLocationMessage;
+import seng302.gameServer.messages.BoatSubMessage;
+import seng302.gameServer.messages.RaceStartNotificationType;
+import seng302.gameServer.messages.RaceStartStatusMessage;
+import seng302.gameServer.messages.RaceStatus;
+import seng302.gameServer.messages.RaceStatusMessage;
+import seng302.gameServer.messages.RaceType;
+import seng302.gameServer.messages.XMLMessage;
+import seng302.gameServer.messages.XMLMessageSubType;
+import seng302.model.Player;
+import seng302.model.ServerYacht;
+import seng302.model.stream.xml.generator.RaceXMLTemplate;
+import seng302.model.stream.xml.generator.RegattaXMLTemplate;
+import seng302.model.token.Token;
+import seng302.utilities.XMLGenerator;
+
+/**
+ * A Class for interfacing between the data we have in the GameState to the messages we need to send
+ * through the MainServerThread.
+ *
+ * WARNING DO NOT USE THIS CLASS IF GAMESTATE HAS NOT BEEN INSTANTIATED.
+ * // TODO: 29/08/17 wmu16 - Make GameState non static to fix this ¯\_(ツ)_/¯
+ * Created by wmu16 on 29/08/17.
+ */
+public class MessageFactory {
+
+ private static XMLGenerator xmlGenerator = new XMLGenerator();
+
+
+ public static RaceStartStatusMessage getRaceStartStatusMessage() {
+ return new RaceStartStatusMessage(
+ 1,
+ GameState.getStartTime(),
+ 1,
+ RaceStartNotificationType.SET_RACE_START_TIME);
+ }
+
+ public static RaceStatusMessage getRaceStatusMessage() {
+ // variables taken from GameServerThread
+
+ List boatSubMessages = new ArrayList<>();
+ RaceStatus raceStatus;
+
+ for (Player player : GameState.getPlayers()) {
+ ServerYacht y = player.getYacht();
+ BoatSubMessage m = new BoatSubMessage(y.getSourceId(), y.getBoatStatus(),
+ y.getLegNumber(),
+ 0, 0, 1234L,
+ 1234L);
+ boatSubMessages.add(m);
+ }
+
+ long timeTillStart = System.currentTimeMillis() - GameState.getStartTime();
+
+ if (GameState.getCurrentStage() == GameStages.LOBBYING) {
+ raceStatus = RaceStatus.PRESTART;
+ } else if (GameState.getCurrentStage() == GameStages.PRE_RACE) {
+ raceStatus = RaceStatus.PRESTART;
+
+ if (timeTillStart > GameState.WARNING_TIME) {
+ raceStatus = RaceStatus.WARNING;
+ }
+
+ if (timeTillStart > GameState.PREPATORY_TIME) {
+ raceStatus = RaceStatus.PREPARATORY;
+ }
+ } else {
+ raceStatus = RaceStatus.STARTED;
+ }
+
+ return new RaceStatusMessage(1, raceStatus, GameState.getStartTime(),
+ GameState.getWindDirection(),
+ GameState.getWindSpeedMMS().longValue(), GameState.getPlayers().size(),
+ RaceType.MATCH_RACE, 1, boatSubMessages);
+ }
+
+ public static BoatLocationMessage getBoatLocationMessage(ServerYacht yacht) {
+ return new BoatLocationMessage(
+ yacht.getSourceId(),
+ 0, // TODO: 29/08/17 wmu16 - Work out what to do with seqNo. Currently not used
+ yacht.getLocation().getLat(),
+ yacht.getLocation().getLng(),
+ yacht.getHeading(),
+ yacht.getCurrentVelocity().longValue());
+ }
+
+ public static XMLMessage getRaceXML() {
+ List yachts = new ArrayList<>(GameState.getYachts().values());
+ List tokens = GameState.getTokens();
+ RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
+ xmlGenerator.setRaceTemplate(raceXMLTemplate);
+
+ XMLMessage raceXMLMessage = new XMLMessage(
+ xmlGenerator.getRaceAsXml(),
+ XMLMessageSubType.RACE,
+ xmlGenerator.getRaceAsXml().length());
+
+ return raceXMLMessage;
+ }
+
+ public static XMLMessage getRegattaXML() {
+ //@TODO calculate lat/lng values
+ xmlGenerator.setRegattaTemplate(
+ new RegattaXMLTemplate(
+ "Party Parrot Test Server", "Bermuda Test Course",
+ 57.6679590, 11.8503233)
+ );
+
+ return new XMLMessage(
+ xmlGenerator.getRegattaAsXml(),
+ XMLMessageSubType.REGATTA,
+ xmlGenerator.getRegattaAsXml().length());
+ }
+
+ public static XMLMessage getBoatXML() {
+ List yachts = new ArrayList<>(GameState.getYachts().values());
+ List tokens = GameState.getTokens();
+ RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
+ xmlGenerator.setRaceTemplate(raceXMLTemplate);
+
+ return new XMLMessage(
+ xmlGenerator.getBoatsAsXml(),
+ XMLMessageSubType.BOAT,
+ xmlGenerator.getBoatsAsXml().length());
+ }
+}
diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java
index 7d516370..12ecf009 100644
--- a/src/main/java/seng302/gameServer/ServerToClientThread.java
+++ b/src/main/java/seng302/gameServer/ServerToClientThread.java
@@ -44,7 +44,7 @@ import seng302.utilities.XMLGenerator;
* its own thread. All server threads created and owned by the server thread handler which can
* trigger client updates on its threads Created by wmu16 on 13/07/17.
*/
-public class ServerToClientThread implements Runnable, Observer {
+public class ServerToClientThread implements Runnable {
/**
* Called to notify listeners when this thread receives a connection correctly.
@@ -128,21 +128,11 @@ public class ServerToClientThread implements Runnable, Observer {
"Yacht", sourceId, sourceId.toString(), fName, fName + " " + lName, "NZ"
);
- yacht.addObserver(this); // TODO: yacht can notify mark rounding message hyi25 13/8/17
player = new Player(socket, yacht);
GameState.addYacht(sourceId, yacht);
GameState.addPlayer(player);
}
- @Override
- public void update(Observable o, Object arg) {
- if (arg != null) {
- sendMessage((Message) arg);
- } else {
- sendSetupMessages();
- }
- }
-
private void completeRegistration(ClientType clientType) throws IOException {
// Fail if not a player
if (!clientType.equals(ClientType.PLAYER)){
@@ -234,45 +224,6 @@ public class ServerToClientThread implements Runnable, Observer {
logger.warn("Closed serverToClientThread" + thread, 1);
}
-
- /**
- * Generates XML messages of each type and sends them to the client
- */
- // TODO: 29/08/17 wmu16 - This functionality should not even be here
- public void sendSetupMessages() {
- xmlGenerator = new XMLGenerator();
- List yachts = new ArrayList<>(GameState.getYachts().values());
- List tokens = GameState.getTokens();
- RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
- xmlGenerator.setRaceTemplate(raceXMLTemplate);
-
- //@TODO calculate lat/lng values
- xmlGenerator.setRegattaTemplate(
- new RegattaXMLTemplate(
- "Party Parrot Test Server", "Bermuda Test Course",
- 57.6679590, 11.8503233)
- );
-
- XMLMessage regattaXMLMessage = new XMLMessage(
- xmlGenerator.getRegattaAsXml(),
- XMLMessageSubType.REGATTA,
- xmlGenerator.getRegattaAsXml().length());
-
- XMLMessage boatXMLMessage = new XMLMessage(
- xmlGenerator.getBoatsAsXml(),
- XMLMessageSubType.BOAT,
- xmlGenerator.getBoatsAsXml().length());
-
- XMLMessage raceXMLMessage = new XMLMessage(
- xmlGenerator.getRaceAsXml(),
- XMLMessageSubType.RACE,
- xmlGenerator.getRaceAsXml().length());
-
- sendMessage(regattaXMLMessage);
- sendMessage(boatXMLMessage);
- sendMessage(raceXMLMessage);
- }
-
private void closeSocket() {
try {
socket.close();
@@ -327,23 +278,6 @@ public class ServerToClientThread implements Runnable, Observer {
return seqNo;
}
-
- public void sendBoatLocationPackets() {
- ArrayList yachts = new ArrayList<>(GameState.getYachts().values());
- for (ServerYacht yacht : yachts) {
- BoatLocationMessage boatLocationMessage =
- new BoatLocationMessage(
- yacht.getSourceId(),
- getSeqNo(),
- yacht.getLocation().getLat(),
- yacht.getLocation().getLng(),
- yacht.getHeading(),
- yacht.getCurrentVelocity().longValue());
-
- sendMessage(boatLocationMessage);
- }
- }
-
public Thread getThread() {
return thread;
}
diff --git a/src/main/java/seng302/model/ServerYacht.java b/src/main/java/seng302/model/ServerYacht.java
index 64143023..74a1495c 100644
--- a/src/main/java/seng302/model/ServerYacht.java
+++ b/src/main/java/seng302/model/ServerYacht.java
@@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory;
import seng302.gameServer.GameState;
import seng302.gameServer.messages.BoatStatus;
import seng302.model.mark.Mark;
+import seng302.model.token.TokenType;
import seng302.utilities.GeoUtility;
/**
@@ -16,7 +17,7 @@ import seng302.utilities.GeoUtility;
* compared to the XMLParser boat class, also done outside Boat class because some old variables are
* not used anymore.
*/
-public class ServerYacht extends Observable {
+public class ServerYacht {
private Logger logger = LoggerFactory.getLogger(ClientYacht.class);
@@ -30,10 +31,8 @@ public class ServerYacht extends Observable {
private String boatName;
private String country;
private BoatStatus boatStatus;
-
private Color boatColor;
-
//Location
private Double lastHeading;
private Boolean sailIn;
@@ -52,6 +51,9 @@ public class ServerYacht extends Observable {
private Boolean hasPassedLine;
private Boolean hasPassedThroughGate;
+ //PowerUp
+ private TokenType powerUp;
+
public ServerYacht(String boatType, Integer sourceId, String hullID, String shortName,
String boatName, String country) {
@@ -71,6 +73,7 @@ public class ServerYacht extends Observable {
this.currentMarkSeqID = 0;
this.legNumber = 0;
this.boatColor = Colors.getColor(sourceId - 1);
+ this.powerUp = null;
this.hasEnteredRoundingZone = false;
this.hasPassedLine = false;
@@ -101,13 +104,12 @@ public class ServerYacht extends Observable {
location = geoPoint;
}
- /**
- * Add ServerToClientThread as the observer, this observer pattern mainly server for the boat
- * rounding package.
- */
- @Override
- public void addObserver(Observer o) {
- super.addObserver(o);
+ public void setPowerUp(TokenType powerUp) {
+ this.powerUp = powerUp;
+ }
+
+ public TokenType getPowerUp() {
+ return powerUp;
}
/**
diff --git a/src/main/java/seng302/visualiser/ClientToServerThread.java b/src/main/java/seng302/visualiser/ClientToServerThread.java
index 57256760..cfb45cf6 100644
--- a/src/main/java/seng302/visualiser/ClientToServerThread.java
+++ b/src/main/java/seng302/visualiser/ClientToServerThread.java
@@ -33,8 +33,6 @@ import seng302.model.stream.packets.StreamPacket;
*/
public class ClientToServerThread implements Runnable {
-
-
/**
* Functional interface for receiving packets from client socket.
*/
@@ -95,7 +93,7 @@ public class ClientToServerThread implements Runnable {
sendRegistrationRequest();
- thread = new Thread(this);
+ thread = new Thread(this, "ClientToServer");
thread.start();
}
diff --git a/src/main/java/seng302/visualiser/GameView.java b/src/main/java/seng302/visualiser/GameView.java
index 668a9cbc..53e4e58d 100644
--- a/src/main/java/seng302/visualiser/GameView.java
+++ b/src/main/java/seng302/visualiser/GameView.java
@@ -26,17 +26,23 @@ import javafx.scene.shape.Circle;
import javafx.scene.shape.Polygon;
import javafx.scene.text.Text;
import javafx.util.Duration;
+import seng302.gameServer.GameState;
+import seng302.gameServer.messages.XMLMessage;
+import seng302.gameServer.messages.XMLMessageSubType;
import seng302.model.ClientYacht;
import seng302.gameServer.messages.RoundingSide;
import seng302.model.ClientYacht;
import seng302.model.Colors;
import seng302.model.GeoPoint;
import seng302.model.Limit;
+import seng302.model.ServerYacht;
import seng302.model.mark.CompoundMark;
import seng302.model.mark.Corner;
import seng302.model.mark.Mark;
+import seng302.model.stream.xml.generator.RaceXMLTemplate;
import seng302.model.token.Token;
import seng302.utilities.GeoUtility;
+import seng302.utilities.XMLGenerator;
import seng302.visualiser.fxObjects.AnnotationBox;
import seng302.visualiser.fxObjects.BoatObject;
import seng302.visualiser.fxObjects.CourseBoundary;
From 0d0b2e59d5f80652cbb62fa45e2b87a5143d29f8 Mon Sep 17 00:00:00 2001
From: William Muir
Date: Tue, 29 Aug 2017 21:40:25 +1200
Subject: [PATCH 09/29] WIP: Tokens works well with collection. Dissapear upon
picking up across all clients.
Still bug with mark ordering and arrows :/
#story[1250]
---
.../java/seng302/gameServer/GameState.java | 18 ++++++++++--------
.../seng302/gameServer/MainServerThread.java | 2 +-
.../seng302/gameServer/MessageFactory.java | 8 +++++++-
3 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java
index 654a57b4..9ce3c409 100644
--- a/src/main/java/seng302/gameServer/GameState.java
+++ b/src/main/java/seng302/gameServer/GameState.java
@@ -54,18 +54,18 @@ public class GameState implements Runnable {
private Logger logger = LoggerFactory.getLogger(GameState.class);
- public static final int WARNING_TIME = 10 * -1000;
- public static final int PREPATORY_TIME = 5 * -1000;
- public static final int TIME_TILL_START = 10 * 1000;
- public static Integer MAX_PLAYERS = 8;
+ static final int WARNING_TIME = 10 * -1000;
+ static final int PREPATORY_TIME = 5 * -1000;
+ private static final int TIME_TILL_START = 10 * 1000;
+ static Integer MAX_PLAYERS = 8;
private static final Integer STATE_UPDATES_PER_SECOND = 60;
- public static Double ROUNDING_DISTANCE = 50d; // TODO: 14/08/17 wmu16 - Look into this value further
- public static final Double MARK_COLLISION_DISTANCE = 15d;
+ private static Double ROUNDING_DISTANCE = 50d; // TODO: 14/08/17 wmu16 - Look into this value further
+ private static final Double MARK_COLLISION_DISTANCE = 15d;
public static final Double YACHT_COLLISION_DISTANCE = 25.0;
- public static final Double BOUNCE_DISTANCE_MARK = 20.0;
+ private static final Double BOUNCE_DISTANCE_MARK = 20.0;
public static final Double BOUNCE_DISTANCE_YACHT = 30.0;
- public static final Double COLLISION_VELOCITY_PENALTY = 0.3;
+ private static final Double COLLISION_VELOCITY_PENALTY = 0.3;
private static Long previousUpdateTime;
public static Double windDirection;
@@ -350,6 +350,8 @@ public class GameState implements Runnable {
if (distance < YACHT_COLLISION_DISTANCE) {
tokens.remove(token);
serverYacht.setPowerUp(token.getTokenType());
+ logger.debug("Yacht: " + serverYacht.getShortName() + " got powerup " + token
+ .getTokenType());
notifyMessageListeners(MessageFactory.getRaceXML());
break;
}
diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java
index c0b59751..bd5e4d23 100644
--- a/src/main/java/seng302/gameServer/MainServerThread.java
+++ b/src/main/java/seng302/gameServer/MainServerThread.java
@@ -50,7 +50,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
terminated = false;
thread = new Thread(this, "MainServer");
startUpdatingWind();
-// startSpawningTokens();
+ startSpawningTokens();
thread.start();
}
diff --git a/src/main/java/seng302/gameServer/MessageFactory.java b/src/main/java/seng302/gameServer/MessageFactory.java
index 76410c1e..c71e6028 100644
--- a/src/main/java/seng302/gameServer/MessageFactory.java
+++ b/src/main/java/seng302/gameServer/MessageFactory.java
@@ -22,10 +22,16 @@ import seng302.utilities.XMLGenerator;
* A Class for interfacing between the data we have in the GameState to the messages we need to send
* through the MainServerThread.
*
- * WARNING DO NOT USE THIS CLASS IF GAMESTATE HAS NOT BEEN INSTANTIATED.
+ * WARNING DO NOT USE THIS CLASS IF GAMESTATE HAS NOT BEEN INSTANTIATED. (Main Server has not started)
* // TODO: 29/08/17 wmu16 - Make GameState non static to fix this ¯\_(ツ)_/¯
* Created by wmu16 on 29/08/17.
*/
+
+/*
+Ideally this class would be created with an instance of the GameState (I tried implementing this for
+ a bit) but it was too difficult to properly make GameState non static without doing some proper
+ re working. To do later.
+ */
public class MessageFactory {
private static XMLGenerator xmlGenerator = new XMLGenerator();
From 4bd7291a4ac1b1b733f622aa28c4ae273f215f53 Mon Sep 17 00:00:00 2001
From: William Muir
Date: Tue, 29 Aug 2017 22:11:37 +1200
Subject: [PATCH 10/29] WIP: Yachts now power up upon collecting an item
Power up is speed boost x2 multiplier
Lasts 10 seconds
Do not stack
#story[1250]
---
.../java/seng302/gameServer/GameState.java | 40 ++++++++++++++-----
.../seng302/gameServer/MainServerThread.java | 2 +-
src/main/java/seng302/model/ServerYacht.java | 12 +++++-
src/main/java/seng302/model/token/Token.java | 1 -
4 files changed, 42 insertions(+), 13 deletions(-)
diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java
index 9ce3c409..300585d1 100644
--- a/src/main/java/seng302/gameServer/GameState.java
+++ b/src/main/java/seng302/gameServer/GameState.java
@@ -59,6 +59,8 @@ public class GameState implements Runnable {
private static final int TIME_TILL_START = 10 * 1000;
static Integer MAX_PLAYERS = 8;
+ private static final Long POWERUP_TIMEOUT_MS = 10_000L;
+
private static final Integer STATE_UPDATES_PER_SECOND = 60;
private static Double ROUNDING_DISTANCE = 50d; // TODO: 14/08/17 wmu16 - Look into this value further
private static final Double MARK_COLLISION_DISTANCE = 15d;
@@ -302,6 +304,7 @@ public class GameState implements Runnable {
}
for (ServerYacht yacht : yachts.values()) {
updateVelocity(yacht);
+ checkPowerUpTimeout(yacht);
yacht.runAutoPilot();
yacht.updateLocation(timeInterval);
if (yacht.getBoatStatus() != BoatStatus.FINISHED) {
@@ -319,6 +322,17 @@ public class GameState implements Runnable {
}
}
+
+ private void checkPowerUpTimeout(ServerYacht yacht) {
+ if (yacht.getPowerUp() != null) {
+ if (System.currentTimeMillis() - yacht.getPowerUpStartTime() > POWERUP_TIMEOUT_MS) {
+ yacht.powerDown();
+ logger.debug("Yacht: " + yacht.getShortName() + " powered down!");
+ }
+ }
+ }
+
+
/**
* Check if the yacht has crossed the course limit
*
@@ -349,7 +363,7 @@ public class GameState implements Runnable {
Double distance = GeoUtility.getDistance(token, serverYacht.getLocation());
if (distance < YACHT_COLLISION_DISTANCE) {
tokens.remove(token);
- serverYacht.setPowerUp(token.getTokenType());
+ serverYacht.powerUp(token.getTokenType());
logger.debug("Yacht: " + serverYacht.getShortName() + " got powerup " + token
.getTokenType());
notifyMessageListeners(MessageFactory.getRaceXML());
@@ -410,25 +424,31 @@ public class GameState implements Runnable {
private void updateVelocity(ServerYacht yacht) {
- Double velocity = yacht.getCurrentVelocity();
Double trueWindAngle = Math.abs(windDirection - yacht.getHeading());
Double boatSpeedInKnots = PolarTable.getBoatSpeed(getWindSpeedKnots(), trueWindAngle);
Double maxBoatSpeed = GeoUtility.knotsToMMS(boatSpeedInKnots);
+ if (yacht.getPowerUp() != null) {
+ if (yacht.getPowerUp().equals(TokenType.BOOST)) {
+ maxBoatSpeed *= 2;
+ }
+ }
+
+ Double currentVelocity = yacht.getCurrentVelocity();
// TODO: 15/08/17 remove magic numbers from these equations.
if (yacht.getSailIn()) {
- if (velocity < maxBoatSpeed - 500) {
+ if (currentVelocity < maxBoatSpeed - 500) {
yacht.changeVelocity(maxBoatSpeed / 100);
- } else if (velocity > maxBoatSpeed + 500) {
- yacht.changeVelocity(-velocity / 200);
+ } else if (currentVelocity > maxBoatSpeed + 500) {
+ yacht.changeVelocity(-currentVelocity / 200);
} else {
yacht.setCurrentVelocity(maxBoatSpeed);
}
} else {
- if (velocity > 3000) {
- yacht.changeVelocity(-velocity / 200);
- } else if (velocity > 100) {
- yacht.changeVelocity(-velocity / 50);
- } else if (velocity <= 100) {
+ if (currentVelocity > 3000) {
+ yacht.changeVelocity(-currentVelocity / 200);
+ } else if (currentVelocity > 100) {
+ yacht.changeVelocity(-currentVelocity / 50);
+ } else if (currentVelocity <= 100) {
yacht.setCurrentVelocity(0d);
}
}
diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java
index bd5e4d23..ae44542c 100644
--- a/src/main/java/seng302/gameServer/MainServerThread.java
+++ b/src/main/java/seng302/gameServer/MainServerThread.java
@@ -210,7 +210,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
GameState.clearTokens();
Random random = new Random();
Collections.shuffle(allTokens);
- for (int i = 0; i < random.nextInt(allTokens.size() - 1); i++) {
+ for (int i = 0; i < random.nextInt(allTokens.size()); i++) {
GameState.addToken(allTokens.get(i));
}
}
diff --git a/src/main/java/seng302/model/ServerYacht.java b/src/main/java/seng302/model/ServerYacht.java
index 74a1495c..a24e2ed5 100644
--- a/src/main/java/seng302/model/ServerYacht.java
+++ b/src/main/java/seng302/model/ServerYacht.java
@@ -53,6 +53,7 @@ public class ServerYacht {
//PowerUp
private TokenType powerUp;
+ private Long powerUpStartTime;
public ServerYacht(String boatType, Integer sourceId, String hullID, String shortName,
@@ -104,8 +105,17 @@ public class ServerYacht {
location = geoPoint;
}
- public void setPowerUp(TokenType powerUp) {
+ public void powerUp(TokenType powerUp) {
this.powerUp = powerUp;
+ powerUpStartTime = System.currentTimeMillis();
+ }
+
+ public void powerDown() {
+ this.powerUp = null;
+ }
+
+ public Long getPowerUpStartTime() {
+ return powerUpStartTime;
}
public TokenType getPowerUp() {
diff --git a/src/main/java/seng302/model/token/Token.java b/src/main/java/seng302/model/token/Token.java
index 9c55c41c..9f8ca619 100644
--- a/src/main/java/seng302/model/token/Token.java
+++ b/src/main/java/seng302/model/token/Token.java
@@ -18,5 +18,4 @@ public class Token extends GeoPoint {
public TokenType getTokenType() {
return tokenType;
}
-
}
From 67f39e90499fa99b559c949b18613a0198f30897 Mon Sep 17 00:00:00 2001
From: Calum
Date: Sun, 3 Sep 2017 16:54:53 +1200
Subject: [PATCH 11/29] Tested several methods of creating 3D assets. Added a
3D file importer to library of project and replaced some assets with
temporary 32 ones to test creating 32 objects.
#implement
---
.../LICENSE-3dsModelImporterJFX.txt | 26 +
.../LICENSE-ColModelImporterJFX.txt | 26 +
.../LICENSE-FxmlModelImporterJFX.txt | 26 +
.../LICENSE-ObjModelImporterJFX.txt | 26 +
.../LICENSE-StlMeshImporterJFX.txt | 26 +
.../LICENSE-X3dModelImporterJFX.txt | 26 +
.../apidoc/allclasses-frame.html | 41 +
.../apidoc/allclasses-noframe.html | 41 +
.../jfx/importer/FilePath.html | 322 ++++
.../jfx/importer/ImportException.html | 299 ++++
.../jfx/importer/Importer.html | 408 +++++
.../jfx/importer/ModelImporter.html | 357 ++++
.../jfx/importer/Viewpoint.html | 683 +++++++
.../importer/col/ColAsset.Contributor.html | 374 ++++
.../col/ColAsset.GeographicLocation.html | 315 ++++
.../jfx/importer/col/ColAsset.UpAxis.html | 373 ++++
.../jfx/importer/col/ColAsset.html | 515 ++++++
.../jfx/importer/col/ColImportOption.html | 446 +++++
.../jfx/importer/col/ColModelImporter.html | 876 +++++++++
.../jfx/importer/col/package-frame.html | 28 +
.../jfx/importer/col/package-summary.html | 896 ++++++++++
.../jfx/importer/col/package-tree.html | 154 ++
.../jfx/importer/fxml/FxmlImportOption.html | 429 +++++
.../jfx/importer/fxml/FxmlModelImporter.html | 852 +++++++++
.../jfx/importer/fxml/package-frame.html | 24 +
.../jfx/importer/fxml/package-summary.html | 241 +++
.../jfx/importer/fxml/package-tree.html | 150 ++
.../jfx/importer/obj/ObjImportOption.html | 391 ++++
.../jfx/importer/obj/ObjModelImporter.html | 808 +++++++++
.../jfx/importer/obj/package-frame.html | 24 +
.../jfx/importer/obj/package-summary.html | 362 ++++
.../jfx/importer/obj/package-tree.html | 150 ++
.../jfx/importer/package-frame.html | 30 +
.../jfx/importer/package-summary.html | 207 +++
.../jfx/importer/package-tree.html | 160 ++
.../jfx/importer/stl/StlImportOption.html | 371 ++++
.../jfx/importer/stl/StlMeshImporter.html | 653 +++++++
.../jfx/importer/stl/package-frame.html | 24 +
.../jfx/importer/stl/package-summary.html | 181 ++
.../jfx/importer/stl/package-tree.html | 150 ++
.../jfx/importer/tds/TdsImportOption.html | 391 ++++
.../jfx/importer/tds/TdsModelImporter.html | 811 +++++++++
.../jfx/importer/tds/package-frame.html | 24 +
.../jfx/importer/tds/package-summary.html | 188 ++
.../jfx/importer/tds/package-tree.html | 150 ++
.../jfx/importer/x3d/X3dHead.UnitCat.html | 383 ++++
.../jfx/importer/x3d/X3dHead.html | 353 ++++
.../jfx/importer/x3d/X3dImportOption.html | 431 +++++
.../jfx/importer/x3d/X3dModelImporter.html | 904 ++++++++++
.../jfx/importer/x3d/package-frame.html | 26 +
.../jfx/importer/x3d/package-summary.html | 1587 +++++++++++++++++
.../jfx/importer/x3d/package-tree.html | 152 ++
.../apidoc/constant-values.html | 125 ++
.../apidoc/deprecated-list.html | 125 ++
.../apidoc/help-doc.html | 226 +++
.../apidoc/index-files/index-1.html | 243 +++
.../apidoc/index-files/index-10.html | 208 +++
.../apidoc/index-files/index-11.html | 149 ++
.../apidoc/index-files/index-2.html | 151 ++
.../apidoc/index-files/index-3.html | 515 ++++++
.../apidoc/index-files/index-4.html | 154 ++
.../apidoc/index-files/index-5.html | 133 ++
.../apidoc/index-files/index-6.html | 168 ++
.../apidoc/index-files/index-7.html | 212 +++
.../apidoc/index-files/index-8.html | 296 +++
.../apidoc/index-files/index-9.html | 140 ++
.../apidoc/index.html | 74 +
.../apidoc/overview-frame.html | 28 +
.../apidoc/overview-summary.html | 392 ++++
.../apidoc/overview-tree.html | 195 ++
.../apidoc/package-list | 7 +
.../apidoc/script.js | 30 +
.../apidoc/serialized-form.html | 142 ++
.../apidoc/stylesheet-im.css | 574 ++++++
src/main/java/seng302/App.java | 4 +-
.../java/seng302/gameServer/GameState.java | 9 +-
.../java/seng302/visualiser/GameClient.java | 14 +-
.../java/seng302/visualiser/GameView.java | 51 +-
.../controllers/RaceViewController.java | 2 -
.../visualiser/fxObjects/BoatObject.java | 153 +-
src/main/resources/simpleboat.stl | Bin 0 -> 1084 bytes
81 files changed, 21345 insertions(+), 66 deletions(-)
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-3dsModelImporterJFX.txt
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-ColModelImporterJFX.txt
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-FxmlModelImporterJFX.txt
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-ObjModelImporterJFX.txt
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-StlMeshImporterJFX.txt
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-X3dModelImporterJFX.txt
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/allclasses-frame.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/allclasses-noframe.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/FilePath.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/ImportException.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/Importer.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/ModelImporter.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/Viewpoint.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.Contributor.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.GeographicLocation.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.UpAxis.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColImportOption.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColModelImporter.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-frame.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-summary.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-tree.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/FxmlImportOption.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/FxmlModelImporter.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-frame.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-summary.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-tree.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/ObjImportOption.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/ObjModelImporter.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-frame.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-summary.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-tree.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-frame.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-summary.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-tree.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/StlImportOption.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/StlMeshImporter.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-frame.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-summary.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-tree.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/TdsImportOption.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/TdsModelImporter.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-frame.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-summary.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-tree.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dHead.UnitCat.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dHead.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dImportOption.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dModelImporter.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-frame.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-summary.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-tree.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/constant-values.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/deprecated-list.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/help-doc.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-1.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-10.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-11.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-2.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-3.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-4.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-5.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-6.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-7.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-8.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-9.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-frame.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-summary.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-tree.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/package-list
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/script.js
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/serialized-form.html
create mode 100644 libs/JFX3DModelImporters_EA_2014-02-09/apidoc/stylesheet-im.css
create mode 100644 src/main/resources/simpleboat.stl
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-3dsModelImporterJFX.txt b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-3dsModelImporterJFX.txt
new file mode 100644
index 00000000..d45a8aa5
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-3dsModelImporterJFX.txt
@@ -0,0 +1,26 @@
+
+3dsModelImporterJFX - jim3dsModelImporterJFX.jar
+
+Copyright (c) 2013 August Lammersdorf, InteractiveMesh e.K.. All rights reserved.
+
+InteractiveMesh e.K.
+August Lammersdorf
+Hauptstraße 28d
+85737 Ismaning
+Germany / Munich Area
+www.InteractiveMesh.com/org
+
+License Agreement
+
+By installing, copying, or otherwise using the Software, you agree to be bound by the terms of this Agreement. If you do not agree to the terms of this Agreement, do not install or use the Software.
+
+The copyright holder grants to you a non-exclusive, perpetual, irrevocable, and worldwide right to use the Software. It is provided to you free of charge for academic, commercial, and personal use.
+
+You may not remove any copyright, license, or other proprietary notice from the Software.
+
+No parts of the Software may be reproduced in part or in whole. You may not reverse engineer, decompile, or disassemble the Software or prepare derivative works of it.
+
+THIS PROGRAM IS PROVIDED "AS IS", WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EIHTER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING THE PROGRAM AND ASSUME ANY RISKS ASSOCIATED WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE.
+
+IN NO EVENT AND UNDER NO LEGAL THEORY, WHETHER IN TORT, CONTRACT, OR OTHERWISE, UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SHALL THE COPYRIGHT HOLDER BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING AS A RESULT OF THIS LICENSE OR OUT THE USE OR INABILITY TO USE THE PROGRAM, EVEN IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-ColModelImporterJFX.txt b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-ColModelImporterJFX.txt
new file mode 100644
index 00000000..37a3b3b8
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-ColModelImporterJFX.txt
@@ -0,0 +1,26 @@
+
+ColModelImporterJFX - jimColModelImporterJFX.jar
+
+Copyright (c) 2013-2014 August Lammersdorf, InteractiveMesh e.K.. All rights reserved.
+
+InteractiveMesh e.K.
+August Lammersdorf
+Hauptstraße 28d
+85737 Ismaning
+Germany / Munich Area
+www.InteractiveMesh.com/org
+
+License Agreement
+
+By installing, copying, or otherwise using the Software, you agree to be bound by the terms of this Agreement. If you do not agree to the terms of this Agreement, do not install or use the Software.
+
+The copyright holder grants to you a non-exclusive, perpetual, irrevocable, and worldwide right to use the Software. It is provided to you free of charge for academic, commercial, and personal use.
+
+You may not remove any copyright, license, or other proprietary notice from the Software.
+
+No parts of the Software may be reproduced in part or in whole. You may not reverse engineer, decompile, or disassemble the Software or prepare derivative works of it.
+
+THIS PROGRAM IS PROVIDED "AS IS", WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EIHTER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING THE PROGRAM AND ASSUME ANY RISKS ASSOCIATED WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE.
+
+IN NO EVENT AND UNDER NO LEGAL THEORY, WHETHER IN TORT, CONTRACT, OR OTHERWISE, UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SHALL THE COPYRIGHT HOLDER BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING AS A RESULT OF THIS LICENSE OR OUT THE USE OR INABILITY TO USE THE PROGRAM, EVEN IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-FxmlModelImporterJFX.txt b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-FxmlModelImporterJFX.txt
new file mode 100644
index 00000000..f75c5dcc
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-FxmlModelImporterJFX.txt
@@ -0,0 +1,26 @@
+
+FXMLModelImporterJFX - jimFxmlModelImporterJFX.jar
+
+Copyright (c) 2013 August Lammersdorf, InteractiveMesh e.K.. All rights reserved.
+
+InteractiveMesh e.K.
+August Lammersdorf
+Hauptstraße 28d
+85737 Ismaning
+Germany / Munich Area
+www.InteractiveMesh.com/org
+
+License Agreement
+
+By installing, copying, or otherwise using the Software, you agree to be bound by the terms of this Agreement. If you do not agree to the terms of this Agreement, do not install or use the Software.
+
+The copyright holder grants to you a non-exclusive, perpetual, irrevocable, and worldwide right to use the Software. It is provided to you free of charge for academic, commercial, and personal use.
+
+You may not remove any copyright, license, or other proprietary notice from the Software.
+
+No parts of the Software may be reproduced in part or in whole. You may not reverse engineer, decompile, or disassemble the Software or prepare derivative works of it.
+
+THIS PROGRAM IS PROVIDED "AS IS", WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EIHTER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING THE PROGRAM AND ASSUME ANY RISKS ASSOCIATED WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE.
+
+IN NO EVENT AND UNDER NO LEGAL THEORY, WHETHER IN TORT, CONTRACT, OR OTHERWISE, UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SHALL THE COPYRIGHT HOLDER BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING AS A RESULT OF THIS LICENSE OR OUT THE USE OR INABILITY TO USE THE PROGRAM, EVEN IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-ObjModelImporterJFX.txt b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-ObjModelImporterJFX.txt
new file mode 100644
index 00000000..7bf42eaa
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-ObjModelImporterJFX.txt
@@ -0,0 +1,26 @@
+
+ObjModelImporterJFX - jimObjModelImporterJFX.jar
+
+Copyright (c) 2013 August Lammersdorf, InteractiveMesh e.K.. All rights reserved.
+
+InteractiveMesh e.K.
+August Lammersdorf
+Hauptstraße 28d
+85737 Ismaning
+Germany / Munich Area
+www.InteractiveMesh.com/org
+
+License Agreement
+
+By installing, copying, or otherwise using the Software, you agree to be bound by the terms of this Agreement. If you do not agree to the terms of this Agreement, do not install or use the Software.
+
+The copyright holder grants to you a non-exclusive, perpetual, irrevocable, and worldwide right to use the Software. It is provided to you free of charge for academic, commercial, and personal use.
+
+You may not remove any copyright, license, or other proprietary notice from the Software.
+
+No parts of the Software may be reproduced in part or in whole. You may not reverse engineer, decompile, or disassemble the Software or prepare derivative works of it.
+
+THIS PROGRAM IS PROVIDED "AS IS", WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EIHTER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING THE PROGRAM AND ASSUME ANY RISKS ASSOCIATED WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE.
+
+IN NO EVENT AND UNDER NO LEGAL THEORY, WHETHER IN TORT, CONTRACT, OR OTHERWISE, UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SHALL THE COPYRIGHT HOLDER BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING AS A RESULT OF THIS LICENSE OR OUT THE USE OR INABILITY TO USE THE PROGRAM, EVEN IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-StlMeshImporterJFX.txt b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-StlMeshImporterJFX.txt
new file mode 100644
index 00000000..1911835a
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-StlMeshImporterJFX.txt
@@ -0,0 +1,26 @@
+
+StlMeshImporterJFX - jimStlMeshImporterJFX.jar
+
+Copyright (c) 2013 August Lammersdorf, InteractiveMesh e.K.. All rights reserved.
+
+InteractiveMesh e.K.
+August Lammersdorf
+Hauptstraße 28d
+85737 Ismaning
+Germany / Munich Area
+www.InteractiveMesh.com/org
+
+License Agreement
+
+By installing, copying, or otherwise using the Software, you agree to be bound by the terms of this Agreement. If you do not agree to the terms of this Agreement, do not install or use the Software.
+
+The copyright holder grants to you a non-exclusive, perpetual, irrevocable, and worldwide right to use the Software. It is provided to you free of charge for academic, commercial, and personal use.
+
+You may not remove any copyright, license, or other proprietary notice from the Software.
+
+No parts of the Software may be reproduced in part or in whole. You may not reverse engineer, decompile, or disassemble the Software or prepare derivative works of it.
+
+THIS PROGRAM IS PROVIDED "AS IS", WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EIHTER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING THE PROGRAM AND ASSUME ANY RISKS ASSOCIATED WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE.
+
+IN NO EVENT AND UNDER NO LEGAL THEORY, WHETHER IN TORT, CONTRACT, OR OTHERWISE, UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SHALL THE COPYRIGHT HOLDER BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING AS A RESULT OF THIS LICENSE OR OUT THE USE OR INABILITY TO USE THE PROGRAM, EVEN IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-X3dModelImporterJFX.txt b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-X3dModelImporterJFX.txt
new file mode 100644
index 00000000..1ac72c0c
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/LICENSE-X3dModelImporterJFX.txt
@@ -0,0 +1,26 @@
+
+X3dModelImporterJFX - jimX3dModelImporterJFX.jar
+
+Copyright (c) 2013 August Lammersdorf, InteractiveMesh e.K.. All rights reserved.
+
+InteractiveMesh e.K.
+August Lammersdorf
+Hauptstraße 28d
+85737 Ismaning
+Germany / Munich Area
+www.InteractiveMesh.com/org
+
+License Agreement
+
+By installing, copying, or otherwise using the Software, you agree to be bound by the terms of this Agreement. If you do not agree to the terms of this Agreement, do not install or use the Software.
+
+The copyright holder grants to you a non-exclusive, perpetual, irrevocable, and worldwide right to use the Software. It is provided to you free of charge for academic, commercial, and personal use.
+
+You may not remove any copyright, license, or other proprietary notice from the Software.
+
+No parts of the Software may be reproduced in part or in whole. You may not reverse engineer, decompile, or disassemble the Software or prepare derivative works of it.
+
+THIS PROGRAM IS PROVIDED "AS IS", WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EIHTER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING THE PROGRAM AND ASSUME ANY RISKS ASSOCIATED WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE.
+
+IN NO EVENT AND UNDER NO LEGAL THEORY, WHETHER IN TORT, CONTRACT, OR OTHERWISE, UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SHALL THE COPYRIGHT HOLDER BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING AS A RESULT OF THIS LICENSE OR OUT THE USE OR INABILITY TO USE THE PROGRAM, EVEN IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/allclasses-frame.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/allclasses-frame.html
new file mode 100644
index 00000000..271d8a21
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/allclasses-frame.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+All Classes (JavaFX 3D Model Importers)
+
+
+
+
+
+All Classes
+
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/allclasses-noframe.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/allclasses-noframe.html
new file mode 100644
index 00000000..51137bcd
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/allclasses-noframe.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+All Classes (JavaFX 3D Model Importers)
+
+
+
+
+
+All Classes
+
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/FilePath.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/FilePath.html
new file mode 100644
index 00000000..d4d77e17
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/FilePath.html
@@ -0,0 +1,322 @@
+
+
+
+
+
+FilePath (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.FilePath
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Summary
+
+Constructors
+
+Constructor and Description
+
+
+FilePath (java.lang.String importedPath,
+ java.net.URL absolutePath)
+A FilePath object represents the paths of a referenced file
+ by the string as read from the imported 3D model file and
+ by the corresponding absolute Uniform Resource Locator (URL) object.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Concrete Methods
+
+Modifier and Type
+Method and Description
+
+
+java.net.URL
+getAbsolutePath ()
+Gets the absolute path of a referenced file as a Uniform Resource Locator (URL) object.
+
+
+
+java.lang.String
+getImportedPath ()
+Gets the path string of a referenced file as read from the imported 3D model file.
+
+
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Detail
+
+
+
+
+
+FilePath
+public FilePath(java.lang.String importedPath,
+ java.net.URL absolutePath)
+A FilePath object represents the paths of a referenced file
+ by the string as read from the imported 3D model file and
+ by the corresponding absolute Uniform Resource Locator (URL) object.
+
+Parameters:
+importedPath - the imported file path
+absolutePath - the absolute file path
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+getImportedPath
+public java.lang.String getImportedPath()
+Gets the path string of a referenced file as read from the imported 3D model file.
+ This is typically a relative path with each name separated from the next
+ by the separator character '/'.
+
+Returns:
+the imported file path
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/ImportException.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/ImportException.html
new file mode 100644
index 00000000..d2707cef
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/ImportException.html
@@ -0,0 +1,299 @@
+
+
+
+
+
+ImportException (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
+java.lang.Object
+
+
+java.lang.Throwable
+
+
+java.lang.Exception
+
+
+java.lang.RuntimeException
+
+
+com.interactivemesh.jfx.importer.ImportException
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Summary
+
+Constructors
+
+Constructor and Description
+
+
+ImportException (java.lang.String message)
+Creates a new ImportException with the specified detail message.
+
+
+
+ImportException (java.lang.String message,
+ java.lang.Throwable cause)
+Creates a new ImportException with the specified detail message and cause.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+Methods inherited from class java.lang.Throwable
+addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Detail
+
+
+
+
+
+
+
+
+
+ImportException
+public ImportException(java.lang.String message,
+ java.lang.Throwable cause)
+Creates a new ImportException with the specified detail message and cause.
+
+Parameters:
+message - the detail message
+cause - the cause
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/Importer.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/Importer.html
new file mode 100644
index 00000000..e7c8e81e
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/Importer.html
@@ -0,0 +1,408 @@
+
+
+
+
+
+Importer (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Abstract Methods
+
+Modifier and Type
+Method and Description
+
+
+void
+clear ()
+Disposes of the imported data.
+
+
+
+void
+close ()
+Disposes of the imported data and closes the importer.
+
+
+
+double
+getCreaseAngle ()
+Gets the crease angle for normals generation measured in degrees.
+
+
+
+java.lang.Object
+getImport ()
+Gets the imported 3D data.
+
+
+
+void
+onFileImported ()
+Method is invoked upon completion of import.
+
+
+
+void
+read (java.io.File file)
+Imports a 3D model file passed as a File object.
+
+
+
+void
+read (java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+
+
+
+void
+read (java.net.URL url)
+Imports a 3D model file from the passed location.
+
+
+
+void
+setCreaseAngle (double degrees)
+Sets the crease angle for normals generation measured in degrees.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+getCreaseAngle
+double getCreaseAngle()
+Gets the crease angle for normals generation measured in degrees.
+
Default value: 45
+
+Returns:
+crease angle for normals generation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+read
+void read(java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Parameters:
+filePath - location of the file to import
+Throws:
+ImportException - if the importer encounters a problem reading or parsing the specified file or if the importer is closed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/ModelImporter.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/ModelImporter.html
new file mode 100644
index 00000000..da37c386
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/ModelImporter.html
@@ -0,0 +1,357 @@
+
+
+
+
+
+ModelImporter (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Abstract Methods
+
+Modifier and Type
+Method and Description
+
+
+java.util.Map<javafx.scene.image.Image,FilePath >
+getImageFilePaths ()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+
+
+java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial>
+getNamedMaterials ()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+
+
+java.lang.String
+getResourceBasePath ()
+Gets the path where files associated with the imported 3D model file are located.
+
+
+
+java.net.URL
+getResourceBaseUrl ()
+Gets the URL where files associated with the imported 3D model file are located.
+
+
+
+void
+setResourceBasePath (java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+
+
+
+void
+setResourceBaseUrl (java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+setResourceBasePath
+void setResourceBasePath(java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Parameters:
+path - location of associated files
+
+
+
+
+
+
+
+
+setResourceBaseUrl
+void setResourceBaseUrl(java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Parameters:
+url - location of associated files
+
+
+
+
+
+
+
+
+getImageFilePaths
+java.util.Map<javafx.scene.image.Image,FilePath > getImageFilePaths()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+Returns:
+paths of imported images or null if no image is imported
+See Also:
+FilePath
+
+
+
+
+
+
+
+
+getNamedMaterials
+java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial> getNamedMaterials()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+Returns:
+named and used PhongMaterials or null if no material is named and used
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/Viewpoint.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/Viewpoint.html
new file mode 100644
index 00000000..4e80e09e
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/Viewpoint.html
@@ -0,0 +1,683 @@
+
+
+
+
+
+Viewpoint (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.Viewpoint
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Summary
+
+Constructors
+
+Constructor and Description
+
+
+Viewpoint ()
+Constructs a perspective Viewpoint object with an identity transform.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Concrete Methods
+
+Modifier and Type
+Method and Description
+
+
+javafx.geometry.Point3D
+getCenterOfRotation ()
+Gets the center of rotation.
+
+
+
+double
+getFarClip ()
+Gets the far clipping plane distance.
+
+
+
+double
+getFieldOfView ()
+Gets the field of view value.
+
+
+
+java.lang.String
+getName ()
+Gets the name.
+
+
+
+double
+getNearClip ()
+Gets the near clipping plane distance.
+
+
+
+javafx.scene.transform.Affine
+getTransform ()
+Gets the affine transform.
+
+
+
+boolean
+isPerspective ()
+Gets the state whether the projection mode is perspective (default) or parallel.
+
+
+
+boolean
+isVerticalFieldOfView ()
+Gets the state whether the field of view is measured vertically (default) or horizontally.
+
+
+
+void
+setCenterOfRotation (javafx.geometry.Point3D value)
+Set the center of rotation.
+
+
+
+void
+setFarClip (double value)
+Sets the far clipping plane distance.
+
+
+
+void
+setFieldOfView (double value)
+Sets the field of view value.
+
+
+
+void
+setName (java.lang.String value)
+Sets the name.
+
+
+
+void
+setNearClip (double value)
+Sets the near clipping plane distance.
+
+
+
+void
+setPerspectiveProjection (boolean value)
+Sets the projection mode.
+
+
+
+void
+setTransform (javafx.scene.transform.Affine value)
+Sets the affine transform.
+
+
+
+void
+setVerticalFieldOfView (boolean value)
+Sets the state whether the field of view is measured vertically or horizontally.
+
+
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.Contributor.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.Contributor.html
new file mode 100644
index 00000000..475940f0
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.Contributor.html
@@ -0,0 +1,374 @@
+
+
+
+
+
+ColAsset.Contributor (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.col.ColAsset.Contributor
+
+
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Concrete Methods
+
+Modifier and Type
+Method and Description
+
+
+java.lang.String
+getAuthor ()
+Gets the name of the author.
+
+
+
+java.lang.String
+getAuthorEmail ()
+Gets the email address of the author.
+
+
+
+java.lang.String
+getAuthoringTool ()
+Gets the name of the authoring tool.
+
+
+
+java.lang.String
+getAuthorWebsite ()
+Gets the URL of the author's website.
+
+
+
+java.lang.String
+getComments ()
+Gets the comments of the contributor.
+
+
+
+java.lang.String
+getCopyright ()
+Gets the copyright information.
+
+
+
+java.lang.String
+getSourceData ()
+Gets a URI reference to the source data
+
+
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.GeographicLocation.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.GeographicLocation.html
new file mode 100644
index 00000000..0297a17d
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.GeographicLocation.html
@@ -0,0 +1,315 @@
+
+
+
+
+
+ColAsset.GeographicLocation (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.col.ColAsset.GeographicLocation
+
+
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+getAltitudeMode
+public java.lang.String getAltitudeMode()
+Gets the mode of the altitude value. The default mode "relativeToGround"
+ specifies that the value is the distance from the altitude
+ of the terrain at the latitude/longitude point. The mode "absolut" specifies
+ that the value is the distance from sea level.
+
+Returns:
+"relativeToGround" or "absolut"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.UpAxis.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.UpAxis.html
new file mode 100644
index 00000000..fd0cbcde
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.UpAxis.html
@@ -0,0 +1,373 @@
+
+
+
+
+
+ColAsset.UpAxis (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+java.lang.Enum<ColAsset.UpAxis >
+
+
+com.interactivemesh.jfx.importer.col.ColAsset.UpAxis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Summary
+
+Enum Constants
+
+Enum Constant and Description
+
+
+X_UP
+Upward axis: positive x, right axis: negative y, inward axis: positive z.
+
+
+
+Y_UP
+Upward axis: positive y, right axis: positive x, inward axis: positive z.
+
+
+
+Z_UP
+Upward axis: positive z, right axis: positive x, inward axis: negative y.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+Methods inherited from class java.lang.Enum
+clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
+
+
+
+
+
+Methods inherited from class java.lang.Object
+getClass, notify, notifyAll, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Detail
+
+
+
+
+
+X_UP
+public static final ColAsset.UpAxis X_UP
+Upward axis: positive x, right axis: negative y, inward axis: positive z.
+
+
+
+
+
+
+
+Y_UP
+public static final ColAsset.UpAxis Y_UP
+Upward axis: positive y, right axis: positive x, inward axis: positive z.
+
+
+
+
+
+
+
+Z_UP
+public static final ColAsset.UpAxis Z_UP
+Upward axis: positive z, right axis: positive x, inward axis: negative y.
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+valueOf
+public static ColAsset.UpAxis valueOf(java.lang.String name)
+Returns the enum constant of this type with the specified name.
+The string must match exactly an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)
+
+Parameters:
+name - the name of the enum constant to be returned.
+Returns:
+the enum constant with the specified name
+Throws:
+java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
+java.lang.NullPointerException - if the argument is null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.html
new file mode 100644
index 00000000..3f77950c
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColAsset.html
@@ -0,0 +1,515 @@
+
+
+
+
+
+ColAsset (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.col.ColAsset
+
+
+
+
+
+
+
+
+
+
+
+
+Nested Class Summary
+
+Nested Classes
+
+Modifier and Type
+Class and Description
+
+
+static class
+ColAsset.Contributor
+A Contributor object provides authoring information.
+
+
+
+static class
+ColAsset.GeographicLocation
+A GeographicLocation object provides geographic location information.
+
+
+
+static class
+ColAsset.UpAxis
+UpAxis describes the coordinate system of the geometric data.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Concrete Methods
+
+Modifier and Type
+Method and Description
+
+
+ColAsset.Contributor []
+getContributors ()
+Gets the contributors of the COLLADA file.
+
+
+
+java.lang.String
+getCreatedDate ()
+Gets the date and time when the COLADA file was created (in an ISO 8601 format).
+
+
+
+ColAsset.GeographicLocation
+getGeographicLocation ()
+Gets the geographic location information of the COLLADA file.
+
+
+
+java.lang.String
+getKeywords ()
+Gets a list of words used as search criteria.
+
+
+
+java.lang.String
+getModifiedDate ()
+Gets date and time when the COLADA file was last modified (in an ISO 8601 format).
+
+
+
+java.lang.String
+getRevision ()
+Gets the revision information of the COLLADA file.
+
+
+
+java.lang.String
+getSubject ()
+Gets a description of the topical subject of the COLLADA file.
+
+
+
+java.lang.String
+getTitle ()
+Gets the title information of the COLLADA file.
+
+
+
+float
+getUnitMeter ()
+Gets the real-world meters of one distance unit as a floating-point number.
+
+
+
+java.lang.String
+getUnitName ()
+Gets the name of the distance unit used in the COLLADA file.
+
+
+
+ColAsset.UpAxis
+getUpAxis ()
+Gets the coordinate system of the geometric data.
+
+
+
+java.lang.String
+getVersion ()
+Gets the version number of the COLLADA file.
+
+
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColImportOption.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColImportOption.html
new file mode 100644
index 00000000..ba96d022
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColImportOption.html
@@ -0,0 +1,446 @@
+
+
+
+
+
+ColImportOption (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+java.lang.Enum<ColImportOption >
+
+
+com.interactivemesh.jfx.importer.col.ColImportOption
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Summary
+
+Enum Constants
+
+Enum Constant and Description
+
+
+GENERATE_NORMALS
+Normals will be generated based on the given crease angle.
+
+
+
+IGNORE_CAMERAS
+No camera node will be created and added to the scene graph.
+
+
+
+IGNORE_LIGHTS
+No light node will be created and added to the scene graph.
+
+
+
+MAP_WRITABLEIMAGE
+The maps of a PhongMaterial object will be of type WritableImage.
+
+
+
+NONE
+No option is applied.
+
+
+
+REVERSE_GEOMETRY
+The winding of the triangles will be reversed (counterclockwise <-> clockwise).
+
+
+
+REVERSE_TRANSPARENCY
+The transparency value will be reversed: t = 1.0 - t.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+Methods inherited from class java.lang.Enum
+clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
+
+
+
+
+
+Methods inherited from class java.lang.Object
+getClass, notify, notifyAll, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Detail
+
+
+
+
+
+
+
+
+
+GENERATE_NORMALS
+public static final ColImportOption GENERATE_NORMALS
+Normals will be generated based on the given crease angle. The normals
+ in the imported file will be ignored.
+ A new set of face smoothing groups will be created afterwards.
+
+See Also:
+ColModelImporter.setCreaseAngle(double)
+
+
+
+
+
+
+
+
+
+
+
+
+IGNORE_LIGHTS
+public static final ColImportOption IGNORE_LIGHTS
+No light node will be created and added to the scene graph.
+ The light library and instance elements (<library_lights>, <instance_light>)
+ will be ignored.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+valueOf
+public static ColImportOption valueOf(java.lang.String name)
+Returns the enum constant of this type with the specified name.
+The string must match exactly an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)
+
+Parameters:
+name - the name of the enum constant to be returned.
+Returns:
+the enum constant with the specified name
+Throws:
+java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
+java.lang.NullPointerException - if the argument is null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColModelImporter.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColModelImporter.html
new file mode 100644
index 00000000..f2e79efe
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/ColModelImporter.html
@@ -0,0 +1,876 @@
+
+
+
+
+
+ColModelImporter (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.col.ColModelImporter
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Summary
+
+Constructors
+
+Constructor and Description
+
+
+ColModelImporter ()
+Creates a COLLADA 1.4.1 and 1.5.0 model importer.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Concrete Methods
+
+Modifier and Type
+Method and Description
+
+
+void
+clear ()
+Disposes of the imported data.
+
+
+
+void
+close ()
+Disposes of the imported data and closes the importer.
+
+
+
+ColAsset
+getAsset ()
+Gets the asset attributes of the imported COLLADA root element.
+
+
+
+FilePath []
+getColladaFilePaths ()
+Gets the paths of included COLLADA files which are used for external referencing.
+
+
+
+double
+getCreaseAngle ()
+Gets the crease angle for normals generation measured in degrees.
+
+
+
+java.util.Map<javafx.scene.image.Image,FilePath >
+getImageFilePaths ()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+
+
+javafx.scene.Node[]
+getImport ()
+Gets the array of Nodes from the imported file.
+
+
+
+java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial>
+getNamedMaterials ()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+
+
+java.util.Map<java.lang.String,javafx.scene.Node>
+getNamedNodes ()
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+
+
+java.util.EnumSet<ColImportOption >
+getOptions ()
+Gets a copy of the import options enum set.
+
+
+
+java.lang.String
+getResourceBasePath ()
+Gets the path where files associated with the imported 3D model file are located.
+
+
+
+java.net.URL
+getResourceBaseUrl ()
+Gets the URL where files associated with the imported 3D model file are located.
+
+
+
+Viewpoint []
+getViewpoints ()
+Gets the viewpoints of the imported file.
+
+
+
+void
+onFileImported ()
+Method is invoked upon completion of import.
+
+
+
+void
+read (java.io.File file)
+Imports a 3D model file passed as a File object.
+
+
+
+void
+read (java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+
+
+
+void
+read (java.net.URL url)
+Imports a 3D model file from the passed location.
+
+
+
+void
+setCreaseAngle (double degrees)
+Sets the crease angle for normals generation measured in degrees.
+
+
+
+void
+setOptions (ColImportOption ... options)
+Sets the import options.
+
+
+
+void
+setOptions (java.util.EnumSet<ColImportOption > options)
+Sets the import options.
+
+
+
+void
+setResourceBasePath (java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+
+
+
+void
+setResourceBaseUrl (java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+
+
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Detail
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+setResourceBasePath
+public void setResourceBasePath(java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Specified by:
+setResourceBasePath in interface ModelImporter
+Parameters:
+path - location of associated files
+
+
+
+
+
+
+
+
+setResourceBaseUrl
+public void setResourceBaseUrl(java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Specified by:
+setResourceBaseUrl in interface ModelImporter
+Parameters:
+url - location of associated files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+read
+public void read(java.io.File file)
+Imports a 3D model file passed as a File object.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+file - File object to import
+
+
+
+
+
+
+
+
+read
+public void read(java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+filePath - location of the file to import
+
+
+
+
+
+
+
+
+read
+public void read(java.net.URL url)
+Imports a 3D model file from the passed location.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+url - location of the file to import
+
+
+
+
+
+
+
+
+onFileImported
+public void onFileImported()
+Method is invoked upon completion of import.
+ This implementation doesn't do anything, but may be customized in subclasses.
+
+Specified by:
+onFileImported in interface Importer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+getNamedNodes
+public java.util.Map<java.lang.String,javafx.scene.Node> getNamedNodes()
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+Returns:
+named Nodes or null if no imported Node is named
+
+
+
+
+
+
+
+
+getNamedMaterials
+public java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial> getNamedMaterials()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+Specified by:
+getNamedMaterials in interface ModelImporter
+Returns:
+named and used PhongMaterials or null if no material is named and used
+
+
+
+
+
+
+
+
+getImageFilePaths
+public java.util.Map<javafx.scene.image.Image,FilePath > getImageFilePaths()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+Specified by:
+getImageFilePaths in interface ModelImporter
+Returns:
+paths of imported images or null if no image is imported
+See Also:
+FilePath
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-frame.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-frame.html
new file mode 100644
index 00000000..6fba5cba
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-frame.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.col (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-summary.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-summary.html
new file mode 100644
index 00000000..9850822d
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-summary.html
@@ -0,0 +1,896 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.col (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+Class Summary
+
+Class
+Description
+
+
+
+ColAsset
+
+A ColAsset object provides the attributes of the asset child element and
+ the version number of the COLLADA root element.
+
+
+
+ColAsset.Contributor
+
+A Contributor object provides authoring information.
+
+
+
+ColAsset.GeographicLocation
+
+A GeographicLocation object provides geographic location information.
+
+
+
+ColModelImporter
+
+A JavaFX model importer for COLLADA 1.4.1 and 1.5.0 files.
+
+
+
+
+
+
+
+Enum Summary
+
+Enum
+Description
+
+
+
+ColAsset.UpAxis
+
+UpAxis describes the coordinate system of the geometric data.
+
+
+
+ColImportOption
+
+Import options for the JavaFX COLLADA model importer.
+
+
+
+
+
+
+
+
+
+
Package com.interactivemesh.jfx.importer.col Description
+
+ ColModelImporterJFX 0.6 - Importer for COLLADA™ 1.4.1 & 1.5.0 files.
+
+
+
Supported JavaFX 3D scene graph nodes and attributes
+
+
+
+ javafx.scene.AmbientLight
+ javafx.scene.Group
+ javafx.scene.ParallelCamera
+ javafx.scene.PerspectiveCamera
+ javafx.scene.PointLight
+ javafx.scene.image.Image
+ javafx.scene.image.WritableImage
+ javafx.scene.paint.Color
+ javafx.scene.paint.PhongMaterial
+ javafx.scene.shape.MeshView
+ javafx.scene.shape.TriangleMesh
+ javafx.scene.transform.Affine
+ javafx.scene.transform.Rotate
+ javafx.scene.transform.Scale
+ javafx.scene.transform.Translate
+
+
+
+
+
+
+ Mapping COLLADA --> JavaFX 3D
+
+
+
+ COLLADA
+ JavaFX 3D
+
+
+ Element hierarchy (extract)
+
+
+ Scene graph node / attribute
+ ColModelImporter
+
+
+
+
+
+
+
+
+
+ Option
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asset
+
+
+
+
+
+
+
+ ColAsset
+
+
+
+
+
+
+
+
+
+
+
+
+
+ scene
+ instance_visual_scene
+
+
+
+
+ see visual_scene
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ library_
+
+
+
+
+
+
+
+
+
+
+ animations
+ animation
+
+
+
+
+ u. d.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ animation_clips
+ animation_clip
+ instance_animation
+
+
+
+ u. d.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ cameras
+ camera
+ optics
+ orthographic
+
+
+ ParallelCamera
+ ignored
+
+
+
+
+
+
+ perspective
+
+
+ PerspectiveCamera
+ ignored
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ controllers
+ controller
+ Morph
+
+
+
+ currently static
+
+
+
+
+
+
+ Skin
+
+
+
+ currently static
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ effects
+ effect
+ profile_COMMON
+ blinn
+
+
+ see material
+
+
+
+
+
+
+
+ constant
+
+
+ see material
+
+
+
+
+
+
+
+ lambert
+
+
+ see material
+
+
+
+
+
+
+
+ phong
+
+
+ see material
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ geometries
+ mesh
+ lines
+
+
+
+ n. a.
+
+
+
+
+
+
+ linestrips
+
+
+
+ n. a.
+
+
+
+
+
+
+ polygons
+
+
+
+ TriangleMesh
+
+
+
+
+
+
+ polylist
+
+
+
+ TriangleMesh
+
+
+
+
+
+
+ triangles
+
+
+
+ TriangleMesh
+
+
+
+
+
+
+ trifans
+
+
+
+ TriangleMesh
+
+
+
+
+
+
+ tristrips
+
+
+
+ TriangleMesh
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ images
+ image
+
+
+
+
+ Image
+ WritableImage
+ FilePath
+
+
+
+
+
+
+
+
+
+
+
+
+
+ lights
+ light
+ ambient
+
+
+
+ AmbientLight
+ ignored
+
+
+
+
+
+ directional
+
+
+
+ PointLight
+ ignored
+
+
+
+
+
+ point
+
+
+
+ PointLight
+ ignored
+
+
+
+
+
+ spot
+
+
+
+ PointLight
+ ignored
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ materials
+ material
+ instance_effect
+
+
+
+ PhongMaterial
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nodes
+ node
+
+
+
+
+ Group
+
+
+
+
+
+
+ lookat
+
+
+
+ Affine
+
+
+
+
+
+
+ matrix
+
+
+
+ Affine
+
+
+
+
+
+
+ rotate
+
+
+
+ Rotate
+
+
+
+
+
+
+ scale
+
+
+
+ Scale
+
+
+
+
+
+
+ skew
+
+
+
+ n. a.
+
+
+
+
+
+
+ translate
+
+
+
+ Translate
+
+
+
+
+
+
+ instance_camera
+
+
+
+ ParallelCamera, PerspectiveCamera
+ ignored
+ Viewpoint
+
+
+
+
+ instance_controller
+
+
+
+ MeshView
+
+
+
+
+
+
+ instance_geometry
+
+
+
+ Group, MeshView
+
+
+
+
+
+
+ instance_light
+
+
+
+ AmbientLight, PointLight
+ ignored
+
+
+
+
+
+ instance_node
+
+
+
+ Group, MeshView
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ visual_scenes
+ visual_scene
+
+
+
+
+ Node[ ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Further implementation details
+
+
TODO
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-tree.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-tree.html
new file mode 100644
index 00000000..28b932ad
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/col/package-tree.html
@@ -0,0 +1,154 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.col Class Hierarchy (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
Class Hierarchy
+
+
Enum Hierarchy
+
+java.lang.Object
+
+java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/FxmlImportOption.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/FxmlImportOption.html
new file mode 100644
index 00000000..14a5c0b5
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/FxmlImportOption.html
@@ -0,0 +1,429 @@
+
+
+
+
+
+FxmlImportOption (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+java.lang.Enum<FxmlImportOption >
+
+
+com.interactivemesh.jfx.importer.fxml.FxmlImportOption
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Summary
+
+Enum Constants
+
+Enum Constant and Description
+
+
+GENERATE_NORMALS
+Normals will be generated based on the given crease angle.
+
+
+
+IGNORE_CAMERAS
+No camera node will be created and added to the scene graph.
+
+
+
+IGNORE_LIGHTS
+No light node will be created and added to the scene graph.
+
+
+
+MAP_WRITABLEIMAGE
+The maps of a PhongMaterial object will be of type WritableImage.
+
+
+
+NONE
+No option is applied.
+
+
+
+REVERSE_GEOMETRY
+The winding of the triangles will be reversed (counterclockwise <-> clockwise).
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+Methods inherited from class java.lang.Enum
+clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
+
+
+
+
+
+Methods inherited from class java.lang.Object
+getClass, notify, notifyAll, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Detail
+
+
+
+
+
+
+
+
+
+GENERATE_NORMALS
+public static final FxmlImportOption GENERATE_NORMALS
+Normals will be generated based on the given crease angle.
+ The smoothing groups in the imported file will be ignored.
+ A new set of smoothing groups will be created afterwards.
+
+See Also:
+FxmlModelImporter.setCreaseAngle(double)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+valueOf
+public static FxmlImportOption valueOf(java.lang.String name)
+Returns the enum constant of this type with the specified name.
+The string must match exactly an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)
+
+Parameters:
+name - the name of the enum constant to be returned.
+Returns:
+the enum constant with the specified name
+Throws:
+java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
+java.lang.NullPointerException - if the argument is null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/FxmlModelImporter.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/FxmlModelImporter.html
new file mode 100644
index 00000000..1e192194
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/FxmlModelImporter.html
@@ -0,0 +1,852 @@
+
+
+
+
+
+FxmlModelImporter (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Summary
+
+Constructors
+
+Constructor and Description
+
+
+FxmlModelImporter ()
+Creates a model importer for JavaFX 3D FXML files.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Concrete Methods
+
+Modifier and Type
+Method and Description
+
+
+void
+clear ()
+Disposes of the imported data.
+
+
+
+void
+close ()
+Disposes of the imported data and closes the importer.
+
+
+
+double
+getCreaseAngle ()
+Gets the crease angle for normals generation measured in degrees.
+
+
+
+java.util.Map<javafx.scene.image.Image,FilePath >
+getImageFilePaths ()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+
+
+javafx.scene.Node
+getImport ()
+Gets the root Node from the imported file.
+
+
+
+java.util.Map<javafx.scene.Node,FilePath >
+getIncludedFxmlFilePaths ()
+Gets the map which contains the FilePath objects for all included root nodes.
+
+
+
+java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial>
+getNamedMaterials ()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+
+
+java.util.Map<java.lang.String,javafx.scene.Node>
+getNamedNodes ()
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+
+
+java.util.EnumSet<FxmlImportOption >
+getOptions ()
+Gets a copy of the import options enum set.
+
+
+
+java.lang.String
+getResourceBasePath ()
+Gets the path where files associated with the imported 3D model file are located.
+
+
+
+java.net.URL
+getResourceBaseUrl ()
+Gets the URL where files associated with the imported 3D model file are located.
+
+
+
+Viewpoint []
+getViewpoints ()
+Gets the viewpoints of the imported file.
+
+
+
+void
+onFileImported ()
+Method is invoked upon completion of import.
+
+
+
+void
+read (java.io.File file)
+Imports a 3D model file passed as a File object.
+
+
+
+void
+read (java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+
+
+
+void
+read (java.net.URL url)
+Imports a 3D model file from the passed location.
+
+
+
+void
+setCreaseAngle (double degrees)
+Sets the crease angle for normals generation measured in degrees.
+
+
+
+void
+setOptions (java.util.EnumSet<FxmlImportOption > options)
+Sets the import options.
+
+
+
+void
+setOptions (FxmlImportOption ... options)
+Sets the import options.
+
+
+
+void
+setResourceBasePath (java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+
+
+
+void
+setResourceBaseUrl (java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+
+
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Detail
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+setResourceBasePath
+public void setResourceBasePath(java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Specified by:
+setResourceBasePath in interface ModelImporter
+Parameters:
+path - location of associated files
+
+
+
+
+
+
+
+
+setResourceBaseUrl
+public void setResourceBaseUrl(java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Specified by:
+setResourceBaseUrl in interface ModelImporter
+Parameters:
+url - location of associated files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+read
+public void read(java.io.File file)
+Imports a 3D model file passed as a File object.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+file - File object to import
+
+
+
+
+
+
+
+
+read
+public void read(java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+filePath - location of the file to import
+
+
+
+
+
+
+
+
+read
+public void read(java.net.URL url)
+Imports a 3D model file from the passed location.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+url - location of the file to import
+
+
+
+
+
+
+
+
+onFileImported
+public void onFileImported()
+Method is invoked upon completion of import.
+ This implementation doesn't do anything, but may be customized in subclasses.
+
+Specified by:
+onFileImported in interface Importer
+
+
+
+
+
+
+
+
+
+
+
+
+getNamedNodes
+public java.util.Map<java.lang.String,javafx.scene.Node> getNamedNodes()
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+Returns:
+named Nodes or null if no imported Node is named
+
+
+
+
+
+
+
+
+getNamedMaterials
+public java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial> getNamedMaterials()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+Specified by:
+getNamedMaterials in interface ModelImporter
+Returns:
+named and used PhongMaterials or null if no material is named and used
+
+
+
+
+
+
+
+
+getImageFilePaths
+public java.util.Map<javafx.scene.image.Image,FilePath > getImageFilePaths()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+Specified by:
+getImageFilePaths in interface ModelImporter
+Returns:
+paths of imported images or null if no image is imported
+See Also:
+FilePath
+
+
+
+
+
+
+
+
+getIncludedFxmlFilePaths
+public java.util.Map<javafx.scene.Node,FilePath > getIncludedFxmlFilePaths()
+Gets the map which contains the FilePath objects for all included root nodes.
+
+Returns:
+paths of included root nodes or null if no FXML file is included
+See Also:
+FilePath
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-frame.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-frame.html
new file mode 100644
index 00000000..5e520369
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-frame.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.fxml (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-summary.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-summary.html
new file mode 100644
index 00000000..9101e95d
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-summary.html
@@ -0,0 +1,241 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.fxml (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+Class Summary
+
+Class
+Description
+
+
+
+FxmlModelImporter
+
+A JavaFX model importer for 3D FXML files.
+
+
+
+
+
+
+
+Enum Summary
+
+Enum
+Description
+
+
+
+FxmlImportOption
+
+Import options for the JavaFX FXML model importer.
+
+
+
+
+
+
+
+
+
+
Package com.interactivemesh.jfx.importer.fxml Description
+
+ FxmlModelImporterJFX 0.5 - Importer for 3D FXML files.
+
+
+
Supported classes in JavaFX FXML files
+
+
+
+ java.lang.Boolean
+ java.lang.Double
+ java.lang.Float
+ java.lang.Integer
+ java.lang.String
+ javafx.geometry.Point3D
+ javafx.scene.AmbientLight
+ javafx.scene.Group
+ javafx.scene.ParallelCamera
+ javafx.scene.PerspectiveCamera
+ javafx.scene.PointLight
+ javafx.scene.image.Image
+ javafx.scene.paint.Color
+ javafx.scene.paint.PhongMaterial
+ javafx.scene.shape.Box
+ javafx.scene.shape.Cylinder
+ javafx.scene.shape.MeshView
+ javafx.scene.shape.Sphere
+ javafx.scene.shape.TriangleMesh
+ javafx.scene.transform.Affine
+ javafx.scene.transform.Rotate
+ javafx.scene.transform.Scale
+ javafx.scene.transform.Translate
+
+
+
Supported root nodes in main and included FXML files
+
+
+
+ javafx.scene.AmbientLight
+ javafx.scene.Group
+ javafx.scene.ParallelCamera
+ javafx.scene.PerspectiveCamera
+ javafx.scene.PointLight
+ javafx.scene.shape.Box
+ javafx.scene.shape.Cylinder
+ javafx.scene.shape.MeshView
+ javafx.scene.shape.Sphere
+
+
+
Supported javafx.scene.Node properties in JavaFX FXML files
+
+
+
+ id
+ opacity
+ rotate
+ rotationAxis
+ scaleX, scaleY, scaleZ
+ translateX, translateY, translateZ
+ visible
+ and the ObservableList of Transform objects
+
+
+
Supported FXML features
+
+
+
+ <fx:include source="mySubScene.fxml"> : including of a root node of another FXML file
+ <fx:reference source="myPhongMaterial"> : reference to an existing sharable element
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-tree.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-tree.html
new file mode 100644
index 00000000..703db9bf
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/fxml/package-tree.html
@@ -0,0 +1,150 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.fxml Class Hierarchy (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
Class Hierarchy
+
+
Enum Hierarchy
+
+java.lang.Object
+
+java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/ObjImportOption.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/ObjImportOption.html
new file mode 100644
index 00000000..7b9fe3f3
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/ObjImportOption.html
@@ -0,0 +1,391 @@
+
+
+
+
+
+ObjImportOption (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+java.lang.Enum<ObjImportOption >
+
+
+com.interactivemesh.jfx.importer.obj.ObjImportOption
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Summary
+
+Enum Constants
+
+Enum Constant and Description
+
+
+GENERATE_NORMALS
+Normals will be generated based on the given crease angle.
+
+
+
+MAP_WRITABLEIMAGE
+The maps of a PhongMaterial object will be of type WritableImage.
+
+
+
+NONE
+No option is applied.
+
+
+
+REVERSE_GEOMETRY
+The winding of the triangles will be reversed (counterclockwise <-> clockwise).
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+Methods inherited from class java.lang.Enum
+clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
+
+
+
+
+
+Methods inherited from class java.lang.Object
+getClass, notify, notifyAll, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Detail
+
+
+
+
+
+
+
+
+
+GENERATE_NORMALS
+public static final ObjImportOption GENERATE_NORMALS
+Normals will be generated based on the given crease angle. The normals
+ or face smoothing groups in the imported file will be ignored.
+ A new set of face smoothing groups will be created afterwards.
+
+See Also:
+ObjModelImporter.setCreaseAngle(double)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+valueOf
+public static ObjImportOption valueOf(java.lang.String name)
+Returns the enum constant of this type with the specified name.
+The string must match exactly an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)
+
+Parameters:
+name - the name of the enum constant to be returned.
+Returns:
+the enum constant with the specified name
+Throws:
+java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
+java.lang.NullPointerException - if the argument is null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/ObjModelImporter.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/ObjModelImporter.html
new file mode 100644
index 00000000..e4cd114b
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/ObjModelImporter.html
@@ -0,0 +1,808 @@
+
+
+
+
+
+ObjModelImporter (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Summary
+
+Constructors
+
+Constructor and Description
+
+
+ObjModelImporter ()
+Creates an OBJ model importer.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Concrete Methods
+
+Modifier and Type
+Method and Description
+
+
+void
+clear ()
+Disposes of the imported data.
+
+
+
+void
+close ()
+Disposes of the imported data and closes the importer.
+
+
+
+double
+getCreaseAngle ()
+Gets the crease angle for normals generation measured in degrees.
+
+
+
+java.util.Map<javafx.scene.image.Image,FilePath >
+getImageFilePaths ()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+
+
+javafx.scene.shape.MeshView[]
+getImport ()
+Gets the array of MeshViews from the imported file.
+
+
+
+java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial>
+getNamedMaterials ()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+
+
+java.util.Map<java.lang.String,javafx.scene.shape.MeshView>
+getNamedMeshViews ()
+Gets the map which contains all named (id property) MeshViews from the imported file.
+
+
+
+java.util.EnumSet<ObjImportOption >
+getOptions ()
+Gets a copy of the import options enum set.
+
+
+
+java.lang.String
+getResourceBasePath ()
+Gets the path where files associated with the imported 3D model file are located.
+
+
+
+java.net.URL
+getResourceBaseUrl ()
+Gets the URL where files associated with the imported 3D model file are located.
+
+
+
+void
+onFileImported ()
+Method is invoked upon completion of import.
+
+
+
+void
+read (java.io.File file)
+Imports a 3D model file passed as a File object.
+
+
+
+void
+read (java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+
+
+
+void
+read (java.net.URL url)
+Imports a 3D model file from the passed location.
+
+
+
+void
+setCreaseAngle (double degrees)
+Sets the crease angle for normals generation measured in degrees.
+
+
+
+void
+setOptions (java.util.EnumSet<ObjImportOption > options)
+Sets the import options.
+
+
+
+void
+setOptions (ObjImportOption ... options)
+Sets the import options.
+
+
+
+void
+setResourceBasePath (java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+
+
+
+void
+setResourceBaseUrl (java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+
+
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Detail
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+setResourceBasePath
+public void setResourceBasePath(java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Specified by:
+setResourceBasePath in interface ModelImporter
+Parameters:
+path - location of associated files
+
+
+
+
+
+
+
+
+setResourceBaseUrl
+public void setResourceBaseUrl(java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Specified by:
+setResourceBaseUrl in interface ModelImporter
+Parameters:
+url - location of associated files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+read
+public void read(java.io.File file)
+Imports a 3D model file passed as a File object.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+file - File object to import
+
+
+
+
+
+
+
+
+read
+public void read(java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+filePath - location of the file to import
+
+
+
+
+
+
+
+
+read
+public void read(java.net.URL url)
+Imports a 3D model file from the passed location.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+url - location of the file to import
+
+
+
+
+
+
+
+
+onFileImported
+public void onFileImported()
+Method is invoked upon completion of import.
+ This implementation doesn't do anything, but may be customized in subclasses.
+
+Specified by:
+onFileImported in interface Importer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+getNamedMaterials
+public java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial> getNamedMaterials()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+Specified by:
+getNamedMaterials in interface ModelImporter
+Returns:
+named and used PhongMaterials or null if no material is named and used
+
+
+
+
+
+
+
+
+getImageFilePaths
+public java.util.Map<javafx.scene.image.Image,FilePath > getImageFilePaths()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+Specified by:
+getImageFilePaths in interface ModelImporter
+Returns:
+paths of imported images or null if no image is imported
+See Also:
+FilePath
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-frame.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-frame.html
new file mode 100644
index 00000000..491ed2ae
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-frame.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.obj (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-summary.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-summary.html
new file mode 100644
index 00000000..aca6d79e
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-summary.html
@@ -0,0 +1,362 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.obj (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+Class Summary
+
+Class
+Description
+
+
+
+ObjModelImporter
+
+A JavaFX importer for OBJ files.
+
+
+
+
+
+
+
+Enum Summary
+
+Enum
+Description
+
+
+
+ObjImportOption
+
+Import options for the JavaFX OBJ model importer.
+
+
+
+
+
+
+
+
+
+
Package com.interactivemesh.jfx.importer.obj Description
+
+ ObjModelImporterJFX 0.8 - Importer for OBJ files.
+
+
+
Supported JavaFX 3D scene graph nodes and attributes
+
+
+
+ javafx.scene.image.Image
+ javafx.scene.image.WritableImage
+ javafx.scene.paint.Color
+ javafx.scene.paint.PhongMaterial
+ javafx.scene.shape.MeshView
+ javafx.scene.shape.TriangleMesh
+
+
+
Point and line meshes are currently not available.
+
+
+
+ Mapping OBJ -> JavaFX
+
+
+
+ OBJ
+ JavaFX
+
+
+ Feature
+ Description
+ Node/Attribute
+ Description
+
+
+
+
+
+
+
+
+ File *.obj
+
+
+
+
+
+
+
+
+
+
+
+
+ o
+ object name
+ MeshView
+ id property string, if no group name is provided
+
+
+ g
+ group name
+ MeshView
+ id property string, mesh property
+
+
+
+
+
+
+
+
+ v
+ position coordinates x, y, z
+ TriangleMesh
+ point
+
+
+ vn
+ normal vector x, y, z
+ TriangleMesh
+ smoothing group
+
+
+ vt
+ texture coordinates s, t
+ TriangleMesh
+ texture coordinates
+
+
+ f
+ v/vt/vn ...
+ TriangleMesh
+ face(s)
+
+
+ s
+ smoothing group number
+ TriangleMesh
+ smoothing group number
+
+
+
+
+
+
+
+
+ mtllib
+ one or more material library files (*.mtl)
+
+
+
+
+ usemtl
+ referenced material: 'newmtl' material name in mtl-file
+ MeshView
+ material property
+
+
+
+
+
+
+
+
+ File *.mtl
+
+
+
+
+
+
+
+
+
+
+
+ newmtl
+ material name
+
+
+
+
+ Kd
+ diffuse color
+ PhongMaterial
+ diffuse color property
+
+
+ Ks
+ specular color
+ PhongMaterial
+ specular color property
+
+
+ Ns
+ shininess
+ PhongMaterial
+ specular power property
+
+
+ d
+ dissolve factor, transparency
+ PhongMaterial
+ (waiting for final JavaFX transparency specification)
+
+
+ map_Kd
+ diffuse map
+ PhongMaterial
+ diffuse map property
+
+
+ map_Ks
+ specular map
+ PhongMaterial
+ specular map property
+
+
+ map_Bump / bump
+ bump map
+ PhongMaterial
+ bump map property
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-tree.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-tree.html
new file mode 100644
index 00000000..94f1c556
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/obj/package-tree.html
@@ -0,0 +1,150 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.obj Class Hierarchy (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
Class Hierarchy
+
+
Enum Hierarchy
+
+java.lang.Object
+
+java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-frame.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-frame.html
new file mode 100644
index 00000000..dfe714c5
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-frame.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+
Interfaces
+
+
Classes
+
+
Exceptions
+
+
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-summary.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-summary.html
new file mode 100644
index 00000000..be34ffe6
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-summary.html
@@ -0,0 +1,207 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+Interface Summary
+
+Interface
+Description
+
+
+
+Importer
+
+The Importer interface specifies the core import capabilities of the
+ JavaFX 3D importers.
+
+
+
+ModelImporter
+
+The ModelImporter interface specifies the core import capabilities of the
+ JavaFX 3D model importers.
+
+
+
+
+
+
+
+Class Summary
+
+Class
+Description
+
+
+
+FilePath
+
+A FilePath object represents the paths of a resource file
+ associated with the imported 3D model file.
+
+
+
+Viewpoint
+
+A Viewpoint object provides viewing properties of a JavaFX Camera object.
+
+
+
+
+
+
+
+Exception Summary
+
+Exception
+Description
+
+
+
+ImportException
+
+An ImportException is thrown if the importer encounters a problem
+ reading or parsing the specified file.
+
+
+
+
+
+
+
+
+
+
Package com.interactivemesh.jfx.importer Description
+
+ Common classes for JavaFX 3D model importers.
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-tree.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-tree.html
new file mode 100644
index 00000000..a890c4f5
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/package-tree.html
@@ -0,0 +1,160 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer Class Hierarchy (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
Class Hierarchy
+
+java.lang.Object
+
+com.interactivemesh.jfx.importer.FilePath
+java.lang.Throwable (implements java.io.Serializable)
+
+java.lang.Exception
+
+java.lang.RuntimeException
+
+
+
+
+
+
+com.interactivemesh.jfx.importer.Viewpoint
+
+
+
+
Interface Hierarchy
+
+com.interactivemesh.jfx.importer.Importer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/StlImportOption.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/StlImportOption.html
new file mode 100644
index 00000000..60266547
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/StlImportOption.html
@@ -0,0 +1,371 @@
+
+
+
+
+
+StlImportOption (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+java.lang.Enum<StlImportOption >
+
+
+com.interactivemesh.jfx.importer.stl.StlImportOption
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Summary
+
+Enum Constants
+
+Enum Constant and Description
+
+
+CALCULATE_FACET_NORMAL
+The facet normals will be calculated.
+
+
+
+NONE
+No option is applied.
+
+
+
+REVERSE_GEOMETRY
+The winding of the triangles will be reversed (counterclockwise <-> clockwise).
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+Methods inherited from class java.lang.Enum
+clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
+
+
+
+
+
+Methods inherited from class java.lang.Object
+getClass, notify, notifyAll, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+valueOf
+public static StlImportOption valueOf(java.lang.String name)
+Returns the enum constant of this type with the specified name.
+The string must match exactly an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)
+
+Parameters:
+name - the name of the enum constant to be returned.
+Returns:
+the enum constant with the specified name
+Throws:
+java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
+java.lang.NullPointerException - if the argument is null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/StlMeshImporter.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/StlMeshImporter.html
new file mode 100644
index 00000000..2065113c
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/StlMeshImporter.html
@@ -0,0 +1,653 @@
+
+
+
+
+
+StlMeshImporter (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Summary
+
+Constructors
+
+Constructor and Description
+
+
+StlMeshImporter ()
+Creates a STL mesh importer.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Concrete Methods
+
+Modifier and Type
+Method and Description
+
+
+void
+clear ()
+Disposes of the imported data.
+
+
+
+void
+close ()
+Disposes of the imported data and closes the importer.
+
+
+
+double
+getCreaseAngle ()
+Gets the crease angle for normals generation measured in degrees.
+
+
+
+javafx.scene.shape.TriangleMesh
+getImport ()
+Gets the TriangleMesh from the imported file.
+
+
+
+java.util.EnumSet<StlImportOption >
+getOptions ()
+Gets a copy of the import options enum set.
+
+
+
+java.lang.String
+getSolidName ()
+Gets the solid name from the imported ASCII file or
+ the header from the imported binary file.
+
+
+
+void
+onFileImported ()
+Method is invoked upon completion of import.
+
+
+
+void
+read (java.io.File file)
+Imports a 3D model file passed as a File object.
+
+
+
+void
+read (java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+
+
+
+void
+read (java.net.URL url)
+Imports a 3D model file from the passed location.
+
+
+
+void
+setCreaseAngle (double degrees)
+Sets the crease angle for normals generation measured in degrees.
+
+
+
+void
+setOptions (java.util.EnumSet<StlImportOption > options)
+Sets the import options.
+
+
+
+void
+setOptions (StlImportOption ... options)
+Sets the import options.
+
+
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Detail
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+read
+public void read(java.io.File file)
+Imports a 3D model file passed as a File object.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+file - File object to import
+
+
+
+
+
+
+
+
+read
+public void read(java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+filePath - location of the file to import
+
+
+
+
+
+
+
+
+read
+public void read(java.net.URL url)
+Imports a 3D model file from the passed location.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+url - location of the file to import
+
+
+
+
+
+
+
+
+onFileImported
+public void onFileImported()
+Method is invoked upon completion of import.
+ This implementation doesn't do anything, but may be customized in subclasses.
+
+Specified by:
+onFileImported in interface Importer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-frame.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-frame.html
new file mode 100644
index 00000000..578366cf
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-frame.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.stl (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-summary.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-summary.html
new file mode 100644
index 00000000..8ec21625
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-summary.html
@@ -0,0 +1,181 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.stl (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+Class Summary
+
+Class
+Description
+
+
+
+StlMeshImporter
+
+A JavaFX importer for ASCII and binary STL files.
+
+
+
+
+
+
+
+Enum Summary
+
+Enum
+Description
+
+
+
+StlImportOption
+
+Import options for the JavaFX STL mesh importer.
+
+
+
+
+
+
+
+
+
+
Package com.interactivemesh.jfx.importer.stl Description
+
+ StlMeshImporterJFX 0.7 - Importer for STL files.
+
+
Supported JavaFX 3D scene graph attribute
+
+
+
+ javafx.scene.shape.TriangleMesh
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-tree.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-tree.html
new file mode 100644
index 00000000..def710bb
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/stl/package-tree.html
@@ -0,0 +1,150 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.stl Class Hierarchy (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
Class Hierarchy
+
+
Enum Hierarchy
+
+java.lang.Object
+
+java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/TdsImportOption.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/TdsImportOption.html
new file mode 100644
index 00000000..51501486
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/TdsImportOption.html
@@ -0,0 +1,391 @@
+
+
+
+
+
+TdsImportOption (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+java.lang.Enum<TdsImportOption >
+
+
+com.interactivemesh.jfx.importer.tds.TdsImportOption
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Summary
+
+Enum Constants
+
+Enum Constant and Description
+
+
+GENERATE_NORMALS
+Normals will be generated based on the given crease angle.
+
+
+
+MAP_WRITABLEIMAGE
+The maps of a PhongMaterial object will be of type WritableImage.
+
+
+
+NONE
+No option is applied.
+
+
+
+REVERSE_GEOMETRY
+The winding of the triangles will be reversed (counterclockwise <-> clockwise).
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+Methods inherited from class java.lang.Enum
+clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
+
+
+
+
+
+Methods inherited from class java.lang.Object
+getClass, notify, notifyAll, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Detail
+
+
+
+
+
+
+
+
+
+GENERATE_NORMALS
+public static final TdsImportOption GENERATE_NORMALS
+Normals will be generated based on the given crease angle.
+ The face smoothing groups in the imported file will be ignored.
+ A new set of face smoothing groups will be created afterwards.
+
+See Also:
+TdsModelImporter.setCreaseAngle(double)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+valueOf
+public static TdsImportOption valueOf(java.lang.String name)
+Returns the enum constant of this type with the specified name.
+The string must match exactly an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)
+
+Parameters:
+name - the name of the enum constant to be returned.
+Returns:
+the enum constant with the specified name
+Throws:
+java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
+java.lang.NullPointerException - if the argument is null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/TdsModelImporter.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/TdsModelImporter.html
new file mode 100644
index 00000000..ec35c9d0
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/TdsModelImporter.html
@@ -0,0 +1,811 @@
+
+
+
+
+
+TdsModelImporter (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Summary
+
+Constructors
+
+Constructor and Description
+
+
+TdsModelImporter ()
+Creates a 3ds model importer.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Concrete Methods
+
+Modifier and Type
+Method and Description
+
+
+void
+clear ()
+Disposes of the imported data.
+
+
+
+void
+close ()
+Disposes of the imported data and closes the importer.
+
+
+
+double
+getCreaseAngle ()
+Gets the crease angle for normals generation measured in degrees.
+
+
+
+java.util.Map<javafx.scene.image.Image,FilePath >
+getImageFilePaths ()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+
+
+javafx.scene.Node[]
+getImport ()
+Gets the array of Nodes from the imported file.
+
+
+
+java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial>
+getNamedMaterials ()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+
+
+java.util.Map<java.lang.String,javafx.scene.Node>
+getNamedNodes ()
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+
+
+java.util.EnumSet<TdsImportOption >
+getOptions ()
+Gets a copy of the import options enum set.
+
+
+
+java.lang.String
+getResourceBasePath ()
+Gets the path where files associated with the imported 3D model file are located.
+
+
+
+java.net.URL
+getResourceBaseUrl ()
+Gets the URL where files associated with the imported 3D model file are located.
+
+
+
+void
+onFileImported ()
+Method is invoked upon completion of import.
+
+
+
+void
+read (java.io.File file)
+Imports a 3D model file passed as a File object.
+
+
+
+void
+read (java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+
+
+
+void
+read (java.net.URL url)
+Imports a 3D model file from the passed location.
+
+
+
+void
+setCreaseAngle (double degrees)
+Sets the crease angle for normals generation measured in degrees.
+
+
+
+void
+setOptions (java.util.EnumSet<TdsImportOption > options)
+Sets the import options.
+
+
+
+void
+setOptions (TdsImportOption ... options)
+Sets the import options.
+
+
+
+void
+setResourceBasePath (java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+
+
+
+void
+setResourceBaseUrl (java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+
+
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Detail
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+setResourceBasePath
+public void setResourceBasePath(java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Specified by:
+setResourceBasePath in interface ModelImporter
+Parameters:
+path - location of associated files
+
+
+
+
+
+
+
+
+setResourceBaseUrl
+public void setResourceBaseUrl(java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Specified by:
+setResourceBaseUrl in interface ModelImporter
+Parameters:
+url - location of associated files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+read
+public void read(java.io.File file)
+Imports a 3D model file passed as a File object.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+file - File object to import
+
+
+
+
+
+
+
+
+read
+public void read(java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+filePath - location of the file to import
+
+
+
+
+
+
+
+
+read
+public void read(java.net.URL url)
+Imports a 3D model file from the passed location.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+url - location of the file to import
+
+
+
+
+
+
+
+
+onFileImported
+public void onFileImported()
+Method is invoked upon completion of import.
+ This implementation doesn't do anything, but may be customized in subclasses.
+
+Specified by:
+onFileImported in interface Importer
+
+
+
+
+
+
+
+
+
+
+
+
+getNamedNodes
+public java.util.Map<java.lang.String,javafx.scene.Node> getNamedNodes()
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+Returns:
+named Nodes or null if no imported Node is named
+
+
+
+
+
+
+
+
+getNamedMaterials
+public java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial> getNamedMaterials()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+Specified by:
+getNamedMaterials in interface ModelImporter
+Returns:
+named and used PhongMaterials or null if no material is named and used
+
+
+
+
+
+
+
+
+getImageFilePaths
+public java.util.Map<javafx.scene.image.Image,FilePath > getImageFilePaths()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+Specified by:
+getImageFilePaths in interface ModelImporter
+Returns:
+paths of imported images or null if no image is imported
+See Also:
+FilePath
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-frame.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-frame.html
new file mode 100644
index 00000000..a4d845cd
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-frame.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.tds (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-summary.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-summary.html
new file mode 100644
index 00000000..10b019b0
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-summary.html
@@ -0,0 +1,188 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.tds (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+Class Summary
+
+Class
+Description
+
+
+
+TdsModelImporter
+
+A JavaFX importer for 3ds files.
+
+
+
+
+
+
+
+Enum Summary
+
+Enum
+Description
+
+
+
+TdsImportOption
+
+Import options for the JavaFX 3ds model importer.
+
+
+
+
+
+
+
+
+
+
Package com.interactivemesh.jfx.importer.tds Description
+
+ 3dsModelImporterJFX 0.7 - Importer for 3ds files.
+
+
+
Supported JavaFX 3D scene graph nodes and attributes
+
+
+
+ javafx.scene.Group
+ javafx.scene.image.Image
+ javafx.scene.image.WritableImage
+ javafx.scene.paint.PhongMaterial
+ javafx.scene.shape.MeshView
+ javafx.scene.shape.TriangleMesh
+ javafx.scene.transform.Affine
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-tree.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-tree.html
new file mode 100644
index 00000000..fcf531db
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/tds/package-tree.html
@@ -0,0 +1,150 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.tds Class Hierarchy (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
Class Hierarchy
+
+
Enum Hierarchy
+
+java.lang.Object
+
+java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dHead.UnitCat.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dHead.UnitCat.html
new file mode 100644
index 00000000..df9a0bfc
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dHead.UnitCat.html
@@ -0,0 +1,383 @@
+
+
+
+
+
+X3dHead.UnitCat (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+java.lang.Enum<X3dHead.UnitCat >
+
+
+com.interactivemesh.jfx.importer.x3d.X3dHead.UnitCat
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Summary
+
+Enum Constants
+
+Enum Constant and Description
+
+
+ANGLE
+Angle.
+
+
+
+FORCE
+Force.
+
+
+
+LENGTH
+Length.
+
+
+
+MASS
+Mass.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+Methods inherited from class java.lang.Enum
+clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
+
+
+
+
+
+Methods inherited from class java.lang.Object
+getClass, notify, notifyAll, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+valueOf
+public static X3dHead.UnitCat valueOf(java.lang.String name)
+Returns the enum constant of this type with the specified name.
+The string must match exactly an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)
+
+Parameters:
+name - the name of the enum constant to be returned.
+Returns:
+the enum constant with the specified name
+Throws:
+java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
+java.lang.NullPointerException - if the argument is null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dHead.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dHead.html
new file mode 100644
index 00000000..ca121c22
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dHead.html
@@ -0,0 +1,353 @@
+
+
+
+
+
+X3dHead (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.x3d.X3dHead
+
+
+
+
+
+
+
+
+public final class X3dHead
+extends java.lang.Object
+An X3dHead object comprises attributes of the X3D root element and
+ the component, meta, and unit elements of its head child element.
+ Only the declarations of the main X3D file are provided.
+
+
+
+
+
+
+
+
+
+
+
+Nested Class Summary
+
+Nested Classes
+
+Modifier and Type
+Class and Description
+
+
+static class
+X3dHead.UnitCat
+Base unit category.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Concrete Methods
+
+Modifier and Type
+Method and Description
+
+
+java.util.List<javafx.util.Pair<java.lang.String,java.lang.Integer>>
+getComponents ()
+Gets the list which contains explicitly declared additional components.
+
+
+
+java.util.List<javafx.util.Pair<java.lang.String,java.lang.String>>
+getMedadata ()
+Gets the list which contains metadata of the X3D file.
+
+
+
+java.lang.String
+getProfile ()
+Gets the profile declaration specifying the set of components and their support levels.
+
+
+
+java.util.Map<X3dHead.UnitCat ,javafx.util.Pair<java.lang.String,java.lang.Double>>
+getUnits ()
+Gets the map which contains altered initial base units.
+
+
+
+java.lang.String
+getVersion ()
+Gets the version number of the X3D standard being supported.
+
+
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+getComponents
+public java.util.List<javafx.util.Pair<java.lang.String,java.lang.Integer>> getComponents()
+Gets the list which contains explicitly declared additional components.
+ A Pair object provides the additional component name and its support level.
+
+Returns:
+additional components
+
+
+
+
+
+
+
+
+getMedadata
+public java.util.List<javafx.util.Pair<java.lang.String,java.lang.String>> getMedadata()
+Gets the list which contains metadata of the X3D file.
+ A Pair object provides a key and data pair.
+
+Returns:
+metadata about the X3D file
+
+
+
+
+
+
+
+
+getUnits
+public java.util.Map<X3dHead.UnitCat ,javafx.util.Pair<java.lang.String,java.lang.Double>> getUnits()
+Gets the map which contains altered initial base units.
+ In case of an altered base unit a Pair object provides
+ the new unit name and the corresponding conversion factor.
+
+Returns:
+altered base units
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dImportOption.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dImportOption.html
new file mode 100644
index 00000000..626cc487
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dImportOption.html
@@ -0,0 +1,431 @@
+
+
+
+
+
+X3dImportOption (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+java.lang.Enum<X3dImportOption >
+
+
+com.interactivemesh.jfx.importer.x3d.X3dImportOption
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Summary
+
+Enum Constants
+
+Enum Constant and Description
+
+
+GENERATE_NORMALS
+Normals will be generated based on the given crease angle.
+
+
+
+IGNORE_CAMERAS
+No camera node will be created and added to the scene graph.
+
+
+
+IGNORE_LIGHTS
+No light node will be created and added to the scene graph.
+
+
+
+MAP_WRITABLEIMAGE
+The maps of a PhongMaterial object will be of type WritableImage.
+
+
+
+NONE
+No option is applied.
+
+
+
+REVERSE_GEOMETRY
+The winding of the triangles will be reversed (counterclockwise <-> clockwise).
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+Methods inherited from class java.lang.Enum
+clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
+
+
+
+
+
+Methods inherited from class java.lang.Object
+getClass, notify, notifyAll, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Enum Constant Detail
+
+
+
+
+
+
+
+
+
+GENERATE_NORMALS
+public static final X3dImportOption GENERATE_NORMALS
+Normals will be generated based on the given crease angle. The normals
+ in the imported file will be ignored.
+ A new set of face smoothing groups will be created afterwards.
+
+See Also:
+X3dModelImporter.setCreaseAngle(double)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+REVERSE_GEOMETRY
+public static final X3dImportOption REVERSE_GEOMETRY
+The winding of the triangles will be reversed (counterclockwise <-> clockwise).
+ The triangles of the primitive shapes Box, Cylinder, and Sphere will not be reversed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+valueOf
+public static X3dImportOption valueOf(java.lang.String name)
+Returns the enum constant of this type with the specified name.
+The string must match exactly an identifier used to declare an
+enum constant in this type. (Extraneous whitespace characters are
+not permitted.)
+
+Parameters:
+name - the name of the enum constant to be returned.
+Returns:
+the enum constant with the specified name
+Throws:
+java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
+java.lang.NullPointerException - if the argument is null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dModelImporter.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dModelImporter.html
new file mode 100644
index 00000000..6a2636c8
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/X3dModelImporter.html
@@ -0,0 +1,904 @@
+
+
+
+
+
+X3dModelImporter (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+java.lang.Object
+
+
+com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Summary
+
+Constructors
+
+Constructor and Description
+
+
+X3dModelImporter ()
+Creates an X3D model importer.
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Concrete Methods
+
+Modifier and Type
+Method and Description
+
+
+void
+clear ()
+Disposes of the imported data.
+
+
+
+void
+close ()
+Disposes of the imported data and closes the importer.
+
+
+
+double
+getCreaseAngle ()
+Gets the crease angle for normals generation measured in degrees.
+
+
+
+X3dHead
+getHead ()
+Gets the X3dHead object of the imported X3D file.
+
+
+
+java.util.Map<javafx.scene.image.Image,FilePath >
+getImageFilePaths ()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+
+
+javafx.scene.Node[]
+getImport ()
+Gets the array of Nodes from the imported file.
+
+
+
+java.util.Map<javafx.scene.Group,FilePath >
+getInlinedX3DFilePaths ()
+Gets the map which contains the FilePath objects for all imported inlined X3D files.
+
+
+
+int[]
+getLayerOrder ()
+Gets the rendering order of the Layer nodes.
+
+
+
+java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial>
+getNamedMaterials ()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+
+
+java.util.Map<java.lang.String,javafx.scene.Node>
+getNamedNodes ()
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+
+
+java.util.EnumSet<X3dImportOption >
+getOptions ()
+Gets a copy of the import options enum set.
+
+
+
+java.lang.String
+getResourceBasePath ()
+Gets the path where files associated with the imported 3D model file are located.
+
+
+
+java.net.URL
+getResourceBaseUrl ()
+Gets the URL where files associated with the imported 3D model file are located.
+
+
+
+Viewpoint []
+getViewpoints ()
+Gets the viewpoints of the imported file.
+
+
+
+void
+onFileImported ()
+Method is invoked upon completion of import.
+
+
+
+void
+read (java.io.File file)
+Imports a 3D model file passed as a File object.
+
+
+
+void
+read (java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+
+
+
+void
+read (java.net.URL url)
+Imports a 3D model file from the passed location.
+
+
+
+void
+setCreaseAngle (double degrees)
+Sets the crease angle for normals generation measured in degrees.
+
+
+
+void
+setOptions (java.util.EnumSet<X3dImportOption > options)
+Sets the import options.
+
+
+
+void
+setOptions (X3dImportOption ... options)
+Sets the import options.
+
+
+
+void
+setResourceBasePath (java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+
+
+
+void
+setResourceBaseUrl (java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+
+
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Detail
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+setResourceBasePath
+public void setResourceBasePath(java.lang.String path)
+Sets the path where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Specified by:
+setResourceBasePath in interface ModelImporter
+Parameters:
+path - location of associated files
+
+
+
+
+
+
+
+
+setResourceBaseUrl
+public void setResourceBaseUrl(java.net.URL url)
+Sets the URL where files associated with the imported 3D model file are located.
+ Only needs to be set if the base directory differs from that
+ containing the imported 3D model file. Default value: null.
+
+Specified by:
+setResourceBaseUrl in interface ModelImporter
+Parameters:
+url - location of associated files
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+read
+public void read(java.io.File file)
+Imports a 3D model file passed as a File object.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+file - File object to import
+
+
+
+
+
+
+
+
+read
+public void read(java.lang.String filePath)
+Imports a 3D model file with the passed file path.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+filePath - location of the file to import
+
+
+
+
+
+
+
+
+read
+public void read(java.net.URL url)
+Imports a 3D model file from the passed location.
+ The data of the last imported file will be disposed of.
+ The imported data is available as soon as this method returns.
+
+Specified by:
+read in interface Importer
+Parameters:
+url - location of the file to import
+
+
+
+
+
+
+
+
+onFileImported
+public void onFileImported()
+Method is invoked upon completion of import.
+ This implementation doesn't do anything, but may be customized in subclasses.
+
+Specified by:
+onFileImported in interface Importer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+getNamedNodes
+public java.util.Map<java.lang.String,javafx.scene.Node> getNamedNodes()
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+Returns:
+named Nodes or null if no imported Node is named
+
+
+
+
+
+
+
+
+getNamedMaterials
+public java.util.Map<java.lang.String,javafx.scene.paint.PhongMaterial> getNamedMaterials()
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+Specified by:
+getNamedMaterials in interface ModelImporter
+Returns:
+named and used PhongMaterials or null if no material is named and used
+
+
+
+
+
+
+
+
+getImageFilePaths
+public java.util.Map<javafx.scene.image.Image,FilePath > getImageFilePaths()
+Gets the map which contains the FilePath objects for all imported texture images.
+
+Specified by:
+getImageFilePaths in interface ModelImporter
+Returns:
+paths of imported images or null if no image is imported
+See Also:
+FilePath
+
+
+
+
+
+
+
+
+getInlinedX3DFilePaths
+public java.util.Map<javafx.scene.Group,FilePath > getInlinedX3DFilePaths()
+Gets the map which contains the FilePath objects for all imported inlined X3D files.
+
+Returns:
+paths of inlined X3D files or null if X3D files aren't inlined
+See Also:
+FilePath
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-frame.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-frame.html
new file mode 100644
index 00000000..f4e3926c
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-frame.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.x3d (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-summary.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-summary.html
new file mode 100644
index 00000000..e97f0df7
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-summary.html
@@ -0,0 +1,1587 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.x3d (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+Class Summary
+
+Class
+Description
+
+
+
+X3dHead
+
+An X3dHead object comprises attributes of the X3D root element and
+ the component, meta, and unit elements of its head child element.
+
+
+
+X3dModelImporter
+
+A JavaFX model importer for X3D files.
+
+
+
+
+
+
+
+Enum Summary
+
+Enum
+Description
+
+
+
+X3dHead.UnitCat
+
+Base unit category.
+
+
+
+X3dImportOption
+
+Import options for the JavaFX X3D model importer.
+
+
+
+
+
+
+
+
+
+
Package com.interactivemesh.jfx.importer.x3d Description
+
+ X3dModelImporterJFX 0.4 - Importer for X3D™ files.
+
+
+
Supported JavaFX 3D scene graph nodes and attributes
+
+
+
+
+ javafx.scene.Group
+ javafx.scene.ParallelCamera
+ javafx.scene.PerspectiveCamera
+ javafx.scene.PointLight
+ javafx.scene.image.Image
+ javafx.scene.image.WritableImage
+ javafx.scene.paint.Color
+ javafx.scene.paint.PhongMaterial
+ javafx.scene.shape.MeshView
+ javafx.scene.shape.TriangleMesh
+
+ javafx.scene.transform.Rotate
+ javafx.scene.transform.Scale
+ javafx.scene.transform.Translate
+
+
+
+
+ Mapping X3D --> JavaFX 3D
+
+
+
+ X3D
+ JavaFX 3D
+
+
+ Node
+ Version
+ Profile
+ Component
+ Scene graph node / attribute
+ X3dModelImporter
+
+
+
+ 3.0
+ 3.1
+ 3.2
+ 3.3
+
+
+ Level
+
+ Option
+
+
+
+ Layering
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LayerSet
+
+
+ 3.2
+
+ Full
+ Layering
+ 1
+
+
+ order of layers
+
+
+ Layer
+
+
+ 3.2
+
+ Full
+ Layering
+ 1
+ Group
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Inline
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Inline
+ 3.0
+
+
+
+ Interactive
+ Networking
+ 3
+ Group
+
+ FilePath
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Groups
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Billboard
+ 3.0
+
+
+
+ Immersive
+ Navigation
+ 2
+ Group
+
+
+
+
+ Collision
+ 3.0
+
+
+
+ Immersive
+ Navigation
+ 2
+ Group
+
+
+
+
+ Group
+ 3.0
+
+
+
+ Interchange
+ Grouping
+ 1
+ Group
+
+
+
+
+ LOD
+ 3.0
+
+
+
+ Immersive
+ Navigation
+ 2
+ Group
+
+
+
+
+ PickableGroup
+
+
+
+ 3.3
+ Immersive
+ Picking
+ 1
+ Group
+
+
+
+
+ StaticGroup
+ 3.0
+
+
+
+ Full
+ Grouping
+ 3
+ Group
+
+
+
+
+ Switch
+ 3.0
+
+
+
+ Interactive
+ Grouping
+ 2
+ Group
+
+
+
+
+ Transform
+ 3.0
+
+
+
+ Interchange
+ Grouping
+ 1
+ Group/Rotate, Scale, Translate
+
+
+
+
+ Viewport
+
+
+ 3.2
+
+ Full
+ Layering
+ 1
+ Group
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CAD
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CADLayer
+
+ 3.1
+
+
+ CADInterchange
+ CADGeometry
+ 2
+ Group
+
+
+
+
+ CADAssembly
+
+ 3.1
+
+
+ CADInterchange
+ CADGeometry
+ 2
+ Group
+
+
+
+
+ CADPart
+
+ 3.1
+
+
+ CADInterchange
+ CADGeometry
+ 2
+ Group/Rotate, Scale, Translate
+
+
+
+
+ CADFace
+
+ 3.1
+
+
+ CADInterchange
+ CADGeometry
+ 2
+ Group
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Shape
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Shape
+ 3.0
+
+
+
+ Interchange
+ Shape
+ 1
+ MeshView, Box, Cylinder, Sphere
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Appearance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Appearance
+ 3.0
+
+
+
+ Interchange
+ Shape
+ 1
+ PhongMaterial
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LineProperties
+ 3.0
+
+
+
+ Immersive
+ Shape
+ 2
+ n. a.
+
+
+
+
+ Material
+ 3.0
+
+
+
+ Interchange
+ Shape
+ 1
+ PhongMaterial diffuse/specular color
+
+
+
+
+ MultiTexture
+ 3.0
+
+
+
+ Interchange
+ Texturing
+ 2
+ n. a.
+
+
+
+
+ ImageTexture
+ 3.0
+
+
+
+ Interchange
+ Texturing
+ 1
+ Image, PhongMaterial diffuse map
+ WritableImage
+ FilePath
+
+
+ TextureProperties
+
+
+ 3.2
+
+ Interchange
+ Texturing
+ 2
+ n. a.
+
+
+
+
+ ComposedCubeMapTexture
+
+ 3.1
+
+
+ Full
+ CubeMapTexturing
+ 1
+ n. a.
+
+
+
+
+ ComposedTexture3D
+
+ 3.1
+
+
+ Full
+ Texturing3D
+ 1
+ n. a.
+
+
+
+
+ MultiTextureTransform
+ 3.0
+
+
+
+ Interchange
+ Texturing
+ 2
+ n. a.
+
+
+
+
+ TextureTransform
+ 3.0
+
+
+
+ Interchange
+ Texturing
+ 1
+ n. a.
+
+
+
+
+ TextureMatrixTransform
+
+ 3.1
+
+
+ Full
+ Texturing3D
+ 1
+ n. a.
+
+
+
+
+ TextureTransform3D
+
+ 3.1
+
+
+ Full
+ Texturing3D
+ 1
+ n. a.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Geometry
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PointSet
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 1
+ n. a.
+
+
+
+
+ LineSet
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 1
+ n. a.
+
+
+
+
+ TriangleSet
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 3
+ TriangleMesh
+
+
+
+
+ TriangleFanSet
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 3
+ TriangleMesh
+
+
+
+
+ TriangleStripSet
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 3
+ TriangleMesh
+
+
+
+
+ QuadSet
+
+ 3.1
+
+
+ CADInterchange
+ CADGeometry
+ 1
+ TriangleMesh
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IndexedLineSet
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 1
+ n. a.
+
+
+
+
+ IndexedTriangleSet
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 3
+ TriangleMesh
+
+
+
+
+ IndexedTriangleFanSet
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 3
+ TriangleMesh
+
+
+
+
+ IndexedTriangleStripSet
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 3
+ TriangleMesh
+
+
+
+
+ IndexedQuadSet
+
+ 3.1
+
+
+ CADInterchange
+ CADGeometry
+ 1
+ TriangleMesh
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IndexedFaceSet
+ 3.0
+
+
+
+ Interchange
+ Geometry3D
+ 2
+ TriangleMesh
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Box
+ 3.0
+
+
+
+ Interchange
+ Geometry3D
+ 1
+ Box
+
+
+
+
+ Cone
+ 3.0
+
+
+
+ Interchange
+ Geometry3D
+ 1
+ MeshView/TriangleMesh
+
+
+
+
+ Cylinder
+ 3.0
+
+
+
+ Interchange
+ Geometry3D
+ 1
+ Cylinder, MeshView/TriangleMesh
+
+
+
+
+ Sphere
+ 3.0
+
+
+
+ Interchange
+ Geometry3D
+ 1
+ Sphere
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Color
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 1
+ n. a.
+
+
+
+
+ ColorRGBA
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 4
+ n. a.
+
+
+
+
+ Coordinate
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 1
+ TriangleMesh points
+
+
+
+
+ CoordinateDouble
+ 3.0
+
+
+
+ Full
+ NURBS
+ 1
+ TriangleMesh points
+
+
+
+
+ Normal
+ 3.0
+
+
+
+ Interchange
+ Rendering
+ 2
+ TriangleMesh smoothing groups
+
+
+
+
+ MultiTextureCoordinate
+ 3.0
+
+
+
+ Interchange
+ Texturing
+ 2
+ n. a.
+
+
+
+
+ TextureCoordinateGenerator
+ 3.0
+
+
+
+ Interchange
+ Texturing
+ 2
+ n. a.
+
+
+
+
+ TextureCoordinate
+ 3.0
+
+
+
+ Interchange
+ Texturing
+ 1
+ TriangleMesh texture coordinates
+
+
+
+
+ TextureCoordinate3D
+
+ 3.1
+
+
+ Full
+ Texturing3D
+ 1
+ n. a.
+
+
+
+
+ TextureCoordinate4D
+
+ 3.1
+
+
+ Full
+ Texturing3D
+ 1
+ n. a.
+
+
+
+
+ FloatVertexAttribute
+
+ 3.1
+
+
+ Full
+ Shaders
+ 1
+ n. a.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lighting
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DirectionalLight
+ 3.0
+
+
+
+ Interchange
+ Lighting
+ 1
+ PointLight
+ ignored
+
+
+
+ PointLight
+ 3.0
+
+
+
+ Interactive
+ Lighting
+ 2
+ PointLight/Translate
+ ignored
+
+
+
+ SpotLight
+ 3.0
+
+
+
+ Interactive
+ Lighting
+ 2
+ PointLight/Translate
+ ignored
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Viewing
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OrthoViewpoint
+
+
+ 3.2
+
+ Full
+ Navigation
+ 3
+ ParallelCamera/Rotate, Translate
+ ignored
+ Viewpoint
+
+
+ Viewpoint
+ 3.0
+
+
+
+ Interchange
+ Navigation
+ 1
+ PerspectveCamera/Rotate, Translate
+ ignored
+ Viewpoint
+
+
+ ViewpointGroup
+
+
+ 3.2
+
+ Full
+ Navigation
+ 3
+ -
+ ignored
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Further implementation details
+
+
TODO
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-tree.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-tree.html
new file mode 100644
index 00000000..ff0f03c1
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/com/interactivemesh/jfx/importer/x3d/package-tree.html
@@ -0,0 +1,152 @@
+
+
+
+
+
+com.interactivemesh.jfx.importer.x3d Class Hierarchy (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
Class Hierarchy
+
+
Enum Hierarchy
+
+java.lang.Object
+
+java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/constant-values.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/constant-values.html
new file mode 100644
index 00000000..9d3cdc9a
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/constant-values.html
@@ -0,0 +1,125 @@
+
+
+
+
+
+Constant Field Values (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/deprecated-list.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/deprecated-list.html
new file mode 100644
index 00000000..03a47b38
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/deprecated-list.html
@@ -0,0 +1,125 @@
+
+
+
+
+
+Deprecated List (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/help-doc.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/help-doc.html
new file mode 100644
index 00000000..be8b7d96
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/help-doc.html
@@ -0,0 +1,226 @@
+
+
+
+
+
+API Help (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+Overview
+The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.
+
+
+Package
+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:
+
+Interfaces (italic)
+Classes
+Enums
+Exceptions
+Errors
+Annotation Types
+
+
+
+Class/Interface
+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:
+
+Class inheritance diagram
+Direct Subclasses
+All Known Subinterfaces
+All Known Implementing Classes
+Class/interface declaration
+Class/interface description
+
+
+Nested Class Summary
+Field Summary
+Constructor Summary
+Method Summary
+
+
+Field Detail
+Constructor Detail
+Method Detail
+
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+
+
+Annotation Type
+Each annotation type has its own separate page with the following sections:
+
+Annotation Type declaration
+Annotation Type description
+Required Element Summary
+Optional Element Summary
+Element Detail
+
+
+
+Enum
+Each enum has its own separate page with the following sections:
+
+Enum declaration
+Enum description
+Enum Constant Summary
+Enum Constant Detail
+
+
+
+Tree (Class Hierarchy)
+There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
+
+When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
+When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
+
+
+
+Deprecated API
+The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+
+
+Index
+The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+
+
+Prev/Next
+These links take you to the next or previous class, interface, package, or related page.
+
+
+Frames/No Frames
+These links show and hide the HTML frames. All pages are available with or without frames.
+
+
+All Classes
+The All Classes link shows all classes and interfaces except non-static nested types.
+
+
+Serialized Form
+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
+
+
+Constant Field Values
+The Constant Field Values page lists the static final fields and their values.
+
+
+
This help file applies to API documentation generated using the standard doclet.
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-1.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-1.html
new file mode 100644
index 00000000..a491f1be
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-1.html
@@ -0,0 +1,243 @@
+
+
+
+
+
+C-Index (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+C F G I M O R S T V X
+
+
+
C
+
+clear() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Disposes of the imported data.
+
+clear() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Disposes of the imported data.
+
+clear() - Method in interface com.interactivemesh.jfx.importer.Importer
+
+Disposes of the imported data.
+
+clear() - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Disposes of the imported data.
+
+clear() - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Disposes of the imported data.
+
+clear() - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Disposes of the imported data.
+
+clear() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Disposes of the imported data.
+
+close() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Disposes of the imported data and closes the importer.
+
+close() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Disposes of the imported data and closes the importer.
+
+close() - Method in interface com.interactivemesh.jfx.importer.Importer
+
+Disposes of the imported data and closes the importer.
+
+close() - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Disposes of the imported data and closes the importer.
+
+close() - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Disposes of the imported data and closes the importer.
+
+close() - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Disposes of the imported data and closes the importer.
+
+close() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Disposes of the imported data and closes the importer.
+
+ColAsset - Class in com.interactivemesh.jfx.importer.col
+
+A ColAsset object provides the attributes of the asset child element and
+ the version number of the COLLADA root element.
+
+ColAsset.Contributor - Class in com.interactivemesh.jfx.importer.col
+
+A Contributor object provides authoring information.
+
+ColAsset.GeographicLocation - Class in com.interactivemesh.jfx.importer.col
+
+A GeographicLocation object provides geographic location information.
+
+ColAsset.UpAxis - Enum in com.interactivemesh.jfx.importer.col
+
+UpAxis describes the coordinate system of the geometric data.
+
+ColImportOption - Enum in com.interactivemesh.jfx.importer.col
+
+Import options for the JavaFX COLLADA model importer.
+
+ColModelImporter - Class in com.interactivemesh.jfx.importer.col
+
+A JavaFX model importer for COLLADA 1.4.1 and 1.5.0 files.
+
+ColModelImporter() - Constructor for class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Creates a COLLADA 1.4.1 and 1.5.0 model importer.
+
+com.interactivemesh.jfx.importer - package com.interactivemesh.jfx.importer
+
+
+ Common classes for JavaFX 3D model importers.
+
+com.interactivemesh.jfx.importer.fxml - package com.interactivemesh.jfx.importer.fxml
+
+
+ FxmlModelImporterJFX 0.5 - Importer for 3D FXML files.
+
+com.interactivemesh.jfx.importer.obj - package com.interactivemesh.jfx.importer.obj
+
+
+ ObjModelImporterJFX 0.8 - Importer for OBJ files.
+
+com.interactivemesh.jfx.importer.stl - package com.interactivemesh.jfx.importer.stl
+
+
+ StlMeshImporterJFX 0.7 - Importer for STL files.
+
+com.interactivemesh.jfx.importer.tds - package com.interactivemesh.jfx.importer.tds
+
+
+ 3dsModelImporterJFX 0.7 - Importer for 3ds files.
+
+com.interactivemesh.jfx.importer.x3d - package com.interactivemesh.jfx.importer.x3d
+
+
+ X3dModelImporterJFX 0.4 - Importer for X3D™ files.
+
+
+
C F G I M O R S T V X
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-10.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-10.html
new file mode 100644
index 00000000..bd87852a
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-10.html
@@ -0,0 +1,208 @@
+
+
+
+
+
+V-Index (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+C F G I M O R S T V X
+
+
+
V
+
+valueOf(String) - Static method in enum com.interactivemesh.jfx.importer.col.ColAsset.UpAxis
+
+Returns the enum constant of this type with the specified name.
+
+valueOf(String) - Static method in enum com.interactivemesh.jfx.importer.col.ColImportOption
+
+Returns the enum constant of this type with the specified name.
+
+valueOf(String) - Static method in enum com.interactivemesh.jfx.importer.fxml.FxmlImportOption
+
+Returns the enum constant of this type with the specified name.
+
+valueOf(String) - Static method in enum com.interactivemesh.jfx.importer.obj.ObjImportOption
+
+Returns the enum constant of this type with the specified name.
+
+valueOf(String) - Static method in enum com.interactivemesh.jfx.importer.stl.StlImportOption
+
+Returns the enum constant of this type with the specified name.
+
+valueOf(String) - Static method in enum com.interactivemesh.jfx.importer.tds.TdsImportOption
+
+Returns the enum constant of this type with the specified name.
+
+valueOf(String) - Static method in enum com.interactivemesh.jfx.importer.x3d.X3dHead.UnitCat
+
+Returns the enum constant of this type with the specified name.
+
+valueOf(String) - Static method in enum com.interactivemesh.jfx.importer.x3d.X3dImportOption
+
+Returns the enum constant of this type with the specified name.
+
+values() - Static method in enum com.interactivemesh.jfx.importer.col.ColAsset.UpAxis
+
+Returns an array containing the constants of this enum type, in
+the order they are declared.
+
+values() - Static method in enum com.interactivemesh.jfx.importer.col.ColImportOption
+
+Returns an array containing the constants of this enum type, in
+the order they are declared.
+
+values() - Static method in enum com.interactivemesh.jfx.importer.fxml.FxmlImportOption
+
+Returns an array containing the constants of this enum type, in
+the order they are declared.
+
+values() - Static method in enum com.interactivemesh.jfx.importer.obj.ObjImportOption
+
+Returns an array containing the constants of this enum type, in
+the order they are declared.
+
+values() - Static method in enum com.interactivemesh.jfx.importer.stl.StlImportOption
+
+Returns an array containing the constants of this enum type, in
+the order they are declared.
+
+values() - Static method in enum com.interactivemesh.jfx.importer.tds.TdsImportOption
+
+Returns an array containing the constants of this enum type, in
+the order they are declared.
+
+values() - Static method in enum com.interactivemesh.jfx.importer.x3d.X3dHead.UnitCat
+
+Returns an array containing the constants of this enum type, in
+the order they are declared.
+
+values() - Static method in enum com.interactivemesh.jfx.importer.x3d.X3dImportOption
+
+Returns an array containing the constants of this enum type, in
+the order they are declared.
+
+Viewpoint - Class in com.interactivemesh.jfx.importer
+
+A Viewpoint object provides viewing properties of a JavaFX Camera object.
+
+Viewpoint() - Constructor for class com.interactivemesh.jfx.importer.Viewpoint
+
+Constructs a perspective Viewpoint object with an identity transform.
+
+
+
C F G I M O R S T V X
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-11.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-11.html
new file mode 100644
index 00000000..1e2a7761
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-11.html
@@ -0,0 +1,149 @@
+
+
+
+
+
+X-Index (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+C F G I M O R S T V X
+
+
+
X
+
+X3dHead - Class in com.interactivemesh.jfx.importer.x3d
+
+An X3dHead object comprises attributes of the X3D root element and
+ the component, meta, and unit elements of its head child element.
+
+X3dHead.UnitCat - Enum in com.interactivemesh.jfx.importer.x3d
+
+Base unit category.
+
+X3dImportOption - Enum in com.interactivemesh.jfx.importer.x3d
+
+Import options for the JavaFX X3D model importer.
+
+X3dModelImporter - Class in com.interactivemesh.jfx.importer.x3d
+
+A JavaFX model importer for X3D files.
+
+X3dModelImporter() - Constructor for class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Creates an X3D model importer.
+
+
+
C F G I M O R S T V X
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-2.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-2.html
new file mode 100644
index 00000000..8c7c6ddb
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-2.html
@@ -0,0 +1,151 @@
+
+
+
+
+
+F-Index (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+C F G I M O R S T V X
+
+
+
F
+
+FilePath - Class in com.interactivemesh.jfx.importer
+
+A FilePath object represents the paths of a resource file
+ associated with the imported 3D model file.
+
+FilePath(String, URL) - Constructor for class com.interactivemesh.jfx.importer.FilePath
+
+A FilePath object represents the paths of a referenced file
+ by the string as read from the imported 3D model file and
+ by the corresponding absolute Uniform Resource Locator (URL) object.
+
+FxmlImportOption - Enum in com.interactivemesh.jfx.importer.fxml
+
+Import options for the JavaFX FXML model importer.
+
+FxmlModelImporter - Class in com.interactivemesh.jfx.importer.fxml
+
+A JavaFX model importer for 3D FXML files.
+
+FxmlModelImporter() - Constructor for class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Creates a model importer for JavaFX 3D FXML files.
+
+
+
C F G I M O R S T V X
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-3.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-3.html
new file mode 100644
index 00000000..0dec4919
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-3.html
@@ -0,0 +1,515 @@
+
+
+
+
+
+G-Index (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+C F G I M O R S T V X
+
+
+
G
+
+getAbsolutePath() - Method in class com.interactivemesh.jfx.importer.FilePath
+
+Gets the absolute path of a referenced file as a Uniform Resource Locator (URL) object.
+
+getAltitude() - Method in class com.interactivemesh.jfx.importer.col.ColAsset.GeographicLocation
+
+Gets the altitude value in meters.
+
+getAltitudeMode() - Method in class com.interactivemesh.jfx.importer.col.ColAsset.GeographicLocation
+
+Gets the mode of the altitude value.
+
+getAsset() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Gets the asset attributes of the imported COLLADA root element.
+
+getAuthor() - Method in class com.interactivemesh.jfx.importer.col.ColAsset.Contributor
+
+Gets the name of the author.
+
+getAuthorEmail() - Method in class com.interactivemesh.jfx.importer.col.ColAsset.Contributor
+
+Gets the email address of the author.
+
+getAuthoringTool() - Method in class com.interactivemesh.jfx.importer.col.ColAsset.Contributor
+
+Gets the name of the authoring tool.
+
+getAuthorWebsite() - Method in class com.interactivemesh.jfx.importer.col.ColAsset.Contributor
+
+Gets the URL of the author's website.
+
+getCenterOfRotation() - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Gets the center of rotation.
+
+getColladaFilePaths() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Gets the paths of included COLLADA files which are used for external referencing.
+
+getComments() - Method in class com.interactivemesh.jfx.importer.col.ColAsset.Contributor
+
+Gets the comments of the contributor.
+
+getComponents() - Method in class com.interactivemesh.jfx.importer.x3d.X3dHead
+
+Gets the list which contains explicitly declared additional components.
+
+getContributors() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets the contributors of the COLLADA file.
+
+getCopyright() - Method in class com.interactivemesh.jfx.importer.col.ColAsset.Contributor
+
+Gets the copyright information.
+
+getCreaseAngle() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Gets the crease angle for normals generation measured in degrees.
+
+getCreaseAngle() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Gets the crease angle for normals generation measured in degrees.
+
+getCreaseAngle() - Method in interface com.interactivemesh.jfx.importer.Importer
+
+Gets the crease angle for normals generation measured in degrees.
+
+getCreaseAngle() - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Gets the crease angle for normals generation measured in degrees.
+
+getCreaseAngle() - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Gets the crease angle for normals generation measured in degrees.
+
+getCreaseAngle() - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Gets the crease angle for normals generation measured in degrees.
+
+getCreaseAngle() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets the crease angle for normals generation measured in degrees.
+
+getCreatedDate() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets the date and time when the COLADA file was created (in an ISO 8601 format).
+
+getFarClip() - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Gets the far clipping plane distance.
+
+getFieldOfView() - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Gets the field of view value.
+
+getGeographicLocation() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets the geographic location information of the COLLADA file.
+
+getHead() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets the X3dHead object of the imported X3D file.
+
+getImageFilePaths() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Gets the map which contains the FilePath objects for all imported texture images.
+
+getImageFilePaths() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Gets the map which contains the FilePath objects for all imported texture images.
+
+getImageFilePaths() - Method in interface com.interactivemesh.jfx.importer.ModelImporter
+
+Gets the map which contains the FilePath objects for all imported texture images.
+
+getImageFilePaths() - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Gets the map which contains the FilePath objects for all imported texture images.
+
+getImageFilePaths() - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Gets the map which contains the FilePath objects for all imported texture images.
+
+getImageFilePaths() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets the map which contains the FilePath objects for all imported texture images.
+
+getImport() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Gets the array of Nodes from the imported file.
+
+getImport() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Gets the root Node from the imported file.
+
+getImport() - Method in interface com.interactivemesh.jfx.importer.Importer
+
+Gets the imported 3D data.
+
+getImport() - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Gets the array of MeshViews from the imported file.
+
+getImport() - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Gets the TriangleMesh from the imported file.
+
+getImport() - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Gets the array of Nodes from the imported file.
+
+getImport() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets the array of Nodes from the imported file.
+
+getImportedPath() - Method in class com.interactivemesh.jfx.importer.FilePath
+
+Gets the path string of a referenced file as read from the imported 3D model file.
+
+getIncludedFxmlFilePaths() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Gets the map which contains the FilePath objects for all included root nodes.
+
+getInlinedX3DFilePaths() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets the map which contains the FilePath objects for all imported inlined X3D files.
+
+getKeywords() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets a list of words used as search criteria.
+
+getLatitude() - Method in class com.interactivemesh.jfx.importer.col.ColAsset.GeographicLocation
+
+Gets the latitude value in degrees.
+
+getLayerOrder() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets the rendering order of the Layer nodes.
+
+getLongitude() - Method in class com.interactivemesh.jfx.importer.col.ColAsset.GeographicLocation
+
+Gets the longitude value in degrees.
+
+getMedadata() - Method in class com.interactivemesh.jfx.importer.x3d.X3dHead
+
+Gets the list which contains metadata of the X3D file.
+
+getModifiedDate() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets date and time when the COLADA file was last modified (in an ISO 8601 format).
+
+getName() - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Gets the name.
+
+getNamedMaterials() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+getNamedMaterials() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+getNamedMaterials() - Method in interface com.interactivemesh.jfx.importer.ModelImporter
+
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+getNamedMaterials() - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+getNamedMaterials() - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+getNamedMaterials() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets the map which contains all named and used PhongMaterial objects
+ from the imported file.
+
+getNamedMeshViews() - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Gets the map which contains all named (id property) MeshViews from the imported file.
+
+getNamedNodes() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+getNamedNodes() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+getNamedNodes() - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+getNamedNodes() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets the map which contains all named (id property) Nodes from the imported file.
+
+getNearClip() - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Gets the near clipping plane distance.
+
+getOptions() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Gets a copy of the import options enum set.
+
+getOptions() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Gets a copy of the import options enum set.
+
+getOptions() - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Gets a copy of the import options enum set.
+
+getOptions() - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Gets a copy of the import options enum set.
+
+getOptions() - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Gets a copy of the import options enum set.
+
+getOptions() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets a copy of the import options enum set.
+
+getProfile() - Method in class com.interactivemesh.jfx.importer.x3d.X3dHead
+
+Gets the profile declaration specifying the set of components and their support levels.
+
+getResourceBasePath() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Gets the path where files associated with the imported 3D model file are located.
+
+getResourceBasePath() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Gets the path where files associated with the imported 3D model file are located.
+
+getResourceBasePath() - Method in interface com.interactivemesh.jfx.importer.ModelImporter
+
+Gets the path where files associated with the imported 3D model file are located.
+
+getResourceBasePath() - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Gets the path where files associated with the imported 3D model file are located.
+
+getResourceBasePath() - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Gets the path where files associated with the imported 3D model file are located.
+
+getResourceBasePath() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets the path where files associated with the imported 3D model file are located.
+
+getResourceBaseUrl() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Gets the URL where files associated with the imported 3D model file are located.
+
+getResourceBaseUrl() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Gets the URL where files associated with the imported 3D model file are located.
+
+getResourceBaseUrl() - Method in interface com.interactivemesh.jfx.importer.ModelImporter
+
+Gets the URL where files associated with the imported 3D model file are located.
+
+getResourceBaseUrl() - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Gets the URL where files associated with the imported 3D model file are located.
+
+getResourceBaseUrl() - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Gets the URL where files associated with the imported 3D model file are located.
+
+getResourceBaseUrl() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets the URL where files associated with the imported 3D model file are located.
+
+getRevision() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets the revision information of the COLLADA file.
+
+getSolidName() - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Gets the solid name from the imported ASCII file or
+ the header from the imported binary file.
+
+getSourceData() - Method in class com.interactivemesh.jfx.importer.col.ColAsset.Contributor
+
+Gets a URI reference to the source data
+
+getSubject() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets a description of the topical subject of the COLLADA file.
+
+getTitle() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets the title information of the COLLADA file.
+
+getTransform() - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Gets the affine transform.
+
+getUnitMeter() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets the real-world meters of one distance unit as a floating-point number.
+
+getUnitName() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets the name of the distance unit used in the COLLADA file.
+
+getUnits() - Method in class com.interactivemesh.jfx.importer.x3d.X3dHead
+
+Gets the map which contains altered initial base units.
+
+getUpAxis() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets the coordinate system of the geometric data.
+
+getVersion() - Method in class com.interactivemesh.jfx.importer.col.ColAsset
+
+Gets the version number of the COLLADA file.
+
+getVersion() - Method in class com.interactivemesh.jfx.importer.x3d.X3dHead
+
+Gets the version number of the X3D standard being supported.
+
+getViewpoints() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Gets the viewpoints of the imported file.
+
+getViewpoints() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Gets the viewpoints of the imported file.
+
+getViewpoints() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Gets the viewpoints of the imported file.
+
+
+
C F G I M O R S T V X
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-4.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-4.html
new file mode 100644
index 00000000..3f8beebb
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-4.html
@@ -0,0 +1,154 @@
+
+
+
+
+
+I-Index (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+C F G I M O R S T V X
+
+
+
I
+
+Importer - Interface in com.interactivemesh.jfx.importer
+
+The Importer interface specifies the core import capabilities of the
+ JavaFX 3D importers.
+
+ImportException - Exception in com.interactivemesh.jfx.importer
+
+An ImportException is thrown if the importer encounters a problem
+ reading or parsing the specified file.
+
+ImportException(String) - Constructor for exception com.interactivemesh.jfx.importer.ImportException
+
+Creates a new ImportException with the specified detail message.
+
+ImportException(String, Throwable) - Constructor for exception com.interactivemesh.jfx.importer.ImportException
+
+Creates a new ImportException with the specified detail message and cause.
+
+isPerspective() - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Gets the state whether the projection mode is perspective (default) or parallel.
+
+isVerticalFieldOfView() - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Gets the state whether the field of view is measured vertically (default) or horizontally.
+
+
+
C F G I M O R S T V X
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-5.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-5.html
new file mode 100644
index 00000000..ddb30ecf
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-5.html
@@ -0,0 +1,133 @@
+
+
+
+
+
+M-Index (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+C F G I M O R S T V X
+
+
+
M
+
+ModelImporter - Interface in com.interactivemesh.jfx.importer
+
+The ModelImporter interface specifies the core import capabilities of the
+ JavaFX 3D model importers.
+
+
+
C F G I M O R S T V X
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-6.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-6.html
new file mode 100644
index 00000000..c58a95cc
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-6.html
@@ -0,0 +1,168 @@
+
+
+
+
+
+O-Index (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+C F G I M O R S T V X
+
+
+
O
+
+ObjImportOption - Enum in com.interactivemesh.jfx.importer.obj
+
+Import options for the JavaFX OBJ model importer.
+
+ObjModelImporter - Class in com.interactivemesh.jfx.importer.obj
+
+A JavaFX importer for OBJ files.
+
+ObjModelImporter() - Constructor for class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Creates an OBJ model importer.
+
+onFileImported() - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Method is invoked upon completion of import.
+
+onFileImported() - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Method is invoked upon completion of import.
+
+onFileImported() - Method in interface com.interactivemesh.jfx.importer.Importer
+
+Method is invoked upon completion of import.
+
+onFileImported() - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Method is invoked upon completion of import.
+
+onFileImported() - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Method is invoked upon completion of import.
+
+onFileImported() - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Method is invoked upon completion of import.
+
+onFileImported() - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Method is invoked upon completion of import.
+
+
+
C F G I M O R S T V X
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-7.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-7.html
new file mode 100644
index 00000000..8f100233
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-7.html
@@ -0,0 +1,212 @@
+
+
+
+
+
+R-Index (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+C F G I M O R S T V X
+
+
+
R
+
+read(File) - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Imports a 3D model file passed as a File object.
+
+read(String) - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Imports a 3D model file with the passed file path.
+
+read(URL) - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Imports a 3D model file from the passed location.
+
+read(File) - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Imports a 3D model file passed as a File object.
+
+read(String) - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Imports a 3D model file with the passed file path.
+
+read(URL) - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Imports a 3D model file from the passed location.
+
+read(File) - Method in interface com.interactivemesh.jfx.importer.Importer
+
+Imports a 3D model file passed as a File object.
+
+read(String) - Method in interface com.interactivemesh.jfx.importer.Importer
+
+Imports a 3D model file with the passed file path.
+
+read(URL) - Method in interface com.interactivemesh.jfx.importer.Importer
+
+Imports a 3D model file from the passed location.
+
+read(File) - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Imports a 3D model file passed as a File object.
+
+read(String) - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Imports a 3D model file with the passed file path.
+
+read(URL) - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Imports a 3D model file from the passed location.
+
+read(File) - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Imports a 3D model file passed as a File object.
+
+read(String) - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Imports a 3D model file with the passed file path.
+
+read(URL) - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Imports a 3D model file from the passed location.
+
+read(File) - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Imports a 3D model file passed as a File object.
+
+read(String) - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Imports a 3D model file with the passed file path.
+
+read(URL) - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Imports a 3D model file from the passed location.
+
+read(File) - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Imports a 3D model file passed as a File object.
+
+read(String) - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Imports a 3D model file with the passed file path.
+
+read(URL) - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Imports a 3D model file from the passed location.
+
+
+
C F G I M O R S T V X
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-8.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-8.html
new file mode 100644
index 00000000..01379719
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-8.html
@@ -0,0 +1,296 @@
+
+
+
+
+
+S-Index (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+C F G I M O R S T V X
+
+
+
S
+
+setCenterOfRotation(Point3D) - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Set the center of rotation.
+
+setCreaseAngle(double) - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Sets the crease angle for normals generation measured in degrees.
+
+setCreaseAngle(double) - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Sets the crease angle for normals generation measured in degrees.
+
+setCreaseAngle(double) - Method in interface com.interactivemesh.jfx.importer.Importer
+
+Sets the crease angle for normals generation measured in degrees.
+
+setCreaseAngle(double) - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Sets the crease angle for normals generation measured in degrees.
+
+setCreaseAngle(double) - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Sets the crease angle for normals generation measured in degrees.
+
+setCreaseAngle(double) - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Sets the crease angle for normals generation measured in degrees.
+
+setCreaseAngle(double) - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Sets the crease angle for normals generation measured in degrees.
+
+setFarClip(double) - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Sets the far clipping plane distance.
+
+setFieldOfView(double) - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Sets the field of view value.
+
+setName(String) - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Sets the name.
+
+setNearClip(double) - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Sets the near clipping plane distance.
+
+setOptions(ColImportOption...) - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Sets the import options.
+
+setOptions(EnumSet<ColImportOption>) - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Sets the import options.
+
+setOptions(FxmlImportOption...) - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Sets the import options.
+
+setOptions(EnumSet<FxmlImportOption>) - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Sets the import options.
+
+setOptions(ObjImportOption...) - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Sets the import options.
+
+setOptions(EnumSet<ObjImportOption>) - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Sets the import options.
+
+setOptions(StlImportOption...) - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Sets the import options.
+
+setOptions(EnumSet<StlImportOption>) - Method in class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Sets the import options.
+
+setOptions(TdsImportOption...) - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Sets the import options.
+
+setOptions(EnumSet<TdsImportOption>) - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Sets the import options.
+
+setOptions(X3dImportOption...) - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Sets the import options.
+
+setOptions(EnumSet<X3dImportOption>) - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Sets the import options.
+
+setPerspectiveProjection(boolean) - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Sets the projection mode.
+
+setResourceBasePath(String) - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Sets the path where files associated with the imported 3D model file are located.
+
+setResourceBasePath(String) - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Sets the path where files associated with the imported 3D model file are located.
+
+setResourceBasePath(String) - Method in interface com.interactivemesh.jfx.importer.ModelImporter
+
+Sets the path where files associated with the imported 3D model file are located.
+
+setResourceBasePath(String) - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Sets the path where files associated with the imported 3D model file are located.
+
+setResourceBasePath(String) - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Sets the path where files associated with the imported 3D model file are located.
+
+setResourceBasePath(String) - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Sets the path where files associated with the imported 3D model file are located.
+
+setResourceBaseUrl(URL) - Method in class com.interactivemesh.jfx.importer.col.ColModelImporter
+
+Sets the URL where files associated with the imported 3D model file are located.
+
+setResourceBaseUrl(URL) - Method in class com.interactivemesh.jfx.importer.fxml.FxmlModelImporter
+
+Sets the URL where files associated with the imported 3D model file are located.
+
+setResourceBaseUrl(URL) - Method in interface com.interactivemesh.jfx.importer.ModelImporter
+
+Sets the URL where files associated with the imported 3D model file are located.
+
+setResourceBaseUrl(URL) - Method in class com.interactivemesh.jfx.importer.obj.ObjModelImporter
+
+Sets the URL where files associated with the imported 3D model file are located.
+
+setResourceBaseUrl(URL) - Method in class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Sets the URL where files associated with the imported 3D model file are located.
+
+setResourceBaseUrl(URL) - Method in class com.interactivemesh.jfx.importer.x3d.X3dModelImporter
+
+Sets the URL where files associated with the imported 3D model file are located.
+
+setTransform(Affine) - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Sets the affine transform.
+
+setVerticalFieldOfView(boolean) - Method in class com.interactivemesh.jfx.importer.Viewpoint
+
+Sets the state whether the field of view is measured vertically or horizontally.
+
+StlImportOption - Enum in com.interactivemesh.jfx.importer.stl
+
+Import options for the JavaFX STL mesh importer.
+
+StlMeshImporter - Class in com.interactivemesh.jfx.importer.stl
+
+A JavaFX importer for ASCII and binary STL files.
+
+StlMeshImporter() - Constructor for class com.interactivemesh.jfx.importer.stl.StlMeshImporter
+
+Creates a STL mesh importer.
+
+
+
C F G I M O R S T V X
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-9.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-9.html
new file mode 100644
index 00000000..d0f70ac7
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index-files/index-9.html
@@ -0,0 +1,140 @@
+
+
+
+
+
+T-Index (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+C F G I M O R S T V X
+
+
+
T
+
+TdsImportOption - Enum in com.interactivemesh.jfx.importer.tds
+
+Import options for the JavaFX 3ds model importer.
+
+TdsModelImporter - Class in com.interactivemesh.jfx.importer.tds
+
+A JavaFX importer for 3ds files.
+
+TdsModelImporter() - Constructor for class com.interactivemesh.jfx.importer.tds.TdsModelImporter
+
+Creates a 3ds model importer.
+
+
+
C F G I M O R S T V X
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index.html
new file mode 100644
index 00000000..057a6376
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/index.html
@@ -0,0 +1,74 @@
+
+
+
+
+
+JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+Frame Alert
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to Non-frame version .
+
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-frame.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-frame.html
new file mode 100644
index 00000000..36e9cedb
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-frame.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+Overview List (JavaFX 3D Model Importers)
+
+
+
+
+
+JavaFX 3D Model Importers
+
+
+
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-summary.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-summary.html
new file mode 100644
index 00000000..5497408a
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-summary.html
@@ -0,0 +1,392 @@
+
+
+
+
+
+Overview (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+ JavaFX 8 importers for 3D model files.
+
+
+
+
+
+ 3D format
+
+
+ Files
+
+
+ 3D model importer
+
+
+ Archive
+
+
+ Release
+
+
+
+
+ 3ds
+ COLLADA 1.4.1 & 1.5.0
+ FXML 8
+ OBJ
+ STL
+ X3D 3.3
+
+
+ *.3ds
+ *.dae *.zae
+ *.fxml
+ *.obj
+ *.stl
+ *.x3d *.x3dz
+
+
+ 3dsModelImporterJFX
+ ColModelImporterJFX
+ FxmlModelImporterJFX
+ ObjModelImporterJFX
+ StlModelImporterJFX
+ X3dModelImporterJFX
+
+
+ jim3dsModelImporterJFX.jar
+ jimColModelImporterJFX.jar
+ jimFxmlModelImporterJFX.jar
+ jimObjModelImporterJFX.jar
+ jimStlModelImporterJFX.jar
+ jimX3dModelImporterJFX.jar
+
+
+ 0.7
+ 0.6
+ 0.5
+ 0.8
+ 0.7
+ 0.4
+
+
+
+
+
System requirements
+
+ JRE 8 - release candidate build b128, February 1, 2014. (http://jdk8.java.net)
+
+
JavaFX 8 restrictions/issues
+
+
+
+ Rendering of double-sided geometry with culling property set to CullFace.NONE
+ might fail due to not flipped normals (RT-30623).
+ Transparency/opacity support is still under development (RT-28874, RT-34356).
+
+ See https://javafx-jira.kenai.com
+
+
+
Model importers restrictions/issues
+
+
+ Converting normals to smoothing groups supports only a single group per face but not multiple groups per face.
+ See javafx.scene.shape.TriangleMesh.getFaceSmoothingGroups() for more details.
+ Smoothing groups are generated correctly only if the normals are non-redundant indexed.
+ Transparency is not active, see above.
+
+
+
+
Mapping imported coordinate sytem onto JavaFX 3D coordinate sytem
+
+ The imported geometric data will be converted to the JavaFX 3D coordinate sytem:
+ upward axis -Y, right axis +X, and inward axis +Z.
+ For instance, the Y-up right-handed coordinate system will be mapped as follows: +Y -> -Y, +X -> +X, +Z -> -Z.
+
+
+ Correspondingly, all imported transforms will be adapted so that the converted coordinates
+ will be rotated, scaled, and translated correctly. This is also valid for cameras and lights.
+
+
+
+
+
Supported image formats for PhongMaterial maps
+
+ Type javafx.scene.image.Image
+
+ 'bmp', 'gif', 'jpeg', 'png'
+ JavaFX image loader (default)
+
+
+
+ Type javafx.scene.image.WritableImage
+
+ 'bmp', 'gif', 'jpeg', 'png'
+ Java Image I/O API, import option MAP_WRITABLEIMAGE
+ 'tga'
+ data type 2 - true-color images, 24/32 bit, uncompressed; InteractiveMesh implementation
+ 'tif'
+ Requires installed Java Advanced Imaging (JAI) or the cross-platform packages "jai_codec.jar" and "jai_core.jar" on the classpath
+
+ JAI 1.3.1 downloads: http://download.java.net/media/jai/builds/release/1_1_3/
+ JAI 1.3.1 cross-platform packages: jai-1_1_3-lib.zip
+
+
+
+
+
+
Date
+
+
2014/02/09
+
+
Copyright (C) 2013-2014 August Lammersdorf, InteractiveMesh e.K.. All rights reserved.
+
+ InteractiveMesh e.K.
+ August Lammersdorf
+ Hauptstraße 28d
+ 85737 Ismaning
+ Germany / Munich Area
+ District court Munich HRA 89887
+ www.InteractiveMesh.com/org
+
+
+
License Agreement
+
+
+ By installing, copying, or otherwise using the Software, you agree to be bound
+ by the terms of this Agreement. If you do not agree to the terms of this
+ Agreement, do not install or use the Software.
+
+
+ The copyright holder grants to you a non-exclusive, perpetual, irrevocable,
+ and worldwide right to use the Software. It is provided to you free of charge
+ for academic, commercial, and personal use.
+
+
+ You may not remove any copyright, license, or other proprietary notice
+ from the Software.
+
+
+ No parts of the Software may be reproduced in part or in whole. You may not
+ reverse engineer, decompile, or disassemble the Software or prepare
+ derivative works of it.
+
+
+ THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ EIHTER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
+ CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS
+ FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING
+ THE APPROPRIATENESS OF USING THE SOFTWARE AND ASSUME ANY RISKS ASSOCIATED
+ WITH YOUR EXERCISE OF PERMISSIONS UNDER THIS LICENSE.
+
+
+ IN NO EVENT AND UNDER NO LEGAL THEORY, WHETHER IN TORT, CONTRACT, OR OTHERWISE,
+ UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SHALL
+ THE COPYRIGHT HOLDER BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT,
+ INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER
+ ARISING AS A RESULT OF THIS LICENSE OR OUT THE USE OR INABILITY TO USE
+ THE SOFTWARE, EVEN IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY
+ OF SUCH DAMAGES.
+
+
+
+
Trademarks
+
+ COLLADA is a trademark of Sony Computer Entertainment, Inc.
+ Java and JavaFX are trademarks or registered trademarks of Oracle and/or its affiliates in the United States and other countries.
+ X3D is a registered trademark of Web3D Consortium, Inc. in the United States and other countries.
+ All other trademarks mentioned herein are the property of their respective owners.
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-tree.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-tree.html
new file mode 100644
index 00000000..a1a6e1c6
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/overview-tree.html
@@ -0,0 +1,195 @@
+
+
+
+
+
+Class Hierarchy (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
Class Hierarchy
+
+
Interface Hierarchy
+
+com.interactivemesh.jfx.importer.Importer
+
+
+
+
Enum Hierarchy
+
+java.lang.Object
+
+java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/package-list b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/package-list
new file mode 100644
index 00000000..bbbf469b
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/package-list
@@ -0,0 +1,7 @@
+com.interactivemesh.jfx.importer
+com.interactivemesh.jfx.importer.col
+com.interactivemesh.jfx.importer.fxml
+com.interactivemesh.jfx.importer.obj
+com.interactivemesh.jfx.importer.stl
+com.interactivemesh.jfx.importer.tds
+com.interactivemesh.jfx.importer.x3d
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/script.js b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/script.js
new file mode 100644
index 00000000..b3463569
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/script.js
@@ -0,0 +1,30 @@
+function show(type)
+{
+ count = 0;
+ for (var key in methods) {
+ var row = document.getElementById(key);
+ if ((methods[key] & type) != 0) {
+ row.style.display = '';
+ row.className = (count++ % 2) ? rowColor : altColor;
+ }
+ else
+ row.style.display = 'none';
+ }
+ updateTabs(type);
+}
+
+function updateTabs(type)
+{
+ for (var value in tabs) {
+ var sNode = document.getElementById(tabs[value][0]);
+ var spanNode = sNode.firstChild;
+ if (value == type) {
+ sNode.className = activeTableTab;
+ spanNode.innerHTML = tabs[value][1];
+ }
+ else {
+ sNode.className = tableTab;
+ spanNode.innerHTML = "" + tabs[value][1] + " ";
+ }
+ }
+}
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/serialized-form.html b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/serialized-form.html
new file mode 100644
index 00000000..df9c5497
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/serialized-form.html
@@ -0,0 +1,142 @@
+
+
+
+
+
+Serialized Form (JavaFX 3D Model Importers)
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
JavaFX 3D Model Importers
+
+
+
+
Copyright (C) 2013-2014 InteractiveMesh e.K.
+
+
diff --git a/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/stylesheet-im.css b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/stylesheet-im.css
new file mode 100644
index 00000000..809dab0d
--- /dev/null
+++ b/libs/JFX3DModelImporters_EA_2014-02-09/apidoc/stylesheet-im.css
@@ -0,0 +1,574 @@
+/* Derived from 'stylesheet.css' in jdk-8-ea-docs-b124-all-17_jan_2014.zip */
+
+/* Javadoc style sheet */
+/*
+Overall document style
+*/
+
+body {
+ background-color:#ffffff;
+ color:#353833;
+ font-family:Arial, Helvetica, sans-serif;
+ font-size:14px;
+ margin:0;
+}
+a:link, a:visited {
+ text-decoration:none;
+ color:#4A6782;
+}
+a:hover, a:focus {
+ text-decoration:none;
+ color:#bb7a2a;
+}
+a:active {
+ text-decoration:none;
+ color:#4A6782;
+}
+a[name] {
+ color:#353833;
+}
+a[name]:hover {
+ text-decoration:none;
+ color:#353833;
+}
+pre {
+ font-family:monospace;
+ font-size:14px;
+}
+h1 {
+ font-size:20px;
+}
+h2 {
+ font-size:18px;
+}
+h3 {
+ font-size:16px;
+ font-style:italic;
+}
+h4 {
+ font-size:13px;
+}
+h5 {
+ font-size:12px;
+}
+h6 {
+ font-size:11px;
+}
+ul {
+ list-style-type:disc;
+}
+code, tt {
+ font-family:monospace;
+ font-size:14px;
+ padding-top:4px;
+ margin-top:8px;
+ line-height:1.4em;
+}
+dt code {
+ font-family:monospace;
+ font-size:14px;
+ padding-top:4px;
+}
+table tr td dt code {
+ font-family:monospace;
+ font-size:14px;
+ vertical-align:top;
+ padding-top:4px;
+}
+sup {
+ font-size:8px;
+}
+/*
+Document title and Copyright styles
+*/
+.clear {
+ clear:both;
+ height:0px;
+ overflow:hidden;
+}
+.aboutLanguage {
+ float:right;
+ padding:0px 21px;
+ font-size:11px;
+ z-index:200;
+ margin-top:-9px;
+}
+.legalCopy {
+ margin-left:.5em;
+}
+.bar a, .bar a:link, .bar a:visited, .bar a:active {
+ color:#FFFFFF;
+ text-decoration:none;
+}
+.bar a:hover, .bar a:focus {
+ color:#bb7a2a;
+}
+.tab {
+ background-color:#0066FF;
+ color:#ffffff;
+ padding:8px;
+ width:5em;
+ font-weight:bold;
+}
+/*
+Navigation bar styles
+*/
+.bar {
+ background-color:#4D7A97;
+ color:#FFFFFF;
+ padding:.8em .5em .4em .8em;
+ height:auto;/*height:1.8em;*/
+ font-size:11px;
+ margin:0;
+}
+.topNav {
+ background-color:#4D7A97;
+ color:#FFFFFF;
+ float:left;
+ padding:0;
+ width:100%;
+ clear:right;
+ height:2.8em;
+ padding-top:10px;
+ overflow:hidden;
+ font-size:12px;
+}
+.bottomNav {
+ margin-top:10px;
+ background-color:#4D7A97;
+ color:#FFFFFF;
+ float:left;
+ padding:0;
+ width:100%;
+ clear:right;
+ height:2.8em;
+ padding-top:10px;
+ overflow:hidden;
+ font-size:12px;
+}
+.subNav {
+ background-color:#dee3e9;
+ float:left;
+ width:100%;
+ overflow:hidden;
+ font-size:12px;
+}
+.subNav div {
+ clear:left;
+ float:left;
+ padding:0 0 5px 6px;
+ text-transform:uppercase;
+}
+ul.navList, ul.subNavList {
+ float:left;
+ margin:0 25px 0 0;
+ padding:0;
+}
+ul.navList li{
+ list-style:none;
+ float:left;
+ padding: 5px 6px;
+ text-transform:uppercase;
+}
+ul.subNavList li{
+ list-style:none;
+ float:left;
+}
+.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {
+ color:#FFFFFF;
+ text-decoration:none;
+ text-transform:uppercase;
+}
+.topNav a:hover, .bottomNav a:hover {
+ text-decoration:none;
+ color:#bb7a2a;
+ text-transform:uppercase;
+}
+.navBarCell1Rev {
+ background-color:#F8981D;
+ color:#253441;
+ margin: auto 5px;
+}
+.skipNav {
+ position:absolute;
+ top:auto;
+ left:-9999px;
+ overflow:hidden;
+}
+/*
+Page header and footer styles
+*/
+.header, .footer {
+ clear:both;
+ margin:0 20px;
+ padding:5px 0 0 0;
+}
+.indexHeader {
+ margin:10px;
+ position:relative;
+}
+.indexHeader span{
+ margin-right:15px;
+}
+.indexHeader h1 {
+ font-size:13px;
+}
+.title {
+ color:#2c4557;
+ margin:10px 0;
+}
+.subTitle {
+ margin:5px 0 0 0;
+}
+.header ul {
+ margin:0 0 15px 0;
+ padding:0;
+}
+.footer ul {
+ margin:20px 0 5px 0;
+}
+.header ul li, .footer ul li {
+ list-style:none;
+ font-size:13px;
+}
+/*
+Heading styles
+*/
+div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
+ background-color:#dee3e9;
+ border:1px solid #d0d9e0;
+ margin:0 0 6px -8px;
+ padding:7px 5px;
+}
+ul.blockList ul.blockList ul.blockList li.blockList h3 {
+ background-color:#dee3e9;
+ border:1px solid #d0d9e0;
+ margin:0 0 6px -8px;
+ padding:7px 5px;
+}
+ul.blockList ul.blockList li.blockList h3 {
+ padding:0;
+ margin:15px 0;
+}
+ul.blockList li.blockList h2 {
+ padding:0px 0 20px 0;
+}
+/*
+Page layout container styles
+*/
+.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer {
+ clear:both;
+ padding:10px 20px;
+ position:relative;
+}
+.indexContainer {
+ margin:10px;
+ position:relative;
+ font-size:12px;
+}
+.indexContainer h2 {
+ font-size:13px;
+ padding:0 0 3px 0;
+}
+.indexContainer ul {
+ margin:0;
+ padding:0;
+}
+.indexContainer ul li {
+ list-style:none;
+ padding-top:2px;
+}
+.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {
+ font-size:12px;
+ font-weight:bold;
+ margin:10px 0 0 0;
+ color:#4E4E4E;
+}
+.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {
+ margin:5px 0 10px 0px;
+ font-size:14px;
+ font-family:monospace;
+}
+.serializedFormContainer dl.nameValue dt {
+ margin-left:1px;
+ font-size:1.1em;
+ display:inline;
+ font-weight:bold;
+}
+.serializedFormContainer dl.nameValue dd {
+ margin:0 0 0 1px;
+ font-size:1.1em;
+ display:inline;
+}
+/*
+List styles
+*/
+ul.horizontal li {
+ display:inline;
+ font-size:0.9em;
+}
+ul.inheritance {
+ margin:0;
+ padding:0;
+}
+ul.inheritance li {
+ display:inline;
+ list-style:none;
+}
+ul.inheritance li ul.inheritance {
+ margin-left:15px;
+ padding-left:15px;
+ padding-top:1px;
+}
+ul.blockList, ul.blockListLast {
+ margin:10px 0 10px 0;
+ padding:0;
+}
+ul.blockList li.blockList, ul.blockListLast li.blockList {
+ list-style:none;
+ margin-bottom:15px;
+ line-height:1.4;
+}
+ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList {
+ padding:0px 20px 5px 10px;
+ border:1px solid #ededed;
+ background-color:#f8f8f8;
+}
+ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList {
+ padding:0 0 5px 8px;
+ background-color:#ffffff;
+ border:none;
+}
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
+ margin-left:0;
+ padding-left:0;
+ padding-bottom:15px;
+ border:none;
+}
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
+ list-style:none;
+ border-bottom:none;
+ padding-bottom:0;
+}
+table tr td dl, table tr td dl dt, table tr td dl dd {
+ margin-top:0;
+ margin-bottom:1px;
+}
+/*
+Table styles
+*/
+.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary {
+ width:100%;
+ border-left:1px solid #EEE;
+ border-right:1px solid #EEE;
+ border-bottom:1px solid #EEE;
+}
+.overviewSummary, .memberSummary {
+ padding:0px;
+}
+.overviewSummary caption, .memberSummary caption, .typeSummary caption,
+.useSummary caption, .constantsSummary caption, .deprecatedSummary caption {
+ position:relative;
+ text-align:left;
+ background-repeat:no-repeat;
+ color:#253441;
+ font-weight:bold;
+ clear:none;
+ overflow:hidden;
+ padding:0px;
+ padding-top:10px;
+ padding-left:1px;
+ margin:0px;
+ white-space:pre;
+}
+.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,
+.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link,
+.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,
+.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover,
+.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,
+.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active,
+.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,
+.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited {
+ color:#FFFFFF;
+}
+.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,
+.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {
+ white-space:nowrap;
+ padding-top:5px;
+ padding-left:12px;
+ padding-right:12px;
+ padding-bottom:7px;
+ display:inline-block;
+ float:left;
+ background-color:#F8981D;
+ border: none;
+ height:16px;
+}
+.memberSummary caption span.activeTableTab span {
+ white-space:nowrap;
+ padding-top:5px;
+ padding-left:12px;
+ padding-right:12px;
+ margin-right:3px;
+ display:inline-block;
+ float:left;
+ background-color:#F8981D;
+ height:16px;
+}
+.memberSummary caption span.tableTab span {
+ white-space:nowrap;
+ padding-top:5px;
+ padding-left:12px;
+ padding-right:12px;
+ margin-right:3px;
+ display:inline-block;
+ float:left;
+ background-color:#4D7A97;
+ height:16px;
+}
+.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {
+ padding-top:0px;
+ padding-left:0px;
+ padding-right:0px;
+ background-image:none;
+ float:none;
+ display:inline;
+}
+.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd,
+.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd {
+ display:none;
+ width:5px;
+ position:relative;
+ float:left;
+ background-color:#F8981D;
+}
+.memberSummary .activeTableTab .tabEnd {
+ display:none;
+ width:5px;
+ margin-right:3px;
+ position:relative;
+ float:left;
+ background-color:#F8981D;
+}
+.memberSummary .tableTab .tabEnd {
+ display:none;
+ width:5px;
+ margin-right:3px;
+ position:relative;
+ background-color:#4D7A97;
+ float:left;
+
+}
+.overviewSummary td, .memberSummary td, .typeSummary td,
+.useSummary td, .constantsSummary td, .deprecatedSummary td {
+ text-align:left;
+ padding:0px 0px 12px 10px;
+ width:100%;
+}
+th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th,
+td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{
+ vertical-align:top;
+ padding-right:0px;
+ padding-top:8px;
+ padding-bottom:3px;
+}
+th.colFirst, th.colLast, th.colOne, .constantsSummary th {
+ background:#dee3e9;
+ text-align:left;
+ padding:8px 3px 3px 7px;
+}
+td.colFirst, th.colFirst {
+ white-space:nowrap;
+ font-size:13px;
+}
+td.colLast, th.colLast {
+ font-size:13px;
+}
+td.colOne, th.colOne {
+ font-size:13px;
+}
+.overviewSummary td.colFirst, .overviewSummary th.colFirst,
+.overviewSummary td.colOne, .overviewSummary th.colOne,
+.memberSummary td.colFirst, .memberSummary th.colFirst,
+.memberSummary td.colOne, .memberSummary th.colOne,
+.typeSummary td.colFirst{
+ width:25%;
+ vertical-align:top;
+}
+td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {
+ font-weight:bold;
+}
+.tableSubHeadingColor {
+ background-color:#EEEEFF;
+}
+.altColor {
+ background-color:#FFFFFF;
+}
+.rowColor {
+ background-color:#EEEEEF;
+}
+/*
+Content styles
+*/
+.description pre {
+ margin-top:0;
+}
+.deprecatedContent {
+ margin:0;
+ padding:10px 0;
+}
+.docSummary {
+ padding:0;
+}
+
+ul.blockList ul.blockList ul.blockList li.blockList h3 {
+ font-style:normal;
+}
+
+div.block {
+ font-size:14px;
+ font-family:Arial, Helvetica, sans-serif;
+}
+
+td.colLast div {
+ padding-top:0px;
+}
+
+
+td.colLast a {
+ padding-bottom:3px;
+}
+/*
+Formatting effect styles
+*/
+.sourceLineNo {
+ color:green;
+ padding:0 30px 0 0;
+}
+h1.hidden {
+ visibility:hidden;
+ overflow:hidden;
+ font-size:10px;
+}
+.block {
+ display:block;
+ margin:3px 10px 2px 0px;
+ color:#474747;
+}
+.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink,
+.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel,
+.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink {
+ font-weight:bold;
+}
+.deprecationComment, .emphasizedPhrase, .interfaceName {
+ font-style:italic;
+}
+
+div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase,
+div.block div.block span.interfaceName {
+ font-style:normal;
+}
+
+div.contentContainer ul.blockList li.blockList h2{
+ padding-bottom:0px;
+}
diff --git a/src/main/java/seng302/App.java b/src/main/java/seng302/App.java
index 16470fb1..9d4d377e 100644
--- a/src/main/java/seng302/App.java
+++ b/src/main/java/seng302/App.java
@@ -5,6 +5,7 @@ import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
+import javafx.scene.SceneAntialiasing;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import org.apache.commons.cli.CommandLine;
@@ -14,7 +15,6 @@ import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import seng302.model.PolarTable;
public class App extends Application {
@@ -69,7 +69,7 @@ public class App extends Application {
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("/views/StartScreenView.fxml"));
primaryStage.setTitle("Party Parrots at Sea");
- Scene scene = new Scene(root, 1530, 960);
+ Scene scene = new Scene(root, 1530, 960, false, SceneAntialiasing.BALANCED);
scene.getStylesheets().add(getClass().getResource("/css/master.css").toString());
primaryStage.setScene(scene);
// primaryStage.setMaxWidth(1530);
diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java
index 300585d1..1ac96630 100644
--- a/src/main/java/seng302/gameServer/GameState.java
+++ b/src/main/java/seng302/gameServer/GameState.java
@@ -20,8 +20,6 @@ import seng302.gameServer.messages.MarkRoundingMessage;
import seng302.gameServer.messages.MarkType;
import seng302.gameServer.messages.Message;
import seng302.gameServer.messages.RoundingBoatStatus;
-import seng302.gameServer.messages.XMLMessage;
-import seng302.gameServer.messages.XMLMessageSubType;
import seng302.gameServer.messages.YachtEventCodeMessage;
import seng302.model.GeoPoint;
import seng302.model.Limit;
@@ -31,11 +29,9 @@ import seng302.model.ServerYacht;
import seng302.model.mark.CompoundMark;
import seng302.model.mark.Mark;
import seng302.model.mark.MarkOrder;
-import seng302.model.stream.xml.generator.RaceXMLTemplate;
import seng302.model.token.Token;
import seng302.model.token.TokenType;
import seng302.utilities.GeoUtility;
-import seng302.utilities.XMLGenerator;
import seng302.utilities.XMLParser;
/**
@@ -426,7 +422,7 @@ public class GameState implements Runnable {
private void updateVelocity(ServerYacht yacht) {
Double trueWindAngle = Math.abs(windDirection - yacht.getHeading());
Double boatSpeedInKnots = PolarTable.getBoatSpeed(getWindSpeedKnots(), trueWindAngle);
- Double maxBoatSpeed = GeoUtility.knotsToMMS(boatSpeedInKnots);
+ Double maxBoatSpeed = GeoUtility.knotsToMMS(boatSpeedInKnots) * 4;
if (yacht.getPowerUp() != null) {
if (yacht.getPowerUp().equals(TokenType.BOOST)) {
maxBoatSpeed *= 2;
@@ -732,7 +728,8 @@ public class GameState implements Runnable {
// TODO: 13/8/17 figure out the rounding side, rounded mark source ID and boat status.
Message markRoundingMessage = new MarkRoundingMessage(0, 0,
sourceID, RoundingBoatStatus.RACING, roundingMark.getRoundingSide(), markType,
- currentMarkSeqID + 1);
+ currentMark.getId());
+// currentMarkSeqID + 1);
notifyMessageListeners(markRoundingMessage);
}
diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java
index e73eb43b..94ed080c 100644
--- a/src/main/java/seng302/visualiser/GameClient.java
+++ b/src/main/java/seng302/visualiser/GameClient.java
@@ -28,7 +28,6 @@ import seng302.model.stream.parser.RaceStatusData;
import seng302.model.stream.parser.YachtEventData;
import seng302.model.stream.xml.parser.RaceXMLData;
import seng302.model.stream.xml.parser.RegattaXMLData;
-import seng302.model.token.Token;
import seng302.utilities.StreamParser;
import seng302.utilities.XMLParser;
import seng302.visualiser.controllers.FinishScreenViewController;
@@ -155,11 +154,6 @@ public class GameClient {
}
private void loadStartScreen() {
-// socketThread.setSocketToClose();
-// if (server != null) {
-// server.terminate();
-// server = null;
-// }
FXMLLoader fxmlLoader = new FXMLLoader(
getClass().getResource("/views/StartScreenView.fxml"));
try {
@@ -258,12 +252,14 @@ public class GameClient {
break;
case RACE_XML:
- courseData = XMLParser.parseRace(
+ RaceXMLData raceXMLData = XMLParser.parseRace(
StreamParser.extractXmlMessage(packet)
);
-
+ if (courseData == null) { //workaround for object comparisons. Avoid recreating
+ courseData = raceXMLData;
+ }
if (raceView != null) {
- raceView.updateRaceData(courseData);
+ raceView.updateRaceData(raceXMLData);
}
break;
diff --git a/src/main/java/seng302/visualiser/GameView.java b/src/main/java/seng302/visualiser/GameView.java
index 53e4e58d..c407fd6f 100644
--- a/src/main/java/seng302/visualiser/GameView.java
+++ b/src/main/java/seng302/visualiser/GameView.java
@@ -13,6 +13,7 @@ import javafx.animation.Timeline;
import javafx.application.Platform;
import javafx.collections.ObservableList;
import javafx.geometry.Point2D;
+import javafx.geometry.Point3D;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.image.ImageView;
@@ -22,27 +23,22 @@ import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
+import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Circle;
+import javafx.scene.shape.Cylinder;
import javafx.scene.shape.Polygon;
import javafx.scene.text.Text;
+import javafx.scene.transform.Rotate;
import javafx.util.Duration;
-import seng302.gameServer.GameState;
-import seng302.gameServer.messages.XMLMessage;
-import seng302.gameServer.messages.XMLMessageSubType;
-import seng302.model.ClientYacht;
import seng302.gameServer.messages.RoundingSide;
import seng302.model.ClientYacht;
-import seng302.model.Colors;
import seng302.model.GeoPoint;
import seng302.model.Limit;
-import seng302.model.ServerYacht;
import seng302.model.mark.CompoundMark;
import seng302.model.mark.Corner;
import seng302.model.mark.Mark;
-import seng302.model.stream.xml.generator.RaceXMLTemplate;
import seng302.model.token.Token;
import seng302.utilities.GeoUtility;
-import seng302.utilities.XMLGenerator;
import seng302.visualiser.fxObjects.AnnotationBox;
import seng302.visualiser.fxObjects.BoatObject;
import seng302.visualiser.fxObjects.CourseBoundary;
@@ -91,6 +87,7 @@ public class GameView extends Pane {
private Group markers = new Group();
private Group tokens = new Group();
private List course = new ArrayList<>();
+ private List mapTokens;
private ImageView mapImage = new ImageView();
@@ -190,6 +187,9 @@ public class GameView extends Pane {
}
}
boatObjects.forEach((boat, boatObject) -> boatObject.updateLocation());
+ for (Cylinder c : mapTokens) {
+ c.getTransforms().add(new Rotate(1, new Point3D(45, 45, 45)));
+ }
}
};
}
@@ -315,18 +315,16 @@ public class GameView extends Pane {
for (int i=1; i < sequence.size()-1; i++) { //General case.
double averageLat = 0;
double averageLng = 0;
- int numMarks = 0;
+ int numMarks = course.get(i-1).getMarks().size();
for (Mark mark : course.get(i-1).getMarks()) {
- numMarks += 1;
averageLat += mark.getLat();
averageLng += mark.getLng();
}
GeoPoint lastMarkAv = new GeoPoint(averageLat / numMarks, averageLng / numMarks);
- numMarks = 0;
+ numMarks = course.get(i+1).getMarks().size();
averageLat = 0;
averageLng = 0;
for (Mark mark : course.get(i+1).getMarks()) {
- numMarks += 1;
averageLat += mark.getLat();
averageLng += mark.getLng();
}
@@ -451,15 +449,26 @@ public class GameView extends Pane {
*/
public void updateTokens(List newTokens) {
- List mapTokens = new ArrayList<>();
-
+// List mapTokens = new ArrayList<>();
+//
+// for (Token token : newTokens) {
+// Point2D location = findScaledXY(token.getLat(), token.getLng());
+// Marker thisMarker = new Marker(Color.YELLOW);
+// thisMarker.setLayoutX(location.getX());
+// thisMarker.setLayoutY(location.getY());
+// mapTokens.add(thisMarker);
+// }
+ mapTokens = new ArrayList<>();
for (Token token : newTokens) {
Point2D location = findScaledXY(token.getLat(), token.getLng());
- Marker thisMarker = new Marker(Color.YELLOW);
- thisMarker.setLayoutX(location.getX());
- thisMarker.setLayoutY(location.getY());
- mapTokens.add(thisMarker);
+ Cylinder tokenObject = new Cylinder(10, 10);
+ tokenObject.getTransforms().add(new Rotate(45, new Point3D(45, 45, 45)));
+ tokenObject.setLayoutX(location.getX());
+ tokenObject.setLayoutY(location.getY());
+ tokenObject.setMaterial(new PhongMaterial(Color.YELLOW));
+ mapTokens.add(tokenObject);
}
+
Platform.runLater(() -> {
tokens.getChildren().clear();
tokens.getChildren().addAll(mapTokens);
@@ -518,7 +527,7 @@ public class GameView extends Pane {
BoatObject newBoat;
final List wakes = new ArrayList<>();
for (ClientYacht clientYacht : yachts) {
- Paint colour = clientYacht.getColour();
+ Color colour = clientYacht.getColour();
newBoat = new BoatObject();
newBoat.addSelectedBoatListener(this::setSelectedBoat);
newBoat.setFill(colour);
@@ -528,7 +537,7 @@ public class GameView extends Pane {
wakes.add(newBoat.getWake());
boatObjectGroup.getChildren().add(newBoat);
trails.getChildren().add(newBoat.getTrail());
- // TODO: 1/08/17 Make this less vile to look at.
+
clientYacht.addLocationListener((boat, lat, lon, heading, sailIn, velocity) -> {
BoatObject bo = boatObjects.get(boat);
Point2D p2d = findScaledXY(lat, lon);
@@ -815,8 +824,10 @@ public class GameView extends Pane {
private void updateMarkArrows (ClientYacht yacht, CompoundMark compoundMark, int legNumber) {
//Only show arrows for this and next leg.
+// System.out.println(markerObjects);
if (compoundMark != null) {
for (Mark mark : compoundMark.getMarks()) {
+// System.out.println("markerObjects.get(mark) = " + markerObjects.get(mark));
markerObjects.get(mark).showNextExitArrow();
}
}
diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java
index e5673ca5..a3c0761a 100644
--- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java
+++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java
@@ -41,7 +41,6 @@ import seng302.model.RaceState;
import seng302.model.mark.CompoundMark;
import seng302.model.mark.Mark;
import seng302.model.stream.xml.parser.RaceXMLData;
-import seng302.model.token.Token;
import seng302.visualiser.GameView;
import seng302.visualiser.controllers.annotations.Annotation;
import seng302.visualiser.controllers.annotations.ImportantAnnotationController;
@@ -621,7 +620,6 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
}
public void updateRaceData (RaceXMLData raceData) {
- this.courseData = raceData;
gameView.updateBorder(raceData.getCourseLimit());
gameView.updateTokens(raceData.getTokens());
}
diff --git a/src/main/java/seng302/visualiser/fxObjects/BoatObject.java b/src/main/java/seng302/visualiser/fxObjects/BoatObject.java
index a86a3ac8..24e2eb84 100644
--- a/src/main/java/seng302/visualiser/fxObjects/BoatObject.java
+++ b/src/main/java/seng302/visualiser/fxObjects/BoatObject.java
@@ -1,17 +1,21 @@
package seng302.visualiser.fxObjects;
+import com.interactivemesh.jfx.importer.stl.StlMeshImporter;
import java.util.ArrayList;
import java.util.List;
import javafx.application.Platform;
import javafx.geometry.Point2D;
+import javafx.geometry.Point3D;
import javafx.scene.Group;
import javafx.scene.Node;
+import javafx.scene.PointLight;
import javafx.scene.paint.Color;
-import javafx.scene.paint.Paint;
+import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Line;
+import javafx.scene.shape.MeshView;
import javafx.scene.shape.Polygon;
import javafx.scene.shape.Polyline;
-import javafx.scene.shape.StrokeLineCap;
+import javafx.scene.shape.Shape3D;
import javafx.scene.transform.Rotate;
/**
@@ -24,6 +28,17 @@ import javafx.scene.transform.Rotate;
*/
public class BoatObject extends Group {
+
+ private static final double MODEL_SCALE_FACTOR = 400;
+ private static final double MODEL_X_OFFSET = 0; // standard
+ private static final double MODEL_Y_OFFSET = 0; // standard
+
+ private static final int VIEWPORT_SIZE = 800;
+
+ private static final Color lightColor = Color.rgb(244, 255, 250);
+ private static final Color jewelColor = Color.rgb(0, 190, 222);
+
+
@FunctionalInterface
public interface SelectedBoatListener {
@@ -31,8 +46,8 @@ public class BoatObject extends Group {
}
//Constants for drawing
- private static final double BOAT_HEIGHT = 15d;
- private static final double BOAT_WIDTH = 10d;
+ private static final float BOAT_HEIGHT = 15f;
+ private static final float BOAT_WIDTH = 10f;
private double xVelocity;
private double yVelocity;
@@ -40,14 +55,15 @@ public class BoatObject extends Group {
private double sailState;
//Graphical objects
private Polyline trail = new Polyline();
- private Polygon boatPoly;
+// private Polygon boatPoly;
+ private Shape3D boatPoly;
private Polygon sail;
private Wake wake;
private Line leftLayLine;
private Line rightLayline;
private double distanceTravelled, lastRotation;
private Point2D lastPoint;
- private Paint colour = Color.BLACK;
+ private Color colour = Color.BLACK;
private Boolean isSelected = false, destinationSet; //All boats are initialised as selected
private boolean isPlayer = false;
@@ -80,17 +96,20 @@ public class BoatObject extends Group {
* polygon.
*/
private void initChildren(double... points) {
- boatPoly = new Polygon(points);
- boatPoly.setFill(colour);
- boatPoly.setFill(this.colour);
+ boatPoly = makeBoatPolygon();
+// boatPoly.setFill(colour);
+// boatPoly.setFill(this.colour);
+// boatPoly.setMaterial(new PhongMaterial(this.colour));
boatPoly.setOnMouseEntered(event -> {
- boatPoly.setFill(Color.FLORALWHITE);
- boatPoly.setStroke(Color.RED);
+// boatPoly.setFill(Color.FLORALWHITE);
+// boatPoly.setStroke(Color.RED);
+// boatPoly.setMaterial(new PhongMaterial(Color.FLORALWHITE));
});
boatPoly.setOnMouseExited(event -> {
- boatPoly.setFill(colour);
- boatPoly.setFill(this.colour);
- boatPoly.setStroke(Color.BLACK);
+// boatPoly.setMaterial(new PhongMaterial(this.colour));
+// boatPoly.setFill(colour);
+// boatPoly.setFill(this.colour);
+// boatPoly.setStroke(Color.BLACK);
});
boatPoly.setOnMouseClicked(event -> setIsSelected(!isSelected));
boatPoly.setCache(true);
@@ -117,12 +136,91 @@ public class BoatObject extends Group {
super.getChildren().addAll(boatPoly, sail);
}
- public void setFill (Paint value) {
+ public void setFill (Color value) {
+
+
+ PointLight pointLight = new PointLight();
+// pointLight.setTranslateX(VIEWPORT_SIZE*3/4);
+// pointLight.setTranslateY(VIEWPORT_SIZE/2);
+// pointLight.setTranslateZ(VIEWPORT_SIZE/2);
+
+// PointLight pointLight2 = new PointLight(lightColor);
+// pointLight2.setTranslateX(VIEWPORT_SIZE*1/4);
+// pointLight2.setTranslateY(VIEWPORT_SIZE*3/4);
+// pointLight2.setTranslateZ(VIEWPORT_SIZE*3/4);
+// PointLight pointLight3 = new PointLight(lightColor);
+// pointLight3.setTranslateX(VIEWPORT_SIZE*5/8);
+// pointLight3.setTranslateY(VIEWPORT_SIZE/2);
+// pointLight3.setTranslateZ(0);
+//
+// Color ambientColor = Color.rgb(80, 80, 80, 0);
+// AmbientLight ambient = new AmbientLight(ambientColor);
+
+ this.getChildren().add(pointLight);
+// this.getChildren().add(pointLight2);
+// this.getChildren().add(pointLight3);
+// this.getChildren().add(ambient);
+
this.colour = value;
- boatPoly.setFill(colour);
+ PhongMaterial pm = new PhongMaterial(this.colour);
+// pm.setSpecularPower(16);
+// pm.setSpecularColor(lightColor);
+ boatPoly.setMaterial(pm);
trail.setStroke(colour);
}
+ public Shape3D makeBoatPolygon () {
+ StlMeshImporter importer = new StlMeshImporter();
+// System.out.println(BoatObject.class.getResource("simpleboat.stl").toString());
+ System.out.println(BoatObject.class.getResource("/views/StartScreenView.fxml").toString());
+ importer.read(getClass().getResource("/simpleboat.stl").toString());
+ return new MeshView(importer.getImport());
+// MeshView boat = new MeshView();
+// TriangleMesh boatMesh = new TriangleMesh();
+//// -BOAT_WIDTH / 2, BOAT_HEIGHT / 2,
+//// 0.0, -BOAT_HEIGHT / 2,
+//// BOAT_WIDTH / 2, BOAT_HEIGHT / 2
+// boatMesh.getPoints().addAll(
+// -BOAT_WIDTH / 2, BOAT_HEIGHT / 2, 0,
+// 0, -BOAT_HEIGHT / 2,0,
+// BOAT_WIDTH / 2, BOAT_HEIGHT / 2, 0
+// );
+// boatMesh.getTexCoords().addAll(0.5f,0,0,1,1,1);
+// boatMesh.getFaces().addAll(
+// 0,0,1,1,2,2//,
+//// 1,1,2,2,3,3,
+//// 0,0,2,2,3,3,
+//// 1,1,0,0,3,3
+// );
+// boat.setMesh(boatMesh);
+//// boat.setDrawMode(DrawMode.LINE);
+// return boat;
+//// Box b = new Box();
+//// TriangleMesh planeMesh = new TriangleMesh();
+//// float[] points = {
+//// -10, 10, 5,
+//// -10, -10, 10,
+//// 10, 10, 15,
+//// 10, 10, 20
+//// };
+//// float[] texCoords = {
+//// 0, 0,
+//// 0, 1,
+//// 1, 0,
+//// 1, 1
+//// };
+//// int[] faces = {
+//// 0, 0, 1, 1, 2, 2,
+//// 2, 2, 3, 3, 1, 1
+//// };
+//// planeMesh.getPoints().addAll(points);
+//// planeMesh.getTexCoords().addAll(texCoords);
+//// planeMesh.getFaces().addAll(faces);
+//// MeshView meshView = new MeshView(planeMesh);
+// meshView.setMaterial(new PhongMaterial(Color.BLACK));
+// return meshView;
+ }
+
/**
* Moves the boat and its children annotations to coordinates specified
* @param x The X coordinate to move the boat to
@@ -181,7 +279,7 @@ public class BoatObject extends Group {
private void rotateTo(double heading, boolean sailsIn, double windDir) {
- boatPoly.getTransforms().setAll(new Rotate(heading));
+// boatPoly.getTransforms().add(new Rotate(heading, new Point3D(0,0,1)));
if (sailsIn) {
Double sailWindOffset = 30.0;
Double upwindAngleLimit = 15.0;
@@ -220,8 +318,8 @@ public class BoatObject extends Group {
double period = 10;
for (int i = 0; i < 50; i++) {
points[i * 2] = amplitude * Math.sin(((Math.PI * i) / period + sailState));
- points[i * 2 + 1] = (BOAT_HEIGHT * i) / BOAT_HEIGHT / 2;
- points[199 - (i * 2)] = (BOAT_HEIGHT * i) / BOAT_HEIGHT / 2;
+ points[i * 2 + 1] = (double) (BOAT_HEIGHT * i) / BOAT_HEIGHT / 2;
+ points[199 - (i * 2)] = (double) (BOAT_HEIGHT * i) / BOAT_HEIGHT / 2;
points[199 - (i * 2 + 1)] = amplitude * Math.sin(((Math.PI * i) / period + sailState));
}
if (sailState == - 2 * Math.PI) {
@@ -235,6 +333,7 @@ public class BoatObject extends Group {
}
public void updateLocation() {
+ boatPoly.getTransforms().add(new Rotate(2, new Point3D(1,1,1)));
// double dx = xVelocity / 60;
// double dy = yVelocity / 60;
//
@@ -356,14 +455,14 @@ public class BoatObject extends Group {
* Sets this boat to appear highlighted
*/
public void setAsPlayer() {
- boatPoly.getPoints().setAll(
- -BOAT_WIDTH / 1.75, BOAT_HEIGHT / 1.75,
- 0.0, -BOAT_HEIGHT / 1.75,
- BOAT_WIDTH / 1.75, BOAT_HEIGHT / 1.75
- );
- boatPoly.setStroke(Color.BLACK);
- boatPoly.setStrokeWidth(2);
- boatPoly.setStrokeLineCap(StrokeLineCap.ROUND);
+// boatPoly.getPoints().setAll(
+// -BOAT_WIDTH / 1.75, BOAT_HEIGHT / 1.75,
+// 0.0, -BOAT_HEIGHT / 1.75,
+// BOAT_WIDTH / 1.75, BOAT_HEIGHT / 1.75
+// );
+// boatPoly.setStroke(Color.BLACK);
+// boatPoly.setStrokeWidth(2);
+// boatPoly.setStrokeLineCap(StrokeLineCap.ROUND);
isPlayer = true;
animateSail();
}
diff --git a/src/main/resources/simpleboat.stl b/src/main/resources/simpleboat.stl
new file mode 100644
index 0000000000000000000000000000000000000000..66b45fffbe454992c0beb996ef53f4602fb0f368
GIT binary patch
literal 1084
zcmZ>*D9A4=Nlj5mE6UGRaLP%|OGz!#HPSP;P|zqYO;Rw>WFQHM097A5@zG@SFJAjl
z*3kW;;WzhdCGZ?Pd#1$!$hOyovKbf@92po24k8R+3)B$_)PX9a08{}{g=`W7L;6l`
z`|FBU`-IX0fjU5-0B9ZrSViR=nDQ2EAKY#R2L8F+_WRYW_HC{RL~#|+KDZqa{Rop_
zCN|ikszP@=Ob6dw?*03qcA%Pt(198X**m%SUjh1qALtKM83qQJKTu7Axd}$YR3Ym|
zX2aA$XmlBvZjda3U1^qN`tN_eeP7QeOJp5DHatW@Y~OsIgPp(ffg!(63PlH82BbRx
zstVa83|GO;MRf_Xt5EeIWYAp&OK+&^k!>eh2i#R?x{=axb4Kn~p(;PC-~a2uF^J?_
zcqrWb5W4Ziw44KPxj-qU=uDBlwfCZZD@z{jKz0eT&rx+0Lv@q`bs)=tbi?8R)ufU$
qMf**FcAQIkv;)~(bbr8H%fJA%W4|R($IVu-tKhMQY#*{o3=9CqCuLy(
literal 0
HcmV?d00001
From 81afad1bcc12064794970f3ba34ccd558604b860 Mon Sep 17 00:00:00 2001
From: Calum
Date: Mon, 4 Sep 2017 14:43:13 +1200
Subject: [PATCH 12/29] Wrote tests that are currently broken for sending
server commands through text chat.
#tests
---
.../java/seng302/visualiser/GameView.java | 19 ++++-----
.../visualiser/fxObjects/VelocityPickup.java | 38 ++++++++++++++++++
src/main/resources/velocity_pickup.stl | Bin 0 -> 28284 bytes
src/main/resources/velocity_pickup_2manyP.stl | Bin 0 -> 7247484 bytes
4 files changed, 46 insertions(+), 11 deletions(-)
create mode 100644 src/main/java/seng302/visualiser/fxObjects/VelocityPickup.java
create mode 100644 src/main/resources/velocity_pickup.stl
create mode 100644 src/main/resources/velocity_pickup_2manyP.stl
diff --git a/src/main/java/seng302/visualiser/GameView.java b/src/main/java/seng302/visualiser/GameView.java
index c407fd6f..4ae8f18d 100644
--- a/src/main/java/seng302/visualiser/GameView.java
+++ b/src/main/java/seng302/visualiser/GameView.java
@@ -13,7 +13,6 @@ import javafx.animation.Timeline;
import javafx.application.Platform;
import javafx.collections.ObservableList;
import javafx.geometry.Point2D;
-import javafx.geometry.Point3D;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.image.ImageView;
@@ -23,12 +22,9 @@ import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
-import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Circle;
-import javafx.scene.shape.Cylinder;
import javafx.scene.shape.Polygon;
import javafx.scene.text.Text;
-import javafx.scene.transform.Rotate;
import javafx.util.Duration;
import seng302.gameServer.messages.RoundingSide;
import seng302.model.ClientYacht;
@@ -45,6 +41,7 @@ import seng302.visualiser.fxObjects.CourseBoundary;
import seng302.visualiser.fxObjects.Gate;
import seng302.visualiser.fxObjects.MarkArrowFactory;
import seng302.visualiser.fxObjects.Marker;
+import seng302.visualiser.fxObjects.VelocityPickup;
import seng302.visualiser.map.Boundary;
import seng302.visualiser.map.CanvasMap;
@@ -87,7 +84,7 @@ public class GameView extends Pane {
private Group markers = new Group();
private Group tokens = new Group();
private List course = new ArrayList<>();
- private List mapTokens;
+ private List mapTokens;
private ImageView mapImage = new ImageView();
@@ -187,9 +184,9 @@ public class GameView extends Pane {
}
}
boatObjects.forEach((boat, boatObject) -> boatObject.updateLocation());
- for (Cylinder c : mapTokens) {
- c.getTransforms().add(new Rotate(1, new Point3D(45, 45, 45)));
- }
+// for (Cylinder c : mapTokens) {
+// c.getTransforms().add(new Rotate(1, new Point3D(45, 45, 45)));
+// }
}
};
}
@@ -461,11 +458,11 @@ public class GameView extends Pane {
mapTokens = new ArrayList<>();
for (Token token : newTokens) {
Point2D location = findScaledXY(token.getLat(), token.getLng());
- Cylinder tokenObject = new Cylinder(10, 10);
- tokenObject.getTransforms().add(new Rotate(45, new Point3D(45, 45, 45)));
+ Node tokenObject = new VelocityPickup();
+// tokenObject.getTransforms().add(new Rotate(45, new Point3D(45, 45, 45)));
tokenObject.setLayoutX(location.getX());
tokenObject.setLayoutY(location.getY());
- tokenObject.setMaterial(new PhongMaterial(Color.YELLOW));
+// tokenObject.setMaterial(new PhongMaterial(Color.YELLOW));
mapTokens.add(tokenObject);
}
diff --git a/src/main/java/seng302/visualiser/fxObjects/VelocityPickup.java b/src/main/java/seng302/visualiser/fxObjects/VelocityPickup.java
new file mode 100644
index 00000000..24d2d78a
--- /dev/null
+++ b/src/main/java/seng302/visualiser/fxObjects/VelocityPickup.java
@@ -0,0 +1,38 @@
+package seng302.visualiser.fxObjects;
+
+import com.interactivemesh.jfx.importer.stl.StlMeshImporter;
+import javafx.animation.AnimationTimer;
+import javafx.application.Platform;
+import javafx.geometry.Point3D;
+import javafx.scene.paint.Color;
+import javafx.scene.paint.PhongMaterial;
+import javafx.scene.shape.MeshView;
+import javafx.scene.transform.Rotate;
+import javafx.scene.transform.Scale;
+
+/**
+ * Created by cir27 on 3/09/17.
+ */
+public class VelocityPickup extends MeshView {
+
+ public double rotation = 0;
+ public Rotate timerRotation = new Rotate(0, new Point3D(0,0,1));
+
+ public VelocityPickup () {
+ StlMeshImporter importer = new StlMeshImporter();
+ importer.read(getClass().getResource("/velocity_pickup.stl").toString());
+ this.setMesh(importer.getImport());
+ this.setMaterial(new PhongMaterial(Color.YELLOW));
+ this.getTransforms().add(new Scale(30,30,30));
+ this.getTransforms().add(new Rotate(30, new Point3D(1,0, 0)));
+ this.getTransforms().add(new Rotate(90, new Point3D(0,1, 0)));
+ this.getTransforms().add(timerRotation);
+ AnimationTimer at = new AnimationTimer() {
+ @Override
+ public void handle(long now) {
+ Platform.runLater(() -> timerRotation.setAngle(rotation++));
+ }
+ };
+ at.start();
+ }
+}
diff --git a/src/main/resources/velocity_pickup.stl b/src/main/resources/velocity_pickup.stl
new file mode 100644
index 0000000000000000000000000000000000000000..040d48cfac84329c7cc8c8495555661f82c18028
GIT binary patch
literal 28284
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