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
@@ -0,0 +1,59 @@
1
+ require 'toxiclibs'
2
+
3
+ attr_reader :gfx, :mesh0, :mesh1, :mesh2, :fshape
4
+
5
+ def settings
6
+ size(200, 200, P3D)
7
+ smooth 8
8
+ end
9
+
10
+ def setup
11
+ sketch_title('FTest')
12
+ ArcBall.init(self)
13
+ @gfx = Gfx::MeshToVBO.new(self)
14
+ # define a rounded cube using the SuperEllipsoid surface function
15
+ vert = AABB.fromMinMax(TVec3D.new(-1.0, -3.5, -1.0), TVec3D.new(1.0, 3.5, 1.0))
16
+ box = AABB.fromMinMax(TVec3D.new(1.0, -1.5, -1.0), TVec3D.new(3.0, -3.5, 1.0))
17
+ box2 = AABB.fromMinMax(TVec3D.new(1.0, 2.0, -1.0), TVec3D.new(3.0, 0.0, 1.0))
18
+ @mesh0 = box.to_mesh
19
+ @mesh1 = vert.to_mesh
20
+ @mesh2 = box2.to_mesh # build a composite mesh
21
+ mesh0.add_mesh(mesh1)
22
+ mesh0.add_mesh(mesh2)
23
+ mesh0.compute_face_normals
24
+ fill(color('#c0c0c0')) # silver
25
+ specular(20, 20, 20)
26
+ ambient(100)
27
+ no_stroke
28
+ @fshape = gfx.mesh_to_shape(mesh0, false)
29
+ end
30
+
31
+ def draw
32
+ background 80, 80, 160
33
+ setup_lights
34
+ scale(10)
35
+ shape(fshape)
36
+ end
37
+
38
+ def setup_lights
39
+ lights
40
+ ambient_light(150, 150, 150)
41
+ directional_light(100, 100, 100, -1, 0, 0)
42
+ directional_light(100, 100, 100, 1, 0, -1)
43
+ end
44
+
45
+
46
+ def key_pressed
47
+ case key
48
+ when 'p', 'P'
49
+ fileID = 'FTest'
50
+ pm = Gfx::POVMesh.new(self)
51
+ file = java.io.File.new(sketch_path(fileID + '.inc'))
52
+ pm.begin_save(file)
53
+ pm.set_texture(Gfx::Textures::CHROME)
54
+ pm.saveAsPOV(mesh0.faceOutwards, false)
55
+ pm.end_save
56
+ when 's', 'S'
57
+ save_frame(data_path('FTest.png'))
58
+ end
59
+ end
@@ -0,0 +1,47 @@
1
+ require 'toxiclibs'
2
+
3
+ attr_reader :gfx, :vbo, :meshes
4
+ SCALE = 200
5
+ BOX_SIZE = TVec3D.new(5, 5, 50)
6
+
7
+ def settings
8
+ size(600, 600, P3D)
9
+ end
10
+
11
+ def setup
12
+ sketch_title('Mesh Align')
13
+ ArcBall.init(self)
14
+ @vbo = Gfx::MeshToVBO.new(self)
15
+ no_stroke
16
+ @meshes = create_shape(GROUP)
17
+ 600.times do |i|
18
+ # create a new direction vector for each box
19
+ dir = TVec3D.new(cos(i * TWO_PI / 75), sin(i * TWO_PI / 50), sin(i * TWO_PI / 25)).normalize
20
+ # create a position on a sphere, using the direction vector
21
+ pos = dir.scale(SCALE)
22
+ # create a box mesh at the origin
23
+ b = AABB.new(TVec3D.new, BOX_SIZE).to_mesh
24
+ # align the Z axis of the box with the direction vector
25
+ b.point_towards(dir)
26
+ # move the box to the correct position
27
+ b.transform(Toxi::Matrix4x4.new.translate_self(pos.x, pos.y, pos.z))
28
+ b.compute_face_normals
29
+ temp = vbo.mesh_to_shape(b, false)
30
+ temp.disable_style
31
+ temp.set_fill(color(rand(255), rand(255), rand(255)))
32
+ meshes.add_child(temp)
33
+ end
34
+ end
35
+
36
+ def draw
37
+ background 50, 50, 200
38
+ define_lights
39
+ shape(meshes)
40
+ end
41
+
42
+ def define_lights
43
+ lights
44
+ shininess(16)
45
+ directionalLight(255, 255, 255, 0, -1, 1)
46
+ specular(255)
47
+ end
@@ -0,0 +1,71 @@
1
+ require 'toxiclibs'
2
+
3
+ # A 3D Tentacle by Nikolaus Gradwohl http://www.local-guru.net
4
+ # Adapted for JRubyArt and mesh to PShape, and mesh2 export by Martin Prout
5
+
6
+ attr_reader :mesh, :gfx, :tentacle, :tex
7
+
8
+ def settings
9
+ size(500, 500, P3D)
10
+ end
11
+
12
+ def setup
13
+ sketch_title 'Tentacle'
14
+ @tex = load_image('mask.jpg')
15
+ ArcBall.init(self)
16
+ @gfx = Gfx::MeshToVBO.new(self)
17
+ volume = VolumetricSpaceArray.new(TVec3D.new(100, 200, 100), 100, 100, 100)
18
+ surface = ArrayIsoSurface.new(volume)
19
+ @mesh = TriangleMesh.new
20
+ brush = RoundBrush.new(volume, 10)
21
+ 20.times do |i|
22
+ brush.set_size(i * 1.2 + 6)
23
+ x = cos(i * TWO_PI / 20) * 10
24
+ y = sin(i * TWO_PI / 20) * 10
25
+ brush.draw_at_absolute_pos(TVec3D.new(x, -25 + i * 7, y), 1)
26
+ end
27
+ (4..20).step(4) do |i|
28
+ brush.set_size(i / 1.5 + 4)
29
+ x = cos(i * TWO_PI / 20) * (i * 1.2 + 16)
30
+ y = sin(i * TWO_PI / 20) * (i * 1.2 + 16)
31
+ brush.draw_at_absolute_pos(TVec3D.new(x, -25 + i * 7, y), 1)
32
+ brush.set_size(i / 2 + 2)
33
+ x2 = cos(i * TWO_PI / 20) * (i * 1.2 + 18)
34
+ y2 = sin(i * TWO_PI / 20) * (i * 1.2 + 18)
35
+ brush.draw_at_absolute_pos(TVec3D.new(x2, -25 + i * 7, y2), -1.4)
36
+ end
37
+ volume.close_sides
38
+ surface.reset
39
+ surface.compute_surface_mesh(mesh, 0.5)
40
+ no_stroke
41
+ @tentacle = gfx.mesh_to_textured_shape(mesh, tex)
42
+ end
43
+
44
+ def draw
45
+ background(150)
46
+ define_lights
47
+ shape(tentacle)
48
+ end
49
+
50
+ def define_lights
51
+ lights
52
+ ambient_light(40, 40, 40)
53
+ directional_light(10, 30, 40, 1, 1, 0)
54
+ directional_light(10, 30, 40, 1, 1, -1)
55
+ end
56
+
57
+
58
+ def key_pressed
59
+ case key
60
+ when 'p', 'P'
61
+ fileID = 'Tentacle'
62
+ pm = Gfx::POVMesh.new(self)
63
+ pm.begin_save(java.io.File.new(fileID + '.inc'))
64
+ pm.set_texture(Gfx::Textures::RED) # red with Phong texture
65
+ pm.saveAsPOV(mesh, true)
66
+ pm.end_save
67
+ exit
68
+ when 's', 'S'
69
+ save_frame('Tentacle.png')
70
+ end
71
+ end
@@ -0,0 +1,47 @@
1
+ require 'forwardable'
2
+
3
+ # The Nature of Code
4
+ # <http://www.shiffman.net/teaching/nature>
5
+ # Spring 2010
6
+ # Toxiclibs example: http://toxiclibs.org/
7
+
8
+ # Force directed graph
9
+ # Heavily based on: http://code.google.com/p/fidgen/
10
+ # A cluster is a grouping of Nodes
11
+ class Cluster
12
+ extend Forwardable
13
+ def_delegators(:@app, :stroke, :stroke_weight, :line, :physics)
14
+ attr_reader :nodes, :diameter
15
+
16
+ # We initialize a Cluster with a number of nodes, a diameter, and centerpoint
17
+ def initialize(n, d, center)
18
+ @app = $app
19
+ # Set the diameter
20
+ @diameter = d
21
+ # Create the nodes
22
+ @nodes = (0..n).map { Node.new(center.add(TVec2D.randomVector)) }
23
+ # Connect all the nodes with a Spring
24
+ nodes[0..nodes.size - 2].each_with_index do |ni, i|
25
+ nodes[i + 1..nodes.size - 1].each do |nj|
26
+ # A Spring needs two particles, a resting length, and a strength
27
+ physics.add_spring(Physics::VerletSpring2D.new(ni, nj, diameter, 0.01))
28
+ end
29
+ end
30
+ end
31
+
32
+ def display
33
+ # Show all the nodes
34
+ nodes.each(&:display)
35
+ end
36
+
37
+ # Draw all the internal connections
38
+ def show_connections
39
+ stroke(0, 150)
40
+ stroke_weight(2)
41
+ nodes[0..nodes.size - 2].each_with_index do |pi, i|
42
+ nodes[i + 1..nodes.size - 1].each do |pj|
43
+ line(pi.x, pi.y, pj.x, pj.y)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ # The Nature of Code
2
+ # <http://www.shiffman.net/teaching/nature>
3
+ # Spring 2010
4
+ # Toxiclibs example: http://toxiclibs.org/
5
+
6
+ # Force directed graph
7
+ # Heavily based on: http://code.google.com/p/fidgen/
8
+
9
+ # Notice how we are using inheritance here!
10
+ # We could have just stored a reference to a VerletParticle object
11
+ # inside the Node class, but inheritance is a nice alternative
12
+ class Node < Physics::VerletParticle2D
13
+ extend Forwardable
14
+ def_delegators(:@app, :fill, :stroke, :stroke_weight, :ellipse)
15
+ def initialize(pos)
16
+ super(pos)
17
+ @app = $app
18
+ end
19
+
20
+ # All we're doing really is adding a :display function to a VerletParticle
21
+ def display
22
+ fill(0, 150)
23
+ stroke(0)
24
+ stroke_weight(2)
25
+ ellipse(x, y, 16, 16)
26
+ end
27
+ end
@@ -0,0 +1,60 @@
1
+ # The Nature of Code
2
+ # Daniel Shiffman
3
+ # http://natureofcode.com
4
+ # bare sketch run with k9 run simple_cluster.rb
5
+ # Force directed graph,
6
+ # heavily based on: http://code.google.com/p/fidgen/
7
+
8
+ require 'toxiclibs'
9
+ require_relative 'cluster'
10
+ require_relative 'node'
11
+ require 'forwardable'
12
+
13
+ attr_reader :physics, :cluster, :f, :show_physics, :show_particles
14
+
15
+ def settings
16
+ size(640, 360)
17
+ end
18
+
19
+ def setup
20
+ sketch_title 'Simple Cluster'
21
+ @f = createFont('Georgia', 12, true)
22
+ @show_physics = true
23
+ @show_particles = true
24
+ @show_physics = true
25
+ @show_particles = true
26
+ # Initialize the physics
27
+ @physics = Physics::VerletPhysics2D.new
28
+ @physics.set_world_bounds(Toxi::Rect.new(10, 10, width - 20, height - 20))
29
+ # Spawn a new random graph
30
+ @cluster = Cluster.new(8, 100, TVec2D.new(width / 2, height / 2))
31
+ end
32
+
33
+ def draw
34
+ # Update the physics world
35
+ physics.update
36
+ background(255)
37
+ # Display all points
38
+ cluster.display if show_particles
39
+ # If we want to see the physics
40
+ cluster.show_connections if show_physics
41
+ # Instructions
42
+ fill(0)
43
+ text_font(f)
44
+ text("'p' to display or hide particles\n'c' to display or hide connections\n'n' for new graph", 10, 20)
45
+ end
46
+
47
+ # Key press commands
48
+ def key_pressed
49
+ case key
50
+ when 'c'
51
+ @show_physics = !show_physics
52
+ @show_particles = true if show_physics
53
+ when 'p'
54
+ @show_particles = !show_particles
55
+ @show_particles = true unless show_physics
56
+ when 'n'
57
+ physics.clear
58
+ @cluster = Cluster.new(rand(3..20), rand(10..width / 2), TVec2D.new(width / 2, height / 2))
59
+ end
60
+ end
@@ -0,0 +1,45 @@
1
+ # The Nature of Code
2
+ # Daniel Shiffman
3
+ # http://natureofcode.com
4
+ class Blanket
5
+ extend Forwardable
6
+ def_delegators(:@app, :width)
7
+ attr_reader :particles, :springs, :physics
8
+
9
+ def initialize(physics)
10
+ @app = $app
11
+ @particles = []
12
+ @springs = []
13
+ w = 20
14
+ h = 20
15
+ len = 10
16
+ strength = 0.125
17
+ h.times do |y|
18
+ w.times do |x|
19
+ p = Particle.new(TVec2D.new(width / 2 + x * len - w * len / 2, y * len))
20
+ physics.add_particle(p)
21
+ particles << p
22
+ if x > 0
23
+ previous = particles[particles.size - 2]
24
+ c = Connection.new(p, previous, len, strength)
25
+ physics.add_spring(c)
26
+ springs << c
27
+ end
28
+ if y > 0
29
+ above = particles[particles.size - w - 1]
30
+ c = Connection.new(p, above, len, strength)
31
+ physics.add_spring(c)
32
+ springs << c
33
+ end
34
+ end
35
+ end
36
+ topleft = particles[0]
37
+ topleft.lock
38
+ topright = particles[w - 1]
39
+ topright.lock
40
+ end
41
+
42
+ def display
43
+ springs.each(&:display)
44
+ end
45
+ end
@@ -0,0 +1,16 @@
1
+ # The Nature of Code
2
+ # Daniel Shiffman
3
+ # http://natureofcode.com
4
+ class Connection < Physics::VerletSpring2D
5
+ extend Forwardable
6
+ def_delegators(:@app, :stroke, :line)
7
+ def initialize(p1, p2, len, strength)
8
+ super(p1, p2, len, strength)
9
+ @app = $app
10
+ end
11
+
12
+ def display
13
+ stroke(0)
14
+ line(a.x, a.y, b.x, b.y)
15
+ end
16
+ end
@@ -0,0 +1,22 @@
1
+ # The Nature of Code
2
+ # Daniel Shiffman
3
+ # http://natureofcode.com
4
+
5
+ # Notice how we are using inheritance here!
6
+ # We could have just stored a reference to a VerletParticle object
7
+ # inside the Particle class, but inheritance is a nice alternative
8
+ class Particle < Physics::VerletParticle2D
9
+ extend Forwardable
10
+ def_delegators(:@app, :fill, :stroke, :ellipse)
11
+ def initialize(loc)
12
+ super(loc)
13
+ @app = $app
14
+ end
15
+
16
+ # All we're doing really is adding a display function to a VerletParticle
17
+ def display
18
+ fill(175)
19
+ stroke(0)
20
+ ellipse(x, y, 16, 16)
21
+ end
22
+ end
@@ -0,0 +1,55 @@
1
+ # The Nature of Code
2
+ # Daniel Shiffman
3
+ # http://natureofcode.com
4
+ #
5
+ # This example is adapted from Karsten Schmidt's SoftBodySquare example
6
+ #
7
+ # <p>Softbody square demo is showing how to create a 2D square mesh out of
8
+ # verlet particles and make it stable enough to adef total structural
9
+ # deformation by including an inner skeleton.</p>
10
+ #
11
+ # <p>Usage: move mouse to drag/deform the square</p>
12
+ #
13
+ #
14
+ # Copyright (c) 2008-2009 Karsten Schmidt
15
+ #
16
+ # This demo & library is free software you can redistribute it and/or
17
+ # modify it under the terms of the GNU Lesser General Public
18
+ # License as published by the Free Software Foundation either
19
+ # version 2.1 of the License, or (at your option) any later version.
20
+ #
21
+ # http://creativecommons.org/licenses/LGPL/2.1/
22
+ #
23
+ # This library is distributed in the hope that it will be useful,
24
+ # but WITHOUT ANY WARRANTY without even the implied warranty of
25
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26
+ # Lesser General Public License for more details.
27
+ #
28
+ # You should have received a copy of the GNU Lesser General Public
29
+ # License along with this library if not, write to the Free Software
30
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
31
+ #
32
+ require 'toxiclibs'
33
+ require 'forwardable'
34
+ require_relative 'blanket'
35
+ require_relative 'connection'
36
+ require_relative 'particle'
37
+
38
+ attr_reader :b, :physics
39
+
40
+ def settings
41
+ size 640, 360
42
+ end
43
+
44
+ def setup
45
+ sketch_title 'Soft Body Square'
46
+ @physics = Physics::VerletPhysics2D.new
47
+ physics.add_behavior(Physics::GravityBehavior2D.new(TVec2D.new(0, 0.1)))
48
+ @b = Blanket.new physics
49
+ end
50
+
51
+ def draw
52
+ background(255)
53
+ physics.update
54
+ b.display
55
+ end