toxiclibs 0.2-java → 0.5.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +16 -0
  3. data/CHANGELOG.md +4 -0
  4. data/LICENSE +675 -0
  5. data/README.md +12 -5
  6. data/Rakefile +25 -82
  7. data/examples/attract_repel/attract_repel.rb +30 -0
  8. data/examples/attract_repel/attractor.rb +23 -0
  9. data/examples/attract_repel/particle.rb +27 -0
  10. data/examples/data/ti_yong.png +0 -0
  11. data/examples/force_directed/cluster.rb +76 -0
  12. data/examples/force_directed/force_directed_graph.rb +92 -0
  13. data/examples/force_directed/node.rb +26 -0
  14. data/examples/gray_scott_image.rb +75 -0
  15. data/examples/gray_scott_tone_map.rb +77 -0
  16. data/examples/implicit.rb +139 -0
  17. data/examples/inflate_mesh.rb +89 -0
  18. data/examples/model_align.rb +44 -0
  19. data/examples/povmesh/ftest.rb +46 -0
  20. data/examples/povmesh/tentacle.rb +73 -0
  21. data/examples/simple_cluster/cluster.rb +47 -0
  22. data/examples/simple_cluster/node.rb +27 -0
  23. data/examples/simple_cluster/simple_cluster.rb +60 -0
  24. data/examples/soft_body/blanket.rb +45 -0
  25. data/examples/soft_body/connection.rb +16 -0
  26. data/examples/soft_body/particle.rb +22 -0
  27. data/examples/soft_body/soft_body_square_adapted.rb +55 -0
  28. data/lib/toxiclibs.jar +0 -0
  29. data/lib/toxiclibs.rb +91 -32
  30. data/lib/toxiclibs/version.rb +1 -1
  31. data/pom.xml +122 -0
  32. data/src/com/toxi/net/ClientListener.java +41 -0
  33. data/src/com/toxi/net/ServerListener.java +70 -0
  34. data/src/com/toxi/net/ServerListenerAdapter.java +47 -0
  35. data/src/com/toxi/net/ServerState.java +18 -0
  36. data/src/com/toxi/net/UDPConnection.java +66 -0
  37. data/src/com/toxi/net/UDPSyncClient.java +81 -0
  38. data/src/com/toxi/net/UDPSyncServer.java +450 -0
  39. data/src/com/toxi/nio/UDPClient.java +121 -0
  40. data/src/com/toxi/nio/UDPClientState.java +32 -0
  41. data/src/com/toxi/nio/UDPServer.java +129 -0
  42. data/src/toxi/color/AccessCriteria.java +114 -0
  43. data/src/toxi/color/AlphaAccessor.java +67 -0
  44. data/src/toxi/color/CMYKAccessor.java +122 -0
  45. data/src/toxi/color/CMYKDistanceProxy.java +40 -0
  46. data/src/toxi/color/ColorGradient.java +260 -0
  47. data/src/toxi/color/ColorList.java +699 -0
  48. data/src/toxi/color/ColorRange.java +671 -0
  49. data/src/toxi/color/ColorTheme.java +163 -0
  50. data/src/toxi/color/DistanceProxy.java +44 -0
  51. data/src/toxi/color/HSVAccessor.java +113 -0
  52. data/src/toxi/color/HSVDistanceProxy.java +40 -0
  53. data/src/toxi/color/HistEntry.java +85 -0
  54. data/src/toxi/color/Histogram.java +185 -0
  55. data/src/toxi/color/Hue.java +249 -0
  56. data/src/toxi/color/LuminanceAccessor.java +78 -0
  57. data/src/toxi/color/NamedColor.java +935 -0
  58. data/src/toxi/color/ProximityComparator.java +70 -0
  59. data/src/toxi/color/RGBAccessor.java +113 -0
  60. data/src/toxi/color/RGBDistanceProxy.java +41 -0
  61. data/src/toxi/color/ReadonlyTColor.java +296 -0
  62. data/src/toxi/color/TColor.java +1677 -0
  63. data/src/toxi/color/TColorAdapter.java +68 -0
  64. data/src/toxi/color/ToneMap.java +218 -0
  65. data/src/toxi/color/theory/AnalogousStrategy.java +140 -0
  66. data/src/toxi/color/theory/ColorTheoryRegistry.java +139 -0
  67. data/src/toxi/color/theory/ColorTheoryStrategy.java +56 -0
  68. data/src/toxi/color/theory/ComplementaryStrategy.java +111 -0
  69. data/src/toxi/color/theory/CompoundTheoryStrategy.java +143 -0
  70. data/src/toxi/color/theory/LeftSplitComplementaryStrategy.java +82 -0
  71. data/src/toxi/color/theory/MonochromeTheoryStrategy.java +103 -0
  72. data/src/toxi/color/theory/RightSplitComplementaryStrategy.java +82 -0
  73. data/src/toxi/color/theory/SingleComplementStrategy.java +76 -0
  74. data/src/toxi/color/theory/SplitComplementaryStrategy.java +77 -0
  75. data/src/toxi/color/theory/TetradTheoryStrategy.java +114 -0
  76. data/src/toxi/color/theory/TriadTheoryStrategy.java +77 -0
  77. data/src/toxi/data/csv/CSVAdapter.java +74 -0
  78. data/src/toxi/data/csv/CSVFieldMapper.java +212 -0
  79. data/src/toxi/data/csv/CSVListener.java +61 -0
  80. data/src/toxi/data/csv/CSVParser.java +202 -0
  81. data/src/toxi/data/feeds/AtomAuthor.java +49 -0
  82. data/src/toxi/data/feeds/AtomContent.java +50 -0
  83. data/src/toxi/data/feeds/AtomEntry.java +111 -0
  84. data/src/toxi/data/feeds/AtomFeed.java +129 -0
  85. data/src/toxi/data/feeds/AtomLink.java +62 -0
  86. data/src/toxi/data/feeds/RSSChannel.java +88 -0
  87. data/src/toxi/data/feeds/RSSEnclosure.java +60 -0
  88. data/src/toxi/data/feeds/RSSFeed.java +99 -0
  89. data/src/toxi/data/feeds/RSSItem.java +104 -0
  90. data/src/toxi/data/feeds/util/EntityStripper.java +2480 -0
  91. data/src/toxi/data/feeds/util/Iso8601DateAdapter.java +101 -0
  92. data/src/toxi/data/feeds/util/Rfc822DateAdapter.java +93 -0
  93. data/src/toxi/geom/AABB.java +658 -0
  94. data/src/toxi/geom/Axis3D.java +116 -0
  95. data/src/toxi/geom/AxisAlignedCylinder.java +163 -0
  96. data/src/toxi/geom/BernsteinPolynomial.java +94 -0
  97. data/src/toxi/geom/BezierCurve2D.java +159 -0
  98. data/src/toxi/geom/BezierCurve3D.java +148 -0
  99. data/src/toxi/geom/BooleanShapeBuilder.java +185 -0
  100. data/src/toxi/geom/BoxIntersector.java +52 -0
  101. data/src/toxi/geom/Circle.java +230 -0
  102. data/src/toxi/geom/CircleIntersector.java +85 -0
  103. data/src/toxi/geom/Cone.java +150 -0
  104. data/src/toxi/geom/ConvexPolygonClipper.java +136 -0
  105. data/src/toxi/geom/CoordinateExtractor.java +16 -0
  106. data/src/toxi/geom/Ellipse.java +250 -0
  107. data/src/toxi/geom/GMatrix.java +2599 -0
  108. data/src/toxi/geom/GVector.java +833 -0
  109. data/src/toxi/geom/GlobalGridTesselator.java +54 -0
  110. data/src/toxi/geom/GridTesselator.java +108 -0
  111. data/src/toxi/geom/Intersector2D.java +49 -0
  112. data/src/toxi/geom/Intersector3D.java +51 -0
  113. data/src/toxi/geom/IsectData2D.java +103 -0
  114. data/src/toxi/geom/IsectData3D.java +103 -0
  115. data/src/toxi/geom/Line2D.java +534 -0
  116. data/src/toxi/geom/Line3D.java +471 -0
  117. data/src/toxi/geom/LineStrip2D.java +430 -0
  118. data/src/toxi/geom/LineStrip3D.java +230 -0
  119. data/src/toxi/geom/LocalGridTesselator.java +57 -0
  120. data/src/toxi/geom/Matrix3d.java +3048 -0
  121. data/src/toxi/geom/Matrix4f.java +3446 -0
  122. data/src/toxi/geom/Matrix4x4.java +1076 -0
  123. data/src/toxi/geom/MatrixSizeException.java +58 -0
  124. data/src/toxi/geom/OctreeVisitor.java +44 -0
  125. data/src/toxi/geom/Origin3D.java +148 -0
  126. data/src/toxi/geom/Plane.java +293 -0
  127. data/src/toxi/geom/PlaneIntersector.java +57 -0
  128. data/src/toxi/geom/PointCloud3D.java +253 -0
  129. data/src/toxi/geom/PointOctree.java +502 -0
  130. data/src/toxi/geom/PointQuadtree.java +375 -0
  131. data/src/toxi/geom/Polygon2D.java +1038 -0
  132. data/src/toxi/geom/PolygonClipper2D.java +45 -0
  133. data/src/toxi/geom/PolygonTesselator.java +20 -0
  134. data/src/toxi/geom/QuadtreeVisitor.java +44 -0
  135. data/src/toxi/geom/Quaternion.java +641 -0
  136. data/src/toxi/geom/Ray2D.java +146 -0
  137. data/src/toxi/geom/Ray3D.java +150 -0
  138. data/src/toxi/geom/Ray3DIntersector.java +75 -0
  139. data/src/toxi/geom/ReadonlyVec2D.java +575 -0
  140. data/src/toxi/geom/ReadonlyVec3D.java +628 -0
  141. data/src/toxi/geom/ReadonlyVec4D.java +431 -0
  142. data/src/toxi/geom/Rect.java +720 -0
  143. data/src/toxi/geom/Reflector3D.java +58 -0
  144. data/src/toxi/geom/Shape2D.java +94 -0
  145. data/src/toxi/geom/Shape3D.java +42 -0
  146. data/src/toxi/geom/SingularMatrixException.java +57 -0
  147. data/src/toxi/geom/SpatialBins.java +182 -0
  148. data/src/toxi/geom/SpatialIndex.java +61 -0
  149. data/src/toxi/geom/Sphere.java +224 -0
  150. data/src/toxi/geom/SphereIntersectorReflector.java +196 -0
  151. data/src/toxi/geom/Spline2D.java +349 -0
  152. data/src/toxi/geom/Spline3D.java +351 -0
  153. data/src/toxi/geom/SutherlandHodgemanClipper.java +151 -0
  154. data/src/toxi/geom/Triangle2D.java +422 -0
  155. data/src/toxi/geom/Triangle3D.java +456 -0
  156. data/src/toxi/geom/TriangleIntersector.java +105 -0
  157. data/src/toxi/geom/Vec2D.java +1328 -0
  158. data/src/toxi/geom/Vec3D.java +1832 -0
  159. data/src/toxi/geom/Vec4D.java +985 -0
  160. data/src/toxi/geom/VecMathUtil.java +100 -0
  161. data/src/toxi/geom/XAxisCylinder.java +64 -0
  162. data/src/toxi/geom/YAxisCylinder.java +65 -0
  163. data/src/toxi/geom/ZAxisCylinder.java +64 -0
  164. data/src/toxi/geom/mesh/BezierPatch.java +200 -0
  165. data/src/toxi/geom/mesh/BoxSelector.java +62 -0
  166. data/src/toxi/geom/mesh/DefaultSTLColorModel.java +67 -0
  167. data/src/toxi/geom/mesh/DefaultSelector.java +50 -0
  168. data/src/toxi/geom/mesh/Face.java +176 -0
  169. data/src/toxi/geom/mesh/LaplacianSmooth.java +80 -0
  170. data/src/toxi/geom/mesh/MaterialiseSTLColorModel.java +150 -0
  171. data/src/toxi/geom/mesh/Mesh3D.java +224 -0
  172. data/src/toxi/geom/mesh/MeshIntersector.java +91 -0
  173. data/src/toxi/geom/mesh/OBJWriter.java +194 -0
  174. data/src/toxi/geom/mesh/PLYWriter.java +167 -0
  175. data/src/toxi/geom/mesh/PlaneSelector.java +90 -0
  176. data/src/toxi/geom/mesh/STLColorModel.java +54 -0
  177. data/src/toxi/geom/mesh/STLReader.java +185 -0
  178. data/src/toxi/geom/mesh/STLWriter.java +323 -0
  179. data/src/toxi/geom/mesh/SphereFunction.java +156 -0
  180. data/src/toxi/geom/mesh/SphericalHarmonics.java +110 -0
  181. data/src/toxi/geom/mesh/SuperEllipsoid.java +110 -0
  182. data/src/toxi/geom/mesh/SurfaceFunction.java +75 -0
  183. data/src/toxi/geom/mesh/SurfaceMeshBuilder.java +149 -0
  184. data/src/toxi/geom/mesh/Terrain.java +451 -0
  185. data/src/toxi/geom/mesh/TriangleMesh.java +1201 -0
  186. data/src/toxi/geom/mesh/Vertex.java +78 -0
  187. data/src/toxi/geom/mesh/VertexSelector.java +193 -0
  188. data/src/toxi/geom/mesh/WEFace.java +100 -0
  189. data/src/toxi/geom/mesh/WEMeshFilterStrategy.java +51 -0
  190. data/src/toxi/geom/mesh/WETriangleMesh.java +761 -0
  191. data/src/toxi/geom/mesh/WEVertex.java +134 -0
  192. data/src/toxi/geom/mesh/WingedEdge.java +115 -0
  193. data/src/toxi/geom/mesh/subdiv/CentroidSubdiv.java +37 -0
  194. data/src/toxi/geom/mesh/subdiv/DisplacementSubdivision.java +85 -0
  195. data/src/toxi/geom/mesh/subdiv/DualDisplacementSubdivision.java +94 -0
  196. data/src/toxi/geom/mesh/subdiv/DualSubdivision.java +49 -0
  197. data/src/toxi/geom/mesh/subdiv/EdgeLengthComparator.java +50 -0
  198. data/src/toxi/geom/mesh/subdiv/FaceCountComparator.java +51 -0
  199. data/src/toxi/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +80 -0
  200. data/src/toxi/geom/mesh/subdiv/MidpointSubdiv.java +42 -0
  201. data/src/toxi/geom/mesh/subdiv/MidpointSubdivision.java +48 -0
  202. data/src/toxi/geom/mesh/subdiv/NewSubdivStrategy.java +23 -0
  203. data/src/toxi/geom/mesh/subdiv/NormalDisplacementSubdivision.java +74 -0
  204. data/src/toxi/geom/mesh/subdiv/SubdivisionStrategy.java +83 -0
  205. data/src/toxi/geom/mesh/subdiv/TriSubdivision.java +51 -0
  206. data/src/toxi/geom/mesh2d/DelaunayTriangle.java +222 -0
  207. data/src/toxi/geom/mesh2d/DelaunayTriangulation.java +327 -0
  208. data/src/toxi/geom/mesh2d/DelaunayVertex.java +560 -0
  209. data/src/toxi/geom/mesh2d/Voronoi.java +149 -0
  210. data/src/toxi/geom/nurbs/BasicNurbsCurve.java +210 -0
  211. data/src/toxi/geom/nurbs/BasicNurbsSurface.java +233 -0
  212. data/src/toxi/geom/nurbs/ControlNet.java +148 -0
  213. data/src/toxi/geom/nurbs/CurveCreator.java +112 -0
  214. data/src/toxi/geom/nurbs/CurveUtils.java +259 -0
  215. data/src/toxi/geom/nurbs/InterpolationException.java +65 -0
  216. data/src/toxi/geom/nurbs/KnotVector.java +333 -0
  217. data/src/toxi/geom/nurbs/NurbsCreator.java +815 -0
  218. data/src/toxi/geom/nurbs/NurbsCurve.java +120 -0
  219. data/src/toxi/geom/nurbs/NurbsMeshCreator.java +145 -0
  220. data/src/toxi/geom/nurbs/NurbsSurface.java +147 -0
  221. data/src/toxi/image/util/Filter8bit.java +331 -0
  222. data/src/toxi/image/util/TiledFrameExporter.java +162 -0
  223. data/src/toxi/math/BezierInterpolation.java +102 -0
  224. data/src/toxi/math/CircularInterpolation.java +88 -0
  225. data/src/toxi/math/CosineInterpolation.java +51 -0
  226. data/src/toxi/math/DecimatedInterpolation.java +77 -0
  227. data/src/toxi/math/ExponentialInterpolation.java +68 -0
  228. data/src/toxi/math/InterpolateStrategy.java +60 -0
  229. data/src/toxi/math/Interpolation2D.java +93 -0
  230. data/src/toxi/math/LinearInterpolation.java +46 -0
  231. data/src/toxi/math/MathUtils.java +990 -0
  232. data/src/toxi/math/NonLinearScaleMap.java +101 -0
  233. data/src/toxi/math/ScaleMap.java +183 -0
  234. data/src/toxi/math/SigmoidInterpolation.java +78 -0
  235. data/src/toxi/math/SinCosLUT.java +141 -0
  236. data/src/toxi/math/ThresholdInterpolation.java +58 -0
  237. data/src/toxi/math/ZoomLensInterpolation.java +126 -0
  238. data/src/toxi/math/conversion/UnitTranslator.java +161 -0
  239. data/src/toxi/math/noise/PerlinNoise.java +281 -0
  240. data/src/toxi/math/noise/SimplexNoise.java +542 -0
  241. data/src/toxi/math/waves/AMFMSineWave.java +143 -0
  242. data/src/toxi/math/waves/AbstractWave.java +248 -0
  243. data/src/toxi/math/waves/ConstantWave.java +48 -0
  244. data/src/toxi/math/waves/FMHarmonicSquareWave.java +155 -0
  245. data/src/toxi/math/waves/FMSawtoothWave.java +144 -0
  246. data/src/toxi/math/waves/FMSineWave.java +142 -0
  247. data/src/toxi/math/waves/FMSquareWave.java +143 -0
  248. data/src/toxi/math/waves/FMTriangleWave.java +126 -0
  249. data/src/toxi/math/waves/SineWave.java +81 -0
  250. data/src/toxi/math/waves/Wave2D.java +68 -0
  251. data/src/toxi/math/waves/WaveState.java +69 -0
  252. data/src/toxi/music/scale/AbstractScale.java +117 -0
  253. data/src/toxi/music/scale/GenericScale.java +66 -0
  254. data/src/toxi/music/scale/MajorScale.java +41 -0
  255. data/src/toxi/newmesh/AttributedEdge.java +106 -0
  256. data/src/toxi/newmesh/AttributedFace.java +63 -0
  257. data/src/toxi/newmesh/IndexedTriangleMesh.java +809 -0
  258. data/src/toxi/newmesh/MeshAttributeCompiler.java +45 -0
  259. data/src/toxi/newmesh/MeshFaceNormalCompiler.java +52 -0
  260. data/src/toxi/newmesh/MeshUVCompiler.java +52 -0
  261. data/src/toxi/newmesh/MeshVertexColorCompiler.java +49 -0
  262. data/src/toxi/newmesh/MeshVertexCompiler.java +54 -0
  263. data/src/toxi/newmesh/MeshVertexNormalCompiler.java +55 -0
  264. data/src/toxi/newmesh/SpatialIndex.java +78 -0
  265. data/src/toxi/physics2d/ParticlePath2D.java +100 -0
  266. data/src/toxi/physics2d/ParticleString2D.java +184 -0
  267. data/src/toxi/physics2d/PullBackSpring2D.java +51 -0
  268. data/src/toxi/physics2d/VerletConstrainedSpring2D.java +89 -0
  269. data/src/toxi/physics2d/VerletMinDistanceSpring2D.java +57 -0
  270. data/src/toxi/physics2d/VerletParticle2D.java +457 -0
  271. data/src/toxi/physics2d/VerletPhysics2D.java +448 -0
  272. data/src/toxi/physics2d/VerletSpring2D.java +181 -0
  273. data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +212 -0
  274. data/src/toxi/physics2d/behaviors/ConstantForceBehavior2D.java +112 -0
  275. data/src/toxi/physics2d/behaviors/GravityBehavior2D.java +61 -0
  276. data/src/toxi/physics2d/behaviors/ParticleBehavior2D.java +66 -0
  277. data/src/toxi/physics2d/constraints/AngularConstraint.java +83 -0
  278. data/src/toxi/physics2d/constraints/AxisConstraint.java +71 -0
  279. data/src/toxi/physics2d/constraints/CircularConstraint.java +69 -0
  280. data/src/toxi/physics2d/constraints/MaxConstraint.java +66 -0
  281. data/src/toxi/physics2d/constraints/MinConstraint.java +66 -0
  282. data/src/toxi/physics2d/constraints/ParticleConstraint2D.java +47 -0
  283. data/src/toxi/physics2d/constraints/PolygonConstraint.java +93 -0
  284. data/src/toxi/physics2d/constraints/RectConstraint.java +114 -0
  285. data/src/toxi/physics3d/ParticlePath3D.java +100 -0
  286. data/src/toxi/physics3d/ParticleString3D.java +184 -0
  287. data/src/toxi/physics3d/PullBackSpring3D.java +50 -0
  288. data/src/toxi/physics3d/VerletConstrainedSpring3D.java +88 -0
  289. data/src/toxi/physics3d/VerletMinDistanceSpring3D.java +56 -0
  290. data/src/toxi/physics3d/VerletParticle3D.java +385 -0
  291. data/src/toxi/physics3d/VerletPhysics3D.java +417 -0
  292. data/src/toxi/physics3d/VerletSpring3D.java +180 -0
  293. data/src/toxi/physics3d/behaviors/AttractionBehavior3D.java +182 -0
  294. data/src/toxi/physics3d/behaviors/ConstantForceBehavior3D.java +92 -0
  295. data/src/toxi/physics3d/behaviors/GravityBehavior3D.java +61 -0
  296. data/src/toxi/physics3d/behaviors/ParticleBehavior3D.java +52 -0
  297. data/src/toxi/physics3d/constraints/AxisConstraint.java +68 -0
  298. data/src/toxi/physics3d/constraints/BoxConstraint.java +121 -0
  299. data/src/toxi/physics3d/constraints/CylinderConstraint.java +87 -0
  300. data/src/toxi/physics3d/constraints/MaxConstraint.java +65 -0
  301. data/src/toxi/physics3d/constraints/MinConstraint.java +65 -0
  302. data/src/toxi/physics3d/constraints/ParticleConstraint3D.java +49 -0
  303. data/src/toxi/physics3d/constraints/PlaneConstraint.java +78 -0
  304. data/src/toxi/physics3d/constraints/SoftBoxConstraint.java +87 -0
  305. data/src/toxi/physics3d/constraints/SphereConstraint.java +108 -0
  306. data/src/toxi/processing/ArrowModifier.java +116 -0
  307. data/src/toxi/processing/DashedLineModifier.java +48 -0
  308. data/src/toxi/processing/DeltaOrientationMapper.java +57 -0
  309. data/src/toxi/processing/Line2DRenderModifier.java +18 -0
  310. data/src/toxi/processing/MeshToVBO.java +94 -0
  311. data/src/toxi/processing/NormalMapper.java +18 -0
  312. data/src/toxi/processing/POVInterface.java +121 -0
  313. data/src/toxi/processing/POVMesh.java +219 -0
  314. data/src/toxi/processing/POVWriter.java +460 -0
  315. data/src/toxi/processing/RCOpaque.java +77 -0
  316. data/src/toxi/processing/RCTransp.java +78 -0
  317. data/src/toxi/processing/TextureBuilder.java +232 -0
  318. data/src/toxi/processing/Textures.java +110 -0
  319. data/src/toxi/processing/ToxiclibsSupport.java +1239 -0
  320. data/src/toxi/processing/Tracing.java +25 -0
  321. data/src/toxi/processing/XYZNormalMapper.java +30 -0
  322. data/src/toxi/sim/automata/CAMatrix.java +297 -0
  323. data/src/toxi/sim/automata/CARule.java +76 -0
  324. data/src/toxi/sim/automata/CARule2D.java +354 -0
  325. data/src/toxi/sim/automata/CAWolfram1D.java +309 -0
  326. data/src/toxi/sim/automata/EvolvableMatrix.java +61 -0
  327. data/src/toxi/sim/automata/MatrixEvolver.java +42 -0
  328. data/src/toxi/sim/dla/BottomUpOrder.java +76 -0
  329. data/src/toxi/sim/dla/DLA.java +497 -0
  330. data/src/toxi/sim/dla/DLAConfiguration.java +364 -0
  331. data/src/toxi/sim/dla/DLAEventAdapter.java +64 -0
  332. data/src/toxi/sim/dla/DLAEventListener.java +57 -0
  333. data/src/toxi/sim/dla/DLAGuideLines.java +219 -0
  334. data/src/toxi/sim/dla/DLAParticle.java +102 -0
  335. data/src/toxi/sim/dla/DLASegment.java +88 -0
  336. data/src/toxi/sim/dla/PipelineOrder.java +50 -0
  337. data/src/toxi/sim/dla/RadialDistanceOrder.java +92 -0
  338. data/src/toxi/sim/erosion/ErosionFunction.java +122 -0
  339. data/src/toxi/sim/erosion/TalusAngleErosion.java +145 -0
  340. data/src/toxi/sim/erosion/ThermalErosion.java +75 -0
  341. data/src/toxi/sim/fluids/FluidSolver2D.java +762 -0
  342. data/src/toxi/sim/fluids/FluidSolver3D.java +326 -0
  343. data/src/toxi/sim/grayscott/GrayScott.java +469 -0
  344. data/src/toxi/util/DateUtils.java +141 -0
  345. data/src/toxi/util/FileSequenceDescriptor.java +181 -0
  346. data/src/toxi/util/FileUtils.java +467 -0
  347. data/src/toxi/util/datatypes/ArraySet.java +128 -0
  348. data/src/toxi/util/datatypes/ArrayUtil.java +404 -0
  349. data/src/toxi/util/datatypes/BiasedDoubleRange.java +141 -0
  350. data/src/toxi/util/datatypes/BiasedFloatRange.java +141 -0
  351. data/src/toxi/util/datatypes/BiasedIntegerRange.java +141 -0
  352. data/src/toxi/util/datatypes/DoubleRange.java +251 -0
  353. data/src/toxi/util/datatypes/FloatRange.java +251 -0
  354. data/src/toxi/util/datatypes/GenericSet.java +215 -0
  355. data/src/toxi/util/datatypes/IntegerRange.java +247 -0
  356. data/src/toxi/util/datatypes/IntegerSet.java +149 -0
  357. data/src/toxi/util/datatypes/ItemIndex.java +72 -0
  358. data/src/toxi/util/datatypes/SingletonRegistry.java +91 -0
  359. data/src/toxi/util/datatypes/TypedProperties.java +291 -0
  360. data/src/toxi/util/datatypes/UndirectedGraph.java +134 -0
  361. data/src/toxi/util/datatypes/UniqueItemIndex.java +223 -0
  362. data/src/toxi/util/datatypes/WeightedRandomEntry.java +76 -0
  363. data/src/toxi/util/datatypes/WeightedRandomSet.java +125 -0
  364. data/src/toxi/util/events/EventDispatcher.java +86 -0
  365. data/src/toxi/volume/AdditiveBrush.java +19 -0
  366. data/src/toxi/volume/ArrayIsoSurface.java +297 -0
  367. data/src/toxi/volume/BoxBrush.java +100 -0
  368. data/src/toxi/volume/BrushMode.java +16 -0
  369. data/src/toxi/volume/HashIsoSurface.java +354 -0
  370. data/src/toxi/volume/IsoSurface.java +59 -0
  371. data/src/toxi/volume/MarchingCubesIndex.java +312 -0
  372. data/src/toxi/volume/MeshLatticeBuilder.java +358 -0
  373. data/src/toxi/volume/MeshVoxelizer.java +216 -0
  374. data/src/toxi/volume/MultiplyBrush.java +20 -0
  375. data/src/toxi/volume/PeakBrush.java +21 -0
  376. data/src/toxi/volume/ReplaceBrush.java +19 -0
  377. data/src/toxi/volume/RoundBrush.java +113 -0
  378. data/src/toxi/volume/VolumetricBrush.java +160 -0
  379. data/src/toxi/volume/VolumetricHashMap.java +179 -0
  380. data/src/toxi/volume/VolumetricSpace.java +195 -0
  381. data/src/toxi/volume/VolumetricSpaceArray.java +214 -0
  382. data/toxiclibs.gemspec +34 -0
  383. metadata +424 -27
@@ -0,0 +1,87 @@
1
+ /*
2
+ * __ .__ .__ ._____.
3
+ * _/ |_ _______ __|__| ____ | | |__\_ |__ ______
4
+ * \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
5
+ * | | ( <_> > <| \ \___| |_| || \_\ \\___ \
6
+ * |__| \____/__/\_ \__|\___ >____/__||___ /____ >
7
+ * \/ \/ \/ \/
8
+ *
9
+ * Copyright (c) 2006-2011 Karsten Schmidt
10
+ *
11
+ * This library is free software; you can redistribute it and/or
12
+ * modify it under the terms of the GNU Lesser General Public
13
+ * License as published by the Free Software Foundation; either
14
+ * version 2.1 of the License, or (at your option) any later version.
15
+ *
16
+ * http://creativecommons.org/licenses/LGPL/2.1/
17
+ *
18
+ * This library is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ * You should have received a copy of the GNU Lesser General Public
24
+ * License along with this library; if not, write to the Free Software
25
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26
+ */
27
+
28
+ package toxi.physics3d.constraints;
29
+
30
+ import java.util.LinkedList;
31
+ import java.util.List;
32
+
33
+ import toxi.geom.AABB;
34
+ import toxi.geom.Vec3D.Axis;
35
+ import toxi.physics3d.VerletParticle3D;
36
+
37
+ /**
38
+ *
39
+ * @author tux
40
+ */
41
+ public class SoftBoxConstraint implements ParticleConstraint3D {
42
+
43
+ /**
44
+ *
45
+ */
46
+ public AABB box;
47
+
48
+ /**
49
+ *
50
+ */
51
+ public List<Axis> axes = new LinkedList<Axis>();
52
+
53
+ /**
54
+ *
55
+ */
56
+ public float smooth;
57
+
58
+ /**
59
+ *
60
+ * @param box
61
+ * @param smooth
62
+ */
63
+ public SoftBoxConstraint(AABB box, float smooth) {
64
+ this.box = box;
65
+ this.smooth = smooth;
66
+ }
67
+
68
+ /**
69
+ *
70
+ * @param a
71
+ * @return
72
+ */
73
+ public SoftBoxConstraint addAxis(Axis a) {
74
+ axes.add(a);
75
+ return this;
76
+ }
77
+
78
+ public void apply(VerletParticle3D p) {
79
+ if (p.isInAABB(box)) {
80
+ for (Axis a : axes) {
81
+ float val = p.getComponent(a);
82
+ p.setComponent(a, val + (box.getComponent(a) - val) * smooth);
83
+ }
84
+ }
85
+ }
86
+
87
+ }
@@ -0,0 +1,108 @@
1
+ /*
2
+ * __ .__ .__ ._____.
3
+ * _/ |_ _______ __|__| ____ | | |__\_ |__ ______
4
+ * \ __\/ _ \ \/ / |/ ___\| | | || __ \ / ___/
5
+ * | | ( <_> > <| \ \___| |_| || \_\ \\___ \
6
+ * |__| \____/__/\_ \__|\___ >____/__||___ /____ >
7
+ * \/ \/ \/ \/
8
+ *
9
+ * Copyright (c) 2006-2011 Karsten Schmidt
10
+ *
11
+ * This library is free software; you can redistribute it and/or
12
+ * modify it under the terms of the GNU Lesser General Public
13
+ * License as published by the Free Software Foundation; either
14
+ * version 2.1 of the License, or (at your option) any later version.
15
+ *
16
+ * http://creativecommons.org/licenses/LGPL/2.1/
17
+ *
18
+ * This library is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ * You should have received a copy of the GNU Lesser General Public
24
+ * License along with this library; if not, write to the Free Software
25
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
26
+ */
27
+
28
+ package toxi.physics3d.constraints;
29
+
30
+ import toxi.geom.Sphere;
31
+ import toxi.geom.Vec3D;
32
+ import toxi.physics3d.VerletParticle3D;
33
+
34
+ /**
35
+ * This class implements a spherical constraint for 3D
36
+ * {@linkplain VerletParticle3D}s. The constraint can be configured in two ways: A
37
+ * bounding sphere not allowing particles to escape or alternatively does not
38
+ * allow particles to enter the space occupied by the sphere.
39
+ */
40
+ public class SphereConstraint implements ParticleConstraint3D {
41
+
42
+ /**
43
+ *
44
+ */
45
+ public Sphere sphere;
46
+
47
+ /**
48
+ *
49
+ */
50
+ public boolean isBoundingSphere;
51
+
52
+ /**
53
+ *
54
+ */
55
+ public final static boolean INSIDE = true;
56
+
57
+ /**
58
+ *
59
+ */
60
+ public final static boolean OUTSIDE = false;
61
+
62
+ /**
63
+ * Creates a new instance using the sphere definition and constraint mode
64
+ * given.
65
+ *
66
+ * @param sphere
67
+ * sphere instance
68
+ * @param isBoundary
69
+ * constraint mode. Use {@linkplain #INSIDE} or
70
+ * {@linkplain #OUTSIDE} to specify constraint behaviour.
71
+ */
72
+ public SphereConstraint(Sphere sphere, boolean isBoundary) {
73
+ this.sphere = sphere;
74
+ this.isBoundingSphere = isBoundary;
75
+ }
76
+
77
+ /**
78
+ * Creates a new instance using the sphere definition and constraint mode
79
+ * given.
80
+ *
81
+ * @param origin
82
+ * sphere origin
83
+ * @param radius
84
+ * sphere radius
85
+ * @param isBoundary
86
+ * constraint mode. Use {@linkplain #INSIDE} or
87
+ * {@linkplain #OUTSIDE} to specify constraint behaviour.
88
+ */
89
+ public SphereConstraint(Vec3D origin, float radius, boolean isBoundary) {
90
+ sphere = new Sphere(origin, radius);
91
+ this.isBoundingSphere = isBoundary;
92
+ }
93
+
94
+ /*
95
+ * (non-Javadoc)
96
+ *
97
+ * @see
98
+ * toxi.physics.constraints.ParticleConstraint#apply(toxi.physics.VerletParticle
99
+ * )
100
+ */
101
+ public void apply(VerletParticle3D p) {
102
+ boolean isInside = sphere.containsPoint(p);
103
+ if ((isBoundingSphere && !isInside) || (!isBoundingSphere && isInside)) {
104
+ p.set(sphere.add(p.subSelf(sphere).normalizeTo(sphere.radius)));
105
+ }
106
+ }
107
+
108
+ }
@@ -0,0 +1,116 @@
1
+ package toxi.processing;
2
+
3
+ import toxi.geom.ReadonlyVec2D;
4
+ import toxi.geom.Vec2D;
5
+ import toxi.math.MathUtils;
6
+
7
+ /**
8
+ * {@link Line2DRenderModifier} implementation to draw a line with arrow heads
9
+ * (or alternatively ONLY draw the heads). The size of the arrow heads can be
10
+ * customized as well as which ends they should be drawn at.
11
+ */
12
+ public class ArrowModifier implements Line2DRenderModifier {
13
+
14
+ /**
15
+ * Arrow head type.
16
+ */
17
+ public enum Type {
18
+
19
+ /**
20
+ *
21
+ */
22
+ START,
23
+
24
+ /**
25
+ *
26
+ */
27
+ END,
28
+
29
+ /**
30
+ *
31
+ */
32
+ BOTH;
33
+ }
34
+
35
+ /**
36
+ *
37
+ */
38
+ public float length;
39
+
40
+ /**
41
+ *
42
+ */
43
+ public float theta;
44
+
45
+ /**
46
+ *
47
+ */
48
+ public Type type;
49
+
50
+ /**
51
+ *
52
+ */
53
+ public boolean doDrawLine;
54
+
55
+ /**
56
+ * Constructs a new modifier instance. The line itself is drawn as well.
57
+ *
58
+ * @param length
59
+ * length of arrow head
60
+ * @param theta
61
+ * spread (in radians)
62
+ * @param type
63
+ * type of arrow head(s)
64
+ */
65
+ public ArrowModifier(float length, float theta, Type type) {
66
+ this(length, theta, type, true);
67
+ }
68
+
69
+ /**
70
+ * Constructs a new modifier instance. If drawLine is set to true, the line
71
+ * itself is drawn as well. If false, only the arrow heads are drawn.
72
+ *
73
+ * @param length
74
+ * length of arrow head
75
+ * @param theta
76
+ * spread (in radians)
77
+ * @param type
78
+ * type of arrow head(s)
79
+ * @param drawLine
80
+ * If false, only heads are drawn.
81
+ */
82
+ public ArrowModifier(float length, float theta, Type type, boolean drawLine) {
83
+ super();
84
+ this.length = length;
85
+ this.theta = theta;
86
+ this.type = type;
87
+ this.doDrawLine = drawLine;
88
+ }
89
+
90
+ /**
91
+ *
92
+ * @param gfx
93
+ * @param a
94
+ * @param b
95
+ */
96
+ @Override
97
+ public void apply(ToxiclibsSupport gfx, ReadonlyVec2D a, ReadonlyVec2D b) {
98
+ if (doDrawLine) {
99
+ gfx.line(a, b);
100
+ }
101
+ if (type == Type.START || type == Type.BOTH) {
102
+ Vec2D dir = b.sub(a).rotate(theta).normalizeTo(length);
103
+ gfx.line(a, a.add(dir));
104
+ dir.rotate(-theta * 2);
105
+ gfx.line(a, a.add(dir));
106
+ }
107
+ if (type == Type.END || type == Type.BOTH) {
108
+ Vec2D dir = b.sub(a).rotate(MathUtils.PI - theta)
109
+ .normalizeTo(length);
110
+ gfx.line(b, b.add(dir));
111
+ dir.rotate(theta * 2);
112
+ gfx.line(b, b.add(dir));
113
+ }
114
+ }
115
+
116
+ }
@@ -0,0 +1,48 @@
1
+ package toxi.processing;
2
+
3
+ import toxi.geom.Line2D;
4
+ import toxi.geom.ReadonlyVec2D;
5
+ import toxi.geom.Vec2D;
6
+
7
+ /**
8
+ * {@link Line2DRenderModifier} implementation to draw a dashed line with
9
+ * customizable step length.
10
+ */
11
+ public class DashedLineModifier implements Line2DRenderModifier {
12
+
13
+ /**
14
+ *
15
+ */
16
+ public float length;
17
+
18
+ /**
19
+ * Constructs a new instance
20
+ *
21
+ * @param length
22
+ * step length
23
+ */
24
+ public DashedLineModifier(float length) {
25
+ this.length = length;
26
+ }
27
+
28
+ /**
29
+ *
30
+ * @param gfx
31
+ * @param a
32
+ * @param b
33
+ */
34
+ @Override
35
+ public void apply(ToxiclibsSupport gfx, ReadonlyVec2D a, ReadonlyVec2D b) {
36
+ int i = 0;
37
+ Vec2D prev = null;
38
+ for (Vec2D p : new Line2D(a, b).splitIntoSegments(null, length, true)) {
39
+ if (i % 2 == 0) {
40
+ prev = p;
41
+ } else {
42
+ gfx.line(prev, p);
43
+ }
44
+ i++;
45
+ }
46
+ }
47
+
48
+ }
@@ -0,0 +1,57 @@
1
+ package toxi.processing;
2
+
3
+ import toxi.color.ReadonlyTColor;
4
+ import toxi.color.ToneMap;
5
+ import toxi.geom.Vec3D;
6
+
7
+ /**
8
+ *
9
+ * @author tux
10
+ */
11
+ public class DeltaOrientationMapper implements NormalMapper {
12
+
13
+ /**
14
+ *
15
+ */
16
+ protected Vec3D dir;
17
+
18
+ /**
19
+ *
20
+ */
21
+ protected ToneMap toneMap;
22
+
23
+ /**
24
+ *
25
+ */
26
+ protected double toneScale;
27
+
28
+ /**
29
+ *
30
+ * @param dir
31
+ * @param toneMap
32
+ */
33
+ public DeltaOrientationMapper(Vec3D dir, ToneMap toneMap) {
34
+ this.dir = dir;
35
+ setToneMap(toneMap);
36
+ }
37
+
38
+ /**
39
+ *
40
+ * @param normal
41
+ * @return
42
+ */
43
+ @Override
44
+ public ReadonlyTColor getRGBForNormal(Vec3D normal) {
45
+ float dot = (float) (dir.dot(normal) * toneScale + toneScale);
46
+ return toneMap.getToneFor(dot);
47
+ }
48
+
49
+ /**
50
+ *
51
+ * @param toneMap
52
+ */
53
+ public final void setToneMap(ToneMap toneMap) {
54
+ this.toneMap = toneMap;
55
+ this.toneScale = toneMap.map.getInputMedian();
56
+ }
57
+ }
@@ -0,0 +1,18 @@
1
+ package toxi.processing;
2
+
3
+ import toxi.geom.ReadonlyVec2D;
4
+
5
+ /**
6
+ *
7
+ * @author tux
8
+ */
9
+ public interface Line2DRenderModifier {
10
+
11
+ /**
12
+ *
13
+ * @param gfx
14
+ * @param a
15
+ * @param b
16
+ */
17
+ public void apply(ToxiclibsSupport gfx, ReadonlyVec2D a, ReadonlyVec2D b);
18
+ }
@@ -0,0 +1,94 @@
1
+ /*
2
+ * This library adds translate from toxiclibs Mesh to processing PShape (vbo)
3
+ * Copyright (c) 2015 Martin Prout
4
+ *
5
+ * This library is free software; you can redistribute it and/or modify it under
6
+ * the terms of the GNU Lesser General Public License as published by the Free
7
+ * Software Foundation; either version 2.1 of the License, or (at your option)
8
+ * any later version.
9
+ *
10
+ * http://creativecommons.org/licenses/LGPL/2.1/
11
+ *
12
+ * This library is distributed in the hope that it will be useful, but WITHOUT
13
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
15
+ * details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public License
18
+ * along with this library; if not, write to the Free Software Foundation, Inc.,
19
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20
+ */
21
+ package toxi.processing;
22
+
23
+ import java.util.Collection;
24
+ import processing.core.PApplet;
25
+ import processing.core.PConstants;
26
+ import processing.core.PShape;
27
+ import toxi.geom.mesh.Mesh3D;
28
+ import toxi.geom.mesh.Face;
29
+
30
+ /**
31
+ *
32
+ * @author Martin Prout
33
+ */
34
+ public class MeshToVBO {
35
+
36
+ private final PApplet app;
37
+
38
+ /**
39
+ *
40
+ * @param app PApplet
41
+ */
42
+ public MeshToVBO(PApplet app) {
43
+ this.app = app;
44
+ }
45
+
46
+ /**
47
+ * Use default smooth (smooth = false) for cubes etc
48
+ * @param mesh Toxiclibs mesh
49
+ * @param smooth boolean
50
+ * @return
51
+ */
52
+ public PShape meshToShape(Mesh3D mesh, boolean smooth) {
53
+ PShape retained = app.createShape();
54
+ retained.beginShape(PConstants.TRIANGLE);
55
+ if (smooth) {
56
+ mesh.computeVertexNormals();
57
+ Collection<Face> faces = mesh.getFaces();
58
+ faces.stream().map((f) -> {
59
+ retained.normal(f.a.normal.x, f.a.normal.y, f.a.normal.z);
60
+ return f;
61
+ }).map((f) -> {
62
+ retained.vertex(f.a.x, f.a.y, f.a.z);
63
+ return f;
64
+ }).map((f) -> {
65
+ retained.normal(f.b.normal.x, f.b.normal.y, f.b.normal.z);
66
+ return f;
67
+ }).map((f) -> {
68
+ retained.vertex(f.b.x, f.b.y, f.b.z);
69
+ return f;
70
+ }).map((f) -> {
71
+ retained.normal(f.c.normal.x, f.c.normal.y, f.c.normal.z);
72
+ return f;
73
+ }).forEach((f) -> {
74
+ retained.vertex(f.c.x, f.c.y, f.c.z);
75
+ });
76
+ } else {
77
+ Collection<Face> faces = mesh.getFaces();
78
+ faces.stream().map((f) -> {
79
+ retained.normal(f.normal.x, f.normal.y, f.normal.z);
80
+ return f;
81
+ }).map((f) -> {
82
+ retained.vertex(f.a.x, f.a.y, f.a.z);
83
+ return f;
84
+ }).map((f) -> {
85
+ retained.vertex(f.b.x, f.b.y, f.b.z);
86
+ return f;
87
+ }).forEach((f) -> {
88
+ retained.vertex(f.c.x, f.c.y, f.c.z);
89
+ });
90
+ }
91
+ retained.endShape();
92
+ return retained;
93
+ }
94
+ }