picrate 0.0.2-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +47 -0
  3. data/.mvn/extensions.xml +9 -0
  4. data/.mvn/wrapper/maven-wrapper.properties +1 -0
  5. data/.travis.yml +10 -0
  6. data/CHANGELOG.md +4 -0
  7. data/LICENSE.md +165 -0
  8. data/README.md +51 -0
  9. data/Rakefile +59 -0
  10. data/bin/picrate +8 -0
  11. data/docs/.gitignore +6 -0
  12. data/docs/_config.yml +30 -0
  13. data/docs/_includes/footer.html +38 -0
  14. data/docs/_includes/head.html +16 -0
  15. data/docs/_includes/header.html +27 -0
  16. data/docs/_includes/icon-github.html +1 -0
  17. data/docs/_includes/icon-github.svg +1 -0
  18. data/docs/_includes/icon-twitter.html +1 -0
  19. data/docs/_includes/icon-twitter.svg +1 -0
  20. data/docs/_includes/navigation.html +24 -0
  21. data/docs/_layouts/default.html +20 -0
  22. data/docs/_layouts/page.html +14 -0
  23. data/docs/_layouts/post.html +15 -0
  24. data/docs/_posts/2018-05-06-getting_started.md +8 -0
  25. data/docs/_posts/2018-05-06-install_jruby.md +35 -0
  26. data/docs/_sass/_base.scss +206 -0
  27. data/docs/_sass/_layout.scss +242 -0
  28. data/docs/_sass/_syntax-highlighting.scss +71 -0
  29. data/docs/about.md +10 -0
  30. data/docs/css/main.scss +38 -0
  31. data/docs/favicon.ico +0 -0
  32. data/docs/feed.xml +30 -0
  33. data/docs/index.html +38 -0
  34. data/lib/picrate.rb +10 -0
  35. data/lib/picrate/app.rb +187 -0
  36. data/lib/picrate/creators/sketch_class.rb +57 -0
  37. data/lib/picrate/creators/sketch_factory.rb +12 -0
  38. data/lib/picrate/creators/sketch_writer.rb +21 -0
  39. data/lib/picrate/helper_methods.rb +214 -0
  40. data/lib/picrate/helpers/numeric.rb +9 -0
  41. data/lib/picrate/library.rb +69 -0
  42. data/lib/picrate/library_loader.rb +53 -0
  43. data/lib/picrate/native_folder.rb +35 -0
  44. data/lib/picrate/native_loader.rb +27 -0
  45. data/lib/picrate/runner.rb +81 -0
  46. data/lib/picrate/version.rb +4 -0
  47. data/library/boids/boids.rb +209 -0
  48. data/library/chooser/chooser.rb +19 -0
  49. data/library/control_panel/control_panel.rb +182 -0
  50. data/library/library_proxy/README.md +99 -0
  51. data/library/library_proxy/library_proxy.rb +14 -0
  52. data/library/slider/slider.rb +42 -0
  53. data/library/vector_utils/vector_utils.rb +69 -0
  54. data/library/video_event/video_event.rb +3 -0
  55. data/license.txt +508 -0
  56. data/picrate.gemspec +35 -0
  57. data/pom.rb +122 -0
  58. data/pom.xml +214 -0
  59. data/src/main/java/japplemenubar/JAppleMenuBar.java +88 -0
  60. data/src/main/java/japplemenubar/libjAppleMenuBar.jnilib +0 -0
  61. data/src/main/java/monkstone/ColorUtil.java +115 -0
  62. data/src/main/java/monkstone/MathToolModule.java +236 -0
  63. data/src/main/java/monkstone/PicrateLibrary.java +47 -0
  64. data/src/main/java/monkstone/core/LibraryProxy.java +127 -0
  65. data/src/main/java/monkstone/fastmath/Deglut.java +122 -0
  66. data/src/main/java/monkstone/fastmath/package-info.java +6 -0
  67. data/src/main/java/monkstone/filechooser/Chooser.java +48 -0
  68. data/src/main/java/monkstone/noise/SimplexNoise.java +465 -0
  69. data/src/main/java/monkstone/slider/CustomHorizontalSlider.java +168 -0
  70. data/src/main/java/monkstone/slider/CustomVerticalSlider.java +182 -0
  71. data/src/main/java/monkstone/slider/SimpleHorizontalSlider.java +149 -0
  72. data/src/main/java/monkstone/slider/SimpleSlider.java +196 -0
  73. data/src/main/java/monkstone/slider/SimpleVerticalSlider.java +163 -0
  74. data/src/main/java/monkstone/slider/Slider.java +67 -0
  75. data/src/main/java/monkstone/slider/SliderBar.java +277 -0
  76. data/src/main/java/monkstone/slider/SliderGroup.java +78 -0
  77. data/src/main/java/monkstone/slider/WheelHandler.java +35 -0
  78. data/src/main/java/monkstone/vecmath/AppRender.java +87 -0
  79. data/src/main/java/monkstone/vecmath/JRender.java +56 -0
  80. data/src/main/java/monkstone/vecmath/ShapeRender.java +87 -0
  81. data/src/main/java/monkstone/vecmath/package-info.java +20 -0
  82. data/src/main/java/monkstone/vecmath/vec2/Vec2.java +757 -0
  83. data/src/main/java/monkstone/vecmath/vec2/package-info.java +6 -0
  84. data/src/main/java/monkstone/vecmath/vec3/Vec3.java +727 -0
  85. data/src/main/java/monkstone/vecmath/vec3/package-info.java +6 -0
  86. data/src/main/java/monkstone/videoevent/VideoInterface.java +42 -0
  87. data/src/main/java/monkstone/videoevent/package-info.java +20 -0
  88. data/src/main/java/processing/awt/PGraphicsJava2D.java +3098 -0
  89. data/src/main/java/processing/awt/PShapeJava2D.java +401 -0
  90. data/src/main/java/processing/awt/PSurfaceAWT.java +1660 -0
  91. data/src/main/java/processing/core/PApplet.java +17647 -0
  92. data/src/main/java/processing/core/PConstants.java +1033 -0
  93. data/src/main/java/processing/core/PFont.java +1250 -0
  94. data/src/main/java/processing/core/PGraphics.java +9614 -0
  95. data/src/main/java/processing/core/PImage.java +3608 -0
  96. data/src/main/java/processing/core/PMatrix.java +347 -0
  97. data/src/main/java/processing/core/PMatrix2D.java +694 -0
  98. data/src/main/java/processing/core/PMatrix3D.java +1153 -0
  99. data/src/main/java/processing/core/PShape.java +4332 -0
  100. data/src/main/java/processing/core/PShapeOBJ.java +544 -0
  101. data/src/main/java/processing/core/PShapeSVG.java +1987 -0
  102. data/src/main/java/processing/core/PStyle.java +208 -0
  103. data/src/main/java/processing/core/PSurface.java +242 -0
  104. data/src/main/java/processing/core/PSurfaceNone.java +479 -0
  105. data/src/main/java/processing/core/PVector.java +1140 -0
  106. data/src/main/java/processing/data/FloatDict.java +829 -0
  107. data/src/main/java/processing/data/FloatList.java +912 -0
  108. data/src/main/java/processing/data/IntDict.java +796 -0
  109. data/src/main/java/processing/data/IntList.java +913 -0
  110. data/src/main/java/processing/data/JSONArray.java +1260 -0
  111. data/src/main/java/processing/data/JSONObject.java +2282 -0
  112. data/src/main/java/processing/data/JSONTokener.java +435 -0
  113. data/src/main/java/processing/data/Sort.java +46 -0
  114. data/src/main/java/processing/data/StringDict.java +601 -0
  115. data/src/main/java/processing/data/StringList.java +775 -0
  116. data/src/main/java/processing/data/Table.java +4923 -0
  117. data/src/main/java/processing/data/TableRow.java +198 -0
  118. data/src/main/java/processing/data/XML.java +1149 -0
  119. data/src/main/java/processing/event/Event.java +108 -0
  120. data/src/main/java/processing/event/KeyEvent.java +70 -0
  121. data/src/main/java/processing/event/MouseEvent.java +149 -0
  122. data/src/main/java/processing/event/TouchEvent.java +57 -0
  123. data/src/main/java/processing/javafx/PGraphicsFX2D.java +354 -0
  124. data/src/main/java/processing/opengl/FontTexture.java +379 -0
  125. data/src/main/java/processing/opengl/FrameBuffer.java +503 -0
  126. data/src/main/java/processing/opengl/LinePath.java +623 -0
  127. data/src/main/java/processing/opengl/LineStroker.java +685 -0
  128. data/src/main/java/processing/opengl/PGL.java +3366 -0
  129. data/src/main/java/processing/opengl/PGraphics2D.java +615 -0
  130. data/src/main/java/processing/opengl/PGraphics3D.java +281 -0
  131. data/src/main/java/processing/opengl/PGraphicsOpenGL.java +13634 -0
  132. data/src/main/java/processing/opengl/PJOGL.java +1966 -0
  133. data/src/main/java/processing/opengl/PShader.java +1478 -0
  134. data/src/main/java/processing/opengl/PShapeOpenGL.java +5234 -0
  135. data/src/main/java/processing/opengl/PSurfaceJOGL.java +1315 -0
  136. data/src/main/java/processing/opengl/Texture.java +1670 -0
  137. data/src/main/java/processing/opengl/VertexBuffer.java +88 -0
  138. data/src/main/java/processing/opengl/cursors/arrow.png +0 -0
  139. data/src/main/java/processing/opengl/cursors/cross.png +0 -0
  140. data/src/main/java/processing/opengl/cursors/hand.png +0 -0
  141. data/src/main/java/processing/opengl/cursors/license.txt +27 -0
  142. data/src/main/java/processing/opengl/cursors/move.png +0 -0
  143. data/src/main/java/processing/opengl/cursors/text.png +0 -0
  144. data/src/main/java/processing/opengl/cursors/wait.png +0 -0
  145. data/src/main/java/processing/opengl/shaders/ColorFrag.glsl +32 -0
  146. data/src/main/java/processing/opengl/shaders/ColorVert.glsl +34 -0
  147. data/src/main/java/processing/opengl/shaders/LightFrag.glsl +33 -0
  148. data/src/main/java/processing/opengl/shaders/LightVert-vc4.glsl +154 -0
  149. data/src/main/java/processing/opengl/shaders/LightVert.glsl +151 -0
  150. data/src/main/java/processing/opengl/shaders/LineFrag.glsl +32 -0
  151. data/src/main/java/processing/opengl/shaders/LineVert.glsl +100 -0
  152. data/src/main/java/processing/opengl/shaders/MaskFrag.glsl +40 -0
  153. data/src/main/java/processing/opengl/shaders/PointFrag.glsl +32 -0
  154. data/src/main/java/processing/opengl/shaders/PointVert.glsl +56 -0
  155. data/src/main/java/processing/opengl/shaders/TexFrag.glsl +37 -0
  156. data/src/main/java/processing/opengl/shaders/TexLightFrag.glsl +37 -0
  157. data/src/main/java/processing/opengl/shaders/TexLightVert-vc4.glsl +160 -0
  158. data/src/main/java/processing/opengl/shaders/TexLightVert.glsl +157 -0
  159. data/src/main/java/processing/opengl/shaders/TexVert.glsl +38 -0
  160. data/src/main/resources/icon/icon-1024.png +0 -0
  161. data/src/main/resources/icon/icon-128.png +0 -0
  162. data/src/main/resources/icon/icon-16.png +0 -0
  163. data/src/main/resources/icon/icon-256.png +0 -0
  164. data/src/main/resources/icon/icon-32.png +0 -0
  165. data/src/main/resources/icon/icon-48.png +0 -0
  166. data/src/main/resources/icon/icon-512.png +0 -0
  167. data/src/main/resources/icon/icon-64.png +0 -0
  168. data/src/main/resources/license.txt +508 -0
  169. data/test/create_test.rb +68 -0
  170. data/test/deglut_spec_test.rb +24 -0
  171. data/test/helper_methods_test.rb +58 -0
  172. data/test/math_tool_test.rb +75 -0
  173. data/test/respond_to_test.rb +215 -0
  174. data/test/sketches/key_event.rb +37 -0
  175. data/test/sketches/library/my_library/my_library.rb +32 -0
  176. data/test/test_helper.rb +3 -0
  177. data/test/vecmath_spec_test.rb +522 -0
  178. data/vendors/Rakefile +127 -0
  179. metadata +289 -0
@@ -0,0 +1,115 @@
1
+ /**
2
+ * This utility allows PiCrate users to use the processing.org color method
3
+ * in their sketches. Includes a method to efficiently convert an array of web
4
+ * strings to an array of color int, and another to convert an array of color
5
+ * int to a string that can be used in ruby code (to generate web color array).
6
+ * Copyright (c) 2018 Martin Prout.
7
+ * This utility is free software; you can redistribute it and/or modify
8
+ * it under the terms of the GNU General Public License as published by
9
+ * the Free Software Foundation; either version 3.0 of the License, or (at
10
+ * your option) any later version.
11
+ *
12
+ * Obtain a copy of the license at http://www.gnu.org/licenses/gpl-3.0-standalone.html
13
+ */
14
+ package monkstone;
15
+
16
+ /**
17
+ *
18
+ *
19
+ */
20
+ public class ColorUtil {
21
+
22
+ /**
23
+ * Returns hex long as a positive int unless greater than Integer.MAX_VALUE
24
+ * else return the complement as a negative integer or something like that
25
+ *
26
+ * @param hexlong long
27
+ * @return rgb int
28
+ */
29
+ static final int hexLong(long hexlong) {
30
+ long SPLIT = Integer.MAX_VALUE + 1;
31
+ if (hexlong < SPLIT) {
32
+ return (int) hexlong;
33
+ } else {
34
+ return (int) (hexlong - SPLIT * 2L);
35
+ }
36
+ }
37
+
38
+ /**
39
+ * @param hexstring String
40
+ * @return rgb int
41
+ */
42
+ static public int colorString(String hexstring) {
43
+ return java.awt.Color.decode(hexstring).getRGB();
44
+ }
45
+
46
+ /**
47
+ *
48
+ * @param web Array of web (hex) String
49
+ * @return array of color int according to java
50
+ */
51
+ static public int[] webArray(String[] web) {
52
+ int[] result = new int[web.length];
53
+ for (int i = 0; i < web.length; i++) {
54
+ result[i] = java.awt.Color.decode(web[i]).getRGB();
55
+ }
56
+ return result;
57
+ }
58
+
59
+ /**
60
+ * Return a ruby string of the form "%w(a b c)" where a, b, c are raw web
61
+ * strings. This string can be used in ruby code.
62
+ *
63
+ * @param hex int array
64
+ * @return String for use in ruby
65
+ */
66
+ static public String rubyString(int[] hex) {
67
+ StringBuilder result = new StringBuilder("%w(");
68
+ for (int i = 0; i < hex.length; i++) {
69
+ result.append(String.format("#%06X", (0xFFFFFF & hex[i])));
70
+ if (i < hex.length - 1) {
71
+ result.append(' ');
72
+ }
73
+ }
74
+ result.append(")\n");
75
+ return result.toString();
76
+ }
77
+
78
+ /**
79
+ *
80
+ * @param hex double
81
+ * @return hex float
82
+ */
83
+ static public float colorLong(double hex) {
84
+ return (float) hex;
85
+ }
86
+
87
+ /**
88
+ *
89
+ * @param hexlong long
90
+ * @return hexlong int
91
+ */
92
+ static public int colorLong(long hexlong) {
93
+ return hexLong(hexlong);
94
+ }
95
+
96
+ /**
97
+ *
98
+ * @param hex double
99
+ * @return hex float
100
+ */
101
+ static public float colorDouble(double hex) {
102
+ return (float) hex;
103
+ }
104
+
105
+ /**
106
+ *
107
+ * @param hue
108
+ * @param sat
109
+ * @param brightness
110
+ * @return
111
+ */
112
+ static public int hsbToRgB(double hue, double sat, double brightness) {
113
+ return java.awt.Color.HSBtoRGB((float) hue, (float) sat, (float) brightness);
114
+ }
115
+ }
@@ -0,0 +1,236 @@
1
+ /**
2
+ * The purpose of this tool is to allow propane users to use an alternative
3
+ * to processing.org map, lerp and norm methods in their sketches
4
+ * Copyright (c) 2018 Martin Prout. This tool is free software; you can
5
+ * redistribute it and/or modify it under the terms of the GNU Lesser General
6
+ * Public License as published by the Free Software Foundation; either version
7
+ * 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * Obtain a copy of the license at http://www.gnu.org/licenses/gpl-3.0-standalone.html
10
+ */
11
+ package monkstone;
12
+
13
+ import org.jruby.Ruby;
14
+ import org.jruby.RubyFixnum;
15
+ import org.jruby.RubyFloat;
16
+ import org.jruby.RubyModule;
17
+ import org.jruby.RubyRange;
18
+ import org.jruby.anno.JRubyMethod;
19
+ import org.jruby.anno.JRubyModule;
20
+ import org.jruby.runtime.Block;
21
+ import org.jruby.runtime.ThreadContext;
22
+ import org.jruby.runtime.builtin.IRubyObject;
23
+
24
+ /**
25
+ *
26
+ *
27
+ */
28
+ @JRubyModule(name = "MathTool")
29
+ public class MathToolModule {
30
+
31
+ /**
32
+ *
33
+ * @param runtime Ruby
34
+ */
35
+ public static void createMathToolModule(Ruby runtime) {
36
+ RubyModule mtModule = runtime.defineModule("MathTool");
37
+ mtModule.defineAnnotatedMethods(MathToolModule.class);
38
+ }
39
+
40
+ /**
41
+ *
42
+ * @param context ThreadContext
43
+ * @param recv IRubyObject
44
+ * @param args array of RubyRange (must be be numeric)
45
+ * @return mapped value RubyFloat
46
+ */
47
+ @JRubyMethod(name = "map1d", rest = true, module = true)
48
+ public static IRubyObject mapOneD(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
49
+ double value = (args[0] instanceof RubyFloat)
50
+ ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
51
+ RubyRange r1 = (RubyRange) args[1];
52
+ RubyRange r2 = (RubyRange) args[2];
53
+ double first1 = (r1.first(context) instanceof RubyFloat)
54
+ ? ((RubyFloat) r1.first(context)).getValue() : ((RubyFixnum) r1.first(context)).getDoubleValue();
55
+ double first2 = (r2.first(context) instanceof RubyFloat)
56
+ ? ((RubyFloat) r2.first(context)).getValue() : ((RubyFixnum) r2.first(context)).getDoubleValue();
57
+ double last1 = (r1.last(context) instanceof RubyFloat)
58
+ ? ((RubyFloat) r1.last(context)).getValue() : ((RubyFixnum) r1.last(context)).getDoubleValue();
59
+ double last2 = (r2.last(context) instanceof RubyFloat)
60
+ ? ((RubyFloat) r2.last(context)).getValue() : ((RubyFixnum) r2.last(context)).getDoubleValue();
61
+ return mapMt(context, value, first1, last1, first2, last2);
62
+ }
63
+
64
+ /**
65
+ *
66
+ * @param context ThreadContext
67
+ * @param recv IRubyObject
68
+ * @param args array of RubyRange (must be be numeric)
69
+ * @return mapped value RubyFloat
70
+ */
71
+ @JRubyMethod(name = "constrained_map", rest = true, module = true)
72
+ public static IRubyObject constrainedMap(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
73
+ double value = (args[0] instanceof RubyFloat) ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
74
+ RubyRange r1 = (RubyRange) args[1];
75
+ RubyRange r2 = (RubyRange) args[2];
76
+ double first1 = (r1.first(context) instanceof RubyFloat)
77
+ ? ((RubyFloat) r1.first(context)).getValue() : ((RubyFixnum) r1.first(context)).getDoubleValue();
78
+ double first2 = (r2.first(context) instanceof RubyFloat)
79
+ ? ((RubyFloat) r2.first(context)).getValue() : ((RubyFixnum) r2.first(context)).getDoubleValue();
80
+ double last1 = (r1.last(context) instanceof RubyFloat)
81
+ ? ((RubyFloat) r1.last(context)).getValue() : ((RubyFixnum) r1.last(context)).getDoubleValue();
82
+ double last2 = (r2.last(context) instanceof RubyFloat)
83
+ ? ((RubyFloat) r2.last(context)).getValue() : ((RubyFixnum) r2.last(context)).getDoubleValue();
84
+ double max = Math.max(first1, last1);
85
+ double min = Math.min(first1, last1);
86
+ if (value < min) {
87
+ return mapMt(context, min, first1, last1, first2, last2);
88
+ }
89
+ if (value > max) {
90
+ return mapMt(context, max, first1, last1, first2, last2);
91
+ }
92
+ return mapMt(context, value, first1, last1, first2, last2);
93
+ }
94
+
95
+ /**
96
+ *
97
+ * @param context ThreadContext
98
+ * @param recv self IRubyObject
99
+ * @param args floats as in processing map function
100
+ * @return mapped value RubyFloat
101
+ */
102
+ @JRubyMethod(name = "p5map", rest = true, module = true)
103
+ public static IRubyObject mapProcessing(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
104
+ double value = (args[0] instanceof RubyFloat) ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
105
+ double first1 = (args[1] instanceof RubyFloat) ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
106
+ double first2 = (args[3] instanceof RubyFloat) ? ((RubyFloat) args[3]).getValue() : ((RubyFixnum) args[3]).getDoubleValue();
107
+ double last1 = (args[2] instanceof RubyFloat) ? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
108
+ double last2 = (args[4] instanceof RubyFloat) ? ((RubyFloat) args[4]).getValue() : ((RubyFixnum) args[4]).getDoubleValue();
109
+ return mapMt(context, value, first1, last1, first2, last2);
110
+ }
111
+
112
+ /**
113
+ * A more correct version than processing.org version
114
+ *
115
+ * @param context ThreadContext
116
+ * @param recv self IRubyObject
117
+ * @param args args[2] should be between 0 and 1.0 if not returns start or
118
+ * stop
119
+ * @return lerped value RubyFloat
120
+ */
121
+ @JRubyMethod(name = "lerp", rest = true, module = true)
122
+ public static IRubyObject lerpP(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
123
+ double start = (args[0] instanceof RubyFloat) ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
124
+ double stop = (args[1] instanceof RubyFloat) ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
125
+ double amount = (args[2] instanceof RubyFloat) ? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
126
+ if (amount <= 0) {
127
+ return args[0];
128
+ }
129
+ if (amount >= 1.0) {
130
+ return args[1];
131
+ }
132
+ return context.runtime.newFloat((1 - amount) * start + (stop * amount));
133
+ }
134
+
135
+ /**
136
+ * Identical to p5map(value, low, high, 0, 1). Numbers outside of the range
137
+ * are not clamped to 0 and 1, because out-of-range values are often
138
+ * intentional and useful.
139
+ *
140
+ * @param context ThreadContext
141
+ * @param recv IRubyObject
142
+ * @param args array of args must be be numeric
143
+ * @return mapped value RubyFloat
144
+ */
145
+ @JRubyMethod(name = "norm", rest = true, module = true)
146
+ public static IRubyObject normP(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
147
+ double value = (args[0] instanceof RubyFloat) ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
148
+ double start = (args[1] instanceof RubyFloat) ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
149
+ double stop = (args[2] instanceof RubyFloat) ? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
150
+ return mapMt(context, value, start, stop, 0, 1.0);
151
+ }
152
+
153
+ /**
154
+ * Identical to p5map(value, low, high, 0, 1) but 'clamped'. Numbers outside
155
+ * of the range are clamped to 0 and 1,
156
+ *
157
+ * @param context ThreadContext
158
+ * @param recv IRubyObject
159
+ * @param args array of args must be be numeric
160
+ * @return mapped value RubyFloat
161
+ */
162
+ @JRubyMethod(name = "norm_strict", rest = true, module = true)
163
+ public static IRubyObject norm_strict(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
164
+ Ruby ruby = context.runtime;
165
+ double value = (args[0] instanceof RubyFloat) ? ((RubyFloat) args[0]).getValue() : ((RubyFixnum) args[0]).getDoubleValue();
166
+ double start = (args[1] instanceof RubyFloat) ? ((RubyFloat) args[1]).getValue() : ((RubyFixnum) args[1]).getDoubleValue();
167
+ double stop = (args[2] instanceof RubyFloat) ? ((RubyFloat) args[2]).getValue() : ((RubyFixnum) args[2]).getDoubleValue();
168
+ double max = Math.max(start, stop);
169
+ double min = Math.min(start, stop);
170
+ if (value < min) {
171
+ return mapMt(context, min, start, stop, 0, 1.0);
172
+ }
173
+ if (value > max) {
174
+ return mapMt(context, max, start, stop, 0, 1.0);
175
+ }
176
+ return mapMt(context, value, start, stop, 0, 1.0);
177
+ }
178
+ // start2 + (stop2 - start2) * ((value - start1) / (stop1 - start1));
179
+ static final RubyFloat mapMt(ThreadContext context, double value, double first1, double last1, double first2, double last2) {
180
+ double result = first2 + (last2 - first2) * ((value - first1) / (last1 - first1));
181
+ return context.runtime.newFloat(result);
182
+ }
183
+
184
+ /**
185
+ * Provides processing constrain method as a ruby module method
186
+ *
187
+ * @param context ThreadContext
188
+ * @param recv IRubyObject
189
+ * @param args array of args must be be numeric
190
+ * @return original or limit values
191
+ */
192
+ @JRubyMethod(name = "constrain", rest = true, module = true)
193
+ public static IRubyObject constrainValue(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
194
+ RubyFloat value = args[0].convertToFloat();
195
+ RubyFloat start = args[1].convertToFloat();
196
+ RubyFloat stop = args[2].convertToFloat();
197
+ if (value.op_ge(context, start).isTrue() && value.op_le(context, stop).isTrue()) {
198
+ return args[0];
199
+ } else if (value.op_ge(context, start).isTrue()) {
200
+ return args[2];
201
+ } else {
202
+ return args[1];
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Provides propane grid method as a ruby module method
208
+ *
209
+ * @param context ThreadContext
210
+ * @param recv IRubyObject
211
+ * @param args array of args should be Fixnum
212
+ * @param block { |x, y| `do something` }
213
+ * @return nil
214
+ */
215
+ @JRubyMethod(name = "grid", rest = true, module = true)
216
+ public static IRubyObject createGrid(ThreadContext context, IRubyObject recv, IRubyObject[] args, Block block) {
217
+ int row = (int) args[0].toJava(Integer.class);
218
+ int column = (int) args[1].toJava(Integer.class);
219
+ int rowStep = 1;
220
+ int colStep = 1;
221
+ if (args.length == 4){
222
+ rowStep = (int) args[2].toJava(Integer.class);
223
+ colStep = (int) args[3].toJava(Integer.class);
224
+ }
225
+ if (block.isGiven()) {
226
+ int tempRow = row / rowStep;
227
+ for (int z = 0; z < (tempRow * (column / colStep)); z++){
228
+ int x = z % tempRow;
229
+ int y = z / tempRow;
230
+ block.yieldSpecific(context, context.runtime.newFixnum(x * rowStep), context.runtime.newFixnum(y * colStep));
231
+ }
232
+ }
233
+ return context.nil;
234
+
235
+ }
236
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * The purpose of this class is to load the MathTool into PiCrate runtime
3
+ * Copyright (C) 18 Martin Prout. This code is free software; you can
4
+ * redistribute it and/or modify it under the terms of the GNU Lesser General
5
+ * Public License as published by the Free Software Foundation; either version
6
+ * 2.1 of the License, or (at your option) any later version.
7
+ *
8
+ * Obtain a copy of the license at http://www.gnu.org/licenses/gpl-3.0-standalone.html
9
+ */
10
+
11
+ package monkstone;
12
+
13
+ import java.io.IOException;
14
+ import monkstone.fastmath.Deglut;
15
+ import monkstone.vecmath.vec2.Vec2;
16
+ import monkstone.vecmath.vec3.Vec3;
17
+ import org.jruby.Ruby;
18
+ import org.jruby.runtime.load.Library;
19
+
20
+ /**
21
+ *
22
+ *
23
+ */
24
+ public class PicrateLibrary implements Library{
25
+
26
+ /**
27
+ *
28
+ * @param runtime
29
+ */
30
+ public static void load(final Ruby runtime) {
31
+ MathToolModule.createMathToolModule(runtime);
32
+ Deglut.createDeglut(runtime);
33
+ Vec2.createVec2(runtime);
34
+ Vec3.createVec3(runtime);
35
+ }
36
+
37
+ /**
38
+ *
39
+ * @param runtime
40
+ * @param wrap
41
+ * @throws java.io.IOException
42
+ */
43
+ @Override
44
+ public void load(final Ruby runtime, boolean wrap) throws IOException {
45
+ load(runtime);
46
+ }
47
+ }
@@ -0,0 +1,127 @@
1
+ package monkstone.core;
2
+
3
+ import processing.core.PApplet;
4
+ import static processing.core.PConstants.*;
5
+ import processing.event.MouseEvent;
6
+ import processing.event.KeyEvent;
7
+
8
+ /**
9
+ * The purpose of this class is to enable
10
+ * access to processing pre, draw and post loops in
11
+ * ruby-processing as a regular java library class.
12
+ * Also included background, fill and stroke methods.
13
+ * PConstants should also be available from static import
14
+ *
15
+ */
16
+ public abstract class LibraryProxy {
17
+
18
+ private final PApplet app;
19
+
20
+ /**
21
+ * Useful accessors
22
+ */
23
+ public int width, height;
24
+
25
+ /**
26
+ *
27
+ * @param app PApplet
28
+ */
29
+ public LibraryProxy(PApplet app) {
30
+ this.app = app;
31
+ this.width = app.width;
32
+ this.height = app.height;
33
+ setActive(true);
34
+ }
35
+
36
+ /**
37
+ * Extending classes can override this, gives access to, by reflection,
38
+ * processing PApplet pre loop (called before draw)
39
+ */
40
+ public void pre(){}
41
+
42
+ /**
43
+ * Extending classes must implement this gives access to processing PApplet
44
+ * draw loop
45
+ */
46
+ public abstract void draw();
47
+
48
+ /**
49
+ * Extending classes can override this, gives access to, by reflection,
50
+ * processing PApplet post loop (called after draw)
51
+ */
52
+ public void post(){}
53
+
54
+ /**
55
+ * Extending classes can override this, gives access to, by reflection,
56
+ * processing PApplet post loop (called after draw)
57
+ * @param e
58
+ */
59
+ public void keyEvent(KeyEvent e){}
60
+
61
+ /**
62
+ * Extending classes can override this, gives access to, by reflection,
63
+ * processing PApplet post loop (called after draw)
64
+ * @param e
65
+ */
66
+ public void mouseEvent(MouseEvent e){}
67
+
68
+ /**
69
+ * Register or unregister reflection methods
70
+ * @param active
71
+ */
72
+ final void setActive(boolean active) {
73
+ if (active) {
74
+ this.app.registerMethod("pre", this);
75
+ this.app.registerMethod("draw", this);
76
+ this.app.registerMethod("post", this);
77
+ this.app.registerMethod("mouseEvent", this);
78
+ this.app.registerMethod("keyEvent", this);
79
+ this.app.registerMethod("dispose", this);
80
+ } else {
81
+ this.app.unregisterMethod("pre", this);
82
+ this.app.unregisterMethod("draw", this);
83
+ this.app.unregisterMethod("post", this);
84
+ this.app.unregisterMethod("mouseEvent", this);
85
+ this.app.unregisterMethod("keyEvent", this);
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Simple signature for background hides need to call app
91
+ * @param col int
92
+ */
93
+ public void background(int col) {
94
+ this.app.background(col);
95
+ }
96
+
97
+ /**
98
+ * Simple signature for fill hides need to call app
99
+ * @param col int
100
+ */
101
+ public void fill(int col) {
102
+ this.app.fill(col);
103
+ }
104
+
105
+ /**
106
+ * Simple signature for stroke hides need to call app
107
+ * @param col int
108
+ */
109
+ public void stroke(int col) {
110
+ this.app.stroke(col);
111
+ }
112
+
113
+ /**
114
+ * Access applet if we must
115
+ * @return applet PApplet
116
+ */
117
+ public PApplet app() {
118
+ return this.app;
119
+ }
120
+
121
+ /**
122
+ * required for processing
123
+ */
124
+ public void dispose() {
125
+ setActive(false);
126
+ }
127
+ }