picrate 2.3.0-java → 2.5.0-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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -1
  3. data/Gemfile +1 -1
  4. data/README.md +2 -2
  5. data/Rakefile +1 -1
  6. data/docs/.gitignore +1 -0
  7. data/docs/_classes/{app_render → gfx_render}/app_render.md +5 -5
  8. data/docs/_methods/{noise_mode.md → noise_modes.md} +9 -21
  9. data/docs/_posts/2018-05-06-install_jruby.md +5 -5
  10. data/docs/_posts/2019-11-11-getting_started_buster.md +1 -1
  11. data/lib/picrate/app.rb +3 -7
  12. data/lib/picrate/native_folder.rb +1 -1
  13. data/lib/picrate/version.rb +1 -1
  14. data/lib/{picrate-2.3.0.jar → picrate-2.5.0.jar} +0 -0
  15. data/{lib → library/pdf}/itextpdf-5.5.13.2.jar +0 -0
  16. data/library/pdf/pdf.rb +1 -0
  17. data/library/svg/batik-all-1.14.jar +0 -0
  18. data/library/svg/svg.rb +7 -0
  19. data/picrate.gemspec +4 -3
  20. data/pom.rb +19 -10
  21. data/pom.xml +19 -6
  22. data/src/main/java/monkstone/FastNoiseModuleJava.java +127 -0
  23. data/src/main/java/monkstone/PicrateLibrary.java +2 -0
  24. data/src/main/java/monkstone/SmoothNoiseModuleJava.java +127 -0
  25. data/src/main/java/monkstone/noise/OpenSimplex2F.java +62 -29
  26. data/src/main/java/monkstone/noise/OpenSimplex2S.java +1138 -1106
  27. data/src/main/java/monkstone/vecmath/GfxRender.java +10 -11
  28. data/src/main/java/monkstone/vecmath/JRender.java +7 -7
  29. data/src/main/java/monkstone/vecmath/ShapeRender.java +3 -4
  30. data/src/main/java/monkstone/vecmath/vec2/Vec2.java +28 -40
  31. data/src/main/java/monkstone/vecmath/vec3/Vec3.java +30 -45
  32. data/src/main/java/processing/awt/PImageAWT.java +1 -1
  33. data/src/main/java/processing/awt/ShimAWT.java +1 -1
  34. data/src/main/java/processing/core/PApplet.java +1 -92
  35. data/src/main/java/processing/core/PImage.java +14 -14
  36. data/src/main/java/processing/opengl/PShader.java +0 -6
  37. data/src/main/java/processing/pdf/PGraphicsPDF.java +61 -139
  38. data/src/main/java/processing/svg/PGraphicsSVG.java +378 -0
  39. data/test/noise_test.rb +17 -0
  40. data/test/respond_to_test.rb +0 -1
  41. data/test/test_helper.rb +1 -1
  42. data/vendors/Rakefile +1 -1
  43. metadata +21 -32
  44. data/src/main/java/japplemenubar/JAppleMenuBar.java +0 -96
  45. data/src/main/java/japplemenubar/libjAppleMenuBar.jnilib +0 -0
  46. data/src/main/java/monkstone/complex/JComplex.java +0 -252
  47. data/src/main/java/monkstone/noise/FastTerrain.java +0 -874
  48. data/src/main/java/monkstone/noise/Noise.java +0 -90
  49. data/src/main/java/monkstone/noise/NoiseGenerator.java +0 -75
  50. data/src/main/java/monkstone/noise/NoiseMode.java +0 -28
  51. data/src/main/java/monkstone/noise/SmoothTerrain.java +0 -1099
  52. data/src/main/java/monkstone/vecmath/AppRender.java +0 -88
  53. data/src/main/java/monkstone/vecmath/package-info.java +0 -20
  54. data/src/main/java/monkstone/vecmath/vec2/package-info.java +0 -6
  55. data/src/main/java/monkstone/vecmath/vec3/package-info.java +0 -6
@@ -0,0 +1,127 @@
1
+ /*
2
+ * To change this license header, choose License Headers in Project Properties.
3
+ * To change this template file, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+ package monkstone;
7
+
8
+ import monkstone.noise.OpenSimplex2S;
9
+ import org.jruby.Ruby;
10
+ import org.jruby.RubyFixnum;
11
+ import org.jruby.RubyFloat;
12
+ import org.jruby.RubyModule;
13
+ import org.jruby.anno.JRubyMethod;
14
+ import org.jruby.anno.JRubyModule;
15
+ import org.jruby.runtime.ThreadContext;
16
+ import org.jruby.runtime.builtin.IRubyObject;
17
+
18
+ /**
19
+ *
20
+ * @author Martin Prout
21
+ */
22
+ @JRubyModule(name = "SmoothNoise")
23
+ public class SmoothNoiseModuleJava {
24
+
25
+ static OpenSimplex2S ng = new OpenSimplex2S(System.currentTimeMillis());
26
+
27
+ /**
28
+ *
29
+ * @param runtime Ruby
30
+ */
31
+ public static void createNoiseModule(Ruby runtime) {
32
+ RubyModule noiseModule = runtime.defineModule("SmoothNoise");
33
+ noiseModule.defineAnnotatedMethods(SmoothNoiseModuleJava.class);
34
+ }
35
+
36
+ /**
37
+ *
38
+ * @param context ThreadContext
39
+ * @param recv IRubyObject
40
+ * @param args array of numeric values
41
+ * @return mapped value RubyFloat
42
+ */
43
+ @JRubyMethod(name = "tnoise", rest = true, module = true)
44
+ public static IRubyObject terrainNoiseImpl(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
45
+ double result = 0;
46
+ double one;
47
+ double two;
48
+ double three;
49
+ double four;
50
+ switch (args.length) {
51
+ case 2:
52
+ two = args[1] instanceof RubyFloat ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
53
+ one = args[0] instanceof RubyFloat ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
54
+ result = ng.noise2_XBeforeY(one, two);
55
+ break;
56
+ case 3:
57
+ three = args[2] instanceof RubyFloat ? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
58
+ two = args[1] instanceof RubyFloat ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
59
+ one = args[0] instanceof RubyFloat ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
60
+ result = ng.noise3_XYBeforeZ(one, two, three);
61
+ break;
62
+ case 4:
63
+ four = args[3] instanceof RubyFloat ? ((RubyFloat) args[3]).getValue() : ((RubyFixnum) args[3]).getDoubleValue();
64
+ three = args[2] instanceof RubyFloat ? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
65
+ two = args[1] instanceof RubyFloat ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
66
+ one = args[0] instanceof RubyFloat ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
67
+ result = ng.noise4_XYBeforeZW(one, two, three, four);
68
+ break;
69
+ default:
70
+ throw new RuntimeException("Min 2D Max 4D Noise");
71
+ }
72
+ return RubyFloat.newFloat(context.runtime, result);
73
+ }
74
+
75
+ /**
76
+ *
77
+ * @param context ThreadContext
78
+ * @param recv IRubyObject
79
+ * @param args array of numeric values
80
+ * @return mapped value RubyFloat
81
+ */
82
+ @JRubyMethod(name = "noise", rest = true, module = true)
83
+ public static IRubyObject noiseImpl(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
84
+ double result = 0;
85
+ double one;
86
+ double two;
87
+ double three;
88
+ double four;
89
+ switch (args.length) {
90
+ case 1:
91
+ one = args[0] instanceof RubyFloat ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
92
+ result = ng.noise2(one, 0);
93
+ break;
94
+ case 2:
95
+ two = args[1] instanceof RubyFloat ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
96
+ one = args[0] instanceof RubyFloat ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
97
+ result = ng.noise2(one, two);
98
+ break;
99
+ case 3:
100
+ three = args[2] instanceof RubyFloat ? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
101
+ two = args[1] instanceof RubyFloat ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
102
+ one = args[0] instanceof RubyFloat ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
103
+ result = ng.noise3_Classic(one, two, three);
104
+ break;
105
+ case 4:
106
+ four = args[3] instanceof RubyFloat ? ((RubyFloat) args[3]).getValue() : ((RubyFixnum) args[3]).getDoubleValue();
107
+ three = args[2] instanceof RubyFloat ? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
108
+ two = args[1] instanceof RubyFloat ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
109
+ one = args[0] instanceof RubyFloat ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
110
+ result = ng.noise4_Classic(one, two, three, four);
111
+ break;
112
+ default:
113
+ throw new RuntimeException("Maximum of 4D Noise");
114
+ }
115
+ return RubyFloat.newFloat(context.runtime, result);
116
+ }
117
+ // @JRubyMethod(name = "noise_seed", rest = true, module = true)
118
+ // public static IRubyObject noiseSeedImpl(ThreadContext context, IRubyObject recv, IRubyObject arg) {
119
+ // long seed;
120
+ // if (arg instanceof RubyNumeric) {
121
+ // seed = ((RubyNumeric) arg).getLongValue();
122
+ // ng = new OpenSimplex2S(seed);
123
+ // return RubyBoolean.newBoolean(context.runtime, true);
124
+ // }
125
+ // return RubyBoolean.newBoolean(context.runtime, false);
126
+ // }
127
+ }
@@ -11,7 +11,7 @@ package monkstone.noise;
11
11
  * Multiple versions of each function are provided. See the documentation above
12
12
  * each, for more info.
13
13
  */
14
- public class OpenSimplex2F implements Noise {
14
+ public class OpenSimplex2F {
15
15
 
16
16
  private static final int PSIZE = 2048;
17
17
  private static final int PMASK = 2047;
@@ -21,6 +21,10 @@ public class OpenSimplex2F implements Noise {
21
21
  private final Grad3[] permGrad3;
22
22
  private final Grad4[] permGrad4;
23
23
 
24
+ /**
25
+ *
26
+ * @param seed
27
+ */
24
28
  public OpenSimplex2F(long seed) {
25
29
  perm = new short[PSIZE];
26
30
  permGrad2 = new Grad2[PSIZE];
@@ -34,7 +38,7 @@ public class OpenSimplex2F implements Noise {
34
38
  seed = seed * 6364136223846793005L + 1442695040888963407L;
35
39
  int r = (int) ((seed + 31) % (i + 1));
36
40
  if (r < 0) {
37
- r += (i + 1);
41
+ r += i + 1;
38
42
  }
39
43
  perm[i] = source[r];
40
44
  permGrad2[i] = GRADIENTS_2D[perm[i]];
@@ -141,6 +145,34 @@ public class OpenSimplex2F implements Noise {
141
145
  return noise3_BCC(xr, yr, zr);
142
146
  }
143
147
 
148
+ /**
149
+ * 3D Re-oriented 4-point BCC noise, with better visual isotropy in (X,
150
+ * Y).Recommended for 3D terrain and time-varied animations.The Z coordinate
151
+ * should always be the "different" coordinate in your use case.If Y is
152
+ * vertical in world coordinates, call noise3_XYBeforeZ(x, z, Y) or use
153
+ * noise3_XZBeforeY.If Z is vertical in world coordinates, call
154
+ * noise3_XYBeforeZ(x, y, Z). For a time varied animation, call
155
+ * noise3_XYBeforeZ(x, y, T).
156
+ *
157
+ * @param x
158
+ * @param y
159
+ * @param z
160
+ * @return
161
+ */
162
+ public double noise3_XYBeforeZ(double x, double y, double z) {
163
+
164
+ // Re-orient the cubic lattices without skewing, to make X and Y triangular like 2D.
165
+ // Orthonormal rotation. Not a skew transform.
166
+ double xy = x + y;
167
+ double s2 = xy * -0.211324865405187;
168
+ double zz = z * 0.577350269189626;
169
+ double xr = x + s2 - zz, yr = y + s2 - zz;
170
+ double zr = xy * 0.577350269189626 + zz;
171
+
172
+ // Evaluate both lattices to form a BCC lattice.
173
+ return noise3_BCC(xr, yr, zr);
174
+ }
175
+
144
176
  /**
145
177
  * 3D Re-oriented 4-point BCC noise, with better visual isotropy in (X,
146
178
  * Z).Recommended for 3D terrain and time-varied animations.The Y coordinate
@@ -213,8 +245,8 @@ public class OpenSimplex2F implements Noise {
213
245
  *
214
246
  * @param x
215
247
  * @param y
216
- * @param z
217
248
  * @param w
249
+ * @param z
218
250
  * @return
219
251
  */
220
252
  public double noise4_Classic(double x, double y, double z, double w) {
@@ -233,8 +265,8 @@ public class OpenSimplex2F implements Noise {
233
265
  * trick.
234
266
  *
235
267
  * @param x
236
- * @param y
237
268
  * @param z
269
+ * @param y
238
270
  * @param w
239
271
  * @return
240
272
  */
@@ -247,15 +279,35 @@ public class OpenSimplex2F implements Noise {
247
279
  return noise4_Base(xs, ys, zs, ws);
248
280
  }
249
281
 
282
+ /**
283
+ * 4D OpenSimplex2F noise, with XZ and YW forming orthogonal
284
+ * triangular-based planes.Recommended for 3D terrain, where X and Z (or Y
285
+ * and W) are horizontal.
286
+ *
287
+ * @param x
288
+ * @param z
289
+ * @param y
290
+ * @param w
291
+ * @return
292
+ */
293
+ public double noise4_XZBeforeYW(double x, double y, double z, double w) {
294
+
295
+ double s2 = (x + z) * -0.178275657951399372 + (y + w) * 0.215623393288842828;
296
+ double t2 = (y + w) * -0.403949762580207112 + (x + z) * -0.375199083010075342;
297
+ double xs = x + s2, ys = y + t2, zs = z + s2, ws = w + t2;
298
+
299
+ return noise4_Base(xs, ys, zs, ws);
300
+ }
301
+
250
302
  /**
251
303
  * 4D OpenSimplex2F noise, with XYZ oriented like noise3_Classic, and W for
252
304
  * an extra degree of freedom.W repeats eventually.Recommended for
253
305
  * time-varied animations which texture a 3D object (W=time)
254
306
  *
255
307
  * @param x
308
+ * @param w
256
309
  * @param y
257
310
  * @param z
258
- * @param w
259
311
  * @return
260
312
  */
261
313
  public double noise4_XYZBeforeW(double x, double y, double z, double w) {
@@ -283,7 +335,7 @@ public class OpenSimplex2F implements Noise {
283
335
  // If we're in the lower half, flip so we can repeat the code for the upper half. We'll flip back later.
284
336
  double siSum = xsi + ysi + zsi + wsi;
285
337
  double ssi = siSum * 0.309016994374947; // Prep for vertex contributions.
286
- boolean inLowerHalf = (siSum < 2);
338
+ boolean inLowerHalf = siSum < 2;
287
339
  if (inLowerHalf) {
288
340
  xsi = 1 - xsi;
289
341
  ysi = 1 - ysi;
@@ -491,25 +543,6 @@ public class OpenSimplex2F implements Noise {
491
543
  }
492
544
  }
493
545
 
494
- @Override
495
- public float noise(float x, float y, float z) {
496
- return (float)noise3_Classic(x, y, z);
497
- }
498
-
499
- @Override
500
- public float noise(float x, float y, float z, float w) {
501
- return (float)noise4_Classic(x, y, z, w);
502
- }
503
-
504
- @Override
505
- public void noiseMode(NoiseMode mode) {
506
-
507
- }
508
-
509
- @Override
510
- public void noiseSeed(long seed) {
511
- }
512
-
513
546
  private static class LatticePoint2D {
514
547
 
515
548
  int xsv, ysv;
@@ -557,10 +590,10 @@ public class OpenSimplex2F implements Noise {
557
590
  this.dy = -ysv - ssv;
558
591
  this.dz = -zsv - ssv;
559
592
  this.dw = -wsv - ssv;
560
- this.xsi = xsi = 0.2 - xsv;
561
- this.ysi = ysi = 0.2 - ysv;
562
- this.zsi = zsi = 0.2 - zsv;
563
- this.wsi = wsi = 0.2 - wsv;
593
+ this.xsi = 0.2 - xsv;
594
+ this.ysi = 0.2 - ysv;
595
+ this.zsi = 0.2 - zsv;
596
+ this.wsi = 0.2 - wsv;
564
597
  this.ssiDelta = (0.8 - xsv - ysv - zsv - wsv) * 0.309016994374947;
565
598
  }
566
599
  }