joonsrenderer 1.1-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +53 -0
  3. data/.mvn/extensions.xml +8 -0
  4. data/CHANGELOG.md +2 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE +674 -0
  7. data/README.md +2 -0
  8. data/Rakefile +43 -0
  9. data/docs/.gitignore +6 -0
  10. data/docs/_config.yml +20 -0
  11. data/docs/_includes/footer.html +38 -0
  12. data/docs/_includes/head.html +15 -0
  13. data/docs/_includes/header.html +27 -0
  14. data/docs/_includes/icon-github.html +1 -0
  15. data/docs/_includes/icon-github.svg +1 -0
  16. data/docs/_includes/icon-twitter.html +1 -0
  17. data/docs/_includes/icon-twitter.svg +1 -0
  18. data/docs/_layouts/default.html +20 -0
  19. data/docs/_layouts/page.html +14 -0
  20. data/docs/_layouts/post.html +15 -0
  21. data/docs/_posts/2017-01-08-animated_ray_tracing.md +72 -0
  22. data/docs/_posts/2017-01-08-welcome.md +78 -0
  23. data/docs/_sass/_base.scss +206 -0
  24. data/docs/_sass/_layout.scss +242 -0
  25. data/docs/_sass/_syntax-highlighting.scss +71 -0
  26. data/docs/about.md +12 -0
  27. data/docs/assets/Animation.ogv +0 -0
  28. data/docs/assets/Animation.png +0 -0
  29. data/docs/assets/basic.png +0 -0
  30. data/docs/assets/basic_traced.png +0 -0
  31. data/docs/css/main.scss +38 -0
  32. data/docs/favicon.ico +0 -0
  33. data/docs/feed.xml +30 -0
  34. data/docs/index.html +38 -0
  35. data/joonsrenderer.gemspec +23 -0
  36. data/lib/joonsrenderer.rb +12 -0
  37. data/lib/joonsrenderer/version.rb +3 -0
  38. data/pom.rb +75 -0
  39. data/pom.xml +163 -0
  40. data/src/main/java/SunflowGUI.java +1354 -0
  41. data/src/main/java/joons/JRFiller.java +79 -0
  42. data/src/main/java/joons/JRImagePanel.java +141 -0
  43. data/src/main/java/joons/JRRecorder.java +183 -0
  44. data/src/main/java/joons/JRStatics.java +199 -0
  45. data/src/main/java/joons/JoonsRenderer.java +837 -0
  46. data/src/main/java/org/sunflow/AsciiFileSunflowAPI.java +98 -0
  47. data/src/main/java/org/sunflow/Benchmark.java +313 -0
  48. data/src/main/java/org/sunflow/BinaryFileSunflowAPI.java +228 -0
  49. data/src/main/java/org/sunflow/FileSunflowAPI.java +354 -0
  50. data/src/main/java/org/sunflow/PluginRegistry.java +322 -0
  51. data/src/main/java/org/sunflow/RealtimeBenchmark.java +125 -0
  52. data/src/main/java/org/sunflow/RenderObjectMap.java +344 -0
  53. data/src/main/java/org/sunflow/SunflowAPI.java +762 -0
  54. data/src/main/java/org/sunflow/SunflowAPIInterface.java +277 -0
  55. data/src/main/java/org/sunflow/core/AccelerationStructure.java +20 -0
  56. data/src/main/java/org/sunflow/core/AccelerationStructureFactory.java +36 -0
  57. data/src/main/java/org/sunflow/core/BucketOrder.java +21 -0
  58. data/src/main/java/org/sunflow/core/Camera.java +125 -0
  59. data/src/main/java/org/sunflow/core/CameraLens.java +29 -0
  60. data/src/main/java/org/sunflow/core/CausticPhotonMapInterface.java +15 -0
  61. data/src/main/java/org/sunflow/core/Display.java +78 -0
  62. data/src/main/java/org/sunflow/core/Filter.java +27 -0
  63. data/src/main/java/org/sunflow/core/GIEngine.java +42 -0
  64. data/src/main/java/org/sunflow/core/Geometry.java +157 -0
  65. data/src/main/java/org/sunflow/core/GlobalPhotonMapInterface.java +21 -0
  66. data/src/main/java/org/sunflow/core/ImageSampler.java +26 -0
  67. data/src/main/java/org/sunflow/core/Instance.java +224 -0
  68. data/src/main/java/org/sunflow/core/InstanceList.java +83 -0
  69. data/src/main/java/org/sunflow/core/IntersectionState.java +120 -0
  70. data/src/main/java/org/sunflow/core/LightSample.java +104 -0
  71. data/src/main/java/org/sunflow/core/LightServer.java +382 -0
  72. data/src/main/java/org/sunflow/core/LightSource.java +67 -0
  73. data/src/main/java/org/sunflow/core/Modifier.java +16 -0
  74. data/src/main/java/org/sunflow/core/Options.java +20 -0
  75. data/src/main/java/org/sunflow/core/ParameterList.java +758 -0
  76. data/src/main/java/org/sunflow/core/PhotonStore.java +62 -0
  77. data/src/main/java/org/sunflow/core/PrimitiveList.java +70 -0
  78. data/src/main/java/org/sunflow/core/Ray.java +219 -0
  79. data/src/main/java/org/sunflow/core/RenderObject.java +25 -0
  80. data/src/main/java/org/sunflow/core/Scene.java +377 -0
  81. data/src/main/java/org/sunflow/core/SceneParser.java +58 -0
  82. data/src/main/java/org/sunflow/core/Shader.java +30 -0
  83. data/src/main/java/org/sunflow/core/ShadingCache.java +84 -0
  84. data/src/main/java/org/sunflow/core/ShadingState.java +939 -0
  85. data/src/main/java/org/sunflow/core/Statistics.java +85 -0
  86. data/src/main/java/org/sunflow/core/Tesselatable.java +36 -0
  87. data/src/main/java/org/sunflow/core/Texture.java +128 -0
  88. data/src/main/java/org/sunflow/core/TextureCache.java +48 -0
  89. data/src/main/java/org/sunflow/core/accel/BoundingIntervalHierarchy.java +652 -0
  90. data/src/main/java/org/sunflow/core/accel/KDTree.java +833 -0
  91. data/src/main/java/org/sunflow/core/accel/NullAccelerator.java +30 -0
  92. data/src/main/java/org/sunflow/core/accel/UniformGrid.java +329 -0
  93. data/src/main/java/org/sunflow/core/bucket/BucketOrderFactory.java +26 -0
  94. data/src/main/java/org/sunflow/core/bucket/ColumnBucketOrder.java +21 -0
  95. data/src/main/java/org/sunflow/core/bucket/DiagonalBucketOrder.java +28 -0
  96. data/src/main/java/org/sunflow/core/bucket/HilbertBucketOrder.java +65 -0
  97. data/src/main/java/org/sunflow/core/bucket/InvertedBucketOrder.java +28 -0
  98. data/src/main/java/org/sunflow/core/bucket/RandomBucketOrder.java +49 -0
  99. data/src/main/java/org/sunflow/core/bucket/RowBucketOrder.java +21 -0
  100. data/src/main/java/org/sunflow/core/bucket/SpiralBucketOrder.java +43 -0
  101. data/src/main/java/org/sunflow/core/camera/FisheyeLens.java +25 -0
  102. data/src/main/java/org/sunflow/core/camera/PinholeLens.java +43 -0
  103. data/src/main/java/org/sunflow/core/camera/SphericalLens.java +22 -0
  104. data/src/main/java/org/sunflow/core/camera/ThinLens.java +107 -0
  105. data/src/main/java/org/sunflow/core/display/FastDisplay.java +119 -0
  106. data/src/main/java/org/sunflow/core/display/FileDisplay.java +83 -0
  107. data/src/main/java/org/sunflow/core/display/FrameDisplay.java +97 -0
  108. data/src/main/java/org/sunflow/core/display/ImgPipeDisplay.java +109 -0
  109. data/src/main/java/org/sunflow/core/filter/BlackmanHarrisFilter.java +28 -0
  110. data/src/main/java/org/sunflow/core/filter/BoxFilter.java +16 -0
  111. data/src/main/java/org/sunflow/core/filter/CatmullRomFilter.java +29 -0
  112. data/src/main/java/org/sunflow/core/filter/CubicBSpline.java +32 -0
  113. data/src/main/java/org/sunflow/core/filter/GaussianFilter.java +24 -0
  114. data/src/main/java/org/sunflow/core/filter/LanczosFilter.java +30 -0
  115. data/src/main/java/org/sunflow/core/filter/MitchellFilter.java +28 -0
  116. data/src/main/java/org/sunflow/core/filter/SincFilter.java +25 -0
  117. data/src/main/java/org/sunflow/core/filter/TriangleFilter.java +16 -0
  118. data/src/main/java/org/sunflow/core/gi/AmbientOcclusionGIEngine.java +57 -0
  119. data/src/main/java/org/sunflow/core/gi/FakeGIEngine.java +48 -0
  120. data/src/main/java/org/sunflow/core/gi/InstantGI.java +194 -0
  121. data/src/main/java/org/sunflow/core/gi/IrradianceCacheGIEngine.java +268 -0
  122. data/src/main/java/org/sunflow/core/gi/PathTracingGIEngine.java +65 -0
  123. data/src/main/java/org/sunflow/core/light/DirectionalSpotlight.java +103 -0
  124. data/src/main/java/org/sunflow/core/light/ImageBasedLight.java +303 -0
  125. data/src/main/java/org/sunflow/core/light/PointLight.java +72 -0
  126. data/src/main/java/org/sunflow/core/light/SphereLight.java +166 -0
  127. data/src/main/java/org/sunflow/core/light/SunSkyLight.java +362 -0
  128. data/src/main/java/org/sunflow/core/light/TriangleMeshLight.java +296 -0
  129. data/src/main/java/org/sunflow/core/modifiers/BumpMappingModifier.java +37 -0
  130. data/src/main/java/org/sunflow/core/modifiers/NormalMapModifier.java +34 -0
  131. data/src/main/java/org/sunflow/core/modifiers/PerlinModifier.java +80 -0
  132. data/src/main/java/org/sunflow/core/parser/Keyword.java +39 -0
  133. data/src/main/java/org/sunflow/core/parser/RA2Parser.java +107 -0
  134. data/src/main/java/org/sunflow/core/parser/RA3Parser.java +68 -0
  135. data/src/main/java/org/sunflow/core/parser/SCAbstractParser.java +299 -0
  136. data/src/main/java/org/sunflow/core/parser/SCAsciiParser.java +251 -0
  137. data/src/main/java/org/sunflow/core/parser/SCBinaryParser.java +156 -0
  138. data/src/main/java/org/sunflow/core/parser/SCParser.java +1403 -0
  139. data/src/main/java/org/sunflow/core/parser/ShaveRibParser.java +174 -0
  140. data/src/main/java/org/sunflow/core/parser/TriParser.java +79 -0
  141. data/src/main/java/org/sunflow/core/photonmap/CausticPhotonMap.java +429 -0
  142. data/src/main/java/org/sunflow/core/photonmap/GlobalPhotonMap.java +530 -0
  143. data/src/main/java/org/sunflow/core/photonmap/GridPhotonMap.java +308 -0
  144. data/src/main/java/org/sunflow/core/primitive/Background.java +55 -0
  145. data/src/main/java/org/sunflow/core/primitive/BanchoffSurface.java +100 -0
  146. data/src/main/java/org/sunflow/core/primitive/Box.java +210 -0
  147. data/src/main/java/org/sunflow/core/primitive/CornellBox.java +476 -0
  148. data/src/main/java/org/sunflow/core/primitive/CubeGrid.java +318 -0
  149. data/src/main/java/org/sunflow/core/primitive/Cylinder.java +104 -0
  150. data/src/main/java/org/sunflow/core/primitive/Hair.java +275 -0
  151. data/src/main/java/org/sunflow/core/primitive/JuliaFractal.java +266 -0
  152. data/src/main/java/org/sunflow/core/primitive/ParticleSurface.java +114 -0
  153. data/src/main/java/org/sunflow/core/primitive/Plane.java +163 -0
  154. data/src/main/java/org/sunflow/core/primitive/QuadMesh.java +413 -0
  155. data/src/main/java/org/sunflow/core/primitive/Sphere.java +101 -0
  156. data/src/main/java/org/sunflow/core/primitive/SphereFlake.java +234 -0
  157. data/src/main/java/org/sunflow/core/primitive/Torus.java +145 -0
  158. data/src/main/java/org/sunflow/core/primitive/TriangleMesh.java +849 -0
  159. data/src/main/java/org/sunflow/core/renderer/BucketRenderer.java +491 -0
  160. data/src/main/java/org/sunflow/core/renderer/MultipassRenderer.java +237 -0
  161. data/src/main/java/org/sunflow/core/renderer/ProgressiveRenderer.java +171 -0
  162. data/src/main/java/org/sunflow/core/renderer/SimpleRenderer.java +106 -0
  163. data/src/main/java/org/sunflow/core/shader/AmbientOcclusionShader.java +53 -0
  164. data/src/main/java/org/sunflow/core/shader/AnisotropicWardShader.java +216 -0
  165. data/src/main/java/org/sunflow/core/shader/ConstantShader.java +31 -0
  166. data/src/main/java/org/sunflow/core/shader/DiffuseShader.java +65 -0
  167. data/src/main/java/org/sunflow/core/shader/GlassShader.java +147 -0
  168. data/src/main/java/org/sunflow/core/shader/IDShader.java +27 -0
  169. data/src/main/java/org/sunflow/core/shader/MirrorShader.java +68 -0
  170. data/src/main/java/org/sunflow/core/shader/NormalShader.java +32 -0
  171. data/src/main/java/org/sunflow/core/shader/PhongShader.java +89 -0
  172. data/src/main/java/org/sunflow/core/shader/PrimIDShader.java +30 -0
  173. data/src/main/java/org/sunflow/core/shader/QuickGrayShader.java +63 -0
  174. data/src/main/java/org/sunflow/core/shader/ShinyDiffuseShader.java +98 -0
  175. data/src/main/java/org/sunflow/core/shader/SimpleShader.java +24 -0
  176. data/src/main/java/org/sunflow/core/shader/TexturedAmbientOcclusionShader.java +31 -0
  177. data/src/main/java/org/sunflow/core/shader/TexturedDiffuseShader.java +31 -0
  178. data/src/main/java/org/sunflow/core/shader/TexturedPhongShader.java +31 -0
  179. data/src/main/java/org/sunflow/core/shader/TexturedShinyDiffuseShader.java +31 -0
  180. data/src/main/java/org/sunflow/core/shader/TexturedWardShader.java +31 -0
  181. data/src/main/java/org/sunflow/core/shader/UVShader.java +27 -0
  182. data/src/main/java/org/sunflow/core/shader/UberShader.java +149 -0
  183. data/src/main/java/org/sunflow/core/shader/ViewCausticsShader.java +33 -0
  184. data/src/main/java/org/sunflow/core/shader/ViewGlobalPhotonsShader.java +25 -0
  185. data/src/main/java/org/sunflow/core/shader/ViewIrradianceShader.java +25 -0
  186. data/src/main/java/org/sunflow/core/shader/WireframeShader.java +83 -0
  187. data/src/main/java/org/sunflow/core/tesselatable/BezierMesh.java +254 -0
  188. data/src/main/java/org/sunflow/core/tesselatable/FileMesh.java +251 -0
  189. data/src/main/java/org/sunflow/core/tesselatable/Gumbo.java +1147 -0
  190. data/src/main/java/org/sunflow/core/tesselatable/Teapot.java +237 -0
  191. data/src/main/java/org/sunflow/image/Bitmap.java +15 -0
  192. data/src/main/java/org/sunflow/image/BitmapReader.java +39 -0
  193. data/src/main/java/org/sunflow/image/BitmapWriter.java +79 -0
  194. data/src/main/java/org/sunflow/image/BlackbodySpectrum.java +16 -0
  195. data/src/main/java/org/sunflow/image/ChromaticitySpectrum.java +55 -0
  196. data/src/main/java/org/sunflow/image/Color.java +374 -0
  197. data/src/main/java/org/sunflow/image/ColorEncoder.java +94 -0
  198. data/src/main/java/org/sunflow/image/ColorFactory.java +122 -0
  199. data/src/main/java/org/sunflow/image/ConstantSpectralCurve.java +21 -0
  200. data/src/main/java/org/sunflow/image/IrregularSpectralCurve.java +57 -0
  201. data/src/main/java/org/sunflow/image/RGBSpace.java +207 -0
  202. data/src/main/java/org/sunflow/image/RegularSpectralCurve.java +30 -0
  203. data/src/main/java/org/sunflow/image/SpectralCurve.java +118 -0
  204. data/src/main/java/org/sunflow/image/XYZColor.java +50 -0
  205. data/src/main/java/org/sunflow/image/formats/BitmapBlack.java +27 -0
  206. data/src/main/java/org/sunflow/image/formats/BitmapG8.java +36 -0
  207. data/src/main/java/org/sunflow/image/formats/BitmapGA8.java +30 -0
  208. data/src/main/java/org/sunflow/image/formats/BitmapRGB8.java +40 -0
  209. data/src/main/java/org/sunflow/image/formats/BitmapRGBA8.java +40 -0
  210. data/src/main/java/org/sunflow/image/formats/BitmapRGBE.java +60 -0
  211. data/src/main/java/org/sunflow/image/formats/BitmapXYZ.java +38 -0
  212. data/src/main/java/org/sunflow/image/formats/GenericBitmap.java +73 -0
  213. data/src/main/java/org/sunflow/image/readers/BMPBitmapReader.java +39 -0
  214. data/src/main/java/org/sunflow/image/readers/HDRBitmapReader.java +155 -0
  215. data/src/main/java/org/sunflow/image/readers/IGIBitmapReader.java +104 -0
  216. data/src/main/java/org/sunflow/image/readers/JPGBitmapReader.java +39 -0
  217. data/src/main/java/org/sunflow/image/readers/PNGBitmapReader.java +40 -0
  218. data/src/main/java/org/sunflow/image/readers/TGABitmapReader.java +141 -0
  219. data/src/main/java/org/sunflow/image/writers/EXRBitmapWriter.java +395 -0
  220. data/src/main/java/org/sunflow/image/writers/HDRBitmapWriter.java +54 -0
  221. data/src/main/java/org/sunflow/image/writers/IGIBitmapWriter.java +75 -0
  222. data/src/main/java/org/sunflow/image/writers/PNGBitmapWriter.java +39 -0
  223. data/src/main/java/org/sunflow/image/writers/TGABitmapWriter.java +63 -0
  224. data/src/main/java/org/sunflow/math/BoundingBox.java +340 -0
  225. data/src/main/java/org/sunflow/math/MathUtils.java +159 -0
  226. data/src/main/java/org/sunflow/math/Matrix4.java +573 -0
  227. data/src/main/java/org/sunflow/math/MovingMatrix4.java +119 -0
  228. data/src/main/java/org/sunflow/math/OrthoNormalBasis.java +110 -0
  229. data/src/main/java/org/sunflow/math/PerlinScalar.java +331 -0
  230. data/src/main/java/org/sunflow/math/PerlinVector.java +132 -0
  231. data/src/main/java/org/sunflow/math/Point2.java +36 -0
  232. data/src/main/java/org/sunflow/math/Point3.java +133 -0
  233. data/src/main/java/org/sunflow/math/QMC.java +209 -0
  234. data/src/main/java/org/sunflow/math/Solvers.java +142 -0
  235. data/src/main/java/org/sunflow/math/Vector3.java +197 -0
  236. data/src/main/java/org/sunflow/system/BenchmarkFramework.java +73 -0
  237. data/src/main/java/org/sunflow/system/BenchmarkTest.java +17 -0
  238. data/src/main/java/org/sunflow/system/ByteUtil.java +119 -0
  239. data/src/main/java/org/sunflow/system/FileUtils.java +27 -0
  240. data/src/main/java/org/sunflow/system/ImagePanel.java +282 -0
  241. data/src/main/java/org/sunflow/system/Memory.java +18 -0
  242. data/src/main/java/org/sunflow/system/Parser.java +162 -0
  243. data/src/main/java/org/sunflow/system/Plugins.java +142 -0
  244. data/src/main/java/org/sunflow/system/RenderGlobalsPanel.java +209 -0
  245. data/src/main/java/org/sunflow/system/SearchPath.java +67 -0
  246. data/src/main/java/org/sunflow/system/Timer.java +53 -0
  247. data/src/main/java/org/sunflow/system/UI.java +112 -0
  248. data/src/main/java/org/sunflow/system/UserInterface.java +46 -0
  249. data/src/main/java/org/sunflow/system/ui/ConsoleInterface.java +48 -0
  250. data/src/main/java/org/sunflow/system/ui/SilentInterface.java +28 -0
  251. data/src/main/java/org/sunflow/util/FastHashMap.java +220 -0
  252. data/src/main/java/org/sunflow/util/FloatArray.java +77 -0
  253. data/src/main/java/org/sunflow/util/IntArray.java +77 -0
  254. data/src/test/java/a_maintest.java +129 -0
  255. metadata +300 -0
@@ -0,0 +1,142 @@
1
+ package org.sunflow.system;
2
+
3
+ import org.codehaus.janino.ClassBodyEvaluator;
4
+ import org.codehaus.commons.compiler.CompileException;
5
+ import org.sunflow.system.UI.Module;
6
+ import org.sunflow.util.FastHashMap;
7
+
8
+ /**
9
+ * This class represents a list of plugins which implement a certain interface
10
+ * or extend a certain class. Many plugins may be registered and created at a
11
+ * later time by recalling their unique name only.
12
+ *
13
+ * @param <T> Default constructible type or interface all plugins will derive
14
+ * from or implement
15
+ */
16
+ public final class Plugins<T> {
17
+
18
+ private final FastHashMap<String, Class<? extends T>> pluginClasses;
19
+ private final Class<T> baseClass;
20
+
21
+ /**
22
+ * Create an empty plugin list. You must specify <code>T.class</code> as an
23
+ * argument.
24
+ *
25
+ * @param baseClass
26
+ */
27
+ public Plugins(Class<T> baseClass) {
28
+ pluginClasses = new FastHashMap<>();
29
+ this.baseClass = baseClass;
30
+ }
31
+
32
+ /**
33
+ * Create an object from the specified type name. If this type name is
34
+ * unknown or invalid, <code>null</code> is returned.
35
+ *
36
+ * @param name plugin type name
37
+ * @return an instance of the specified plugin type, or <code>null</code> if
38
+ * not found or invalid
39
+ */
40
+ public T createObject(String name) {
41
+ if (name == null || name.equals("none")) {
42
+ return null;
43
+ }
44
+ Class<? extends T> c = pluginClasses.get(name);
45
+ if (c == null) {
46
+ // don't print an error, this will be handled by the caller
47
+ return null;
48
+ }
49
+ try {
50
+ return c.newInstance();
51
+ } catch (InstantiationException | IllegalAccessException e) {
52
+ UI.printError(Module.API, "Cannot create object of type \"%s\" - %s", name, e.getLocalizedMessage());
53
+ return null;
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Check this plugin list for the presence of the specified type name
59
+ *
60
+ * @param name plugin type name
61
+ * @return <code>true</code> if this name has been registered,
62
+ * <code>false</code> otherwise
63
+ */
64
+ public boolean hasType(String name) {
65
+ return pluginClasses.get(name) != null;
66
+ }
67
+
68
+ /**
69
+ * Generate a unique plugin type name which has not yet been registered.
70
+ * This is meant to be used when the actual type name is not crucial, but
71
+ * succesfully registration is.
72
+ *
73
+ * @param prefix a prefix to be used in generating the unique name
74
+ * @return a unique plugin type name not yet in use
75
+ */
76
+ public String generateUniqueName(String prefix) {
77
+ String type;
78
+ for (int i = 1; hasType(type = String.format("%s_%d", prefix, i)); i++) {
79
+ }
80
+ return type;
81
+ }
82
+
83
+ /**
84
+ * Define a new plugin type from java source code. The code string contains
85
+ * import declarations and a class body only. The implemented type is
86
+ * implicitly the one of the plugin list being registered against.If the
87
+ * plugin type name was previously associated with a different class, it
88
+ * will be overriden. This allows the behavior core classes to be modified
89
+ * at runtime.
90
+ *
91
+ * @param name plugin type name
92
+ * @param sourceCode Java source code definition for the plugin
93
+ * @return <code>true</code> if the code compiled and registered
94
+ * successfully, <code>false</code> otherwise
95
+ */
96
+ // @SuppressWarnings("unchecked")
97
+ public boolean registerPlugin(String name, String sourceCode) {
98
+ try {
99
+ ClassBodyEvaluator cbe = new ClassBodyEvaluator();
100
+ cbe.setClassName(name);
101
+ cbe.setExtendedClass(baseClass);
102
+ cbe.cook(sourceCode);
103
+ return registerPlugin(name, cbe.getClazz());
104
+ } catch (CompileException e) {
105
+ UI.printError(Module.API, "Plugin \"%s\" could not be declared - %s", name, e.getLocalizedMessage());
106
+ return false;
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Define a new plugin type from an existing class. This checks to make sure
112
+ * the provided class is default constructible (ie: has a constructor with
113
+ * no parameters). If the plugin type name was previously associated with a
114
+ * different class, it will be overriden. This allows the behavior core
115
+ * classes to be modified at runtime.
116
+ *
117
+ * @param name plugin type name
118
+ * @param pluginClass class object for the plugin class
119
+ * @return <code>true</code> if the plugin registered successfully,
120
+ * <code>false</code> otherwise
121
+ */
122
+ public boolean registerPlugin(String name, Class<?> pluginClass) {
123
+ // check that the given class is compatible with the base class
124
+ try {
125
+ if (pluginClass.getConstructor() == null) {
126
+ UI.printError(Module.API, "Plugin \"%s\" could not be declared - default constructor was not found", name);
127
+ return false;
128
+ }
129
+ } catch (SecurityException e) {
130
+ UI.printError(Module.API, "Plugin \"%s\" could not be declared - default constructor is not visible (%s)", name, e.getLocalizedMessage());
131
+ return false;
132
+ } catch (NoSuchMethodException e) {
133
+ UI.printError(Module.API, "Plugin \"%s\" could not be declared - default constructor was not found (%s)", name, e.getLocalizedMessage());
134
+ return false;
135
+ }
136
+ if (pluginClasses.get(name) != null) {
137
+ UI.printWarning(Module.API, "Plugin \"%s\" was already defined - overwriting previous definition", name);
138
+ }
139
+ pluginClasses.put(name, (Class<? extends T>) pluginClass);
140
+ return true;
141
+ }
142
+ }
@@ -0,0 +1,209 @@
1
+ package org.sunflow.system;
2
+
3
+ import java.awt.Dimension;
4
+ import java.awt.FlowLayout;
5
+ import java.awt.GridLayout;
6
+ import java.util.logging.Level;
7
+ import java.util.logging.Logger;
8
+
9
+ import javax.swing.BorderFactory;
10
+ import javax.swing.BoxLayout;
11
+ import javax.swing.ComboBoxModel;
12
+ import javax.swing.DefaultComboBoxModel;
13
+ import javax.swing.JCheckBox;
14
+ import javax.swing.JComboBox;
15
+ import javax.swing.JFrame;
16
+ import javax.swing.JLabel;
17
+ import javax.swing.JPanel;
18
+ import javax.swing.JRadioButton;
19
+ import javax.swing.JTabbedPane;
20
+ import javax.swing.JTextField;
21
+ import javax.swing.WindowConstants;
22
+ import javax.swing.border.BevelBorder;
23
+ import javax.swing.border.TitledBorder;
24
+
25
+ /**
26
+ * This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
27
+ * Builder, which is free for non-commercial use. If Jigloo is being used
28
+ * commercially (ie, by a corporation, company or business for any purpose
29
+ * whatever) then you should purchase a license for each developer using Jigloo.
30
+ * Please visit www.cloudgarden.com for details. Use of Jigloo implies
31
+ * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
32
+ * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
33
+ * ANY CORPORATE OR COMMERCIAL PURPOSE.
34
+ */
35
+ @SuppressWarnings("serial")
36
+ public class RenderGlobalsPanel extends JTabbedPane {
37
+
38
+ private JPanel generalPanel;
39
+ private JComboBox<String> maxSamplingComboxBox;
40
+ private JPanel samplingPanel;
41
+ private JComboBox<String> minSamplingComboBox;
42
+ private JLabel jLabel6;
43
+ private JLabel jLabel5;
44
+ private JRadioButton defaultRendererRadioButton;
45
+ private JRadioButton bucketRendererRadioButton;
46
+ private JPanel bucketRendererPanel;
47
+ private JLabel jLabel2;
48
+ private JPanel rendererPanel;
49
+ private JTextField threadTextField;
50
+ private JCheckBox threadCheckBox;
51
+ private JLabel jLabel3;
52
+ private JPanel threadsPanel;
53
+ private JLabel jLabel1;
54
+ private JPanel resolutionPanel;
55
+ private JTextField resolutionYTextField;
56
+ private JTextField resolutionXTextField;
57
+ private JCheckBox resolutionCheckBox;
58
+
59
+ /**
60
+ * This method initializes this
61
+ */
62
+ private void initialize() {
63
+ }
64
+
65
+ /**
66
+ * Auto-generated main method to display this JPanel inside a new JFrame.
67
+ */
68
+ public static void main(String[] args) {
69
+ JFrame frame = new JFrame();
70
+ frame.getContentPane().add(new RenderGlobalsPanel());
71
+ frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
72
+ frame.pack();
73
+ frame.setVisible(true);
74
+ }
75
+
76
+ public RenderGlobalsPanel() {
77
+ super();
78
+ initialize();
79
+ initGUI();
80
+ }
81
+
82
+ private void initGUI() {
83
+ try {
84
+ setPreferredSize(new Dimension(400, 300));
85
+ {
86
+ generalPanel = new JPanel();
87
+ FlowLayout generalPanelLayout = new FlowLayout();
88
+ generalPanelLayout.setAlignment(FlowLayout.LEFT);
89
+ generalPanel.setLayout(generalPanelLayout);
90
+ this.addTab("General", null, generalPanel, null);
91
+ {
92
+ resolutionPanel = new JPanel();
93
+ generalPanel.add(resolutionPanel);
94
+ FlowLayout resolutionPanelLayout = new FlowLayout();
95
+ resolutionPanel.setLayout(resolutionPanelLayout);
96
+ resolutionPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED), "Resolution", TitledBorder.LEADING, TitledBorder.TOP));
97
+ {
98
+ resolutionCheckBox = new JCheckBox();
99
+ resolutionPanel.add(resolutionCheckBox);
100
+ resolutionCheckBox.setText("Override");
101
+ }
102
+ {
103
+ jLabel1 = new JLabel();
104
+ resolutionPanel.add(jLabel1);
105
+ jLabel1.setText("Image Width:");
106
+ }
107
+ {
108
+ resolutionXTextField = new JTextField();
109
+ resolutionPanel.add(resolutionXTextField);
110
+ resolutionXTextField.setText("640");
111
+ resolutionXTextField.setPreferredSize(new java.awt.Dimension(50, 20));
112
+ }
113
+ {
114
+ jLabel2 = new JLabel();
115
+ resolutionPanel.add(jLabel2);
116
+ jLabel2.setText("Image Height:");
117
+ }
118
+ {
119
+ resolutionYTextField = new JTextField();
120
+ resolutionPanel.add(resolutionYTextField);
121
+ resolutionYTextField.setText("480");
122
+ resolutionYTextField.setPreferredSize(new java.awt.Dimension(50, 20));
123
+ }
124
+ }
125
+ {
126
+ threadsPanel = new JPanel();
127
+ generalPanel.add(threadsPanel);
128
+ threadsPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED), "Threads", TitledBorder.LEADING, TitledBorder.TOP));
129
+ {
130
+ threadCheckBox = new JCheckBox();
131
+ threadsPanel.add(threadCheckBox);
132
+ threadCheckBox.setText("Use All Processors");
133
+ }
134
+ {
135
+ jLabel3 = new JLabel();
136
+ threadsPanel.add(jLabel3);
137
+ jLabel3.setText("Threads:");
138
+ }
139
+ {
140
+ threadTextField = new JTextField();
141
+ threadsPanel.add(threadTextField);
142
+ threadTextField.setText("1");
143
+ threadTextField.setPreferredSize(new java.awt.Dimension(50, 20));
144
+ }
145
+ }
146
+ }
147
+ {
148
+ rendererPanel = new JPanel();
149
+ FlowLayout rendererPanelLayout = new FlowLayout();
150
+ rendererPanelLayout.setAlignment(FlowLayout.LEFT);
151
+ rendererPanel.setLayout(rendererPanelLayout);
152
+ this.addTab("Renderer", null, rendererPanel, null);
153
+ {
154
+ defaultRendererRadioButton = new JRadioButton();
155
+ rendererPanel.add(defaultRendererRadioButton);
156
+ defaultRendererRadioButton.setText("Default Renderer");
157
+ }
158
+ {
159
+ bucketRendererPanel = new JPanel();
160
+ BoxLayout bucketRendererPanelLayout = new BoxLayout(bucketRendererPanel, javax.swing.BoxLayout.Y_AXIS);
161
+ bucketRendererPanel.setLayout(bucketRendererPanelLayout);
162
+ rendererPanel.add(bucketRendererPanel);
163
+ bucketRendererPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED), "Bucket Renderer", TitledBorder.LEADING, TitledBorder.TOP));
164
+ {
165
+ bucketRendererRadioButton = new JRadioButton();
166
+ bucketRendererPanel.add(bucketRendererRadioButton);
167
+ bucketRendererRadioButton.setText("Enable");
168
+ }
169
+ {
170
+ samplingPanel = new JPanel();
171
+ GridLayout samplingPanelLayout = new GridLayout(2, 2);
172
+ samplingPanelLayout.setColumns(2);
173
+ samplingPanelLayout.setHgap(5);
174
+ samplingPanelLayout.setVgap(5);
175
+ samplingPanelLayout.setRows(2);
176
+ samplingPanel.setLayout(samplingPanelLayout);
177
+ bucketRendererPanel.add(samplingPanel);
178
+ {
179
+ jLabel5 = new JLabel();
180
+ samplingPanel.add(jLabel5);
181
+ jLabel5.setText("Min:");
182
+ }
183
+ {
184
+ ComboBoxModel<String> minSamplingComboBoxModel = new DefaultComboBoxModel<String>(new String[]{
185
+ "Item One", "Item Two"});
186
+ minSamplingComboBox = new JComboBox<String>();
187
+ samplingPanel.add(minSamplingComboBox);
188
+ minSamplingComboBox.setModel(minSamplingComboBoxModel);
189
+ }
190
+ {
191
+ jLabel6 = new JLabel();
192
+ samplingPanel.add(jLabel6);
193
+ jLabel6.setText("Max:");
194
+ }
195
+ {
196
+ ComboBoxModel<String> maxSamplingComboxBoxModel = new DefaultComboBoxModel<String>(new String[]{
197
+ "Item One", "Item Two"});
198
+ maxSamplingComboxBox = new JComboBox<String>();
199
+ samplingPanel.add(maxSamplingComboxBox);
200
+ maxSamplingComboxBox.setModel(maxSamplingComboxBoxModel);
201
+ }
202
+ }
203
+ }
204
+ }
205
+ } catch (Exception e) {
206
+ Logger.getLogger(RenderGlobalsPanel.class.getName()).log(Level.SEVERE, null, e);
207
+ }
208
+ }
209
+ }
@@ -0,0 +1,67 @@
1
+ package org.sunflow.system;
2
+
3
+ import java.io.File;
4
+ import java.io.IOException;
5
+ import java.util.LinkedList;
6
+
7
+ import org.sunflow.system.UI.Module;
8
+
9
+ public class SearchPath {
10
+
11
+ private final LinkedList<String> searchPath;
12
+ private final String type;
13
+
14
+ public SearchPath(String type) {
15
+ this.type = type;
16
+ searchPath = new LinkedList<>();
17
+ }
18
+
19
+ public void resetSearchPath() {
20
+ searchPath.clear();
21
+ }
22
+
23
+ public void addSearchPath(String path) {
24
+ File f = new File(path);
25
+ if (f.exists() && f.isDirectory()) {
26
+ try {
27
+ path = f.getCanonicalPath();
28
+ for (String prefix : searchPath) {
29
+ if (prefix.equals(path)) {
30
+ return;
31
+ }
32
+ }
33
+ UI.printInfo(Module.SYS, "Adding %s search path: \"%s\"", type, path);
34
+ searchPath.add(path);
35
+ } catch (IOException e) {
36
+ UI.printError(Module.SYS, "Invalid %s search path specification: \"%s\" - %s", type, path, e.getMessage());
37
+ }
38
+ } else {
39
+ UI.printError(Module.SYS, "Invalid %s search path specification: \"%s\" - invalid directory", type, path);
40
+ }
41
+ }
42
+
43
+ public String resolvePath(String filename) {
44
+ // account for relative naming schemes from 3rd party softwares
45
+ if (filename.startsWith("//")) {
46
+ filename = filename.substring(2);
47
+ }
48
+ UI.printDetailed(Module.SYS, "Resolving %s path \"%s\" ...", type, filename);
49
+ File f = new File(filename);
50
+ if (!f.isAbsolute()) {
51
+ for (String prefix : searchPath) {
52
+ UI.printDetailed(Module.SYS, " * searching: \"%s\" ...", prefix);
53
+ if (prefix.endsWith(File.separator) || filename.startsWith(File.separator)) {
54
+ f = new File(prefix + filename);
55
+ } else {
56
+ f = new File(prefix + File.separator + filename);
57
+ }
58
+ if (f.exists()) {
59
+ // suggested path exists - try it
60
+ return f.getAbsolutePath();
61
+ }
62
+ }
63
+ }
64
+ // file was not found in the search paths - return the filename itself
65
+ return filename;
66
+ }
67
+ }
@@ -0,0 +1,53 @@
1
+ package org.sunflow.system;
2
+
3
+ public class Timer {
4
+
5
+ private long startTime, endTime;
6
+
7
+ public Timer() {
8
+ startTime = endTime = 0;
9
+ }
10
+
11
+ public void start() {
12
+ startTime = endTime = System.nanoTime();
13
+ }
14
+
15
+ public void end() {
16
+ endTime = System.nanoTime();
17
+ }
18
+
19
+ public long nanos() {
20
+ return endTime - startTime;
21
+ }
22
+
23
+ public double seconds() {
24
+ return (endTime - startTime) * 1e-9;
25
+ }
26
+
27
+ public static String toString(long nanos) {
28
+ Timer t = new Timer();
29
+ t.endTime = nanos;
30
+ return t.toString();
31
+ }
32
+
33
+ public static String toString(double seconds) {
34
+ Timer t = new Timer();
35
+ t.endTime = (long) (seconds * 1e9);
36
+ return t.toString();
37
+ }
38
+
39
+ @Override
40
+ public String toString() {
41
+ long millis = nanos() / (1000 * 1000);
42
+ if (millis < 10000) {
43
+ return String.format("%dms", millis);
44
+ }
45
+ long hours = millis / (60 * 60 * 1000);
46
+ millis -= hours * 60 * 60 * 1000;
47
+ long minutes = millis / (60 * 1000);
48
+ millis -= minutes * 60 * 1000;
49
+ long seconds = millis / 1000;
50
+ millis -= seconds * 1000;
51
+ return String.format("%d:%02d:%02d.%1d", hours, minutes, seconds, millis / 100);
52
+ }
53
+ }