toxiclibs 0.4.0 → 0.8.0

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 (404) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +16 -0
  3. data/.mvn/extensions.xml +8 -0
  4. data/.mvn/wrapper/maven-wrapper.properties +1 -0
  5. data/.travis.yml +23 -0
  6. data/CHANGELOG.md +7 -0
  7. data/COPYING.md +14 -0
  8. data/Gemfile +10 -0
  9. data/LICENSE +675 -0
  10. data/README.md +9 -7
  11. data/Rakefile +25 -81
  12. data/examples/README.md +5 -0
  13. data/examples/attract_repel/attract_repel.rb +30 -0
  14. data/examples/attract_repel/attractor.rb +23 -0
  15. data/examples/attract_repel/particle.rb +27 -0
  16. data/examples/data/ReplicaBold.ttf +0 -0
  17. data/examples/data/ti_yong.png +0 -0
  18. data/examples/force_directed/cluster.rb +76 -0
  19. data/examples/force_directed/force_directed_graph.rb +92 -0
  20. data/examples/force_directed/node.rb +26 -0
  21. data/examples/gray_scott_image.rb +74 -0
  22. data/examples/gray_scott_tone_map.rb +77 -0
  23. data/examples/implicit.rb +139 -0
  24. data/examples/inflate_mesh.rb +89 -0
  25. data/examples/model_align.rb +43 -0
  26. data/examples/physics_type.rb +77 -0
  27. data/examples/povmesh/data/mask.jpg +0 -0
  28. data/examples/povmesh/ftest.rb +59 -0
  29. data/examples/povmesh/mesh_align.rb +47 -0
  30. data/examples/povmesh/tentacle.rb +71 -0
  31. data/examples/simple_cluster/cluster.rb +47 -0
  32. data/examples/simple_cluster/node.rb +27 -0
  33. data/examples/simple_cluster/simple_cluster.rb +60 -0
  34. data/examples/soft_body/blanket.rb +45 -0
  35. data/examples/soft_body/connection.rb +16 -0
  36. data/examples/soft_body/particle.rb +22 -0
  37. data/examples/soft_body/soft_body_square_adapted.rb +55 -0
  38. data/examples/spherical_harmonics_mesh.rb +50 -0
  39. data/examples/test_rect.rb +32 -0
  40. data/lib/toxiclibs.jar +0 -0
  41. data/lib/toxiclibs.rb +72 -22
  42. data/lib/toxiclibs/version.rb +1 -1
  43. data/pom.rb +63 -0
  44. data/pom.xml +124 -0
  45. data/src/com/toxi/net/ClientListener.java +41 -0
  46. data/src/com/toxi/net/ServerListener.java +70 -0
  47. data/src/com/toxi/net/ServerListenerAdapter.java +47 -0
  48. data/src/com/toxi/net/ServerState.java +18 -0
  49. data/src/com/toxi/net/UDPConnection.java +66 -0
  50. data/src/com/toxi/net/UDPSyncClient.java +81 -0
  51. data/src/com/toxi/net/UDPSyncServer.java +450 -0
  52. data/src/com/toxi/nio/UDPClient.java +121 -0
  53. data/src/com/toxi/nio/UDPClientState.java +32 -0
  54. data/src/com/toxi/nio/UDPServer.java +129 -0
  55. data/src/toxi/audio/AudioBuffer.java +229 -0
  56. data/src/toxi/audio/AudioSource.java +288 -0
  57. data/src/toxi/audio/DecompressInputStream.java +159 -0
  58. data/src/toxi/audio/IIRFilter.java +197 -0
  59. data/src/toxi/audio/JOALUtil.java +388 -0
  60. data/src/toxi/audio/MultiTimbralManager.java +162 -0
  61. data/src/toxi/audio/SoundListener.java +154 -0
  62. data/src/toxi/audio/SynthUtil.java +109 -0
  63. data/src/toxi/color/AccessCriteria.java +114 -0
  64. data/src/toxi/color/AlphaAccessor.java +67 -0
  65. data/src/toxi/color/CMYKAccessor.java +122 -0
  66. data/src/toxi/color/CMYKDistanceProxy.java +40 -0
  67. data/src/toxi/color/ColorGradient.java +260 -0
  68. data/src/toxi/color/ColorList.java +699 -0
  69. data/src/toxi/color/ColorRange.java +671 -0
  70. data/src/toxi/color/ColorTheme.java +163 -0
  71. data/src/toxi/color/DistanceProxy.java +44 -0
  72. data/src/toxi/color/HSVAccessor.java +113 -0
  73. data/src/toxi/color/HSVDistanceProxy.java +40 -0
  74. data/src/toxi/color/HistEntry.java +85 -0
  75. data/src/toxi/color/Histogram.java +185 -0
  76. data/src/toxi/color/Hue.java +249 -0
  77. data/src/toxi/color/LuminanceAccessor.java +78 -0
  78. data/src/toxi/color/NamedColor.java +935 -0
  79. data/src/toxi/color/ProximityComparator.java +70 -0
  80. data/src/toxi/color/RGBAccessor.java +113 -0
  81. data/src/toxi/color/RGBDistanceProxy.java +41 -0
  82. data/src/toxi/color/ReadonlyTColor.java +296 -0
  83. data/src/toxi/color/TColor.java +1677 -0
  84. data/src/toxi/color/TColorAdapter.java +68 -0
  85. data/src/toxi/color/ToneMap.java +218 -0
  86. data/src/toxi/color/theory/AnalogousStrategy.java +140 -0
  87. data/src/toxi/color/theory/ColorTheoryRegistry.java +139 -0
  88. data/src/toxi/color/theory/ColorTheoryStrategy.java +56 -0
  89. data/src/toxi/color/theory/ComplementaryStrategy.java +111 -0
  90. data/src/toxi/color/theory/CompoundTheoryStrategy.java +143 -0
  91. data/src/toxi/color/theory/LeftSplitComplementaryStrategy.java +82 -0
  92. data/src/toxi/color/theory/MonochromeTheoryStrategy.java +103 -0
  93. data/src/toxi/color/theory/RightSplitComplementaryStrategy.java +82 -0
  94. data/src/toxi/color/theory/SingleComplementStrategy.java +76 -0
  95. data/src/toxi/color/theory/SplitComplementaryStrategy.java +77 -0
  96. data/src/toxi/color/theory/TetradTheoryStrategy.java +114 -0
  97. data/src/toxi/color/theory/TriadTheoryStrategy.java +77 -0
  98. data/src/toxi/data/csv/CSVAdapter.java +74 -0
  99. data/src/toxi/data/csv/CSVFieldMapper.java +212 -0
  100. data/src/toxi/data/csv/CSVListener.java +61 -0
  101. data/src/toxi/data/csv/CSVParser.java +202 -0
  102. data/src/toxi/data/feeds/AtomAuthor.java +49 -0
  103. data/src/toxi/data/feeds/AtomContent.java +50 -0
  104. data/src/toxi/data/feeds/AtomEntry.java +111 -0
  105. data/src/toxi/data/feeds/AtomFeed.java +129 -0
  106. data/src/toxi/data/feeds/AtomLink.java +62 -0
  107. data/src/toxi/data/feeds/RSSChannel.java +88 -0
  108. data/src/toxi/data/feeds/RSSEnclosure.java +60 -0
  109. data/src/toxi/data/feeds/RSSFeed.java +99 -0
  110. data/src/toxi/data/feeds/RSSItem.java +104 -0
  111. data/src/toxi/data/feeds/util/EntityStripper.java +2480 -0
  112. data/src/toxi/data/feeds/util/Iso8601DateAdapter.java +101 -0
  113. data/src/toxi/data/feeds/util/Rfc822DateAdapter.java +93 -0
  114. data/src/toxi/geom/AABB.java +658 -0
  115. data/src/toxi/geom/Axis3D.java +116 -0
  116. data/src/toxi/geom/AxisAlignedCylinder.java +163 -0
  117. data/src/toxi/geom/BernsteinPolynomial.java +94 -0
  118. data/src/toxi/geom/BezierCurve2D.java +159 -0
  119. data/src/toxi/geom/BezierCurve3D.java +148 -0
  120. data/src/toxi/geom/BooleanShapeBuilder.java +185 -0
  121. data/src/toxi/geom/BoxIntersector.java +52 -0
  122. data/src/toxi/geom/Circle.java +230 -0
  123. data/src/toxi/geom/CircleIntersector.java +85 -0
  124. data/src/toxi/geom/Cone.java +150 -0
  125. data/src/toxi/geom/ConvexPolygonClipper.java +136 -0
  126. data/src/toxi/geom/CoordinateExtractor.java +16 -0
  127. data/src/toxi/geom/Ellipse.java +250 -0
  128. data/src/toxi/geom/GMatrix.java +2599 -0
  129. data/src/toxi/geom/GVector.java +833 -0
  130. data/src/toxi/geom/GlobalGridTesselator.java +54 -0
  131. data/src/toxi/geom/GridTesselator.java +108 -0
  132. data/src/toxi/geom/Intersector2D.java +49 -0
  133. data/src/toxi/geom/Intersector3D.java +51 -0
  134. data/src/toxi/geom/IsectData2D.java +103 -0
  135. data/src/toxi/geom/IsectData3D.java +103 -0
  136. data/src/toxi/geom/Line2D.java +534 -0
  137. data/src/toxi/geom/Line3D.java +471 -0
  138. data/src/toxi/geom/LineStrip2D.java +430 -0
  139. data/src/toxi/geom/LineStrip3D.java +230 -0
  140. data/src/toxi/geom/LocalGridTesselator.java +57 -0
  141. data/src/toxi/geom/Matrix3d.java +3048 -0
  142. data/src/toxi/geom/Matrix4f.java +3446 -0
  143. data/src/toxi/geom/Matrix4x4.java +1076 -0
  144. data/src/toxi/geom/MatrixSizeException.java +58 -0
  145. data/src/toxi/geom/OctreeVisitor.java +44 -0
  146. data/src/toxi/geom/Origin3D.java +148 -0
  147. data/src/toxi/geom/Plane.java +293 -0
  148. data/src/toxi/geom/PlaneIntersector.java +57 -0
  149. data/src/toxi/geom/PointCloud3D.java +253 -0
  150. data/src/toxi/geom/PointOctree.java +502 -0
  151. data/src/toxi/geom/PointQuadtree.java +375 -0
  152. data/src/toxi/geom/Polygon2D.java +1038 -0
  153. data/src/toxi/geom/PolygonClipper2D.java +45 -0
  154. data/src/toxi/geom/PolygonTesselator.java +20 -0
  155. data/src/toxi/geom/QuadtreeVisitor.java +44 -0
  156. data/src/toxi/geom/Quaternion.java +641 -0
  157. data/src/toxi/geom/Ray2D.java +146 -0
  158. data/src/toxi/geom/Ray3D.java +150 -0
  159. data/src/toxi/geom/Ray3DIntersector.java +75 -0
  160. data/src/toxi/geom/ReadonlyVec2D.java +575 -0
  161. data/src/toxi/geom/ReadonlyVec3D.java +628 -0
  162. data/src/toxi/geom/ReadonlyVec4D.java +431 -0
  163. data/src/toxi/geom/Rect.java +720 -0
  164. data/src/toxi/geom/Reflector3D.java +58 -0
  165. data/src/toxi/geom/Shape2D.java +94 -0
  166. data/src/toxi/geom/Shape3D.java +42 -0
  167. data/src/toxi/geom/SingularMatrixException.java +57 -0
  168. data/src/toxi/geom/SpatialBins.java +182 -0
  169. data/src/toxi/geom/SpatialIndex.java +61 -0
  170. data/src/toxi/geom/Sphere.java +224 -0
  171. data/src/toxi/geom/SphereIntersectorReflector.java +196 -0
  172. data/src/toxi/geom/Spline2D.java +349 -0
  173. data/src/toxi/geom/Spline3D.java +351 -0
  174. data/src/toxi/geom/SutherlandHodgemanClipper.java +151 -0
  175. data/src/toxi/geom/Triangle2D.java +422 -0
  176. data/src/toxi/geom/Triangle3D.java +456 -0
  177. data/src/toxi/geom/TriangleIntersector.java +105 -0
  178. data/src/toxi/geom/Vec2D.java +1328 -0
  179. data/src/toxi/geom/Vec3D.java +1832 -0
  180. data/src/toxi/geom/Vec4D.java +985 -0
  181. data/src/toxi/geom/VecMathUtil.java +100 -0
  182. data/src/toxi/geom/XAxisCylinder.java +64 -0
  183. data/src/toxi/geom/YAxisCylinder.java +65 -0
  184. data/src/toxi/geom/ZAxisCylinder.java +64 -0
  185. data/src/toxi/geom/mesh/BezierPatch.java +200 -0
  186. data/src/toxi/geom/mesh/BoxSelector.java +62 -0
  187. data/src/toxi/geom/mesh/DefaultSTLColorModel.java +67 -0
  188. data/src/toxi/geom/mesh/DefaultSelector.java +50 -0
  189. data/src/toxi/geom/mesh/Face.java +176 -0
  190. data/src/toxi/geom/mesh/LaplacianSmooth.java +80 -0
  191. data/src/toxi/geom/mesh/MaterialiseSTLColorModel.java +150 -0
  192. data/src/toxi/geom/mesh/Mesh3D.java +224 -0
  193. data/src/toxi/geom/mesh/MeshIntersector.java +91 -0
  194. data/src/toxi/geom/mesh/OBJWriter.java +194 -0
  195. data/src/toxi/geom/mesh/PLYWriter.java +167 -0
  196. data/src/toxi/geom/mesh/PlaneSelector.java +90 -0
  197. data/src/toxi/geom/mesh/STLColorModel.java +54 -0
  198. data/src/toxi/geom/mesh/STLReader.java +185 -0
  199. data/src/toxi/geom/mesh/STLWriter.java +323 -0
  200. data/src/toxi/geom/mesh/SphereFunction.java +156 -0
  201. data/src/toxi/geom/mesh/SphericalHarmonics.java +110 -0
  202. data/src/toxi/geom/mesh/SuperEllipsoid.java +110 -0
  203. data/src/toxi/geom/mesh/SurfaceFunction.java +75 -0
  204. data/src/toxi/geom/mesh/SurfaceMeshBuilder.java +149 -0
  205. data/src/toxi/geom/mesh/Terrain.java +451 -0
  206. data/src/toxi/geom/mesh/TriangleMesh.java +1201 -0
  207. data/src/toxi/geom/mesh/Vertex.java +78 -0
  208. data/src/toxi/geom/mesh/VertexSelector.java +193 -0
  209. data/src/toxi/geom/mesh/WEFace.java +100 -0
  210. data/src/toxi/geom/mesh/WEMeshFilterStrategy.java +51 -0
  211. data/src/toxi/geom/mesh/WETriangleMesh.java +761 -0
  212. data/src/toxi/geom/mesh/WEVertex.java +134 -0
  213. data/src/toxi/geom/mesh/WingedEdge.java +115 -0
  214. data/src/toxi/geom/mesh/subdiv/CentroidSubdiv.java +37 -0
  215. data/src/toxi/geom/mesh/subdiv/DisplacementSubdivision.java +85 -0
  216. data/src/toxi/geom/mesh/subdiv/DualDisplacementSubdivision.java +94 -0
  217. data/src/toxi/geom/mesh/subdiv/DualSubdivision.java +49 -0
  218. data/src/toxi/geom/mesh/subdiv/EdgeLengthComparator.java +50 -0
  219. data/src/toxi/geom/mesh/subdiv/FaceCountComparator.java +51 -0
  220. data/src/toxi/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +80 -0
  221. data/src/toxi/geom/mesh/subdiv/MidpointSubdiv.java +42 -0
  222. data/src/toxi/geom/mesh/subdiv/MidpointSubdivision.java +48 -0
  223. data/src/toxi/geom/mesh/subdiv/NewSubdivStrategy.java +23 -0
  224. data/src/toxi/geom/mesh/subdiv/NormalDisplacementSubdivision.java +74 -0
  225. data/src/toxi/geom/mesh/subdiv/SubdivisionStrategy.java +83 -0
  226. data/src/toxi/geom/mesh/subdiv/TriSubdivision.java +51 -0
  227. data/src/toxi/geom/mesh2d/DelaunayTriangle.java +222 -0
  228. data/src/toxi/geom/mesh2d/DelaunayTriangulation.java +327 -0
  229. data/src/toxi/geom/mesh2d/DelaunayVertex.java +560 -0
  230. data/src/toxi/geom/mesh2d/Voronoi.java +149 -0
  231. data/src/toxi/geom/nurbs/BasicNurbsCurve.java +210 -0
  232. data/src/toxi/geom/nurbs/BasicNurbsSurface.java +233 -0
  233. data/src/toxi/geom/nurbs/ControlNet.java +148 -0
  234. data/src/toxi/geom/nurbs/CurveCreator.java +112 -0
  235. data/src/toxi/geom/nurbs/CurveUtils.java +259 -0
  236. data/src/toxi/geom/nurbs/InterpolationException.java +65 -0
  237. data/src/toxi/geom/nurbs/KnotVector.java +333 -0
  238. data/src/toxi/geom/nurbs/NurbsCreator.java +815 -0
  239. data/src/toxi/geom/nurbs/NurbsCurve.java +120 -0
  240. data/src/toxi/geom/nurbs/NurbsMeshCreator.java +145 -0
  241. data/src/toxi/geom/nurbs/NurbsSurface.java +147 -0
  242. data/src/toxi/image/util/Filter8bit.java +331 -0
  243. data/src/toxi/image/util/TiledFrameExporter.java +162 -0
  244. data/src/toxi/math/BezierInterpolation.java +102 -0
  245. data/src/toxi/math/CircularInterpolation.java +88 -0
  246. data/src/toxi/math/CosineInterpolation.java +51 -0
  247. data/src/toxi/math/DecimatedInterpolation.java +77 -0
  248. data/src/toxi/math/ExponentialInterpolation.java +68 -0
  249. data/src/toxi/math/InterpolateStrategy.java +60 -0
  250. data/src/toxi/math/Interpolation2D.java +93 -0
  251. data/src/toxi/math/LinearInterpolation.java +46 -0
  252. data/src/toxi/math/MathUtils.java +990 -0
  253. data/src/toxi/math/NonLinearScaleMap.java +101 -0
  254. data/src/toxi/math/ScaleMap.java +183 -0
  255. data/src/toxi/math/SigmoidInterpolation.java +78 -0
  256. data/src/toxi/math/SinCosLUT.java +141 -0
  257. data/src/toxi/math/ThresholdInterpolation.java +58 -0
  258. data/src/toxi/math/ZoomLensInterpolation.java +126 -0
  259. data/src/toxi/math/conversion/UnitTranslator.java +161 -0
  260. data/src/toxi/math/noise/PerlinNoise.java +281 -0
  261. data/src/toxi/math/noise/SimplexNoise.java +542 -0
  262. data/src/toxi/math/waves/AMFMSineWave.java +143 -0
  263. data/src/toxi/math/waves/AbstractWave.java +248 -0
  264. data/src/toxi/math/waves/ConstantWave.java +48 -0
  265. data/src/toxi/math/waves/FMHarmonicSquareWave.java +155 -0
  266. data/src/toxi/math/waves/FMSawtoothWave.java +144 -0
  267. data/src/toxi/math/waves/FMSineWave.java +142 -0
  268. data/src/toxi/math/waves/FMSquareWave.java +143 -0
  269. data/src/toxi/math/waves/FMTriangleWave.java +126 -0
  270. data/src/toxi/math/waves/SineWave.java +81 -0
  271. data/src/toxi/math/waves/Wave2D.java +68 -0
  272. data/src/toxi/math/waves/WaveState.java +69 -0
  273. data/src/toxi/music/scale/AbstractScale.java +117 -0
  274. data/src/toxi/music/scale/GenericScale.java +66 -0
  275. data/src/toxi/music/scale/MajorScale.java +41 -0
  276. data/src/toxi/newmesh/AttributedEdge.java +106 -0
  277. data/src/toxi/newmesh/AttributedFace.java +63 -0
  278. data/src/toxi/newmesh/IndexedTriangleMesh.java +809 -0
  279. data/src/toxi/newmesh/MeshAttributeCompiler.java +45 -0
  280. data/src/toxi/newmesh/MeshFaceNormalCompiler.java +52 -0
  281. data/src/toxi/newmesh/MeshUVCompiler.java +52 -0
  282. data/src/toxi/newmesh/MeshVertexColorCompiler.java +49 -0
  283. data/src/toxi/newmesh/MeshVertexCompiler.java +54 -0
  284. data/src/toxi/newmesh/MeshVertexNormalCompiler.java +55 -0
  285. data/src/toxi/newmesh/SpatialIndex.java +78 -0
  286. data/src/toxi/physics2d/ParticlePath2D.java +100 -0
  287. data/src/toxi/physics2d/ParticleString2D.java +184 -0
  288. data/src/toxi/physics2d/PullBackSpring2D.java +51 -0
  289. data/src/toxi/physics2d/VerletConstrainedSpring2D.java +89 -0
  290. data/src/toxi/physics2d/VerletMinDistanceSpring2D.java +57 -0
  291. data/src/toxi/physics2d/VerletParticle2D.java +457 -0
  292. data/src/toxi/physics2d/VerletPhysics2D.java +448 -0
  293. data/src/toxi/physics2d/VerletSpring2D.java +181 -0
  294. data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +212 -0
  295. data/src/toxi/physics2d/behaviors/ConstantForceBehavior2D.java +112 -0
  296. data/src/toxi/physics2d/behaviors/GravityBehavior2D.java +61 -0
  297. data/src/toxi/physics2d/behaviors/ParticleBehavior2D.java +66 -0
  298. data/src/toxi/physics2d/constraints/AngularConstraint.java +83 -0
  299. data/src/toxi/physics2d/constraints/AxisConstraint.java +71 -0
  300. data/src/toxi/physics2d/constraints/CircularConstraint.java +69 -0
  301. data/src/toxi/physics2d/constraints/MaxConstraint.java +66 -0
  302. data/src/toxi/physics2d/constraints/MinConstraint.java +66 -0
  303. data/src/toxi/physics2d/constraints/ParticleConstraint2D.java +47 -0
  304. data/src/toxi/physics2d/constraints/PolygonConstraint.java +93 -0
  305. data/src/toxi/physics2d/constraints/RectConstraint.java +114 -0
  306. data/src/toxi/physics3d/ParticlePath3D.java +100 -0
  307. data/src/toxi/physics3d/ParticleString3D.java +184 -0
  308. data/src/toxi/physics3d/PullBackSpring3D.java +50 -0
  309. data/src/toxi/physics3d/VerletConstrainedSpring3D.java +88 -0
  310. data/src/toxi/physics3d/VerletMinDistanceSpring3D.java +56 -0
  311. data/src/toxi/physics3d/VerletParticle3D.java +385 -0
  312. data/src/toxi/physics3d/VerletPhysics3D.java +417 -0
  313. data/src/toxi/physics3d/VerletSpring3D.java +180 -0
  314. data/src/toxi/physics3d/behaviors/AttractionBehavior3D.java +182 -0
  315. data/src/toxi/physics3d/behaviors/ConstantForceBehavior3D.java +92 -0
  316. data/src/toxi/physics3d/behaviors/GravityBehavior3D.java +61 -0
  317. data/src/toxi/physics3d/behaviors/ParticleBehavior3D.java +52 -0
  318. data/src/toxi/physics3d/constraints/AxisConstraint.java +68 -0
  319. data/src/toxi/physics3d/constraints/BoxConstraint.java +121 -0
  320. data/src/toxi/physics3d/constraints/CylinderConstraint.java +87 -0
  321. data/src/toxi/physics3d/constraints/MaxConstraint.java +65 -0
  322. data/src/toxi/physics3d/constraints/MinConstraint.java +65 -0
  323. data/src/toxi/physics3d/constraints/ParticleConstraint3D.java +49 -0
  324. data/src/toxi/physics3d/constraints/PlaneConstraint.java +78 -0
  325. data/src/toxi/physics3d/constraints/SoftBoxConstraint.java +87 -0
  326. data/src/toxi/physics3d/constraints/SphereConstraint.java +108 -0
  327. data/src/toxi/processing/ArrowModifier.java +116 -0
  328. data/src/toxi/processing/DashedLineModifier.java +48 -0
  329. data/src/toxi/processing/DeltaOrientationMapper.java +57 -0
  330. data/src/toxi/processing/Line2DRenderModifier.java +18 -0
  331. data/src/toxi/processing/MeshToVBO.java +127 -0
  332. data/src/toxi/processing/NormalMapper.java +18 -0
  333. data/src/toxi/processing/POVInterface.java +121 -0
  334. data/src/toxi/processing/POVMesh.java +219 -0
  335. data/src/toxi/processing/POVWriter.java +460 -0
  336. data/src/toxi/processing/RCOpaque.java +77 -0
  337. data/src/toxi/processing/RCTransp.java +78 -0
  338. data/src/toxi/processing/TextureBuilder.java +232 -0
  339. data/src/toxi/processing/Textures.java +110 -0
  340. data/src/toxi/processing/ToxiclibsSupport.java +1239 -0
  341. data/src/toxi/processing/Tracing.java +25 -0
  342. data/src/toxi/processing/XYZNormalMapper.java +30 -0
  343. data/src/toxi/sim/automata/CAMatrix.java +297 -0
  344. data/src/toxi/sim/automata/CARule.java +76 -0
  345. data/src/toxi/sim/automata/CARule2D.java +354 -0
  346. data/src/toxi/sim/automata/CAWolfram1D.java +309 -0
  347. data/src/toxi/sim/automata/EvolvableMatrix.java +61 -0
  348. data/src/toxi/sim/automata/MatrixEvolver.java +42 -0
  349. data/src/toxi/sim/dla/BottomUpOrder.java +76 -0
  350. data/src/toxi/sim/dla/DLA.java +497 -0
  351. data/src/toxi/sim/dla/DLAConfiguration.java +364 -0
  352. data/src/toxi/sim/dla/DLAEventAdapter.java +64 -0
  353. data/src/toxi/sim/dla/DLAEventListener.java +57 -0
  354. data/src/toxi/sim/dla/DLAGuideLines.java +219 -0
  355. data/src/toxi/sim/dla/DLAParticle.java +102 -0
  356. data/src/toxi/sim/dla/DLASegment.java +88 -0
  357. data/src/toxi/sim/dla/PipelineOrder.java +50 -0
  358. data/src/toxi/sim/dla/RadialDistanceOrder.java +92 -0
  359. data/src/toxi/sim/erosion/ErosionFunction.java +122 -0
  360. data/src/toxi/sim/erosion/TalusAngleErosion.java +145 -0
  361. data/src/toxi/sim/erosion/ThermalErosion.java +75 -0
  362. data/src/toxi/sim/fluids/FluidSolver2D.java +762 -0
  363. data/src/toxi/sim/fluids/FluidSolver3D.java +326 -0
  364. data/src/toxi/sim/grayscott/GrayScott.java +469 -0
  365. data/src/toxi/util/DateUtils.java +141 -0
  366. data/src/toxi/util/FileSequenceDescriptor.java +181 -0
  367. data/src/toxi/util/FileUtils.java +467 -0
  368. data/src/toxi/util/datatypes/ArraySet.java +128 -0
  369. data/src/toxi/util/datatypes/ArrayUtil.java +404 -0
  370. data/src/toxi/util/datatypes/BiasedDoubleRange.java +141 -0
  371. data/src/toxi/util/datatypes/BiasedFloatRange.java +141 -0
  372. data/src/toxi/util/datatypes/BiasedIntegerRange.java +141 -0
  373. data/src/toxi/util/datatypes/DoubleRange.java +251 -0
  374. data/src/toxi/util/datatypes/FloatRange.java +251 -0
  375. data/src/toxi/util/datatypes/GenericSet.java +215 -0
  376. data/src/toxi/util/datatypes/IntegerRange.java +247 -0
  377. data/src/toxi/util/datatypes/IntegerSet.java +149 -0
  378. data/src/toxi/util/datatypes/ItemIndex.java +72 -0
  379. data/src/toxi/util/datatypes/SingletonRegistry.java +91 -0
  380. data/src/toxi/util/datatypes/TypedProperties.java +291 -0
  381. data/src/toxi/util/datatypes/UndirectedGraph.java +134 -0
  382. data/src/toxi/util/datatypes/UniqueItemIndex.java +223 -0
  383. data/src/toxi/util/datatypes/WeightedRandomEntry.java +76 -0
  384. data/src/toxi/util/datatypes/WeightedRandomSet.java +125 -0
  385. data/src/toxi/util/events/EventDispatcher.java +86 -0
  386. data/src/toxi/volume/AdditiveBrush.java +19 -0
  387. data/src/toxi/volume/ArrayIsoSurface.java +297 -0
  388. data/src/toxi/volume/BoxBrush.java +100 -0
  389. data/src/toxi/volume/BrushMode.java +16 -0
  390. data/src/toxi/volume/HashIsoSurface.java +354 -0
  391. data/src/toxi/volume/IsoSurface.java +59 -0
  392. data/src/toxi/volume/MarchingCubesIndex.java +312 -0
  393. data/src/toxi/volume/MeshLatticeBuilder.java +358 -0
  394. data/src/toxi/volume/MeshVoxelizer.java +216 -0
  395. data/src/toxi/volume/MultiplyBrush.java +20 -0
  396. data/src/toxi/volume/PeakBrush.java +21 -0
  397. data/src/toxi/volume/ReplaceBrush.java +19 -0
  398. data/src/toxi/volume/RoundBrush.java +113 -0
  399. data/src/toxi/volume/VolumetricBrush.java +160 -0
  400. data/src/toxi/volume/VolumetricHashMap.java +179 -0
  401. data/src/toxi/volume/VolumetricSpace.java +195 -0
  402. data/src/toxi/volume/VolumetricSpaceArray.java +214 -0
  403. data/toxiclibs.gemspec +28 -0
  404. metadata +442 -31
data/README.md CHANGED
@@ -1,13 +1,15 @@
1
- ## Using Toxiclibs jars in JRubyArt
2
- Current Gem Version 0.4.0
1
+ ## Toxiclibs for JRubyArt
2
+
3
+ ![travis build](https://travis-ci.org/ruby-processing/toxicgem.svg)
4
+
3
5
  ### Installing
4
6
  ```bash
5
7
  gem install toxiclibs
6
8
  ```
7
9
 
8
- ### NB: Also works with ruby-processing
10
+ ### NB: Use version 0.4 for ruby-processing
9
11
 
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).
12
+ 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). Version 0.5.0+ features java code updated to use java lambda (jdk8) and was compiled against processing-3.0.1 core.jar. Added features are export Mesh to PShape and export Mesh to [povray mesh2](http://www.povray.org/documentation/3.7.0/r3_4.html#r3_4_5_2_4).
11
13
 
12
14
  ![grayscott image](http://4.bp.blogspot.com/-d4MiL4_0Njk/VFJMv6VUicI/AAAAAAAAEgY/fFAfrXDxNXM/s400/grayscott.png)
13
15
 
@@ -23,9 +25,7 @@ Here I have created create a gem to use Karsten Schmidts (aka toxi, @postspectac
23
25
 
24
26
  ### Licensing
25
27
 
26
- I should be clear that toxiclibs are the work of Karsten Schmidt:-
27
-
28
- Copyright (c) 2010 Karsten Schmidt
28
+ I should be clear that the original toxiclibs is the work of Karsten Schmidt see [Copyright[]
29
29
 
30
30
  This demo & library is free software you can redistribute it and/or
31
31
  modify it under the terms of the GNU Lesser General Public
@@ -39,3 +39,5 @@ version 2.1 of the License, or (at your option) any later version.
39
39
  [Toxiclibs Documentation]:http://toxiclibs.org/
40
40
  [Example Usage]:https://github.com/ruby-processing/toxicgem/tree/master/examples
41
41
  [here]:https://github.com/ruby-processing/toxiclibs/issues
42
+ [Copyright]:https://github.com/ruby-processing/toxiclibs/COPYING.md
43
+
data/Rakefile CHANGED
@@ -1,94 +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.requirements << 'A decent graphics card'
27
- s.requirements << 'java runtime >= 1.7+'
28
- s.requirements << 'jruby_art = 0.2+'
29
- end
30
-
31
- # -*- ruby -*-
32
-
33
- require 'java'
34
- require 'rake/javaextensiontask'
35
-
36
- # -*- encoding: utf-8 -*-
37
- require 'psych'
38
-
39
- def copy_jars(name, dest)
40
- conf = '~/.jruby_art/config.yml'
41
- begin
42
- path = File.expand_path(conf)
43
- rp_config = (Psych.load_file(path))
44
- source= "#{rp_config["PROCESSING_ROOT"]}/core/library/"
45
- rescue
46
- 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)
47
9
  end
48
- body = proc {
49
- Dir["#{source}/core.jar"].each do |f|
50
- puts "Copying #{f} To #{dest}"
51
- FileUtils.cp f, dest
52
- end
53
- }
54
- Rake::Task.define_task(name, &body)
55
10
  end
56
11
 
57
- copy_jars(:processing_jars, 'lib')
12
+ task default: [:init, :compile, :gem]
58
13
 
59
- Rake::JavaExtensionTask.new('toxi') do |ext|
60
- jar = 'lib/core.jar'
61
- ext.classpath = File.expand_path(jar)
62
- ext.name = 'toxiclibs'
63
- ext.debug = true
64
- ext.lib_dir = 'lib'
65
- ext.source_version='1.7'
66
- ext.target_version='1.7'
14
+ desc 'Create Manifest'
15
+ task :init do
16
+ create_manifest
67
17
  end
68
18
 
69
- Gem::PackageTask.new(spec) do |p|
70
- p.gem_spec = spec
71
- p.need_tar = true
72
- p.need_zip = true
19
+ desc 'Build gem'
20
+ task :gem do
21
+ sh "gem build toxiclibs.gemspec"
73
22
  end
74
23
 
75
- Rake::RDocTask.new do |rdoc|
76
- files = ['README.md', 'LICENSE.md'] + FileList['lib/**/*.rb']
77
-
78
- rdoc.rdoc_files.add(files)
79
- rdoc.main = "README.md" # page to start on
80
- rdoc.title = "Toxiclibs Docs"
81
- rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
82
- 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"
83
29
  end
84
30
 
85
- Rake::TestTask.new do |t|
86
- t.test_files = FileList['test/**/*.rb']
87
- end
88
-
89
- RSpec::Core::RakeTask.new do |spec|
90
- spec.pattern = 'spec/*_spec.rb'
91
- 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')
92
38
  end
93
-
94
-
@@ -0,0 +1,5 @@
1
+ Certain sketches in this folder need to be run with the `--nojruby` flag:-
2
+
3
+ `physics_type.rb`
4
+
5
+ `gray_scott_image.rb`
@@ -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