32 package eu.mihosoft.vrl.v3d.ext.openjfx.importers;
34 import java.io.IOException;
36 import java.net.URLClassLoader;
38 import javafx.animation.Timeline;
39 import javafx.fxml.FXMLLoader;
40 import javafx.scene.Node;
41 import javafx.scene.shape.MeshView;
42 import javafx.scene.shape.TriangleMesh;
43 import javafx.util.Pair;
45 import java.util.ServiceLoader;
60 return new String[]{
"*.obj"};
70 public static Node
load(String fileUrl)
throws IOException {
71 return load(fileUrl,
false);
82 public static Node
load(String fileUrl,
boolean asPolygonMesh)
throws IOException {
96 final int dot = fileUrl.lastIndexOf(
'.');
98 throw new IOException(
"Unknown 3D file format, url missing extension [" + fileUrl +
"]");
100 final String extension = fileUrl.substring(dot + 1, fileUrl.length()).toLowerCase();
105 ServiceLoader<Importer> servantLoader = ServiceLoader.load(
Importer.class, classLoader);
108 for (
Importer plugin : servantLoader) {
109 if (plugin.isSupported(extension)) {
116 if ((importer ==
null) && (!extension.equals(
"fxml"))){
118 "com.javafx.experiments.importers.dae.DaeImporter",
119 "com.javafx.experiments.importers.max.MaxLoader",
120 "com.javafx.experiments.importers.maya.MayaImporter",
121 "com.javafx.experiments.importers.obj.ObjOrPolyObjImporter",
124 for (String name : names) {
126 Class<?> clazz = Class.forName(name);
127 Object obj = clazz.newInstance();
136 }
catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
140 if (fail)
throw new IOException(
"Unknown 3D file format [" + extension +
"]");
143 if (extension.equals(
"fxml")) {
144 final Object fxmlRoot = FXMLLoader.load(
new URL(fileUrl));
145 if (fxmlRoot instanceof Node) {
146 return new Pair<>((Node) fxmlRoot,
null);
147 }
else if (fxmlRoot instanceof TriangleMesh) {
148 return new Pair<>(
new MeshView((TriangleMesh) fxmlRoot),
null);
150 throw new IOException(
"Unknown object in FXML file [" + fxmlRoot.getClass().getName() +
"]");
152 importer.
load(fileUrl, asPolygonMesh);
static Node load(String fileUrl)
static String[] getSupportedFormatExtensionFilters()
static Node load(String fileUrl, boolean asPolygonMesh)
static Pair< Node, Timeline > loadIncludingAnimation(String fileUrl, boolean asPolygonMesh)
URLClassLoader addUrlToClassPath()
abstract void load(String url, boolean asPolygonMesh)
abstract boolean isSupported(String supportType)