toxiclibs 0.4.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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