1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
package vtk;
import java.io.File;
/**
* Enum used to load native library more easily. If you don't want to set the
* specific environment variable you can provide the path of the directory that
* contains the VTK library through a Java Property. Like in the following
* command line:
*
* > java -cp vtk.jar -Dvtk.lib.dir=.../vtk-libs vtk.sample.SimpleVTK
*
* The directory .../vtk-libs must contain the so/dll/dylib + the jnilib files
*
* @author sebastien jourdain - sebastien.jourdain@kitware.com
*/
public enum vtkNativeLibrary {
@VTK_JAVA_NATIVE_LIBRARIES@
/**
* Try to load all library
*
* @return true if all library have been successfully loaded
*/
public static boolean LoadAllNativeLibraries() {
boolean isEveryThingLoaded = true;
for (vtkNativeLibrary lib : values()) {
try {
if(lib.IsBuilt()) {
lib.LoadLibrary();
}
} catch (UnsatisfiedLinkError e) {
isEveryThingLoaded = false;
e.printStackTrace();
}
}
return isEveryThingLoaded;
}
/**
* Load the set of given library and trows runtime exception if any given
* library failed in the loading process
*
* @param nativeLibraries
*/
public static void LoadNativeLibraries(vtkNativeLibrary... nativeLibraries) {
for (vtkNativeLibrary lib : nativeLibraries) {
lib.LoadLibrary();
}
}
/**
* Disable the pop-in vtkErrorWindow by writing the error to a log file.
* If the provided logFile is null the default "vtkError.txt" file will be
* used.
*
* @param logFile
*/
public static void DisableOutputWindow(File logFile) {
if(logFile == null) {
logFile = new File("vtkError.txt");
}
vtkFileOutputWindow outputError = new vtkFileOutputWindow();
outputError.SetFileName(logFile.getAbsolutePath());
outputError.SetInstance(outputError);
}
private vtkNativeLibrary(String nativeLibraryName, boolean built) {
this.nativeLibraryName = nativeLibraryName;
this.loaded = false;
this.built = built;
}
/**
* Load the library and throws runtime exception if the library failed in
* the loading process
*/
public void LoadLibrary() throws UnsatisfiedLinkError {
if (!loaded) {
if (System.getProperty("vtk.lib.dir") != null) {
File dir = new File(System.getProperty("vtk.lib.dir"));
patchJavaLibraryPath(dir.getAbsolutePath());
File libPath = new File(dir, System.mapLibraryName(nativeLibraryName));
if (libPath.exists()) {
try {
Runtime.getRuntime().load(libPath.getAbsolutePath());
loaded = true;
return;
} catch (UnsatisfiedLinkError e) {
e.printStackTrace();
}
}
}
System.loadLibrary(nativeLibraryName);
}
loaded = true;
}
/**
* @return true if the library has already been successfully loaded
*/
public boolean IsLoaded() {
return loaded;
}
/**
* @return true if the module was enabled and therefore build
*/
public boolean IsBuilt() {
return built;
}
/**
* @return the library name
*/
public String GetLibraryName() {
return nativeLibraryName;
}
private static void patchJavaLibraryPath(String vtkLibDir) {
if (vtkLibDir != null) {
String path_separator = System.getProperty("path.separator");
String s = System.getProperty("java.library.path");
if (!s.contains(vtkLibDir)) {
s = s + path_separator + vtkLibDir;
System.setProperty("java.library.path", s);
}
}
}
private String nativeLibraryName;
private boolean loaded;
private boolean built;
}
|