6 * Enum used to load native library more easily. If you don't want to set the
7 * specific environment variable you can provide the path of the directory that
8 * contains the VTK library through a Java Property. Like in the following
11 * > java -cp vtk.jar -Dvtk.lib.dir=.../vtk-libs vtk.sample.SimpleVTK
13 * The directory .../vtk-libs must contain the so/dll/dylib + the jnilib files
15 * @author sebastien jourdain - sebastien.jourdain@kitware.com
17 public enum vtkNativeLibrary {
19 VTKACCELERATORSVTKM("vtkAcceleratorsVTKmJava", false),
20 VTKCHARTSCORE("vtkChartsCoreJava", true),
21 VTKCOMMONCOLOR("vtkCommonColorJava", true),
22 VTKCOMMONCOMPUTATIONALGEOMETRY("vtkCommonComputationalGeometryJava", true),
23 VTKCOMMONCORE("vtkCommonCoreJava", true),
24 VTKCOMMONDATAMODEL("vtkCommonDataModelJava", true),
25 VTKCOMMONEXECUTIONMODEL("vtkCommonExecutionModelJava", true),
26 VTKCOMMONMATH("vtkCommonMathJava", true),
27 VTKCOMMONMISC("vtkCommonMiscJava", true),
28 VTKCOMMONSYSTEM("vtkCommonSystemJava", true),
29 VTKCOMMONTRANSFORMS("vtkCommonTransformsJava", true),
30 VTKDOMAINSCHEMISTRY("vtkDomainsChemistryJava", true),
31 VTKDOMAINSCHEMISTRYOPENGL2("vtkDomainsChemistryOpenGL2Java", true),
32 VTKDOMAINSMICROSCOPY("vtkDomainsMicroscopyJava", false),
33 VTKDOMAINSPARALLELCHEMISTRY("vtkDomainsParallelChemistryJava", false),
34 VTKFILTERSAMR("vtkFiltersAMRJava", true),
35 VTKFILTERSCORE("vtkFiltersCoreJava", true),
36 VTKFILTERSEXTRACTION("vtkFiltersExtractionJava", true),
37 VTKFILTERSFLOWPATHS("vtkFiltersFlowPathsJava", true),
38 VTKFILTERSGENERAL("vtkFiltersGeneralJava", true),
39 VTKFILTERSGENERIC("vtkFiltersGenericJava", true),
40 VTKFILTERSGEOMETRY("vtkFiltersGeometryJava", true),
41 VTKFILTERSHYBRID("vtkFiltersHybridJava", true),
42 VTKFILTERSHYPERTREE("vtkFiltersHyperTreeJava", true),
43 VTKFILTERSIMAGING("vtkFiltersImagingJava", true),
44 VTKFILTERSMODELING("vtkFiltersModelingJava", true),
45 VTKFILTERSOPENTURNS("vtkFiltersOpenTurnsJava", false),
46 VTKFILTERSPARALLEL("vtkFiltersParallelJava", true),
47 VTKFILTERSPARALLELFLOWPATHS("vtkFiltersParallelFlowPathsJava", false),
48 VTKFILTERSPARALLELGEOMETRY("vtkFiltersParallelGeometryJava", false),
49 VTKFILTERSPARALLELIMAGING("vtkFiltersParallelImagingJava", true),
50 VTKFILTERSPARALLELMPI("vtkFiltersParallelMPIJava", false),
51 VTKFILTERSPARALLELSTATISTICS("vtkFiltersParallelStatisticsJava", false),
52 VTKFILTERSPARALLELVERDICT("vtkFiltersParallelVerdictJava", false),
53 VTKFILTERSPOINTS("vtkFiltersPointsJava", true),
54 VTKFILTERSPROGRAMMABLE("vtkFiltersProgrammableJava", true),
55 VTKFILTERSREEBGRAPH("vtkFiltersReebGraphJava", false),
56 VTKFILTERSSMP("vtkFiltersSMPJava", true),
57 VTKFILTERSSELECTION("vtkFiltersSelectionJava", true),
58 VTKFILTERSSOURCES("vtkFiltersSourcesJava", true),
59 VTKFILTERSSTATISTICS("vtkFiltersStatisticsJava", true),
60 VTKFILTERSTEXTURE("vtkFiltersTextureJava", true),
61 VTKFILTERSTOPOLOGY("vtkFiltersTopologyJava", true),
62 VTKFILTERSVERDICT("vtkFiltersVerdictJava", true),
63 VTKGEOVISCORE("vtkGeovisCoreJava", true),
64 VTKGEOVISGDAL("vtkGeovisGDALJava", false),
65 VTKIOADIOS("vtkIOADIOSJava", false),
66 VTKIOAMR("vtkIOAMRJava", true),
67 VTKIOASYNCHRONOUS("vtkIOAsynchronousJava", true),
68 VTKIOCITYGML("vtkIOCityGMLJava", true),
69 VTKIOCORE("vtkIOCoreJava", true),
70 VTKIOENSIGHT("vtkIOEnSightJava", true),
71 VTKIOEXODUS("vtkIOExodusJava", true),
72 VTKIOEXPORT("vtkIOExportJava", true),
73 VTKIOEXPORTOPENGL2("vtkIOExportOpenGL2Java", true),
74 VTKIOEXPORTPDF("vtkIOExportPDFJava", true),
75 VTKIOFFMPEG("vtkIOFFMPEGJava", false),
76 VTKIOGDAL("vtkIOGDALJava", false),
77 VTKIOGEOJSON("vtkIOGeoJSONJava", false),
78 VTKIOGEOMETRY("vtkIOGeometryJava", true),
79 VTKIOIMAGE("vtkIOImageJava", true),
80 VTKIOIMPORT("vtkIOImportJava", true),
81 VTKIOINFOVIS("vtkIOInfovisJava", true),
82 VTKIOLAS("vtkIOLASJava", false),
83 VTKIOLSDYNA("vtkIOLSDynaJava", true),
84 VTKIOLEGACY("vtkIOLegacyJava", true),
85 VTKIOMINC("vtkIOMINCJava", true),
86 VTKIOMPIIMAGE("vtkIOMPIImageJava", false),
87 VTKIOMPIPARALLEL("vtkIOMPIParallelJava", false),
88 VTKIOMOTIONFX("vtkIOMotionFXJava", false),
89 VTKIOMOVIE("vtkIOMovieJava", true),
90 VTKIOMYSQL("vtkIOMySQLJava", false),
91 VTKIONETCDF("vtkIONetCDFJava", true),
92 VTKIOODBC("vtkIOODBCJava", false),
93 VTKIOPDAL("vtkIOPDALJava", false),
94 VTKIOPLY("vtkIOPLYJava", true),
95 VTKIOPARALLEL("vtkIOParallelJava", true),
96 VTKIOPARALLELEXODUS("vtkIOParallelExodusJava", false),
97 VTKIOPARALLELLSDYNA("vtkIOParallelLSDynaJava", false),
98 VTKIOPARALLELNETCDF("vtkIOParallelNetCDFJava", false),
99 VTKIOPARALLELXML("vtkIOParallelXMLJava", true),
100 VTKIOPARALLELXDMF3("vtkIOParallelXdmf3Java", false),
101 VTKIOPOSTGRESQL("vtkIOPostgreSQLJava", false),
102 VTKIOSQL("vtkIOSQLJava", true),
103 VTKIOSEGY("vtkIOSegYJava", true),
104 VTKIOTRUCHAS("vtkIOTRUCHASJava", false),
105 VTKIOTECPLOTTABLE("vtkIOTecplotTableJava", true),
106 VTKIOVPIC("vtkIOVPICJava", false),
107 VTKIOVERAOUT("vtkIOVeraOutJava", true),
108 VTKIOVIDEO("vtkIOVideoJava", true),
109 VTKIOXML("vtkIOXMLJava", true),
110 VTKIOXMLPARSER("vtkIOXMLParserJava", true),
111 VTKIOXDMF2("vtkIOXdmf2Java", false),
112 VTKIOXDMF3("vtkIOXdmf3Java", false),
113 VTKIMAGINGCOLOR("vtkImagingColorJava", true),
114 VTKIMAGINGCORE("vtkImagingCoreJava", true),
115 VTKIMAGINGFOURIER("vtkImagingFourierJava", true),
116 VTKIMAGINGGENERAL("vtkImagingGeneralJava", true),
117 VTKIMAGINGHYBRID("vtkImagingHybridJava", true),
118 VTKIMAGINGMATH("vtkImagingMathJava", true),
119 VTKIMAGINGMORPHOLOGICAL("vtkImagingMorphologicalJava", true),
120 VTKIMAGINGOPENGL2("vtkImagingOpenGL2Java", false),
121 VTKIMAGINGSOURCES("vtkImagingSourcesJava", true),
122 VTKIMAGINGSTATISTICS("vtkImagingStatisticsJava", true),
123 VTKIMAGINGSTENCIL("vtkImagingStencilJava", true),
124 VTKINFOVISBOOSTGRAPHALGORITHMS("vtkInfovisBoostGraphAlgorithmsJava", false),
125 VTKINFOVISCORE("vtkInfovisCoreJava", true),
126 VTKINFOVISLAYOUT("vtkInfovisLayoutJava", true),
127 VTKINTERACTIONIMAGE("vtkInteractionImageJava", true),
128 VTKINTERACTIONSTYLE("vtkInteractionStyleJava", true),
129 VTKINTERACTIONWIDGETS("vtkInteractionWidgetsJava", true),
130 VTKPARALLELCORE("vtkParallelCoreJava", true),
131 VTKPARALLELMPI("vtkParallelMPIJava", false),
132 VTKRENDERINGANNOTATION("vtkRenderingAnnotationJava", true),
133 VTKRENDERINGCONTEXT2D("vtkRenderingContext2DJava", true),
134 VTKRENDERINGCONTEXTOPENGL2("vtkRenderingContextOpenGL2Java", true),
135 VTKRENDERINGCORE("vtkRenderingCoreJava", true),
136 VTKRENDERINGEXTERNAL("vtkRenderingExternalJava", false),
137 VTKRENDERINGFREETYPE("vtkRenderingFreeTypeJava", true),
138 VTKRENDERINGGL2PSOPENGL2("vtkRenderingGL2PSOpenGL2Java", true),
139 VTKRENDERINGIMAGE("vtkRenderingImageJava", true),
140 VTKRENDERINGLICOPENGL2("vtkRenderingLICOpenGL2Java", false),
141 VTKRENDERINGLOD("vtkRenderingLODJava", true),
142 VTKRENDERINGLABEL("vtkRenderingLabelJava", true),
143 VTKRENDERINGMATPLOTLIB("vtkRenderingMatplotlibJava", false),
144 VTKRENDERINGOSPRAY("vtkRenderingOSPRayJava", false),
145 VTKRENDERINGOPENGL2("vtkRenderingOpenGL2Java", true),
146 VTKRENDERINGOPENVR("vtkRenderingOpenVRJava", false),
147 VTKRENDERINGOPTIX("vtkRenderingOptiXJava", false),
148 VTKRENDERINGPARALLEL("vtkRenderingParallelJava", false),
149 VTKRENDERINGPARALLELLIC("vtkRenderingParallelLICJava", false),
150 VTKRENDERINGQT("vtkRenderingQtJava", false),
151 VTKRENDERINGSCENEGRAPH("vtkRenderingSceneGraphJava", false),
152 VTKRENDERINGVOLUME("vtkRenderingVolumeJava", true),
153 VTKRENDERINGVOLUMEAMR("vtkRenderingVolumeAMRJava", false),
154 VTKRENDERINGVOLUMEOPENGL2("vtkRenderingVolumeOpenGL2Java", true),
155 VTKTESTINGRENDERING("vtkTestingRenderingJava", false),
156 VTKVIEWSCONTEXT2D("vtkViewsContext2DJava", true),
157 VTKVIEWSCORE("vtkViewsCoreJava", true),
158 VTKVIEWSGEOVIS("vtkViewsGeovisJava", false),
159 VTKVIEWSINFOVIS("vtkViewsInfovisJava", true),
160 VTKWEBCORE("vtkWebCoreJava", false),
161 VTKWEBGLEXPORTER("vtkWebGLExporterJava", false);
165 * Try to load all library
167 * @return true if all library have been successfully loaded
169 public static boolean LoadAllNativeLibraries() {
170 boolean isEveryThingLoaded = true;
171 for (vtkNativeLibrary lib : values()) {
176 } catch (UnsatisfiedLinkError e) {
177 isEveryThingLoaded = false;
182 return isEveryThingLoaded;
186 * Load the set of given library and trows runtime exception if any given
187 * library failed in the loading process
189 * @param nativeLibraries
191 public static void LoadNativeLibraries(vtkNativeLibrary... nativeLibraries) {
192 for (vtkNativeLibrary lib : nativeLibraries) {
198 * Disable the pop-in vtkErrorWindow by writing the error to a log file.
199 * If the provided logFile is null the default "vtkError.txt" file will be
204 public static void DisableOutputWindow(File logFile) {
205 if(logFile == null) {
206 logFile = new File("vtkError.txt");
208 vtkFileOutputWindow outputError = new vtkFileOutputWindow();
209 outputError.SetFileName(logFile.getAbsolutePath());
210 outputError.SetInstance(outputError);
213 private vtkNativeLibrary(String nativeLibraryName, boolean built) {
214 this.nativeLibraryName = nativeLibraryName;
220 * Load the library and throws runtime exception if the library failed in
221 * the loading process
223 public void LoadLibrary() throws UnsatisfiedLinkError {
225 if (System.getProperty("vtk.lib.dir") != null) {
226 File dir = new File(System.getProperty("vtk.lib.dir"));
227 patchJavaLibraryPath(dir.getAbsolutePath());
228 File libPath = new File(dir, System.mapLibraryName(nativeLibraryName));
229 if (libPath.exists()) {
231 Runtime.getRuntime().load(libPath.getAbsolutePath());
234 } catch (UnsatisfiedLinkError e) {
239 System.loadLibrary(nativeLibraryName);
245 * @return true if the library has already been successfully loaded
247 public boolean IsLoaded() {
252 * @return true if the module was enabled and therefore build
254 public boolean IsBuilt() {
259 * @return the library name
261 public String GetLibraryName() {
262 return nativeLibraryName;
265 private static void patchJavaLibraryPath(String vtkLibDir) {
266 if (vtkLibDir != null) {
267 String path_separator = System.getProperty("path.separator");
268 String s = System.getProperty("java.library.path");
269 if (!s.contains(vtkLibDir)) {
270 s = s + path_separator + vtkLibDir;
271 System.setProperty("java.library.path", s);
276 private String nativeLibraryName;
277 private boolean loaded;
278 private boolean built;