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,216 @@
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.volume;
29
+
30
+ import toxi.geom.AABB;
31
+ import toxi.geom.Triangle3D;
32
+ import toxi.geom.Vec3D;
33
+ import toxi.geom.mesh.Mesh3D;
34
+ import toxi.math.MathUtils;
35
+ import toxi.math.ScaleMap;
36
+
37
+ /**
38
+ *
39
+ * @author tux
40
+ */
41
+ public class MeshVoxelizer {
42
+
43
+ /**
44
+ *
45
+ */
46
+ protected VolumetricSpace volume;
47
+
48
+ /**
49
+ *
50
+ */
51
+ protected int wallThickness = 0;
52
+
53
+ /**
54
+ *
55
+ * @param res
56
+ */
57
+ public MeshVoxelizer(int res) {
58
+ this(res, res, res);
59
+ }
60
+
61
+ /**
62
+ *
63
+ * @param resX
64
+ * @param resY
65
+ * @param resZ
66
+ */
67
+ public MeshVoxelizer(int resX, int resY, int resZ) {
68
+ volume = new VolumetricHashMap(new Vec3D(1, 1, 1), resX, resY, resZ,
69
+ 0.1f);
70
+ }
71
+
72
+ /**
73
+ *
74
+ * @return
75
+ */
76
+ public MeshVoxelizer clear() {
77
+ volume.clear();
78
+ return this;
79
+ }
80
+
81
+ /**
82
+ * @return the volume
83
+ */
84
+ public VolumetricSpace getVolume() {
85
+ return volume;
86
+ }
87
+
88
+ /**
89
+ * @return the wallThickness
90
+ */
91
+ public int getWallThickness() {
92
+ return wallThickness;
93
+ }
94
+
95
+ /**
96
+ *
97
+ * @param x
98
+ * @param y
99
+ * @param z
100
+ * @param iso
101
+ */
102
+ protected void setVoxelAt(int x, int y, int z, float iso) {
103
+ int mix = MathUtils.max(x - wallThickness, 0);
104
+ int miy = MathUtils.max(y - wallThickness, 0);
105
+ int miz = MathUtils.max(z - wallThickness, 0);
106
+ int max = MathUtils.min(x + wallThickness, volume.resX1);
107
+ int may = MathUtils.min(y + wallThickness, volume.resY1);
108
+ int maz = MathUtils.min(z + wallThickness, volume.resZ1);
109
+ for (z = miz; z <= maz; z++) {
110
+ for (y = miy; y <= may; y++) {
111
+ for (x = mix; x <= max; x++) {
112
+ volume.setVoxelAt(x, y, z, iso);
113
+ }
114
+ }
115
+ }
116
+ }
117
+
118
+ /**
119
+ * @param wallThickness
120
+ * the wallThickness to set
121
+ * @return
122
+ */
123
+ public MeshVoxelizer setWallThickness(int wallThickness) {
124
+ this.wallThickness = wallThickness;
125
+ return this;
126
+ }
127
+
128
+ private VolumetricSpace solidifyVolume(VolumetricSpaceArray volume) {
129
+ for (int z = 0; z < volume.resZ; z++) {
130
+ for (int y = 0; y < volume.resY; y++) {
131
+ boolean isFilled = false;
132
+ int startX = 0;
133
+ for (int x = 0; x < volume.resX; x++) {
134
+ float val = volume.getVoxelAt(x, y, z);
135
+ if (val > 0) {
136
+ if (!isFilled) {
137
+ startX = x;
138
+ isFilled = true;
139
+ } else {
140
+ for (int i = startX; i <= x; i++) {
141
+ volume.setVoxelAt(i, y, z, 1);
142
+ }
143
+ isFilled = false;
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
149
+ return volume;
150
+ }
151
+
152
+ /**
153
+ *
154
+ * @param mesh
155
+ * @return
156
+ */
157
+ public VolumetricSpace voxelizeMesh(Mesh3D mesh) {
158
+ return voxelizeMesh(mesh, 1f);
159
+ }
160
+
161
+ /**
162
+ *
163
+ * @param mesh
164
+ * @param iso
165
+ * @return
166
+ */
167
+ public VolumetricSpace voxelizeMesh(Mesh3D mesh, float iso) {
168
+ AABB box = mesh.getBoundingBox();
169
+ Vec3D bmin = box.getMin();
170
+ Vec3D bmax = box.getMax();
171
+ ScaleMap wx = new ScaleMap(bmin.x, bmax.x, 1, volume.resX - 2);
172
+ ScaleMap wy = new ScaleMap(bmin.y, bmax.y, 1, volume.resY - 2);
173
+ ScaleMap wz = new ScaleMap(bmin.z, bmax.z, 1, volume.resZ - 2);
174
+ ScaleMap gx = new ScaleMap(1, volume.resX - 2, bmin.x, bmax.x);
175
+ ScaleMap gy = new ScaleMap(1, volume.resY - 2, bmin.y, bmax.y);
176
+ ScaleMap gz = new ScaleMap(1, volume.resZ - 2, bmin.z, bmax.z);
177
+ volume.setScale(box.getExtent().scale(2f));
178
+ Triangle3D tri = new Triangle3D();
179
+ AABB voxel = new AABB(new Vec3D(), volume.voxelSize.scale(0.5f));
180
+ mesh.getFaces().stream().map((f) -> {
181
+ tri.a = f.a;
182
+ return f;
183
+ }).map((f) -> {
184
+ tri.b = f.b;
185
+ return f;
186
+ }).map((f) -> {
187
+ tri.c = f.c;
188
+ return f;
189
+ }).map((_item) -> tri.getBoundingBox()).forEach((bounds) -> {
190
+ Vec3D min = bounds.getMin();
191
+ Vec3D max = bounds.getMax();
192
+ min = new Vec3D((int) wx.getClippedValueFor(min.x),
193
+ (int) wy.getClippedValueFor(min.y),
194
+ (int) wz.getClippedValueFor(min.z));
195
+ max = new Vec3D((int) wx.getClippedValueFor(max.x),
196
+ (int) wy.getClippedValueFor(max.y),
197
+ (int) wz.getClippedValueFor(max.z));
198
+ for (int z = (int) min.z; z <= max.z; z++) {
199
+ for (int y = (int) min.y; y <= max.y; y++) {
200
+ for (int x = (int) min.x; x <= max.x; x++) {
201
+ if (x < volume.resX1 && y < volume.resY1
202
+ && z < volume.resZ1) {
203
+ voxel.set((float) gx.getClippedValueFor(x),
204
+ (float) gy.getClippedValueFor(y),
205
+ (float) gz.getClippedValueFor(z));
206
+ if (voxel.intersectsTriangle(tri)) {
207
+ setVoxelAt(x, y, z, iso);
208
+ }
209
+ }
210
+ }
211
+ }
212
+ }
213
+ });
214
+ return volume;
215
+ }
216
+ }
@@ -0,0 +1,20 @@
1
+ package toxi.volume;
2
+
3
+ /**
4
+ *
5
+ * @author tux
6
+ */
7
+ public class MultiplyBrush implements BrushMode {
8
+
9
+ /**
10
+ *
11
+ * @param orig
12
+ * @param brush
13
+ * @return
14
+ */
15
+ @Override
16
+ public final float apply(float orig, float brush) {
17
+ return orig * brush;
18
+ }
19
+
20
+ }
@@ -0,0 +1,21 @@
1
+ package toxi.volume;
2
+
3
+ import toxi.math.MathUtils;
4
+
5
+ /**
6
+ *
7
+ * @author tux
8
+ */
9
+ public class PeakBrush implements BrushMode {
10
+
11
+ /**
12
+ *
13
+ * @param orig
14
+ * @param brush
15
+ * @return
16
+ */
17
+ @Override
18
+ public final float apply(float orig, float brush) {
19
+ return MathUtils.max(orig, brush);
20
+ }
21
+ }
@@ -0,0 +1,19 @@
1
+ package toxi.volume;
2
+
3
+ /**
4
+ *
5
+ * @author tux
6
+ */
7
+ public class ReplaceBrush implements BrushMode {
8
+
9
+ /**
10
+ *
11
+ * @param orig
12
+ * @param brush
13
+ * @return
14
+ */
15
+ @Override
16
+ public final float apply(float orig, float brush) {
17
+ return brush;
18
+ }
19
+ }
@@ -0,0 +1,113 @@
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.volume;
29
+
30
+ import java.util.logging.Level;
31
+
32
+ import toxi.math.MathUtils;
33
+
34
+ /**
35
+ *
36
+ * @author tux
37
+ */
38
+ public class RoundBrush extends VolumetricBrush {
39
+
40
+ protected float radius,
41
+
42
+ /**
43
+ *
44
+ */
45
+
46
+ /**
47
+ *
48
+ */
49
+ radSquared;
50
+
51
+ /**
52
+ * Creates a new spherical brush to work on the given volume.
53
+ *
54
+ * @param volume
55
+ * VolumetricSpaceArray instance
56
+ * @param radius
57
+ * radius in world units
58
+ */
59
+ public RoundBrush(VolumetricSpace volume, float radius) {
60
+ super(volume);
61
+ setSize(radius);
62
+ }
63
+
64
+ /**
65
+ *
66
+ * @param cx
67
+ * @param cy
68
+ * @param cz
69
+ * @param density
70
+ */
71
+ @Override
72
+ public void drawAtGridPos(float cx, float cy, float cz, float density) {
73
+ int minX = MathUtils.max(Math.round(cx - cellRadiusX), 0);
74
+ int minY = MathUtils.max(Math.round(cy - cellRadiusY), 0);
75
+ int minZ = MathUtils.max(Math.round(cz - cellRadiusZ), 0);
76
+ int maxX = MathUtils.min(Math.round(cx + cellRadiusX), volume.resX);
77
+ int maxY = MathUtils.min(Math.round(cy + cellRadiusY), volume.resY);
78
+ int maxZ = MathUtils.min(Math.round(cz + cellRadiusZ), volume.resZ);
79
+ for (int z = minZ; z < maxZ; z++) {
80
+ float dz = (z - cz) * stretchZ;
81
+ dz *= dz;
82
+ for (int y = minY; y < maxY; y++) {
83
+ float dyz = (y - cy) * stretchY;
84
+ dyz = dyz * dyz + dz;
85
+ for (int x = minX; x < maxX; x++) {
86
+ float dx = x - cx;
87
+ float d = (float) Math.sqrt(dx * dx + dyz);
88
+ if (d <= cellRadiusX) {
89
+ float cellVal = (1 - d / cellRadiusX) * density;
90
+ updateVoxel(x, y, z, cellVal);
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }
96
+
97
+ /**
98
+ *
99
+ * @param radius
100
+ */
101
+ @Override
102
+ public final void setSize(float radius) {
103
+ this.radius = radius;
104
+ this.cellRadiusX = (int) (radius / volume.scale.x * volume.resX + 1);
105
+ this.cellRadiusY = (int) (radius / volume.scale.y * volume.resY + 1);
106
+ this.cellRadiusZ = (int) (radius / volume.scale.z * volume.resZ + 1);
107
+ stretchY = (float) cellRadiusX / cellRadiusY;
108
+ stretchZ = (float) cellRadiusX / cellRadiusZ;
109
+ if (logger.isLoggable(Level.FINE)) {
110
+ logger.log(Level.FINE, "new brush size: {0}", radius);
111
+ }
112
+ }
113
+ }
@@ -0,0 +1,160 @@
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.volume;
29
+
30
+ import java.util.logging.Logger;
31
+
32
+ import toxi.geom.Vec3D;
33
+ import toxi.math.MathUtils;
34
+
35
+ /**
36
+ *
37
+ * @author tux
38
+ */
39
+ public abstract class VolumetricBrush {
40
+
41
+ /**
42
+ *
43
+ */
44
+ protected static final Logger logger = Logger
45
+ .getLogger(VolumetricBrush.class.getName());
46
+
47
+ /**
48
+ *
49
+ */
50
+ public static final BrushMode MODE_ADDITIVE = new AdditiveBrush();
51
+
52
+ /**
53
+ *
54
+ */
55
+ public static final BrushMode MODE_MULTIPLY = new MultiplyBrush();
56
+
57
+ /**
58
+ *
59
+ */
60
+ public static final BrushMode MODE_REPLACE = new ReplaceBrush();
61
+
62
+ /**
63
+ *
64
+ */
65
+ public static final BrushMode MODE_PEAK = new PeakBrush();
66
+
67
+ /**
68
+ *
69
+ */
70
+ protected VolumetricSpace volume;
71
+ protected int cellRadiusX,
72
+
73
+ /**
74
+ *
75
+ */
76
+
77
+ /**
78
+ *
79
+ */
80
+ cellRadiusY,
81
+
82
+ /**
83
+ *
84
+ */
85
+
86
+ /**
87
+ *
88
+ */
89
+ cellRadiusZ;
90
+ protected float stretchY,
91
+
92
+ /**
93
+ *
94
+ */
95
+ stretchZ;
96
+
97
+ /**
98
+ *
99
+ */
100
+ protected BrushMode brushMode = MODE_ADDITIVE;
101
+
102
+ /**
103
+ *
104
+ * @param volume
105
+ */
106
+ public VolumetricBrush(VolumetricSpace volume) {
107
+ this.volume = volume;
108
+ }
109
+
110
+ /**
111
+ *
112
+ * @param pos
113
+ * @param density
114
+ */
115
+ public void drawAtAbsolutePos(Vec3D pos, float density) {
116
+ float cx = MathUtils.clip((pos.x + volume.halfScale.x) / volume.scale.x
117
+ * volume.resX1, 0, volume.resX1);
118
+ float cy = MathUtils.clip((pos.y + volume.halfScale.y) / volume.scale.y
119
+ * volume.resY1, 0, volume.resY1);
120
+ float cz = MathUtils.clip((pos.z + volume.halfScale.z) / volume.scale.z
121
+ * volume.resZ1, 0, volume.resZ1);
122
+ drawAtGridPos(cx, cy, cz, density);
123
+ }
124
+
125
+ /**
126
+ *
127
+ * @param cx
128
+ * @param cy
129
+ * @param cz
130
+ * @param density
131
+ */
132
+ public abstract void drawAtGridPos(float cx, float cy, float cz,
133
+ float density);
134
+
135
+ /**
136
+ *
137
+ * @param mode
138
+ */
139
+ public void setMode(BrushMode mode) {
140
+ brushMode = mode;
141
+ }
142
+
143
+ /**
144
+ *
145
+ * @param radius
146
+ */
147
+ public abstract void setSize(float radius);
148
+
149
+ /**
150
+ *
151
+ * @param x
152
+ * @param y
153
+ * @param z
154
+ * @param cellVal
155
+ */
156
+ protected final void updateVoxel(int x, int y, int z, float cellVal) {
157
+ int idx = volume.getIndexFor(x, y, z);
158
+ volume.setVoxelAt(idx, brushMode.apply(volume.getVoxelAt(idx), cellVal));
159
+ }
160
+ }