toxiclibs 0.2-java → 0.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 (383) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +16 -0
  3. data/CHANGELOG.md +4 -0
  4. data/LICENSE +675 -0
  5. data/README.md +12 -5
  6. data/Rakefile +25 -82
  7. data/examples/attract_repel/attract_repel.rb +30 -0
  8. data/examples/attract_repel/attractor.rb +23 -0
  9. data/examples/attract_repel/particle.rb +27 -0
  10. data/examples/data/ti_yong.png +0 -0
  11. data/examples/force_directed/cluster.rb +76 -0
  12. data/examples/force_directed/force_directed_graph.rb +92 -0
  13. data/examples/force_directed/node.rb +26 -0
  14. data/examples/gray_scott_image.rb +75 -0
  15. data/examples/gray_scott_tone_map.rb +77 -0
  16. data/examples/implicit.rb +139 -0
  17. data/examples/inflate_mesh.rb +89 -0
  18. data/examples/model_align.rb +44 -0
  19. data/examples/povmesh/ftest.rb +46 -0
  20. data/examples/povmesh/tentacle.rb +73 -0
  21. data/examples/simple_cluster/cluster.rb +47 -0
  22. data/examples/simple_cluster/node.rb +27 -0
  23. data/examples/simple_cluster/simple_cluster.rb +60 -0
  24. data/examples/soft_body/blanket.rb +45 -0
  25. data/examples/soft_body/connection.rb +16 -0
  26. data/examples/soft_body/particle.rb +22 -0
  27. data/examples/soft_body/soft_body_square_adapted.rb +55 -0
  28. data/lib/toxiclibs.jar +0 -0
  29. data/lib/toxiclibs.rb +91 -32
  30. data/lib/toxiclibs/version.rb +1 -1
  31. data/pom.xml +122 -0
  32. data/src/com/toxi/net/ClientListener.java +41 -0
  33. data/src/com/toxi/net/ServerListener.java +70 -0
  34. data/src/com/toxi/net/ServerListenerAdapter.java +47 -0
  35. data/src/com/toxi/net/ServerState.java +18 -0
  36. data/src/com/toxi/net/UDPConnection.java +66 -0
  37. data/src/com/toxi/net/UDPSyncClient.java +81 -0
  38. data/src/com/toxi/net/UDPSyncServer.java +450 -0
  39. data/src/com/toxi/nio/UDPClient.java +121 -0
  40. data/src/com/toxi/nio/UDPClientState.java +32 -0
  41. data/src/com/toxi/nio/UDPServer.java +129 -0
  42. data/src/toxi/color/AccessCriteria.java +114 -0
  43. data/src/toxi/color/AlphaAccessor.java +67 -0
  44. data/src/toxi/color/CMYKAccessor.java +122 -0
  45. data/src/toxi/color/CMYKDistanceProxy.java +40 -0
  46. data/src/toxi/color/ColorGradient.java +260 -0
  47. data/src/toxi/color/ColorList.java +699 -0
  48. data/src/toxi/color/ColorRange.java +671 -0
  49. data/src/toxi/color/ColorTheme.java +163 -0
  50. data/src/toxi/color/DistanceProxy.java +44 -0
  51. data/src/toxi/color/HSVAccessor.java +113 -0
  52. data/src/toxi/color/HSVDistanceProxy.java +40 -0
  53. data/src/toxi/color/HistEntry.java +85 -0
  54. data/src/toxi/color/Histogram.java +185 -0
  55. data/src/toxi/color/Hue.java +249 -0
  56. data/src/toxi/color/LuminanceAccessor.java +78 -0
  57. data/src/toxi/color/NamedColor.java +935 -0
  58. data/src/toxi/color/ProximityComparator.java +70 -0
  59. data/src/toxi/color/RGBAccessor.java +113 -0
  60. data/src/toxi/color/RGBDistanceProxy.java +41 -0
  61. data/src/toxi/color/ReadonlyTColor.java +296 -0
  62. data/src/toxi/color/TColor.java +1677 -0
  63. data/src/toxi/color/TColorAdapter.java +68 -0
  64. data/src/toxi/color/ToneMap.java +218 -0
  65. data/src/toxi/color/theory/AnalogousStrategy.java +140 -0
  66. data/src/toxi/color/theory/ColorTheoryRegistry.java +139 -0
  67. data/src/toxi/color/theory/ColorTheoryStrategy.java +56 -0
  68. data/src/toxi/color/theory/ComplementaryStrategy.java +111 -0
  69. data/src/toxi/color/theory/CompoundTheoryStrategy.java +143 -0
  70. data/src/toxi/color/theory/LeftSplitComplementaryStrategy.java +82 -0
  71. data/src/toxi/color/theory/MonochromeTheoryStrategy.java +103 -0
  72. data/src/toxi/color/theory/RightSplitComplementaryStrategy.java +82 -0
  73. data/src/toxi/color/theory/SingleComplementStrategy.java +76 -0
  74. data/src/toxi/color/theory/SplitComplementaryStrategy.java +77 -0
  75. data/src/toxi/color/theory/TetradTheoryStrategy.java +114 -0
  76. data/src/toxi/color/theory/TriadTheoryStrategy.java +77 -0
  77. data/src/toxi/data/csv/CSVAdapter.java +74 -0
  78. data/src/toxi/data/csv/CSVFieldMapper.java +212 -0
  79. data/src/toxi/data/csv/CSVListener.java +61 -0
  80. data/src/toxi/data/csv/CSVParser.java +202 -0
  81. data/src/toxi/data/feeds/AtomAuthor.java +49 -0
  82. data/src/toxi/data/feeds/AtomContent.java +50 -0
  83. data/src/toxi/data/feeds/AtomEntry.java +111 -0
  84. data/src/toxi/data/feeds/AtomFeed.java +129 -0
  85. data/src/toxi/data/feeds/AtomLink.java +62 -0
  86. data/src/toxi/data/feeds/RSSChannel.java +88 -0
  87. data/src/toxi/data/feeds/RSSEnclosure.java +60 -0
  88. data/src/toxi/data/feeds/RSSFeed.java +99 -0
  89. data/src/toxi/data/feeds/RSSItem.java +104 -0
  90. data/src/toxi/data/feeds/util/EntityStripper.java +2480 -0
  91. data/src/toxi/data/feeds/util/Iso8601DateAdapter.java +101 -0
  92. data/src/toxi/data/feeds/util/Rfc822DateAdapter.java +93 -0
  93. data/src/toxi/geom/AABB.java +658 -0
  94. data/src/toxi/geom/Axis3D.java +116 -0
  95. data/src/toxi/geom/AxisAlignedCylinder.java +163 -0
  96. data/src/toxi/geom/BernsteinPolynomial.java +94 -0
  97. data/src/toxi/geom/BezierCurve2D.java +159 -0
  98. data/src/toxi/geom/BezierCurve3D.java +148 -0
  99. data/src/toxi/geom/BooleanShapeBuilder.java +185 -0
  100. data/src/toxi/geom/BoxIntersector.java +52 -0
  101. data/src/toxi/geom/Circle.java +230 -0
  102. data/src/toxi/geom/CircleIntersector.java +85 -0
  103. data/src/toxi/geom/Cone.java +150 -0
  104. data/src/toxi/geom/ConvexPolygonClipper.java +136 -0
  105. data/src/toxi/geom/CoordinateExtractor.java +16 -0
  106. data/src/toxi/geom/Ellipse.java +250 -0
  107. data/src/toxi/geom/GMatrix.java +2599 -0
  108. data/src/toxi/geom/GVector.java +833 -0
  109. data/src/toxi/geom/GlobalGridTesselator.java +54 -0
  110. data/src/toxi/geom/GridTesselator.java +108 -0
  111. data/src/toxi/geom/Intersector2D.java +49 -0
  112. data/src/toxi/geom/Intersector3D.java +51 -0
  113. data/src/toxi/geom/IsectData2D.java +103 -0
  114. data/src/toxi/geom/IsectData3D.java +103 -0
  115. data/src/toxi/geom/Line2D.java +534 -0
  116. data/src/toxi/geom/Line3D.java +471 -0
  117. data/src/toxi/geom/LineStrip2D.java +430 -0
  118. data/src/toxi/geom/LineStrip3D.java +230 -0
  119. data/src/toxi/geom/LocalGridTesselator.java +57 -0
  120. data/src/toxi/geom/Matrix3d.java +3048 -0
  121. data/src/toxi/geom/Matrix4f.java +3446 -0
  122. data/src/toxi/geom/Matrix4x4.java +1076 -0
  123. data/src/toxi/geom/MatrixSizeException.java +58 -0
  124. data/src/toxi/geom/OctreeVisitor.java +44 -0
  125. data/src/toxi/geom/Origin3D.java +148 -0
  126. data/src/toxi/geom/Plane.java +293 -0
  127. data/src/toxi/geom/PlaneIntersector.java +57 -0
  128. data/src/toxi/geom/PointCloud3D.java +253 -0
  129. data/src/toxi/geom/PointOctree.java +502 -0
  130. data/src/toxi/geom/PointQuadtree.java +375 -0
  131. data/src/toxi/geom/Polygon2D.java +1038 -0
  132. data/src/toxi/geom/PolygonClipper2D.java +45 -0
  133. data/src/toxi/geom/PolygonTesselator.java +20 -0
  134. data/src/toxi/geom/QuadtreeVisitor.java +44 -0
  135. data/src/toxi/geom/Quaternion.java +641 -0
  136. data/src/toxi/geom/Ray2D.java +146 -0
  137. data/src/toxi/geom/Ray3D.java +150 -0
  138. data/src/toxi/geom/Ray3DIntersector.java +75 -0
  139. data/src/toxi/geom/ReadonlyVec2D.java +575 -0
  140. data/src/toxi/geom/ReadonlyVec3D.java +628 -0
  141. data/src/toxi/geom/ReadonlyVec4D.java +431 -0
  142. data/src/toxi/geom/Rect.java +720 -0
  143. data/src/toxi/geom/Reflector3D.java +58 -0
  144. data/src/toxi/geom/Shape2D.java +94 -0
  145. data/src/toxi/geom/Shape3D.java +42 -0
  146. data/src/toxi/geom/SingularMatrixException.java +57 -0
  147. data/src/toxi/geom/SpatialBins.java +182 -0
  148. data/src/toxi/geom/SpatialIndex.java +61 -0
  149. data/src/toxi/geom/Sphere.java +224 -0
  150. data/src/toxi/geom/SphereIntersectorReflector.java +196 -0
  151. data/src/toxi/geom/Spline2D.java +349 -0
  152. data/src/toxi/geom/Spline3D.java +351 -0
  153. data/src/toxi/geom/SutherlandHodgemanClipper.java +151 -0
  154. data/src/toxi/geom/Triangle2D.java +422 -0
  155. data/src/toxi/geom/Triangle3D.java +456 -0
  156. data/src/toxi/geom/TriangleIntersector.java +105 -0
  157. data/src/toxi/geom/Vec2D.java +1328 -0
  158. data/src/toxi/geom/Vec3D.java +1832 -0
  159. data/src/toxi/geom/Vec4D.java +985 -0
  160. data/src/toxi/geom/VecMathUtil.java +100 -0
  161. data/src/toxi/geom/XAxisCylinder.java +64 -0
  162. data/src/toxi/geom/YAxisCylinder.java +65 -0
  163. data/src/toxi/geom/ZAxisCylinder.java +64 -0
  164. data/src/toxi/geom/mesh/BezierPatch.java +200 -0
  165. data/src/toxi/geom/mesh/BoxSelector.java +62 -0
  166. data/src/toxi/geom/mesh/DefaultSTLColorModel.java +67 -0
  167. data/src/toxi/geom/mesh/DefaultSelector.java +50 -0
  168. data/src/toxi/geom/mesh/Face.java +176 -0
  169. data/src/toxi/geom/mesh/LaplacianSmooth.java +80 -0
  170. data/src/toxi/geom/mesh/MaterialiseSTLColorModel.java +150 -0
  171. data/src/toxi/geom/mesh/Mesh3D.java +224 -0
  172. data/src/toxi/geom/mesh/MeshIntersector.java +91 -0
  173. data/src/toxi/geom/mesh/OBJWriter.java +194 -0
  174. data/src/toxi/geom/mesh/PLYWriter.java +167 -0
  175. data/src/toxi/geom/mesh/PlaneSelector.java +90 -0
  176. data/src/toxi/geom/mesh/STLColorModel.java +54 -0
  177. data/src/toxi/geom/mesh/STLReader.java +185 -0
  178. data/src/toxi/geom/mesh/STLWriter.java +323 -0
  179. data/src/toxi/geom/mesh/SphereFunction.java +156 -0
  180. data/src/toxi/geom/mesh/SphericalHarmonics.java +110 -0
  181. data/src/toxi/geom/mesh/SuperEllipsoid.java +110 -0
  182. data/src/toxi/geom/mesh/SurfaceFunction.java +75 -0
  183. data/src/toxi/geom/mesh/SurfaceMeshBuilder.java +149 -0
  184. data/src/toxi/geom/mesh/Terrain.java +451 -0
  185. data/src/toxi/geom/mesh/TriangleMesh.java +1201 -0
  186. data/src/toxi/geom/mesh/Vertex.java +78 -0
  187. data/src/toxi/geom/mesh/VertexSelector.java +193 -0
  188. data/src/toxi/geom/mesh/WEFace.java +100 -0
  189. data/src/toxi/geom/mesh/WEMeshFilterStrategy.java +51 -0
  190. data/src/toxi/geom/mesh/WETriangleMesh.java +761 -0
  191. data/src/toxi/geom/mesh/WEVertex.java +134 -0
  192. data/src/toxi/geom/mesh/WingedEdge.java +115 -0
  193. data/src/toxi/geom/mesh/subdiv/CentroidSubdiv.java +37 -0
  194. data/src/toxi/geom/mesh/subdiv/DisplacementSubdivision.java +85 -0
  195. data/src/toxi/geom/mesh/subdiv/DualDisplacementSubdivision.java +94 -0
  196. data/src/toxi/geom/mesh/subdiv/DualSubdivision.java +49 -0
  197. data/src/toxi/geom/mesh/subdiv/EdgeLengthComparator.java +50 -0
  198. data/src/toxi/geom/mesh/subdiv/FaceCountComparator.java +51 -0
  199. data/src/toxi/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +80 -0
  200. data/src/toxi/geom/mesh/subdiv/MidpointSubdiv.java +42 -0
  201. data/src/toxi/geom/mesh/subdiv/MidpointSubdivision.java +48 -0
  202. data/src/toxi/geom/mesh/subdiv/NewSubdivStrategy.java +23 -0
  203. data/src/toxi/geom/mesh/subdiv/NormalDisplacementSubdivision.java +74 -0
  204. data/src/toxi/geom/mesh/subdiv/SubdivisionStrategy.java +83 -0
  205. data/src/toxi/geom/mesh/subdiv/TriSubdivision.java +51 -0
  206. data/src/toxi/geom/mesh2d/DelaunayTriangle.java +222 -0
  207. data/src/toxi/geom/mesh2d/DelaunayTriangulation.java +327 -0
  208. data/src/toxi/geom/mesh2d/DelaunayVertex.java +560 -0
  209. data/src/toxi/geom/mesh2d/Voronoi.java +149 -0
  210. data/src/toxi/geom/nurbs/BasicNurbsCurve.java +210 -0
  211. data/src/toxi/geom/nurbs/BasicNurbsSurface.java +233 -0
  212. data/src/toxi/geom/nurbs/ControlNet.java +148 -0
  213. data/src/toxi/geom/nurbs/CurveCreator.java +112 -0
  214. data/src/toxi/geom/nurbs/CurveUtils.java +259 -0
  215. data/src/toxi/geom/nurbs/InterpolationException.java +65 -0
  216. data/src/toxi/geom/nurbs/KnotVector.java +333 -0
  217. data/src/toxi/geom/nurbs/NurbsCreator.java +815 -0
  218. data/src/toxi/geom/nurbs/NurbsCurve.java +120 -0
  219. data/src/toxi/geom/nurbs/NurbsMeshCreator.java +145 -0
  220. data/src/toxi/geom/nurbs/NurbsSurface.java +147 -0
  221. data/src/toxi/image/util/Filter8bit.java +331 -0
  222. data/src/toxi/image/util/TiledFrameExporter.java +162 -0
  223. data/src/toxi/math/BezierInterpolation.java +102 -0
  224. data/src/toxi/math/CircularInterpolation.java +88 -0
  225. data/src/toxi/math/CosineInterpolation.java +51 -0
  226. data/src/toxi/math/DecimatedInterpolation.java +77 -0
  227. data/src/toxi/math/ExponentialInterpolation.java +68 -0
  228. data/src/toxi/math/InterpolateStrategy.java +60 -0
  229. data/src/toxi/math/Interpolation2D.java +93 -0
  230. data/src/toxi/math/LinearInterpolation.java +46 -0
  231. data/src/toxi/math/MathUtils.java +990 -0
  232. data/src/toxi/math/NonLinearScaleMap.java +101 -0
  233. data/src/toxi/math/ScaleMap.java +183 -0
  234. data/src/toxi/math/SigmoidInterpolation.java +78 -0
  235. data/src/toxi/math/SinCosLUT.java +141 -0
  236. data/src/toxi/math/ThresholdInterpolation.java +58 -0
  237. data/src/toxi/math/ZoomLensInterpolation.java +126 -0
  238. data/src/toxi/math/conversion/UnitTranslator.java +161 -0
  239. data/src/toxi/math/noise/PerlinNoise.java +281 -0
  240. data/src/toxi/math/noise/SimplexNoise.java +542 -0
  241. data/src/toxi/math/waves/AMFMSineWave.java +143 -0
  242. data/src/toxi/math/waves/AbstractWave.java +248 -0
  243. data/src/toxi/math/waves/ConstantWave.java +48 -0
  244. data/src/toxi/math/waves/FMHarmonicSquareWave.java +155 -0
  245. data/src/toxi/math/waves/FMSawtoothWave.java +144 -0
  246. data/src/toxi/math/waves/FMSineWave.java +142 -0
  247. data/src/toxi/math/waves/FMSquareWave.java +143 -0
  248. data/src/toxi/math/waves/FMTriangleWave.java +126 -0
  249. data/src/toxi/math/waves/SineWave.java +81 -0
  250. data/src/toxi/math/waves/Wave2D.java +68 -0
  251. data/src/toxi/math/waves/WaveState.java +69 -0
  252. data/src/toxi/music/scale/AbstractScale.java +117 -0
  253. data/src/toxi/music/scale/GenericScale.java +66 -0
  254. data/src/toxi/music/scale/MajorScale.java +41 -0
  255. data/src/toxi/newmesh/AttributedEdge.java +106 -0
  256. data/src/toxi/newmesh/AttributedFace.java +63 -0
  257. data/src/toxi/newmesh/IndexedTriangleMesh.java +809 -0
  258. data/src/toxi/newmesh/MeshAttributeCompiler.java +45 -0
  259. data/src/toxi/newmesh/MeshFaceNormalCompiler.java +52 -0
  260. data/src/toxi/newmesh/MeshUVCompiler.java +52 -0
  261. data/src/toxi/newmesh/MeshVertexColorCompiler.java +49 -0
  262. data/src/toxi/newmesh/MeshVertexCompiler.java +54 -0
  263. data/src/toxi/newmesh/MeshVertexNormalCompiler.java +55 -0
  264. data/src/toxi/newmesh/SpatialIndex.java +78 -0
  265. data/src/toxi/physics2d/ParticlePath2D.java +100 -0
  266. data/src/toxi/physics2d/ParticleString2D.java +184 -0
  267. data/src/toxi/physics2d/PullBackSpring2D.java +51 -0
  268. data/src/toxi/physics2d/VerletConstrainedSpring2D.java +89 -0
  269. data/src/toxi/physics2d/VerletMinDistanceSpring2D.java +57 -0
  270. data/src/toxi/physics2d/VerletParticle2D.java +457 -0
  271. data/src/toxi/physics2d/VerletPhysics2D.java +448 -0
  272. data/src/toxi/physics2d/VerletSpring2D.java +181 -0
  273. data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +212 -0
  274. data/src/toxi/physics2d/behaviors/ConstantForceBehavior2D.java +112 -0
  275. data/src/toxi/physics2d/behaviors/GravityBehavior2D.java +61 -0
  276. data/src/toxi/physics2d/behaviors/ParticleBehavior2D.java +66 -0
  277. data/src/toxi/physics2d/constraints/AngularConstraint.java +83 -0
  278. data/src/toxi/physics2d/constraints/AxisConstraint.java +71 -0
  279. data/src/toxi/physics2d/constraints/CircularConstraint.java +69 -0
  280. data/src/toxi/physics2d/constraints/MaxConstraint.java +66 -0
  281. data/src/toxi/physics2d/constraints/MinConstraint.java +66 -0
  282. data/src/toxi/physics2d/constraints/ParticleConstraint2D.java +47 -0
  283. data/src/toxi/physics2d/constraints/PolygonConstraint.java +93 -0
  284. data/src/toxi/physics2d/constraints/RectConstraint.java +114 -0
  285. data/src/toxi/physics3d/ParticlePath3D.java +100 -0
  286. data/src/toxi/physics3d/ParticleString3D.java +184 -0
  287. data/src/toxi/physics3d/PullBackSpring3D.java +50 -0
  288. data/src/toxi/physics3d/VerletConstrainedSpring3D.java +88 -0
  289. data/src/toxi/physics3d/VerletMinDistanceSpring3D.java +56 -0
  290. data/src/toxi/physics3d/VerletParticle3D.java +385 -0
  291. data/src/toxi/physics3d/VerletPhysics3D.java +417 -0
  292. data/src/toxi/physics3d/VerletSpring3D.java +180 -0
  293. data/src/toxi/physics3d/behaviors/AttractionBehavior3D.java +182 -0
  294. data/src/toxi/physics3d/behaviors/ConstantForceBehavior3D.java +92 -0
  295. data/src/toxi/physics3d/behaviors/GravityBehavior3D.java +61 -0
  296. data/src/toxi/physics3d/behaviors/ParticleBehavior3D.java +52 -0
  297. data/src/toxi/physics3d/constraints/AxisConstraint.java +68 -0
  298. data/src/toxi/physics3d/constraints/BoxConstraint.java +121 -0
  299. data/src/toxi/physics3d/constraints/CylinderConstraint.java +87 -0
  300. data/src/toxi/physics3d/constraints/MaxConstraint.java +65 -0
  301. data/src/toxi/physics3d/constraints/MinConstraint.java +65 -0
  302. data/src/toxi/physics3d/constraints/ParticleConstraint3D.java +49 -0
  303. data/src/toxi/physics3d/constraints/PlaneConstraint.java +78 -0
  304. data/src/toxi/physics3d/constraints/SoftBoxConstraint.java +87 -0
  305. data/src/toxi/physics3d/constraints/SphereConstraint.java +108 -0
  306. data/src/toxi/processing/ArrowModifier.java +116 -0
  307. data/src/toxi/processing/DashedLineModifier.java +48 -0
  308. data/src/toxi/processing/DeltaOrientationMapper.java +57 -0
  309. data/src/toxi/processing/Line2DRenderModifier.java +18 -0
  310. data/src/toxi/processing/MeshToVBO.java +94 -0
  311. data/src/toxi/processing/NormalMapper.java +18 -0
  312. data/src/toxi/processing/POVInterface.java +121 -0
  313. data/src/toxi/processing/POVMesh.java +219 -0
  314. data/src/toxi/processing/POVWriter.java +460 -0
  315. data/src/toxi/processing/RCOpaque.java +77 -0
  316. data/src/toxi/processing/RCTransp.java +78 -0
  317. data/src/toxi/processing/TextureBuilder.java +232 -0
  318. data/src/toxi/processing/Textures.java +110 -0
  319. data/src/toxi/processing/ToxiclibsSupport.java +1239 -0
  320. data/src/toxi/processing/Tracing.java +25 -0
  321. data/src/toxi/processing/XYZNormalMapper.java +30 -0
  322. data/src/toxi/sim/automata/CAMatrix.java +297 -0
  323. data/src/toxi/sim/automata/CARule.java +76 -0
  324. data/src/toxi/sim/automata/CARule2D.java +354 -0
  325. data/src/toxi/sim/automata/CAWolfram1D.java +309 -0
  326. data/src/toxi/sim/automata/EvolvableMatrix.java +61 -0
  327. data/src/toxi/sim/automata/MatrixEvolver.java +42 -0
  328. data/src/toxi/sim/dla/BottomUpOrder.java +76 -0
  329. data/src/toxi/sim/dla/DLA.java +497 -0
  330. data/src/toxi/sim/dla/DLAConfiguration.java +364 -0
  331. data/src/toxi/sim/dla/DLAEventAdapter.java +64 -0
  332. data/src/toxi/sim/dla/DLAEventListener.java +57 -0
  333. data/src/toxi/sim/dla/DLAGuideLines.java +219 -0
  334. data/src/toxi/sim/dla/DLAParticle.java +102 -0
  335. data/src/toxi/sim/dla/DLASegment.java +88 -0
  336. data/src/toxi/sim/dla/PipelineOrder.java +50 -0
  337. data/src/toxi/sim/dla/RadialDistanceOrder.java +92 -0
  338. data/src/toxi/sim/erosion/ErosionFunction.java +122 -0
  339. data/src/toxi/sim/erosion/TalusAngleErosion.java +145 -0
  340. data/src/toxi/sim/erosion/ThermalErosion.java +75 -0
  341. data/src/toxi/sim/fluids/FluidSolver2D.java +762 -0
  342. data/src/toxi/sim/fluids/FluidSolver3D.java +326 -0
  343. data/src/toxi/sim/grayscott/GrayScott.java +469 -0
  344. data/src/toxi/util/DateUtils.java +141 -0
  345. data/src/toxi/util/FileSequenceDescriptor.java +181 -0
  346. data/src/toxi/util/FileUtils.java +467 -0
  347. data/src/toxi/util/datatypes/ArraySet.java +128 -0
  348. data/src/toxi/util/datatypes/ArrayUtil.java +404 -0
  349. data/src/toxi/util/datatypes/BiasedDoubleRange.java +141 -0
  350. data/src/toxi/util/datatypes/BiasedFloatRange.java +141 -0
  351. data/src/toxi/util/datatypes/BiasedIntegerRange.java +141 -0
  352. data/src/toxi/util/datatypes/DoubleRange.java +251 -0
  353. data/src/toxi/util/datatypes/FloatRange.java +251 -0
  354. data/src/toxi/util/datatypes/GenericSet.java +215 -0
  355. data/src/toxi/util/datatypes/IntegerRange.java +247 -0
  356. data/src/toxi/util/datatypes/IntegerSet.java +149 -0
  357. data/src/toxi/util/datatypes/ItemIndex.java +72 -0
  358. data/src/toxi/util/datatypes/SingletonRegistry.java +91 -0
  359. data/src/toxi/util/datatypes/TypedProperties.java +291 -0
  360. data/src/toxi/util/datatypes/UndirectedGraph.java +134 -0
  361. data/src/toxi/util/datatypes/UniqueItemIndex.java +223 -0
  362. data/src/toxi/util/datatypes/WeightedRandomEntry.java +76 -0
  363. data/src/toxi/util/datatypes/WeightedRandomSet.java +125 -0
  364. data/src/toxi/util/events/EventDispatcher.java +86 -0
  365. data/src/toxi/volume/AdditiveBrush.java +19 -0
  366. data/src/toxi/volume/ArrayIsoSurface.java +297 -0
  367. data/src/toxi/volume/BoxBrush.java +100 -0
  368. data/src/toxi/volume/BrushMode.java +16 -0
  369. data/src/toxi/volume/HashIsoSurface.java +354 -0
  370. data/src/toxi/volume/IsoSurface.java +59 -0
  371. data/src/toxi/volume/MarchingCubesIndex.java +312 -0
  372. data/src/toxi/volume/MeshLatticeBuilder.java +358 -0
  373. data/src/toxi/volume/MeshVoxelizer.java +216 -0
  374. data/src/toxi/volume/MultiplyBrush.java +20 -0
  375. data/src/toxi/volume/PeakBrush.java +21 -0
  376. data/src/toxi/volume/ReplaceBrush.java +19 -0
  377. data/src/toxi/volume/RoundBrush.java +113 -0
  378. data/src/toxi/volume/VolumetricBrush.java +160 -0
  379. data/src/toxi/volume/VolumetricHashMap.java +179 -0
  380. data/src/toxi/volume/VolumetricSpace.java +195 -0
  381. data/src/toxi/volume/VolumetricSpaceArray.java +214 -0
  382. data/toxiclibs.gemspec +34 -0
  383. metadata +424 -27
data/README.md CHANGED
@@ -1,7 +1,13 @@
1
- ## Using Toxiclibs jars in JRubyArt
2
- ### Also works with ruby-processing
1
+ ## Toxiclibs for JRubyArt
2
+ [![Gem Version](https://badge.fury.io/rb/toxiclibs.svg)](http://badge.fury.io/rb/toxiclibs)
3
+ ### Installing
4
+ ```bash
5
+ gem install toxiclibs
6
+ ```
3
7
 
4
- Here we demonstrate how to create a gem to use Karsten Schmidts (aka toxi, @postspectacular) toxiclibs jars in JRubyArt. To compile the gem follow the instructions for [JRubyArt][]. In this proof of concept version, only a small part of toxiclibs API is exposed, but in principle it should be possible to make all available!!! For this demonstration I have used up to date source code for version 21, since [toxis final release][] has yet to materialise.
8
+ ### NB: Use version 0.4 for ruby-processing
9
+
10
+ Here I have created create a gem to use Karsten Schmidts (aka toxi, @postspectacular) toxiclibs jars in JRubyArt. To compile the gem follow the instructions for [JRubyArt][]. Most parts of toxiclibs API is exposed in the latest version, (but only a few examples are included) in principle it should be possible to make all available!!! For this demonstration I have used up to date source code for version 21, since [toxis final release][] may never materialise (he's probably got more interesting things to do). There are reported to be number of outstanding bugs with toxiclibs, if they affect you report it [here][] (or better fix them yourself and submit a pull request).
5
11
 
6
12
  ![grayscott image](http://4.bp.blogspot.com/-d4MiL4_0Njk/VFJMv6VUicI/AAAAAAAAEgY/fFAfrXDxNXM/s400/grayscott.png)
7
13
 
@@ -17,7 +23,7 @@ Here we demonstrate how to create a gem to use Karsten Schmidts (aka toxi, @post
17
23
 
18
24
  ### Licensing
19
25
 
20
- I should be clear that toxiclibs are the work of Karsten Schmidt:-
26
+ I should be clear that the original toxiclibs is the work of Karsten Schmidt:-
21
27
 
22
28
  Copyright (c) 2010 Karsten Schmidt
23
29
 
@@ -31,4 +37,5 @@ version 2.1 of the License, or (at your option) any later version.
31
37
  [Post Spectacular Home]:http://postspectacular.com/
32
38
  [Toxiclibs Bitbucket]:http://hg.postspectacular.com/
33
39
  [Toxiclibs Documentation]:http://toxiclibs.org/
34
- [Example Usage]:https://github.com/ruby-processing/toxicgem/blob/master/example/gray_scott_tone_map.rb
40
+ [Example Usage]:https://github.com/ruby-processing/toxicgem/tree/master/examples
41
+ [here]:https://github.com/ruby-processing/toxiclibs/issues
data/Rakefile CHANGED
@@ -1,95 +1,38 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'rake/clean'
4
- require 'rubygems/package_task'
5
- require 'rdoc/task'
6
- require 'rake/testtask'
7
- require 'rspec/core/rake_task'
8
1
  require_relative 'lib/toxiclibs/version'
9
2
 
10
- spec = Gem::Specification.new do |s|
11
- s.name = 'toxiclibs'
12
- s.version = Toxiclibs::VERSION
13
- s.has_rdoc = true
14
- s.extra_rdoc_files = ['README.md', 'LICENSE.md']
15
- s.summary = 'Experimental gem for some toxiclibs'
16
- s.description = 'A gem wrapper for some toxiclibs jars'
17
- s.license = 'GPLv3'
18
- s.authors = ['Karsten Schmidt', 'Martin Prout']
19
- s.email = 'martin_p@lineone.net'
20
- s.homepage = 'https://github.com/ruby-processing/toxiclibs'
21
- s.files = %w(LICENSE.md README.md Rakefile) + FileList['lib/**/*.rb', 'example/**/*.rb']
22
- s.files << 'lib/toxiclibs.jar'
23
- s.require_path = 'lib'
24
- s.add_development_dependency "rake", "~> 10.3"
25
- s.add_development_dependency "rake-compiler", "~> 0.9"
26
- s.platform='java'
27
- s.requirements << 'A decent graphics card'
28
- s.requirements << 'java runtime >= 1.7+'
29
- s.requirements << 'processing = 2.2.1+'
30
- end
31
-
32
- # -*- ruby -*-
33
-
34
- require 'java'
35
- require 'rake/javaextensiontask'
36
-
37
- # -*- encoding: utf-8 -*-
38
- require 'psych'
39
-
40
- def copy_jars(name, dest)
41
- conf = '~/.jruby_art/config.yml'
42
- begin
43
- path = File.expand_path(conf)
44
- rp_config = (Psych.load_file(path))
45
- source= "#{rp_config["PROCESSING_ROOT"]}/core/library/"
46
- rescue
47
- raise "WARNING: you must set PROCESSING_ROOT in #{conf} compile"
3
+ def create_manifest
4
+ title = 'Implementation-Title: toxiclibs (java extension for toxicgem) '
5
+ version = format('Implementation-Version: %s', Toxiclibs::VERSION)
6
+ file = File.open('MANIFEST.MF', 'w') do |f|
7
+ f.puts(title)
8
+ f.puts(version)
48
9
  end
49
- body = proc {
50
- Dir["#{source}/core.jar"].each do |f|
51
- puts "Copying #{f} To #{dest}"
52
- FileUtils.cp f, dest
53
- end
54
- }
55
- Rake::Task.define_task(name, &body)
56
10
  end
57
11
 
58
- copy_jars(:processing_jars, 'lib')
12
+ task default: [:init, :compile, :gem]
59
13
 
60
- Rake::JavaExtensionTask.new('toxi') do |ext|
61
- jar = 'lib/core.jar'
62
- ext.classpath = File.expand_path(jar)
63
- ext.name = 'toxiclibs'
64
- ext.debug = true
65
- ext.lib_dir = 'lib'
66
- ext.source_version='1.7'
67
- ext.target_version='1.7'
14
+ desc 'Create Manifest'
15
+ task :init do
16
+ create_manifest
68
17
  end
69
18
 
70
- Gem::PackageTask.new(spec) do |p|
71
- p.gem_spec = spec
72
- p.need_tar = true
73
- p.need_zip = true
19
+ desc 'Build gem'
20
+ task :gem do
21
+ sh "gem build toxiclibs.gemspec"
74
22
  end
75
23
 
76
- Rake::RDocTask.new do |rdoc|
77
- files = ['README.md', 'LICENSE.md'] + FileList['lib/**/*.rb']
78
-
79
- rdoc.rdoc_files.add(files)
80
- rdoc.main = "README.md" # page to start on
81
- rdoc.title = "Toxiclibs Docs"
82
- rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
83
- rdoc.options << '--line-numbers'
24
+ desc 'Compile'
25
+ task :compile do
26
+ sh "mvn package"
27
+ sh "mvn dependency:copy"
28
+ sh "mv target/toxiclibs.jar lib"
84
29
  end
85
30
 
86
- Rake::TestTask.new do |t|
87
- t.test_files = FileList['test/**/*.rb']
88
- end
89
-
90
- RSpec::Core::RakeTask.new do |spec|
91
- spec.pattern = 'spec/*_spec.rb'
92
- spec.rspec_opts = [Dir["lib"].to_a.join(':')]
31
+ desc 'clean'
32
+ task :clean do
33
+ Dir['./**/*.%w{jar gem}'].each do |path|
34
+ puts "Deleting #{path} ..."
35
+ File.delete(path)
36
+ end
37
+ FileUtils.rm_rf('./target')
93
38
  end
94
-
95
-
@@ -0,0 +1,30 @@
1
+ require 'toxiclibs'
2
+ require_relative 'attractor'
3
+ require_relative 'particle'
4
+
5
+ attr_reader :particles, :attractor, :physics
6
+
7
+ def settings
8
+ size 640, 360
9
+ end
10
+
11
+ def setup
12
+ sketch_title "Attract Repel"
13
+ @physics = Physics::VerletPhysics2D.new
14
+ physics.setDrag(0.01)
15
+ @particles = (0..50).map { Particle.new(TVec2D.new(rand(width), rand(height))) }
16
+ @attractor = Attractor.new(TVec2D.new(width / 2, height / 2))
17
+ end
18
+
19
+ def draw
20
+ background(255)
21
+ physics.update
22
+ attractor.display
23
+ particles.each(&:display)
24
+ if mouse_pressed?
25
+ attractor.lock
26
+ attractor.set(mouse_x, mouse_y)
27
+ else
28
+ attractor.unlock
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ require 'forwardable'
2
+
3
+ # The Nature of Code
4
+ # Daniel Shiffman
5
+ # http://natureofcode.com
6
+ class Attractor < Physics::VerletParticle2D
7
+ extend Forwardable
8
+ def_delegators(:@app, :fill, :ellipse, :physics, :width)
9
+ attr_accessor :r
10
+
11
+ def initialize(loc)
12
+ super(loc)
13
+ @app = $app
14
+ @r = 24
15
+ physics.add_particle(self)
16
+ physics.add_behavior(Physics::AttractionBehavior2D.new(self, width, 0.1))
17
+ end
18
+
19
+ def display
20
+ fill(0)
21
+ ellipse(x, y, r * 2, r * 2)
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ require 'forwardable'
2
+
3
+ # The Nature of Code
4
+ # Daniel Shiffman
5
+ # http://natureofcode.com
6
+
7
+ # class Spore extends the class "VerletParticle2D"
8
+ class Particle < Physics::VerletParticle2D
9
+ extend Forwardable
10
+ def_delegators(:@app, :fill, :stroke, :stroke_weight, :ellipse, :physics)
11
+ attr_reader :r
12
+
13
+ def initialize(loc)
14
+ super(loc)
15
+ @app = $app
16
+ @r = 8
17
+ physics.add_particle(self)
18
+ physics.add_behavior(Physics::AttractionBehavior2D.new(self, r * 4, -1))
19
+ end
20
+
21
+ def display
22
+ fill 127
23
+ stroke 0
24
+ stroke_weight 2
25
+ ellipse x, y, r * 2, r * 2
26
+ end
27
+ end
Binary file
@@ -0,0 +1,76 @@
1
+ #
2
+ # Copyright (c) 2010 Daniel Shiffman
3
+ #
4
+ # This demo & library is free software you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
+ #
9
+ # http://creativecommons.org/licenses/LGPL/2.1/
10
+ #
11
+ # This library is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public
17
+ # License along with this library if not, write to the Free Software
18
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
+ class Cluster
20
+ attr_reader :nodes, :diameter, :physics
21
+
22
+ # We initialize a with a number of nodes, a diameter, and centerpoint
23
+ def initialize(physics, n, d, center)
24
+ @physics = physics
25
+ @diameter = d
26
+ @nodes = (0..n).map { Node.new(center.add(TVec2D.random_vector)) }
27
+ # Connect all the nodes with a Spring
28
+ nodes[1..nodes.size - 1].each_with_index do |pi, i|
29
+ nodes[0..i].each do |pj|
30
+ physics.add_spring(Physics::VerletSpring2D.new(pi, pj, diameter, 0.01))
31
+ end
32
+ end
33
+ end
34
+
35
+ def display
36
+ nodes.each(&:display)
37
+ end
38
+ # This functons connects one cluster to another
39
+ # Each point of one cluster connects to each point of the other cluster
40
+ # The connection is a "VerletMinDistanceSpring"
41
+ # A VerletMinDistanceSpring is a spring which only enforces its rest length if the
42
+ # current distance is less than its rest length. This is handy if you just want to
43
+ # ensure objects are at least a certain distance from each other, but don't
44
+ # care if it's bigger than the enforced minimum.
45
+
46
+ def connect(other)
47
+ other_nodes = other.nodes
48
+ nodes.each do |pi|
49
+ other_nodes.each do |pj|
50
+ physics.add_spring(Physics::VerletMinDistanceSpring2D.new(pi, pj, (diameter + other.diameter) * 0.5, 0.05))
51
+ end
52
+ end
53
+ end
54
+
55
+ # Draw all the internal connections
56
+ def internal_connections(app)
57
+ app.stroke(200, 0, 0, 80)
58
+ nodes[0..nodes.size - 1].each_with_index do |pi, i|
59
+ nodes[i + 1..nodes.size - 1].each do |pj|
60
+ app.line(pi.x, pi.y, pj.x, pj.y)
61
+ end
62
+ end
63
+ end
64
+
65
+ # Draw all the connections between this and another Cluster
66
+ def show_connections(app, other)
67
+ app.stroke(200, 200, 0, 20)
68
+ app.stroke_weight(2)
69
+ other_nodes = other.nodes
70
+ nodes.each do |pi|
71
+ other_nodes[0..other_nodes.size - 1].each do |pj|
72
+ app.line(pi.x, pi.y, pj.x, pj.y)
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,92 @@
1
+ require 'jruby_art'
2
+ require 'toxiclibs'
3
+ require_relative 'cluster'
4
+ require_relative 'node'
5
+
6
+ #
7
+ # Copyright (c) 2010 Daniel Shiffman
8
+ #
9
+ # This demo & library is free software you can redistribute it and/or
10
+ # modify it under the terms of the GNU Lesser General Public
11
+ # License as published by the Free Software Foundation either
12
+ # version 2.1 of the License, or (at your option) any later version.
13
+ #
14
+ # http://creativecommons.org/licenses/LGPL/2.1/
15
+ #
16
+ # This library is distributed in the hope that it will be useful,
17
+ # but WITHOUT ANY WARRANTY without even the implied warranty of
18
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19
+ # Lesser General Public License for more details.
20
+ #
21
+ # You should have received a copy of the GNU Lesser General Public
22
+ # License along with this library if not, write to the Free Software
23
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24
+
25
+ attr_reader :physics, :clusters, :show_physics, :show_particles, :f
26
+
27
+ def settings
28
+ size(640, 360)
29
+ end
30
+
31
+ def setup
32
+ sketch_title 'Force Directed Graph'
33
+ @f = create_font('Georgia', 12, true)
34
+ @show_physics = true
35
+ @show_particles = true
36
+ # Initialize the physics
37
+ @physics = Physics::VerletPhysics2D.new
38
+ physics.set_world_bounds(Toxi::Rect.new(10, 10, width - 20, height - 20))
39
+ # Spawn a new random graph
40
+ new_graph
41
+ end
42
+
43
+ # Spawn a new random graph
44
+ def new_graph
45
+ # Clear physics
46
+ physics.clear
47
+ center = TVec2D.new(width / 2, height / 2)
48
+ @clusters = (0..8).map { Cluster.new(physics, rand(3..8), rand(20..100), center) }
49
+ # All clusters connect to all clusters
50
+ clusters.each_with_index do |ci, i|
51
+ clusters[i + 1..clusters.size - 1].each do |cj|
52
+ ci.connect(cj)
53
+ end
54
+ end
55
+ end
56
+
57
+ def draw
58
+ # Update the physics world
59
+ physics.update
60
+ background(255)
61
+ # Display all points
62
+ clusters.each(&:display) if show_particles
63
+ # If we want to see the physics
64
+ if show_physics
65
+ clusters.each_with_index do |ci, i|
66
+ ci.internal_connections self
67
+ # Cluster connections to other clusters
68
+ clusters[1 + i..clusters.size - 1].each do |cj|
69
+ ci.show_connections(self, cj)
70
+ end
71
+ end
72
+ end
73
+ # Instructions
74
+ fill(0)
75
+ text_font(f)
76
+ text("'p' to display or hide particles\n'c' to display or hide connections\n'n' for new graph", 10, 20)
77
+ end
78
+
79
+ # Key press commands
80
+ def key_pressed
81
+ case key
82
+ when 'c'
83
+ @show_physics = !show_physics
84
+ @show_particles = true unless show_physics
85
+ when 'p'
86
+ @show_particles = !show_particles
87
+ @show_physics = true unless show_particles
88
+ when 'n'
89
+ new_graph
90
+ end
91
+ end
92
+
@@ -0,0 +1,26 @@
1
+ require 'forwardable'
2
+
3
+ # The Nature of Code
4
+ # Daniel Shiffman
5
+ # http://natureofcode.com
6
+ # Force directed graph
7
+ # Heavily based on: http://code.google.com/p/fidgen/
8
+ # Notice how we are using inheritance here!
9
+ # We could have just stored a reference to a VerletParticle object
10
+ # inside the Node class, but inheritance is a nice alternative
11
+ class Node < Physics::VerletParticle2D
12
+ extend Forwardable
13
+ def_delegators(:@app, :fill, :stroke, :stroke_weight, :ellipse)
14
+ def initialize(pos)
15
+ super(pos)
16
+ @app = $app
17
+ end
18
+
19
+ # All we're doing really is adding a display function to a VerletParticle
20
+ def display
21
+ fill(50, 200, 200, 150)
22
+ stroke(50, 200, 200)
23
+ stroke_weight(2)
24
+ ellipse(x, y, 16, 16)
25
+ end
26
+ end
@@ -0,0 +1,75 @@
1
+ require 'toxiclibs'
2
+ #
3
+ # <p>GrayScottImage uses the seedImage method to use a bitmap as simulation seed.
4
+ # In this demo the image is re-applied every frame and the user can adjust the
5
+ # F coefficient of the reaction diffusion to produce different patterns emerging
6
+ # from the boundary of the bitmapped seed. Unlike some other GS demos provided,
7
+ # this one also uses a wrapped simulation space, creating tiled patterns.</p>
8
+ #
9
+ # <p><strong>usage:</strong></p>
10
+ # <ul>
11
+ # <li>click + drag mouse to locally disturb the simulation</li>
12
+ # <li>press 1-9 to adjust the F parameter of the simulation</li>
13
+ # <li>press any other key to reset</li>
14
+ # </ul>
15
+ #
16
+
17
+ #
18
+ # Copyright (c) 2010 Karsten Schmidt
19
+ #
20
+ # This demo & library is free software you can redistribute it and/or
21
+ # modify it under the terms of the GNU Lesser General Public
22
+ # License as published by the Free Software Foundation either
23
+ # version 2.1 of the License, or (at your option) any later version.
24
+ #
25
+ # http:#creativecommons.org/licenses/LGPL/2.1/
26
+ #
27
+ # This library is distributed in the hope that it will be useful,
28
+ # but WITHOUT ANY WARRANTY without even the implied warranty of
29
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
30
+ # Lesser General Public License for more details.
31
+ #
32
+ # You should have received a copy of the GNU Lesser General Public
33
+ # License along with this library if not, write to the Free Software
34
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
35
+ #
36
+
37
+ attr_reader :gs, :tone_map, :img
38
+
39
+ def settings
40
+ size 256, 256
41
+ end
42
+
43
+ def setup
44
+ sketch_title 'Gray Scott Image'
45
+ @gs = Simulation::GrayScott.new width, height, true
46
+ @img = load_image 'ti_yong.png'
47
+ # create a duo-tone gradient map with 256 steps
48
+ # NB: use '::' in place of '.' here for these java constants
49
+ @tone_map = Toxi::ToneMap.new(0, 0.33, Toxi::NamedColor::CRIMSON, Toxi::NamedColor::WHITE, 256)
50
+ end
51
+
52
+ def draw
53
+ @gs.seed_image(img.pixels, img.width, img.height)
54
+ @gs.set_rect(mouse_x, mouse_y, 20, 20) if mouse_pressed?
55
+ load_pixels
56
+ 10.times { @gs.update(1) }
57
+ # read out the V result array
58
+ # and use tone map to render colours
59
+ gs.v.length.times do |i|
60
+ pixels[i]=tone_map.getARGBToneFor(gs.v[i]) # NB: don't camel case convert here
61
+ end
62
+ update_pixels
63
+ end
64
+
65
+ def key_pressed
66
+ control_key = %w(1 2 3 4 5 6 7 8 9)
67
+ case key
68
+ when *control_key
69
+ @gs.setF(0.02 + (key.to_i) * 0.001)
70
+ when 's'
71
+ save_frame 'toxi.png'
72
+ else
73
+ @gs.reset
74
+ end
75
+ end