]> gerrit.simantics Code Review - simantics/3d.git/blob - vtk/src/vtk/vtkNativeLibrary.java
PipeRun reverse action
[simantics/3d.git] / vtk / src / vtk / vtkNativeLibrary.java
1 package vtk;
2
3 import java.io.File;
4
5 /**
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
9  * command line:
10  *
11  * > java -cp vtk.jar -Dvtk.lib.dir=.../vtk-libs vtk.sample.SimpleVTK
12  *
13  * The directory .../vtk-libs must contain the so/dll/dylib + the jnilib files
14  *
15  * @author sebastien jourdain - sebastien.jourdain@kitware.com
16  */
17 public enum vtkNativeLibrary {
18
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);
162
163
164   /**
165    * Try to load all library
166    *
167    * @return true if all library have been successfully loaded
168    */
169   public static boolean LoadAllNativeLibraries() {
170     boolean isEveryThingLoaded = true;
171     for (vtkNativeLibrary lib : values()) {
172       try {
173         if(lib.IsBuilt()) {
174           lib.LoadLibrary();
175         }
176       } catch (UnsatisfiedLinkError e) {
177         isEveryThingLoaded = false;
178         e.printStackTrace();
179       }
180     }
181
182     return isEveryThingLoaded;
183   }
184
185   /**
186    * Load the set of given library and trows runtime exception if any given
187    * library failed in the loading process
188    *
189    * @param nativeLibraries
190    */
191   public static void LoadNativeLibraries(vtkNativeLibrary... nativeLibraries) {
192     for (vtkNativeLibrary lib : nativeLibraries) {
193       lib.LoadLibrary();
194     }
195   }
196
197   /**
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
200    * used.
201    *
202    * @param logFile
203    */
204   public static void DisableOutputWindow(File logFile) {
205     if(logFile == null) {
206       logFile = new File("vtkError.txt");
207     }
208     vtkFileOutputWindow outputError = new vtkFileOutputWindow();
209     outputError.SetFileName(logFile.getAbsolutePath());
210     outputError.SetInstance(outputError);
211   }
212
213   private vtkNativeLibrary(String nativeLibraryName, boolean built) {
214     this.nativeLibraryName = nativeLibraryName;
215     this.loaded = false;
216     this.built = built;
217   }
218
219   /**
220    * Load the library and throws runtime exception if the library failed in
221    * the loading process
222    */
223   public void LoadLibrary() throws UnsatisfiedLinkError {
224     if (!loaded) {
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()) {
230           try {
231             Runtime.getRuntime().load(libPath.getAbsolutePath());
232             loaded = true;
233             return;
234           } catch (UnsatisfiedLinkError e) {
235             e.printStackTrace();
236           }
237         }
238       }
239       System.loadLibrary(nativeLibraryName);
240     }
241     loaded = true;
242   }
243
244   /**
245    * @return true if the library has already been successfully loaded
246    */
247   public boolean IsLoaded() {
248     return loaded;
249   }
250
251   /**
252    * @return true if the module was enabled and therefore build
253    */
254   public boolean IsBuilt() {
255     return built;
256   }
257
258   /**
259    * @return the library name
260    */
261   public String GetLibraryName() {
262     return nativeLibraryName;
263   }
264
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);
272       }
273     }
274   }
275
276   private String nativeLibraryName;
277   private boolean loaded;
278   private boolean built;
279 }