toxiclibs 0.9.2 → 2.1.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 (383) hide show
  1. checksums.yaml +5 -5
  2. data/.mvn/extensions.xml +1 -1
  3. data/.travis.yml +3 -4
  4. data/CHANGELOG.md +10 -1
  5. data/README.md +3 -3
  6. data/Rakefile +1 -2
  7. data/examples/attract_repel/attractor.rb +1 -1
  8. data/examples/attract_repel/particle.rb +1 -1
  9. data/examples/boolean_shapes.rb +9 -5
  10. data/examples/force_directed/node.rb +1 -1
  11. data/examples/inflate_mesh.rb +1 -1
  12. data/examples/model_align.rb +1 -1
  13. data/examples/physics_type.rb +1 -1
  14. data/examples/povmesh/ftest.rb +3 -3
  15. data/examples/toxiclibs_color_theme.rb +91 -0
  16. data/lib/toxiclibs/version.rb +2 -1
  17. data/lib/toxiclibs.jar +0 -0
  18. data/lib/toxiclibs.rb +54 -37
  19. data/pom.rb +20 -28
  20. data/pom.xml +39 -65
  21. data/src/main/java/module-info.java +22 -0
  22. data/src/{toxi → main/java/toxi}/color/AccessCriteria.java +0 -0
  23. data/src/{toxi → main/java/toxi}/color/AlphaAccessor.java +0 -0
  24. data/src/{toxi → main/java/toxi}/color/CMYKAccessor.java +0 -0
  25. data/src/{toxi → main/java/toxi}/color/CMYKDistanceProxy.java +0 -0
  26. data/src/{toxi → main/java/toxi}/color/ColorGradient.java +0 -0
  27. data/src/{toxi → main/java/toxi}/color/ColorList.java +2 -4
  28. data/src/{toxi → main/java/toxi}/color/ColorRange.java +0 -0
  29. data/src/{toxi → main/java/toxi}/color/ColorTheme.java +0 -0
  30. data/src/{toxi → main/java/toxi}/color/DistanceProxy.java +0 -0
  31. data/src/{toxi → main/java/toxi}/color/HSVAccessor.java +0 -0
  32. data/src/{toxi → main/java/toxi}/color/HSVDistanceProxy.java +0 -0
  33. data/src/{toxi → main/java/toxi}/color/HistEntry.java +0 -0
  34. data/src/{toxi → main/java/toxi}/color/Histogram.java +0 -0
  35. data/src/{toxi → main/java/toxi}/color/Hue.java +0 -0
  36. data/src/{toxi → main/java/toxi}/color/LuminanceAccessor.java +0 -0
  37. data/src/{toxi → main/java/toxi}/color/NamedColor.java +0 -0
  38. data/src/{toxi → main/java/toxi}/color/ProximityComparator.java +0 -0
  39. data/src/{toxi → main/java/toxi}/color/RGBAccessor.java +0 -0
  40. data/src/{toxi → main/java/toxi}/color/RGBDistanceProxy.java +0 -0
  41. data/src/{toxi → main/java/toxi}/color/ReadonlyTColor.java +0 -0
  42. data/src/{toxi → main/java/toxi}/color/TColor.java +0 -0
  43. data/src/{toxi → main/java/toxi}/color/TColorAdapter.java +4 -4
  44. data/src/{toxi → main/java/toxi}/color/ToneMap.java +0 -0
  45. data/src/{toxi → main/java/toxi}/color/theory/AnalogousStrategy.java +0 -0
  46. data/src/{toxi → main/java/toxi}/color/theory/ColorTheoryRegistry.java +0 -0
  47. data/src/{toxi → main/java/toxi}/color/theory/ColorTheoryStrategy.java +0 -0
  48. data/src/{toxi → main/java/toxi}/color/theory/ComplementaryStrategy.java +0 -0
  49. data/src/{toxi → main/java/toxi}/color/theory/CompoundTheoryStrategy.java +0 -0
  50. data/src/{toxi → main/java/toxi}/color/theory/LeftSplitComplementaryStrategy.java +0 -0
  51. data/src/{toxi → main/java/toxi}/color/theory/MonochromeTheoryStrategy.java +0 -0
  52. data/src/{toxi → main/java/toxi}/color/theory/RightSplitComplementaryStrategy.java +0 -0
  53. data/src/{toxi → main/java/toxi}/color/theory/SingleComplementStrategy.java +0 -0
  54. data/src/{toxi → main/java/toxi}/color/theory/SplitComplementaryStrategy.java +0 -0
  55. data/src/{toxi → main/java/toxi}/color/theory/TetradTheoryStrategy.java +0 -0
  56. data/src/{toxi → main/java/toxi}/color/theory/TriadTheoryStrategy.java +0 -0
  57. data/src/{toxi → main/java/toxi}/data/csv/CSVAdapter.java +0 -0
  58. data/src/{toxi → main/java/toxi}/data/csv/CSVFieldMapper.java +0 -0
  59. data/src/{toxi → main/java/toxi}/data/csv/CSVListener.java +0 -0
  60. data/src/{toxi → main/java/toxi}/data/csv/CSVParser.java +0 -0
  61. data/src/{toxi → main/java/toxi}/data/feeds/AtomAuthor.java +2 -2
  62. data/src/{toxi → main/java/toxi}/data/feeds/AtomContent.java +3 -4
  63. data/src/{toxi → main/java/toxi}/data/feeds/AtomEntry.java +9 -13
  64. data/src/main/java/toxi/data/feeds/AtomFeed.java +91 -0
  65. data/src/{toxi → main/java/toxi}/data/feeds/AtomLink.java +3 -2
  66. data/src/{toxi → main/java/toxi}/data/feeds/RSSChannel.java +10 -11
  67. data/src/{toxi → main/java/toxi}/data/feeds/RSSEnclosure.java +3 -3
  68. data/src/{toxi → main/java/toxi}/data/feeds/RSSItem.java +11 -13
  69. data/src/{toxi → main/java/toxi}/data/feeds/util/EntityStripper.java +0 -0
  70. data/src/{toxi → main/java/toxi}/data/feeds/util/Iso8601DateAdapter.java +6 -7
  71. data/src/{toxi → main/java/toxi}/data/feeds/util/Rfc822DateAdapter.java +5 -6
  72. data/src/{toxi → main/java/toxi}/geom/AABB.java +8 -9
  73. data/src/{toxi → main/java/toxi}/geom/Axis3D.java +0 -0
  74. data/src/{toxi → main/java/toxi}/geom/AxisAlignedCylinder.java +0 -0
  75. data/src/{toxi → main/java/toxi}/geom/BernsteinPolynomial.java +0 -0
  76. data/src/{toxi → main/java/toxi}/geom/BezierCurve2D.java +0 -0
  77. data/src/{toxi → main/java/toxi}/geom/BezierCurve3D.java +0 -0
  78. data/src/{toxi → main/java/toxi}/geom/BooleanShapeBuilder.java +0 -0
  79. data/src/{toxi → main/java/toxi}/geom/BoxIntersector.java +0 -0
  80. data/src/{toxi → main/java/toxi}/geom/Circle.java +2 -2
  81. data/src/{toxi → main/java/toxi}/geom/CircleIntersector.java +0 -0
  82. data/src/{toxi → main/java/toxi}/geom/Cone.java +0 -0
  83. data/src/{toxi → main/java/toxi}/geom/ConvexPolygonClipper.java +0 -0
  84. data/src/{toxi → main/java/toxi}/geom/CoordinateExtractor.java +0 -0
  85. data/src/{toxi → main/java/toxi}/geom/Ellipse.java +0 -0
  86. data/src/{toxi → main/java/toxi}/geom/GMatrix.java +0 -0
  87. data/src/{toxi → main/java/toxi}/geom/GVector.java +0 -0
  88. data/src/{toxi → main/java/toxi}/geom/GlobalGridTesselator.java +0 -0
  89. data/src/{toxi → main/java/toxi}/geom/GridTesselator.java +0 -0
  90. data/src/{toxi → main/java/toxi}/geom/Intersector2D.java +0 -0
  91. data/src/{toxi → main/java/toxi}/geom/Intersector3D.java +0 -0
  92. data/src/{toxi → main/java/toxi}/geom/IsectData2D.java +0 -0
  93. data/src/{toxi → main/java/toxi}/geom/IsectData3D.java +0 -0
  94. data/src/{toxi → main/java/toxi}/geom/Line2D.java +1 -2
  95. data/src/{toxi → main/java/toxi}/geom/Line3D.java +1 -2
  96. data/src/{toxi → main/java/toxi}/geom/LineStrip2D.java +2 -2
  97. data/src/{toxi → main/java/toxi}/geom/LineStrip3D.java +2 -2
  98. data/src/{toxi → main/java/toxi}/geom/LocalGridTesselator.java +0 -0
  99. data/src/{toxi → main/java/toxi}/geom/Matrix3d.java +0 -0
  100. data/src/{toxi → main/java/toxi}/geom/Matrix4f.java +0 -0
  101. data/src/{toxi → main/java/toxi}/geom/Matrix4x4.java +0 -0
  102. data/src/{toxi → main/java/toxi}/geom/MatrixSizeException.java +0 -0
  103. data/src/{toxi → main/java/toxi}/geom/OctreeVisitor.java +0 -0
  104. data/src/{toxi → main/java/toxi}/geom/Origin3D.java +12 -6
  105. data/src/{toxi → main/java/toxi}/geom/Plane.java +3 -5
  106. data/src/{toxi → main/java/toxi}/geom/PlaneIntersector.java +0 -0
  107. data/src/{toxi → main/java/toxi}/geom/PointCloud3D.java +15 -12
  108. data/src/{toxi → main/java/toxi}/geom/PointOctree.java +0 -0
  109. data/src/{toxi → main/java/toxi}/geom/PointQuadtree.java +0 -0
  110. data/src/{toxi → main/java/toxi}/geom/Polygon2D.java +34 -45
  111. data/src/{toxi → main/java/toxi}/geom/PolygonClipper2D.java +0 -0
  112. data/src/{toxi → main/java/toxi}/geom/PolygonTesselator.java +0 -0
  113. data/src/{toxi → main/java/toxi}/geom/QuadtreeVisitor.java +0 -0
  114. data/src/{toxi → main/java/toxi}/geom/Quaternion.java +3 -5
  115. data/src/{toxi → main/java/toxi}/geom/Ray2D.java +4 -5
  116. data/src/{toxi → main/java/toxi}/geom/Ray3D.java +3 -5
  117. data/src/{toxi → main/java/toxi}/geom/Ray3DIntersector.java +0 -0
  118. data/src/{toxi → main/java/toxi}/geom/ReadonlyVec2D.java +0 -0
  119. data/src/{toxi → main/java/toxi}/geom/ReadonlyVec3D.java +0 -0
  120. data/src/{toxi → main/java/toxi}/geom/ReadonlyVec4D.java +0 -0
  121. data/src/{toxi → main/java/toxi}/geom/Rect.java +3 -5
  122. data/src/{toxi → main/java/toxi}/geom/Reflector3D.java +0 -0
  123. data/src/{toxi → main/java/toxi}/geom/Shape2D.java +0 -0
  124. data/src/{toxi → main/java/toxi}/geom/Shape3D.java +0 -0
  125. data/src/{toxi → main/java/toxi}/geom/SingularMatrixException.java +0 -0
  126. data/src/{toxi → main/java/toxi}/geom/SpatialBins.java +0 -0
  127. data/src/{toxi → main/java/toxi}/geom/SpatialIndex.java +0 -0
  128. data/src/{toxi → main/java/toxi}/geom/Sphere.java +3 -5
  129. data/src/{toxi → main/java/toxi}/geom/SphereIntersectorReflector.java +0 -0
  130. data/src/{toxi → main/java/toxi}/geom/Spline2D.java +12 -16
  131. data/src/{toxi → main/java/toxi}/geom/Spline3D.java +12 -16
  132. data/src/{toxi → main/java/toxi}/geom/SutherlandHodgemanClipper.java +0 -0
  133. data/src/{toxi → main/java/toxi}/geom/Triangle2D.java +4 -7
  134. data/src/{toxi → main/java/toxi}/geom/Triangle3D.java +5 -8
  135. data/src/{toxi → main/java/toxi}/geom/TriangleIntersector.java +0 -0
  136. data/src/{toxi → main/java/toxi}/geom/Vec2D.java +3 -3
  137. data/src/{toxi → main/java/toxi}/geom/Vec3D.java +4 -4
  138. data/src/{toxi → main/java/toxi}/geom/Vec4D.java +5 -5
  139. data/src/{toxi → main/java/toxi}/geom/VecMathUtil.java +0 -0
  140. data/src/{toxi → main/java/toxi}/geom/XAxisCylinder.java +0 -0
  141. data/src/{toxi → main/java/toxi}/geom/YAxisCylinder.java +0 -0
  142. data/src/{toxi → main/java/toxi}/geom/ZAxisCylinder.java +0 -0
  143. data/src/{toxi → main/java/toxi}/geom/mesh/BezierPatch.java +0 -0
  144. data/src/{toxi → main/java/toxi}/geom/mesh/BoxSelector.java +0 -0
  145. data/src/{toxi → main/java/toxi}/geom/mesh/DefaultSTLColorModel.java +0 -0
  146. data/src/{toxi → main/java/toxi}/geom/mesh/DefaultSelector.java +0 -0
  147. data/src/{toxi → main/java/toxi}/geom/mesh/Face.java +0 -0
  148. data/src/{toxi → main/java/toxi}/geom/mesh/LaplacianSmooth.java +0 -0
  149. data/src/{toxi → main/java/toxi}/geom/mesh/MaterialiseSTLColorModel.java +0 -0
  150. data/src/{toxi → main/java/toxi}/geom/mesh/Mesh3D.java +0 -0
  151. data/src/{toxi → main/java/toxi}/geom/mesh/MeshIntersector.java +0 -0
  152. data/src/{toxi → main/java/toxi}/geom/mesh/OBJWriter.java +0 -0
  153. data/src/{toxi → main/java/toxi}/geom/mesh/PLYWriter.java +0 -0
  154. data/src/{toxi → main/java/toxi}/geom/mesh/PlaneSelector.java +0 -0
  155. data/src/{toxi → main/java/toxi}/geom/mesh/STLColorModel.java +0 -0
  156. data/src/{toxi → main/java/toxi}/geom/mesh/STLReader.java +0 -0
  157. data/src/{toxi → main/java/toxi}/geom/mesh/STLWriter.java +0 -0
  158. data/src/{toxi → main/java/toxi}/geom/mesh/SphereFunction.java +0 -0
  159. data/src/{toxi → main/java/toxi}/geom/mesh/SphericalHarmonics.java +0 -0
  160. data/src/{toxi → main/java/toxi}/geom/mesh/SuperEllipsoid.java +0 -0
  161. data/src/{toxi → main/java/toxi}/geom/mesh/SurfaceFunction.java +0 -0
  162. data/src/{toxi → main/java/toxi}/geom/mesh/SurfaceMeshBuilder.java +0 -0
  163. data/src/{toxi → main/java/toxi}/geom/mesh/Terrain.java +0 -0
  164. data/src/{toxi → main/java/toxi}/geom/mesh/TriangleMesh.java +0 -0
  165. data/src/{toxi → main/java/toxi}/geom/mesh/Vertex.java +0 -0
  166. data/src/{toxi → main/java/toxi}/geom/mesh/VertexSelector.java +0 -0
  167. data/src/{toxi → main/java/toxi}/geom/mesh/WEFace.java +0 -0
  168. data/src/{toxi → main/java/toxi}/geom/mesh/WEMeshFilterStrategy.java +0 -0
  169. data/src/{toxi → main/java/toxi}/geom/mesh/WETriangleMesh.java +0 -0
  170. data/src/{toxi → main/java/toxi}/geom/mesh/WEVertex.java +0 -0
  171. data/src/{toxi → main/java/toxi}/geom/mesh/WingedEdge.java +2 -2
  172. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/CentroidSubdiv.java +0 -0
  173. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DisplacementSubdivision.java +0 -0
  174. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DualDisplacementSubdivision.java +0 -0
  175. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DualSubdivision.java +0 -0
  176. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/EdgeLengthComparator.java +0 -0
  177. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/FaceCountComparator.java +0 -0
  178. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +0 -0
  179. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointSubdiv.java +0 -0
  180. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointSubdivision.java +0 -0
  181. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/NewSubdivStrategy.java +0 -0
  182. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/NormalDisplacementSubdivision.java +0 -0
  183. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/SubdivisionStrategy.java +0 -0
  184. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/TriSubdivision.java +0 -0
  185. data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayTriangle.java +0 -0
  186. data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayTriangulation.java +5 -7
  187. data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayVertex.java +0 -0
  188. data/src/{toxi → main/java/toxi}/geom/mesh2d/Voronoi.java +0 -0
  189. data/src/{toxi → main/java/toxi}/geom/nurbs/BasicNurbsCurve.java +0 -0
  190. data/src/{toxi → main/java/toxi}/geom/nurbs/BasicNurbsSurface.java +0 -0
  191. data/src/{toxi → main/java/toxi}/geom/nurbs/ControlNet.java +0 -0
  192. data/src/{toxi → main/java/toxi}/geom/nurbs/CurveCreator.java +0 -0
  193. data/src/{toxi → main/java/toxi}/geom/nurbs/CurveUtils.java +0 -0
  194. data/src/{toxi → main/java/toxi}/geom/nurbs/InterpolationException.java +0 -0
  195. data/src/{toxi → main/java/toxi}/geom/nurbs/KnotVector.java +0 -0
  196. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsCreator.java +2 -2
  197. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsCurve.java +0 -0
  198. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsMeshCreator.java +0 -0
  199. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsSurface.java +0 -0
  200. data/src/{toxi → main/java/toxi}/image/util/Filter8bit.java +0 -0
  201. data/src/{toxi → main/java/toxi}/image/util/TiledFrameExporter.java +0 -0
  202. data/src/{toxi → main/java/toxi}/math/BezierInterpolation.java +0 -0
  203. data/src/{toxi → main/java/toxi}/math/CircularInterpolation.java +0 -0
  204. data/src/{toxi → main/java/toxi}/math/CosineInterpolation.java +0 -0
  205. data/src/{toxi → main/java/toxi}/math/DecimatedInterpolation.java +0 -0
  206. data/src/{toxi → main/java/toxi}/math/ExponentialInterpolation.java +0 -0
  207. data/src/{toxi → main/java/toxi}/math/InterpolateStrategy.java +0 -0
  208. data/src/{toxi → main/java/toxi}/math/Interpolation2D.java +0 -0
  209. data/src/{toxi → main/java/toxi}/math/LinearInterpolation.java +0 -0
  210. data/src/{toxi → main/java/toxi}/math/MathUtils.java +0 -0
  211. data/src/{toxi → main/java/toxi}/math/NonLinearScaleMap.java +0 -0
  212. data/src/{toxi → main/java/toxi}/math/ScaleMap.java +0 -0
  213. data/src/{toxi → main/java/toxi}/math/SigmoidInterpolation.java +0 -0
  214. data/src/{toxi → main/java/toxi}/math/SinCosLUT.java +0 -0
  215. data/src/{toxi → main/java/toxi}/math/ThresholdInterpolation.java +0 -0
  216. data/src/{toxi → main/java/toxi}/math/ZoomLensInterpolation.java +0 -0
  217. data/src/{toxi → main/java/toxi}/math/conversion/UnitTranslator.java +0 -0
  218. data/src/{toxi → main/java/toxi}/math/noise/PerlinNoise.java +0 -0
  219. data/src/{toxi → main/java/toxi}/math/noise/SimplexNoise.java +0 -0
  220. data/src/{toxi → main/java/toxi}/math/waves/AMFMSineWave.java +0 -0
  221. data/src/{toxi → main/java/toxi}/math/waves/AbstractWave.java +0 -0
  222. data/src/{toxi → main/java/toxi}/math/waves/ConstantWave.java +0 -0
  223. data/src/{toxi → main/java/toxi}/math/waves/FMHarmonicSquareWave.java +0 -0
  224. data/src/{toxi → main/java/toxi}/math/waves/FMSawtoothWave.java +0 -0
  225. data/src/{toxi → main/java/toxi}/math/waves/FMSineWave.java +0 -0
  226. data/src/{toxi → main/java/toxi}/math/waves/FMSquareWave.java +0 -0
  227. data/src/{toxi → main/java/toxi}/math/waves/FMTriangleWave.java +0 -0
  228. data/src/{toxi → main/java/toxi}/math/waves/SineWave.java +2 -2
  229. data/src/{toxi → main/java/toxi}/math/waves/Wave2D.java +0 -0
  230. data/src/{toxi → main/java/toxi}/math/waves/WaveState.java +0 -0
  231. data/src/{toxi → main/java/toxi}/music/scale/AbstractScale.java +0 -0
  232. data/src/{toxi → main/java/toxi}/music/scale/GenericScale.java +0 -0
  233. data/src/{toxi → main/java/toxi}/music/scale/MajorScale.java +0 -0
  234. data/src/{toxi → main/java/toxi}/newmesh/AttributedEdge.java +0 -0
  235. data/src/{toxi → main/java/toxi}/newmesh/AttributedFace.java +0 -0
  236. data/src/{toxi → main/java/toxi}/newmesh/IndexedTriangleMesh.java +70 -69
  237. data/src/{toxi → main/java/toxi}/newmesh/MeshAttributeCompiler.java +0 -0
  238. data/src/{toxi → main/java/toxi}/newmesh/MeshFaceNormalCompiler.java +0 -0
  239. data/src/{toxi → main/java/toxi}/newmesh/MeshUVCompiler.java +0 -0
  240. data/src/{toxi → main/java/toxi}/newmesh/MeshVertexColorCompiler.java +0 -0
  241. data/src/{toxi → main/java/toxi}/newmesh/MeshVertexCompiler.java +0 -0
  242. data/src/{toxi → main/java/toxi}/newmesh/MeshVertexNormalCompiler.java +0 -0
  243. data/src/{toxi → main/java/toxi}/newmesh/SpatialIndex.java +0 -0
  244. data/src/{toxi → main/java/toxi}/physics2d/ParticlePath2D.java +4 -3
  245. data/src/{toxi → main/java/toxi}/physics2d/ParticleString2D.java +2 -2
  246. data/src/{toxi → main/java/toxi}/physics2d/PullBackSpring2D.java +0 -0
  247. data/src/{toxi → main/java/toxi}/physics2d/VerletConstrainedSpring2D.java +0 -0
  248. data/src/{toxi → main/java/toxi}/physics2d/VerletMinDistanceSpring2D.java +0 -0
  249. data/src/main/java/toxi/physics2d/VerletParticle2D.java +449 -0
  250. data/src/main/java/toxi/physics2d/VerletPhysics2D.java +440 -0
  251. data/src/{toxi → main/java/toxi}/physics2d/VerletSpring2D.java +0 -0
  252. data/src/main/java/toxi/physics2d/behaviors/AttractionBehavior2D.java +211 -0
  253. data/src/{toxi → main/java/toxi}/physics2d/behaviors/ConstantForceBehavior2D.java +0 -0
  254. data/src/{toxi → main/java/toxi}/physics2d/behaviors/GravityBehavior2D.java +0 -0
  255. data/src/{toxi → main/java/toxi}/physics2d/behaviors/ParticleBehavior2D.java +0 -0
  256. data/src/{toxi → main/java/toxi}/physics2d/constraints/AngularConstraint.java +0 -0
  257. data/src/{toxi → main/java/toxi}/physics2d/constraints/AxisConstraint.java +0 -0
  258. data/src/{toxi → main/java/toxi}/physics2d/constraints/CircularConstraint.java +0 -0
  259. data/src/{toxi → main/java/toxi}/physics2d/constraints/MaxConstraint.java +0 -0
  260. data/src/{toxi → main/java/toxi}/physics2d/constraints/MinConstraint.java +0 -0
  261. data/src/{toxi → main/java/toxi}/physics2d/constraints/ParticleConstraint2D.java +0 -0
  262. data/src/{toxi → main/java/toxi}/physics2d/constraints/PolygonConstraint.java +0 -0
  263. data/src/{toxi → main/java/toxi}/physics2d/constraints/RectConstraint.java +0 -0
  264. data/src/{toxi → main/java/toxi}/physics3d/ParticlePath3D.java +4 -3
  265. data/src/{toxi → main/java/toxi}/physics3d/ParticleString3D.java +2 -2
  266. data/src/{toxi → main/java/toxi}/physics3d/PullBackSpring3D.java +0 -0
  267. data/src/{toxi → main/java/toxi}/physics3d/VerletConstrainedSpring3D.java +0 -0
  268. data/src/{toxi → main/java/toxi}/physics3d/VerletMinDistanceSpring3D.java +0 -0
  269. data/src/main/java/toxi/physics3d/VerletParticle3D.java +377 -0
  270. data/src/{toxi → main/java/toxi}/physics3d/VerletPhysics3D.java +0 -0
  271. data/src/{toxi → main/java/toxi}/physics3d/VerletSpring3D.java +0 -0
  272. data/src/{toxi → main/java/toxi}/physics3d/behaviors/AttractionBehavior3D.java +0 -0
  273. data/src/{toxi → main/java/toxi}/physics3d/behaviors/ConstantForceBehavior3D.java +0 -0
  274. data/src/{toxi → main/java/toxi}/physics3d/behaviors/GravityBehavior3D.java +0 -0
  275. data/src/{toxi → main/java/toxi}/physics3d/behaviors/ParticleBehavior3D.java +0 -0
  276. data/src/{toxi → main/java/toxi}/physics3d/constraints/AxisConstraint.java +1 -0
  277. data/src/{toxi → main/java/toxi}/physics3d/constraints/BoxConstraint.java +0 -0
  278. data/src/{toxi → main/java/toxi}/physics3d/constraints/CylinderConstraint.java +1 -0
  279. data/src/{toxi → main/java/toxi}/physics3d/constraints/MaxConstraint.java +1 -0
  280. data/src/{toxi → main/java/toxi}/physics3d/constraints/MinConstraint.java +1 -0
  281. data/src/{toxi → main/java/toxi}/physics3d/constraints/ParticleConstraint3D.java +0 -0
  282. data/src/{toxi → main/java/toxi}/physics3d/constraints/PlaneConstraint.java +0 -0
  283. data/src/{toxi → main/java/toxi}/physics3d/constraints/SoftBoxConstraint.java +38 -38
  284. data/src/{toxi → main/java/toxi}/physics3d/constraints/SphereConstraint.java +1 -0
  285. data/src/{toxi → main/java/toxi}/processing/ArrowModifier.java +0 -0
  286. data/src/{toxi → main/java/toxi}/processing/DashedLineModifier.java +0 -0
  287. data/src/{toxi → main/java/toxi}/processing/DeltaOrientationMapper.java +0 -0
  288. data/src/{toxi → main/java/toxi}/processing/Line2DRenderModifier.java +0 -0
  289. data/src/{toxi → main/java/toxi}/processing/MeshToVBO.java +0 -0
  290. data/src/{toxi → main/java/toxi}/processing/NormalMapper.java +0 -0
  291. data/src/{toxi → main/java/toxi}/processing/POVInterface.java +0 -0
  292. data/src/{toxi → main/java/toxi}/processing/POVMesh.java +0 -0
  293. data/src/{toxi → main/java/toxi}/processing/POVWriter.java +0 -0
  294. data/src/{toxi → main/java/toxi}/processing/RCOpaque.java +0 -0
  295. data/src/{toxi → main/java/toxi}/processing/RCTransp.java +0 -0
  296. data/src/{toxi → main/java/toxi}/processing/TextureBuilder.java +0 -0
  297. data/src/{toxi → main/java/toxi}/processing/Textures.java +0 -0
  298. data/src/{toxi → main/java/toxi}/processing/ToxiclibsSupport.java +3 -3
  299. data/src/{toxi → main/java/toxi}/processing/Tracing.java +0 -0
  300. data/src/{toxi → main/java/toxi}/processing/XYZNormalMapper.java +0 -0
  301. data/src/{toxi → main/java/toxi}/sim/automata/CAMatrix.java +0 -0
  302. data/src/{toxi → main/java/toxi}/sim/automata/CARule.java +0 -0
  303. data/src/{toxi → main/java/toxi}/sim/automata/CARule2D.java +0 -0
  304. data/src/{toxi → main/java/toxi}/sim/automata/CAWolfram1D.java +0 -0
  305. data/src/{toxi → main/java/toxi}/sim/automata/EvolvableMatrix.java +0 -0
  306. data/src/{toxi → main/java/toxi}/sim/automata/MatrixEvolver.java +0 -0
  307. data/src/{toxi → main/java/toxi}/sim/dla/BottomUpOrder.java +0 -0
  308. data/src/{toxi → main/java/toxi}/sim/dla/DLA.java +0 -0
  309. data/src/{toxi → main/java/toxi}/sim/dla/DLAConfiguration.java +0 -0
  310. data/src/{toxi → main/java/toxi}/sim/dla/DLAEventAdapter.java +0 -0
  311. data/src/{toxi → main/java/toxi}/sim/dla/DLAEventListener.java +0 -0
  312. data/src/{toxi → main/java/toxi}/sim/dla/DLAGuideLines.java +0 -0
  313. data/src/{toxi → main/java/toxi}/sim/dla/DLAParticle.java +0 -0
  314. data/src/{toxi → main/java/toxi}/sim/dla/DLASegment.java +0 -0
  315. data/src/{toxi → main/java/toxi}/sim/dla/PipelineOrder.java +0 -0
  316. data/src/{toxi → main/java/toxi}/sim/dla/RadialDistanceOrder.java +0 -0
  317. data/src/{toxi → main/java/toxi}/sim/erosion/ErosionFunction.java +0 -0
  318. data/src/{toxi → main/java/toxi}/sim/erosion/TalusAngleErosion.java +0 -0
  319. data/src/{toxi → main/java/toxi}/sim/erosion/ThermalErosion.java +0 -0
  320. data/src/{toxi → main/java/toxi}/sim/fluids/FluidSolver2D.java +0 -0
  321. data/src/{toxi → main/java/toxi}/sim/fluids/FluidSolver3D.java +0 -0
  322. data/src/{toxi → main/java/toxi}/sim/grayscott/GrayScott.java +0 -0
  323. data/src/{toxi → main/java/toxi}/util/DateUtils.java +0 -0
  324. data/src/{toxi → main/java/toxi}/util/FileSequenceDescriptor.java +0 -0
  325. data/src/main/java/toxi/util/FileUtils.java +443 -0
  326. data/src/{toxi → main/java/toxi}/util/datatypes/ArraySet.java +0 -0
  327. data/src/{toxi → main/java/toxi}/util/datatypes/ArrayUtil.java +0 -0
  328. data/src/{toxi → main/java/toxi}/util/datatypes/BiasedDoubleRange.java +3 -3
  329. data/src/{toxi → main/java/toxi}/util/datatypes/BiasedFloatRange.java +2 -3
  330. data/src/{toxi → main/java/toxi}/util/datatypes/BiasedIntegerRange.java +3 -3
  331. data/src/{toxi → main/java/toxi}/util/datatypes/DoubleRange.java +3 -3
  332. data/src/{toxi → main/java/toxi}/util/datatypes/FloatRange.java +3 -3
  333. data/src/{toxi → main/java/toxi}/util/datatypes/GenericSet.java +0 -0
  334. data/src/{toxi → main/java/toxi}/util/datatypes/IntegerRange.java +3 -3
  335. data/src/{toxi → main/java/toxi}/util/datatypes/IntegerSet.java +0 -0
  336. data/src/{toxi → main/java/toxi}/util/datatypes/ItemIndex.java +0 -0
  337. data/src/{toxi → main/java/toxi}/util/datatypes/SingletonRegistry.java +0 -0
  338. data/src/{toxi → main/java/toxi}/util/datatypes/TypedProperties.java +0 -0
  339. data/src/{toxi → main/java/toxi}/util/datatypes/UndirectedGraph.java +0 -0
  340. data/src/{toxi → main/java/toxi}/util/datatypes/UniqueItemIndex.java +0 -0
  341. data/src/{toxi → main/java/toxi}/util/datatypes/WeightedRandomEntry.java +0 -0
  342. data/src/{toxi → main/java/toxi}/util/datatypes/WeightedRandomSet.java +0 -0
  343. data/src/{toxi → main/java/toxi}/util/events/EventDispatcher.java +0 -0
  344. data/src/{toxi → main/java/toxi}/volume/AdditiveBrush.java +0 -0
  345. data/src/{toxi → main/java/toxi}/volume/ArrayIsoSurface.java +0 -0
  346. data/src/{toxi → main/java/toxi}/volume/BoxBrush.java +0 -0
  347. data/src/{toxi → main/java/toxi}/volume/BrushMode.java +0 -0
  348. data/src/{toxi → main/java/toxi}/volume/HashIsoSurface.java +0 -0
  349. data/src/{toxi → main/java/toxi}/volume/IsoSurface.java +0 -0
  350. data/src/{toxi → main/java/toxi}/volume/MarchingCubesIndex.java +0 -0
  351. data/src/{toxi → main/java/toxi}/volume/MeshLatticeBuilder.java +0 -0
  352. data/src/{toxi → main/java/toxi}/volume/MeshVoxelizer.java +0 -0
  353. data/src/{toxi → main/java/toxi}/volume/MultiplyBrush.java +0 -0
  354. data/src/{toxi → main/java/toxi}/volume/PeakBrush.java +0 -0
  355. data/src/{toxi → main/java/toxi}/volume/ReplaceBrush.java +0 -0
  356. data/src/{toxi → main/java/toxi}/volume/RoundBrush.java +0 -0
  357. data/src/{toxi → main/java/toxi}/volume/VolumetricBrush.java +0 -0
  358. data/src/{toxi → main/java/toxi}/volume/VolumetricHashMap.java +0 -0
  359. data/src/{toxi → main/java/toxi}/volume/VolumetricSpace.java +0 -0
  360. data/src/{toxi → main/java/toxi}/volume/VolumetricSpaceArray.java +0 -0
  361. data/src/test/java/module-info.java +10 -0
  362. data/src/{BooleanShapes.java → test/java/toxi/BooleanShapes.java} +2 -2
  363. data/toxiclibs.gemspec +7 -8
  364. metadata +357 -368
  365. data/.mvn/wrapper/maven-wrapper.properties +0 -1
  366. data/lib/args4j-2.0.31.jar +0 -0
  367. data/src/com/toxi/net/ClientListener.java +0 -41
  368. data/src/com/toxi/net/ServerListener.java +0 -70
  369. data/src/com/toxi/net/ServerListenerAdapter.java +0 -47
  370. data/src/com/toxi/net/ServerState.java +0 -18
  371. data/src/com/toxi/net/UDPConnection.java +0 -66
  372. data/src/com/toxi/net/UDPSyncClient.java +0 -81
  373. data/src/com/toxi/net/UDPSyncServer.java +0 -450
  374. data/src/com/toxi/nio/UDPClient.java +0 -121
  375. data/src/com/toxi/nio/UDPClientState.java +0 -32
  376. data/src/com/toxi/nio/UDPServer.java +0 -129
  377. data/src/toxi/data/feeds/AtomFeed.java +0 -129
  378. data/src/toxi/data/feeds/RSSFeed.java +0 -99
  379. data/src/toxi/physics2d/VerletParticle2D.java +0 -457
  380. data/src/toxi/physics2d/VerletPhysics2D.java +0 -448
  381. data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +0 -212
  382. data/src/toxi/physics3d/VerletParticle3D.java +0 -385
  383. data/src/toxi/util/FileUtils.java +0 -467
@@ -156,7 +156,7 @@ public class IndexedTriangleMesh {
156
156
  HashMap<String, Object[]> attribs) {
157
157
  HashMap<String, int[]> fattribs = null;
158
158
  if (attribs != null) {
159
- fattribs = (f != null) ? f.attribs : new HashMap<String, int[]>(
159
+ fattribs = (f != null) ? f.attribs : new HashMap<>(
160
160
  attribs.size(), 1);
161
161
  for (String attID : attribs.keySet()) {
162
162
  Object[] items = attribs.get(attID);
@@ -197,9 +197,9 @@ public class IndexedTriangleMesh {
197
197
  Vec3D[] v = null;
198
198
  for (AttributedFace f : mesh.faces) {
199
199
  attribs.clear();
200
- for (String a : f.attribs.keySet()) {
201
- attribs.put(a, mesh.getFaceAttribValues(f, a));
202
- }
200
+ f.attribs.keySet().forEach((a) -> {
201
+ attribs.put(a, mesh.getFaceAttribValues(f, a));
202
+ });
203
203
  v = mesh.getFaceVertices(f, v);
204
204
  addFace(v[0], v[1], v[2], attribs);
205
205
  }
@@ -244,21 +244,21 @@ public class IndexedTriangleMesh {
244
244
  }
245
245
  HashMap<String, float[]> buffers = new HashMap<>();
246
246
  int numF = faces.size();
247
- for (String attrib : attribs) {
248
- MeshAttributeCompiler comp = mergedComps.get(attrib);
249
- if (comp != null) {
250
- comp.setMesh(this);
251
- ItemIndex<?> index = comp.getIndex();
252
- int faceStride = 3 * comp.getStride();
253
- float[] buf = new float[numF * faceStride];
254
- int offset = 0;
255
- for (AttributedFace f : faces) {
256
- comp.compileFace(f, index, buf, offset);
257
- offset += faceStride;
258
- }
259
- buffers.put(attrib, buf);
260
- }
261
- }
247
+ attribs.forEach((attrib) -> {
248
+ MeshAttributeCompiler comp = mergedComps.get(attrib);
249
+ if (comp != null) {
250
+ comp.setMesh(this);
251
+ ItemIndex<?> index = comp.getIndex();
252
+ int faceStride = 3 * comp.getStride();
253
+ float[] buf = new float[numF * faceStride];
254
+ int offset = 0;
255
+ for (AttributedFace f : faces) {
256
+ comp.compileFace(f, index, buf, offset);
257
+ offset += faceStride;
258
+ }
259
+ buffers.put(attrib, buf);
260
+ }
261
+ });
262
262
  return buffers;
263
263
  }
264
264
 
@@ -269,15 +269,17 @@ public class IndexedTriangleMesh {
269
269
  public List<Object> computeEdges() {
270
270
  ItemIndex<Object> edges = getAttributeIndex(ATTR_EDGES);
271
271
  edges.clear();
272
- for (AttributedFace f : faces) {
273
- if (f.attribs == null) {
274
- f.attribs = new HashMap<>();
275
- }
276
- f.attribs.put(ATTR_EDGES, new int[] {
277
- indexFaceEdge(f, f.a, f.b), indexFaceEdge(f, f.b, f.c),
278
- indexFaceEdge(f, f.c, f.a)
279
- });
280
- }
272
+ faces.stream().map((f) -> {
273
+ if (f.attribs == null) {
274
+ f.attribs = new HashMap<>();
275
+ }
276
+ return f;
277
+ }).forEachOrdered((f) -> {
278
+ f.attribs.put(ATTR_EDGES, new int[] {
279
+ indexFaceEdge(f, f.a, f.b), indexFaceEdge(f, f.b, f.c),
280
+ indexFaceEdge(f, f.c, f.a)
281
+ });
282
+ });
281
283
  return edges.getItems();
282
284
  }
283
285
 
@@ -305,28 +307,30 @@ public class IndexedTriangleMesh {
305
307
  for (int i = 0; i < vnorms.length; i++) {
306
308
  vnorms[i] = new Vec3D();
307
309
  }
308
- for (AttributedFace f : faces) {
309
- final Vec3D n = fnormals.forID(f.normal);
310
- vnorms[f.a].addSelf(n);
311
- vnorms[f.b].addSelf(n);
312
- vnorms[f.c].addSelf(n);
313
- }
310
+ faces.forEach((f) -> {
311
+ final Vec3D n = fnormals.forID(f.normal);
312
+ vnorms[f.a].addSelf(n);
313
+ vnorms[f.b].addSelf(n);
314
+ vnorms[f.c].addSelf(n);
315
+ });
314
316
  for (Vec3D vnorm : vnorms) {
315
317
  vnorm.normalize();
316
318
  }
317
319
  ItemIndex<Object> idx = getAttributeIndex(ATTR_VNORMALS);
318
320
  idx.clear();
319
- for (AttributedFace f : faces) {
320
- if (f.attribs == null) {
321
- f.attribs = new HashMap<>();
322
- }
323
- f.attribs.put(
324
- ATTR_VNORMALS,
325
- new int[] {
326
- idx.index(vnorms[f.a]), idx.index(vnorms[f.b]),
327
- idx.index(vnorms[f.c])
328
- });
329
- }
321
+ faces.stream().map((f) -> {
322
+ if (f.attribs == null) {
323
+ f.attribs = new HashMap<>();
324
+ }
325
+ return f;
326
+ }).forEachOrdered((f) -> {
327
+ f.attribs.put(
328
+ ATTR_VNORMALS,
329
+ new int[] {
330
+ idx.index(vnorms[f.a]), idx.index(vnorms[f.b]),
331
+ idx.index(vnorms[f.c])
332
+ });
333
+ });
330
334
  return idx.getItems();
331
335
  }
332
336
 
@@ -366,26 +370,26 @@ public class IndexedTriangleMesh {
366
370
  * @return itself
367
371
  */
368
372
  public IndexedTriangleMesh flipVertexOrder() {
369
- for (AttributedFace f : faces) {
370
- int t = f.b;
371
- f.b = f.c;
372
- f.c = t;
373
- if (f.attribs != null) {
374
- for (int[] att : f.attribs.values()) {
375
- t = att[1];
376
- att[1] = att[2];
377
- att[2] = t;
378
- }
379
- }
380
- }
381
- for (Vec3D n : fnormals.getItems()) {
382
- fnormals.reindex(n, n.getInverted());
383
- }
373
+ faces.forEach((f) -> {
374
+ int t = f.b;
375
+ f.b = f.c;
376
+ f.c = t;
377
+ if (f.attribs != null) {
378
+ for (int[] att : f.attribs.values()) {
379
+ t = att[1];
380
+ att[1] = att[2];
381
+ att[2] = t;
382
+ }
383
+ }
384
+ });
385
+ fnormals.getItems().forEach((n) -> {
386
+ fnormals.reindex(n, n.getInverted());
387
+ });
384
388
  ItemIndex<Object> vnormals = attributes.get(ATTR_VNORMALS);
385
389
  if (vnormals != null) {
386
- for (Object n : vnormals.getItems()) {
387
- vnormals.reindex(n, ((Vec3D) n).getInverted());
388
- }
390
+ vnormals.getItems().forEach((n) -> {
391
+ vnormals.reindex(n, ((Vec3D) n).getInverted());
392
+ });
389
393
  }
390
394
  return this;
391
395
  }
@@ -488,12 +492,9 @@ public class IndexedTriangleMesh {
488
492
  */
489
493
  public List<AttributedEdge> getEdgesForVertexID(int id) {
490
494
  List<AttributedEdge> vedges = new ArrayList<>(2);
491
- for (Object o : getEdges()) {
492
- AttributedEdge e = (AttributedEdge) o;
493
- if (e.a == id || e.b == id) {
494
- vedges.add(e);
495
- }
496
- }
495
+ getEdges().stream().map((o) -> (AttributedEdge) o).filter((e) -> (e.a == id || e.b == id)).forEachOrdered((e) -> {
496
+ vedges.add(e);
497
+ });
497
498
  return vedges;
498
499
  }
499
500
 
@@ -78,11 +78,12 @@ public class ParticlePath2D extends Spline2D {
78
78
  public List<VerletParticle2D> createParticles(VerletPhysics2D physics,
79
79
  int subDiv, float step, float mass) {
80
80
  particles.clear();
81
- for (Vec2D v : toLineStrip2D(subDiv).getDecimatedVertices(step, true)) {
82
- VerletParticle2D p = createSingleParticle(v, mass);
81
+ toLineStrip2D(subDiv).getDecimatedVertices(step, true).stream().map((v) -> createSingleParticle(v, mass)).map((p) -> {
83
82
  particles.add(p);
83
+ return p;
84
+ }).forEachOrdered((p) -> {
84
85
  physics.addParticle(p);
85
- }
86
+ });
86
87
  return particles;
87
88
  }
88
89
 
@@ -129,9 +129,9 @@ public class ParticleString2D {
129
129
  * particles & springs.
130
130
  */
131
131
  public void clear() {
132
- for (VerletSpring2D s : links) {
132
+ links.forEach((s) -> {
133
133
  physics.removeSpringElements(s);
134
- }
134
+ });
135
135
  particles.clear();
136
136
  links.clear();
137
137
  }
@@ -0,0 +1,449 @@
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
+ package toxi.physics2d;
28
+
29
+ import java.util.ArrayList;
30
+ import java.util.Collection;
31
+ import java.util.List;
32
+
33
+ import toxi.geom.ReadonlyVec2D;
34
+ import toxi.geom.Rect;
35
+ import toxi.geom.Vec2D;
36
+ import toxi.physics2d.behaviors.ParticleBehavior2D;
37
+ import toxi.physics2d.constraints.ParticleConstraint2D;
38
+
39
+ /**
40
+ * An individual 3D particle for use by the VerletPhysics and VerletSpring
41
+ * classes. A particle has weight, can be locked in space and its position
42
+ * constrained inside an (optional) axis-aligned bounding box.
43
+ */
44
+ public class VerletParticle2D extends Vec2D {
45
+
46
+ protected Vec2D prev,
47
+ /**
48
+ *
49
+ */
50
+ /**
51
+ *
52
+ */
53
+ temp;
54
+
55
+ /**
56
+ *
57
+ */
58
+ protected boolean isLocked;
59
+
60
+ /**
61
+ * Bounding box, by default set to null to disable
62
+ */
63
+ public Rect bounds;
64
+
65
+ /**
66
+ * An optional particle constraints, called immediately after a particle is
67
+ * updated (and only used if particle is unlocked (default)
68
+ */
69
+ public List<ParticleConstraint2D> constraints;
70
+
71
+ /**
72
+ *
73
+ */
74
+ public List<ParticleBehavior2D> behaviors;
75
+ /**
76
+ * Particle weight, default = 1
77
+ */
78
+ protected float weight, invWeight;
79
+
80
+ /**
81
+ *
82
+ */
83
+ protected Vec2D force = new Vec2D();
84
+
85
+ /**
86
+ * Creates particle at position xyz
87
+ *
88
+ * @param x
89
+ * @param y
90
+ */
91
+ public VerletParticle2D(float x, float y) {
92
+ this(x, y, 1);
93
+ }
94
+
95
+ /**
96
+ * Creates particle at position xyz with weight w
97
+ *
98
+ * @param x
99
+ * @param y
100
+ * @param w
101
+ */
102
+ public VerletParticle2D(float x, float y, float w) {
103
+ super(x, y);
104
+ prev = new Vec2D(this);
105
+ temp = new Vec2D();
106
+ setWeight(w);
107
+ }
108
+
109
+ /**
110
+ * Creates particle at the position of the passed in vector
111
+ *
112
+ * @param v position
113
+ */
114
+ public VerletParticle2D(ReadonlyVec2D v) {
115
+ this(v.x(), v.y(), 1);
116
+ }
117
+
118
+ /**
119
+ * Creates particle with weight w at the position of the passed in vector
120
+ *
121
+ * @param v position
122
+ * @param w weight
123
+ */
124
+ public VerletParticle2D(ReadonlyVec2D v, float w) {
125
+ this(v.x(), v.y(), w);
126
+ }
127
+
128
+ /**
129
+ * Creates a copy of the passed in particle
130
+ *
131
+ * @param p
132
+ */
133
+ public VerletParticle2D(VerletParticle2D p) {
134
+ this(p.x, p.y, p.weight);
135
+ isLocked = p.isLocked;
136
+ }
137
+
138
+ /**
139
+ *
140
+ * @param behavior
141
+ * @return
142
+ */
143
+ public VerletParticle2D addBehavior(ParticleBehavior2D behavior) {
144
+ return addBehavior(behavior, 1);
145
+ }
146
+
147
+ /**
148
+ *
149
+ * @param behavior
150
+ * @param timeStep
151
+ * @return
152
+ */
153
+ public VerletParticle2D addBehavior(ParticleBehavior2D behavior,
154
+ float timeStep) {
155
+ if (behaviors == null) {
156
+ behaviors = new ArrayList<>(1);
157
+ }
158
+ behavior.configure(timeStep);
159
+ behaviors.add(behavior);
160
+ return this;
161
+ }
162
+
163
+ /**
164
+ *
165
+ * @param behaviors
166
+ * @return
167
+ */
168
+ public VerletParticle2D addBehaviors(
169
+ Collection<ParticleBehavior2D> behaviors) {
170
+ return addBehaviors(behaviors, 1);
171
+ }
172
+
173
+ /**
174
+ *
175
+ * @param behaviors
176
+ * @param timeStemp
177
+ * @return
178
+ */
179
+ public VerletParticle2D addBehaviors(
180
+ Collection<ParticleBehavior2D> behaviors, float timeStemp) {
181
+ behaviors.forEach((b) -> {
182
+ addBehavior(b, timeStemp);
183
+ });
184
+ return this;
185
+ }
186
+
187
+ /**
188
+ * Adds the given constraint implementation to the list of constraints applied
189
+ * to this particle at each time step.
190
+ *
191
+ * @param c constraint instance
192
+ * @return itself
193
+ */
194
+ public VerletParticle2D addConstraint(ParticleConstraint2D c) {
195
+ if (constraints == null) {
196
+ constraints = new ArrayList<>(1);
197
+ }
198
+ constraints.add(c);
199
+ return this;
200
+ }
201
+
202
+ /**
203
+ *
204
+ * @param constraints
205
+ * @return
206
+ */
207
+ public VerletParticle2D addConstraints(
208
+ Collection<ParticleConstraint2D> constraints) {
209
+ constraints.forEach((c) -> {
210
+ addConstraint(c);
211
+ });
212
+ return this;
213
+ }
214
+
215
+ /**
216
+ *
217
+ * @param f
218
+ * @return
219
+ */
220
+ public VerletParticle2D addForce(Vec2D f) {
221
+ force.addSelf(f);
222
+ return this;
223
+ }
224
+
225
+ /**
226
+ *
227
+ * @param v
228
+ * @return
229
+ */
230
+ public VerletParticle2D addVelocity(Vec2D v) {
231
+ prev.subSelf(v);
232
+ return this;
233
+ }
234
+
235
+ /**
236
+ *
237
+ */
238
+ public void applyBehaviors() {
239
+ if (behaviors != null) {
240
+ behaviors.forEach((b) -> {
241
+ b.apply(this);
242
+ });
243
+ }
244
+ }
245
+
246
+ /**
247
+ *
248
+ */
249
+ public void applyConstraints() {
250
+ if (constraints != null) {
251
+ constraints.forEach((pc) -> {
252
+ pc.apply(this);
253
+ });
254
+ }
255
+ }
256
+
257
+ /**
258
+ *
259
+ */
260
+ protected void applyForce() {
261
+ temp.set(this);
262
+ addSelf(sub(prev).addSelf(force.scale(weight)));
263
+ prev.set(temp);
264
+ force.clear();
265
+ }
266
+
267
+ /**
268
+ *
269
+ * @return
270
+ */
271
+ public VerletParticle2D clearForce() {
272
+ force.clear();
273
+ return this;
274
+ }
275
+
276
+ /**
277
+ *
278
+ * @return
279
+ */
280
+ public VerletParticle2D clearVelocity() {
281
+ prev.set(this);
282
+ return this;
283
+ }
284
+
285
+ /**
286
+ *
287
+ * @return
288
+ */
289
+ public Vec2D getForce() {
290
+ return force;
291
+ }
292
+
293
+ /**
294
+ * @return the inverse weight (1/weight)
295
+ */
296
+ public final float getInvWeight() {
297
+ return invWeight;
298
+ }
299
+
300
+ /**
301
+ * Returns the particle's position at the most recent time step.
302
+ *
303
+ * @return previous position
304
+ */
305
+ public Vec2D getPreviousPosition() {
306
+ return prev;
307
+ }
308
+
309
+ /**
310
+ *
311
+ * @return
312
+ */
313
+ public Vec2D getVelocity() {
314
+ return sub(prev);
315
+ }
316
+
317
+ /**
318
+ * @return the weight
319
+ */
320
+ public final float getWeight() {
321
+ return weight;
322
+ }
323
+
324
+ /**
325
+ * @return true, if particle is locked
326
+ */
327
+ public final boolean isLocked() {
328
+ return isLocked;
329
+ }
330
+
331
+ /**
332
+ * Locks/immobilizes particle in space
333
+ *
334
+ * @return itself
335
+ */
336
+ public VerletParticle2D lock() {
337
+ isLocked = true;
338
+ return this;
339
+ }
340
+
341
+ /**
342
+ *
343
+ * @return
344
+ */
345
+ public VerletParticle2D removeAllBehaviors() {
346
+ behaviors.clear();
347
+ return this;
348
+ }
349
+
350
+ /**
351
+ * Removes any currently applied constraints from this particle.
352
+ *
353
+ * @return itself
354
+ */
355
+ public VerletParticle2D removeAllConstraints() {
356
+ constraints.clear();
357
+ return this;
358
+ }
359
+
360
+ /**
361
+ *
362
+ * @param b
363
+ * @return
364
+ */
365
+ public boolean removeBehavior(ParticleBehavior2D b) {
366
+ return behaviors.remove(b);
367
+ }
368
+
369
+ /**
370
+ *
371
+ * @param behaviors
372
+ * @return
373
+ */
374
+ public boolean removeBehaviors(Collection<ParticleBehavior2D> behaviors) {
375
+ return this.behaviors.removeAll(behaviors);
376
+ }
377
+
378
+ /**
379
+ * Attempts to remove the given constraint instance from the list of active
380
+ * constraints.
381
+ *
382
+ * @param c constraint to remove
383
+ * @return true, if successfully removed
384
+ */
385
+ public boolean removeConstraint(ParticleConstraint2D c) {
386
+ return constraints.remove(c);
387
+ }
388
+
389
+ /**
390
+ *
391
+ * @param constraints
392
+ * @return
393
+ */
394
+ public boolean removeConstraints(
395
+ Collection<ParticleConstraint2D> constraints) {
396
+ return this.constraints.removeAll(constraints);
397
+ }
398
+
399
+ /**
400
+ *
401
+ * @param scl
402
+ * @return
403
+ */
404
+ public VerletParticle2D scaleVelocity(float scl) {
405
+ prev.interpolateToSelf(this, 1f - scl);
406
+ return this;
407
+ }
408
+
409
+ /**
410
+ *
411
+ * @param p
412
+ * @return
413
+ */
414
+ public VerletParticle2D setPreviousPosition(Vec2D p) {
415
+ prev.set(p);
416
+ return this;
417
+ }
418
+
419
+ /**
420
+ *
421
+ * @param w
422
+ */
423
+ public final void setWeight(float w) {
424
+ weight = w;
425
+ invWeight = 1f / w;
426
+ }
427
+
428
+ /**
429
+ * Unlocks particle again
430
+ *
431
+ * @return itself
432
+ */
433
+ public VerletParticle2D unlock() {
434
+ clearVelocity();
435
+ isLocked = false;
436
+ return this;
437
+ }
438
+
439
+ /**
440
+ *
441
+ */
442
+ public void update() {
443
+ if (!isLocked) {
444
+ applyBehaviors();
445
+ applyForce();
446
+ applyConstraints();
447
+ }
448
+ }
449
+ }