toxiclibs 1.0.0 → 2.0.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 (368) hide show
  1. checksums.yaml +4 -4
  2. data/.mvn/extensions.xml +1 -1
  3. data/.travis.yml +3 -4
  4. data/CHANGELOG.md +3 -0
  5. data/README.md +2 -2
  6. data/Rakefile +0 -1
  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.rb +52 -37
  17. data/lib/toxiclibs/version.rb +1 -1
  18. data/pom.rb +22 -26
  19. data/pom.xml +42 -64
  20. data/src/{toxi → main/java/toxi}/color/AccessCriteria.java +0 -0
  21. data/src/{toxi → main/java/toxi}/color/AlphaAccessor.java +0 -0
  22. data/src/{toxi → main/java/toxi}/color/CMYKAccessor.java +0 -0
  23. data/src/{toxi → main/java/toxi}/color/CMYKDistanceProxy.java +0 -0
  24. data/src/{toxi → main/java/toxi}/color/ColorGradient.java +0 -0
  25. data/src/{toxi → main/java/toxi}/color/ColorList.java +2 -4
  26. data/src/{toxi → main/java/toxi}/color/ColorRange.java +0 -0
  27. data/src/{toxi → main/java/toxi}/color/ColorTheme.java +0 -0
  28. data/src/{toxi → main/java/toxi}/color/DistanceProxy.java +0 -0
  29. data/src/{toxi → main/java/toxi}/color/HSVAccessor.java +0 -0
  30. data/src/{toxi → main/java/toxi}/color/HSVDistanceProxy.java +0 -0
  31. data/src/{toxi → main/java/toxi}/color/HistEntry.java +0 -0
  32. data/src/{toxi → main/java/toxi}/color/Histogram.java +0 -0
  33. data/src/{toxi → main/java/toxi}/color/Hue.java +0 -0
  34. data/src/{toxi → main/java/toxi}/color/LuminanceAccessor.java +0 -0
  35. data/src/{toxi → main/java/toxi}/color/NamedColor.java +0 -0
  36. data/src/{toxi → main/java/toxi}/color/ProximityComparator.java +0 -0
  37. data/src/{toxi → main/java/toxi}/color/RGBAccessor.java +0 -0
  38. data/src/{toxi → main/java/toxi}/color/RGBDistanceProxy.java +0 -0
  39. data/src/{toxi → main/java/toxi}/color/ReadonlyTColor.java +0 -0
  40. data/src/{toxi → main/java/toxi}/color/TColor.java +0 -0
  41. data/src/{toxi → main/java/toxi}/color/TColorAdapter.java +4 -4
  42. data/src/{toxi → main/java/toxi}/color/ToneMap.java +0 -0
  43. data/src/{toxi → main/java/toxi}/color/theory/AnalogousStrategy.java +0 -0
  44. data/src/{toxi → main/java/toxi}/color/theory/ColorTheoryRegistry.java +0 -0
  45. data/src/{toxi → main/java/toxi}/color/theory/ColorTheoryStrategy.java +0 -0
  46. data/src/{toxi → main/java/toxi}/color/theory/ComplementaryStrategy.java +0 -0
  47. data/src/{toxi → main/java/toxi}/color/theory/CompoundTheoryStrategy.java +0 -0
  48. data/src/{toxi → main/java/toxi}/color/theory/LeftSplitComplementaryStrategy.java +0 -0
  49. data/src/{toxi → main/java/toxi}/color/theory/MonochromeTheoryStrategy.java +0 -0
  50. data/src/{toxi → main/java/toxi}/color/theory/RightSplitComplementaryStrategy.java +0 -0
  51. data/src/{toxi → main/java/toxi}/color/theory/SingleComplementStrategy.java +0 -0
  52. data/src/{toxi → main/java/toxi}/color/theory/SplitComplementaryStrategy.java +0 -0
  53. data/src/{toxi → main/java/toxi}/color/theory/TetradTheoryStrategy.java +0 -0
  54. data/src/{toxi → main/java/toxi}/color/theory/TriadTheoryStrategy.java +0 -0
  55. data/src/{toxi → main/java/toxi}/data/csv/CSVAdapter.java +0 -0
  56. data/src/{toxi → main/java/toxi}/data/csv/CSVFieldMapper.java +0 -0
  57. data/src/{toxi → main/java/toxi}/data/csv/CSVListener.java +0 -0
  58. data/src/{toxi → main/java/toxi}/data/csv/CSVParser.java +0 -0
  59. data/src/{toxi → main/java/toxi}/data/feeds/AtomAuthor.java +2 -2
  60. data/src/{toxi → main/java/toxi}/data/feeds/AtomContent.java +3 -4
  61. data/src/{toxi → main/java/toxi}/data/feeds/AtomEntry.java +9 -13
  62. data/src/main/java/toxi/data/feeds/AtomFeed.java +91 -0
  63. data/src/{toxi → main/java/toxi}/data/feeds/AtomLink.java +3 -2
  64. data/src/{toxi → main/java/toxi}/data/feeds/RSSChannel.java +10 -11
  65. data/src/{toxi → main/java/toxi}/data/feeds/RSSEnclosure.java +3 -3
  66. data/src/{toxi → main/java/toxi}/data/feeds/RSSItem.java +11 -13
  67. data/src/{toxi → main/java/toxi}/data/feeds/util/EntityStripper.java +0 -0
  68. data/src/{toxi → main/java/toxi}/data/feeds/util/Iso8601DateAdapter.java +6 -7
  69. data/src/{toxi → main/java/toxi}/data/feeds/util/Rfc822DateAdapter.java +5 -6
  70. data/src/{toxi → main/java/toxi}/geom/AABB.java +8 -9
  71. data/src/{toxi → main/java/toxi}/geom/Axis3D.java +0 -0
  72. data/src/{toxi → main/java/toxi}/geom/AxisAlignedCylinder.java +0 -0
  73. data/src/{toxi → main/java/toxi}/geom/BernsteinPolynomial.java +0 -0
  74. data/src/{toxi → main/java/toxi}/geom/BezierCurve2D.java +0 -0
  75. data/src/{toxi → main/java/toxi}/geom/BezierCurve3D.java +0 -0
  76. data/src/{toxi → main/java/toxi}/geom/BooleanShapeBuilder.java +0 -0
  77. data/src/{toxi → main/java/toxi}/geom/BoxIntersector.java +0 -0
  78. data/src/{toxi → main/java/toxi}/geom/Circle.java +2 -2
  79. data/src/{toxi → main/java/toxi}/geom/CircleIntersector.java +0 -0
  80. data/src/{toxi → main/java/toxi}/geom/Cone.java +0 -0
  81. data/src/{toxi → main/java/toxi}/geom/ConvexPolygonClipper.java +0 -0
  82. data/src/{toxi → main/java/toxi}/geom/CoordinateExtractor.java +0 -0
  83. data/src/{toxi → main/java/toxi}/geom/Ellipse.java +0 -0
  84. data/src/{toxi → main/java/toxi}/geom/GMatrix.java +0 -0
  85. data/src/{toxi → main/java/toxi}/geom/GVector.java +0 -0
  86. data/src/{toxi → main/java/toxi}/geom/GlobalGridTesselator.java +0 -0
  87. data/src/{toxi → main/java/toxi}/geom/GridTesselator.java +0 -0
  88. data/src/{toxi → main/java/toxi}/geom/Intersector2D.java +0 -0
  89. data/src/{toxi → main/java/toxi}/geom/Intersector3D.java +0 -0
  90. data/src/{toxi → main/java/toxi}/geom/IsectData2D.java +0 -0
  91. data/src/{toxi → main/java/toxi}/geom/IsectData3D.java +0 -0
  92. data/src/{toxi → main/java/toxi}/geom/Line2D.java +1 -2
  93. data/src/{toxi → main/java/toxi}/geom/Line3D.java +1 -2
  94. data/src/{toxi → main/java/toxi}/geom/LineStrip2D.java +2 -2
  95. data/src/{toxi → main/java/toxi}/geom/LineStrip3D.java +2 -2
  96. data/src/{toxi → main/java/toxi}/geom/LocalGridTesselator.java +0 -0
  97. data/src/{toxi → main/java/toxi}/geom/Matrix3d.java +0 -0
  98. data/src/{toxi → main/java/toxi}/geom/Matrix4f.java +0 -0
  99. data/src/{toxi → main/java/toxi}/geom/Matrix4x4.java +0 -0
  100. data/src/{toxi → main/java/toxi}/geom/MatrixSizeException.java +0 -0
  101. data/src/{toxi → main/java/toxi}/geom/OctreeVisitor.java +0 -0
  102. data/src/{toxi → main/java/toxi}/geom/Origin3D.java +12 -6
  103. data/src/{toxi → main/java/toxi}/geom/Plane.java +3 -5
  104. data/src/{toxi → main/java/toxi}/geom/PlaneIntersector.java +0 -0
  105. data/src/{toxi → main/java/toxi}/geom/PointCloud3D.java +15 -12
  106. data/src/{toxi → main/java/toxi}/geom/PointOctree.java +0 -0
  107. data/src/{toxi → main/java/toxi}/geom/PointQuadtree.java +0 -0
  108. data/src/{toxi → main/java/toxi}/geom/Polygon2D.java +34 -45
  109. data/src/{toxi → main/java/toxi}/geom/PolygonClipper2D.java +0 -0
  110. data/src/{toxi → main/java/toxi}/geom/PolygonTesselator.java +0 -0
  111. data/src/{toxi → main/java/toxi}/geom/QuadtreeVisitor.java +0 -0
  112. data/src/{toxi → main/java/toxi}/geom/Quaternion.java +3 -5
  113. data/src/{toxi → main/java/toxi}/geom/Ray2D.java +4 -5
  114. data/src/{toxi → main/java/toxi}/geom/Ray3D.java +3 -5
  115. data/src/{toxi → main/java/toxi}/geom/Ray3DIntersector.java +0 -0
  116. data/src/{toxi → main/java/toxi}/geom/ReadonlyVec2D.java +0 -0
  117. data/src/{toxi → main/java/toxi}/geom/ReadonlyVec3D.java +0 -0
  118. data/src/{toxi → main/java/toxi}/geom/ReadonlyVec4D.java +0 -0
  119. data/src/{toxi → main/java/toxi}/geom/Rect.java +3 -5
  120. data/src/{toxi → main/java/toxi}/geom/Reflector3D.java +0 -0
  121. data/src/{toxi → main/java/toxi}/geom/Shape2D.java +0 -0
  122. data/src/{toxi → main/java/toxi}/geom/Shape3D.java +0 -0
  123. data/src/{toxi → main/java/toxi}/geom/SingularMatrixException.java +0 -0
  124. data/src/{toxi → main/java/toxi}/geom/SpatialBins.java +0 -0
  125. data/src/{toxi → main/java/toxi}/geom/SpatialIndex.java +0 -0
  126. data/src/{toxi → main/java/toxi}/geom/Sphere.java +3 -5
  127. data/src/{toxi → main/java/toxi}/geom/SphereIntersectorReflector.java +0 -0
  128. data/src/{toxi → main/java/toxi}/geom/Spline2D.java +12 -16
  129. data/src/{toxi → main/java/toxi}/geom/Spline3D.java +12 -16
  130. data/src/{toxi → main/java/toxi}/geom/SutherlandHodgemanClipper.java +0 -0
  131. data/src/{toxi → main/java/toxi}/geom/Triangle2D.java +4 -7
  132. data/src/{toxi → main/java/toxi}/geom/Triangle3D.java +5 -8
  133. data/src/{toxi → main/java/toxi}/geom/TriangleIntersector.java +0 -0
  134. data/src/{toxi → main/java/toxi}/geom/Vec2D.java +3 -3
  135. data/src/{toxi → main/java/toxi}/geom/Vec3D.java +4 -4
  136. data/src/{toxi → main/java/toxi}/geom/Vec4D.java +5 -5
  137. data/src/{toxi → main/java/toxi}/geom/VecMathUtil.java +0 -0
  138. data/src/{toxi → main/java/toxi}/geom/XAxisCylinder.java +0 -0
  139. data/src/{toxi → main/java/toxi}/geom/YAxisCylinder.java +0 -0
  140. data/src/{toxi → main/java/toxi}/geom/ZAxisCylinder.java +0 -0
  141. data/src/{toxi → main/java/toxi}/geom/mesh/BezierPatch.java +0 -0
  142. data/src/{toxi → main/java/toxi}/geom/mesh/BoxSelector.java +0 -0
  143. data/src/{toxi → main/java/toxi}/geom/mesh/DefaultSTLColorModel.java +0 -0
  144. data/src/{toxi → main/java/toxi}/geom/mesh/DefaultSelector.java +0 -0
  145. data/src/{toxi → main/java/toxi}/geom/mesh/Face.java +0 -0
  146. data/src/{toxi → main/java/toxi}/geom/mesh/LaplacianSmooth.java +0 -0
  147. data/src/{toxi → main/java/toxi}/geom/mesh/MaterialiseSTLColorModel.java +0 -0
  148. data/src/{toxi → main/java/toxi}/geom/mesh/Mesh3D.java +0 -0
  149. data/src/{toxi → main/java/toxi}/geom/mesh/MeshIntersector.java +0 -0
  150. data/src/{toxi → main/java/toxi}/geom/mesh/OBJWriter.java +0 -0
  151. data/src/{toxi → main/java/toxi}/geom/mesh/PLYWriter.java +0 -0
  152. data/src/{toxi → main/java/toxi}/geom/mesh/PlaneSelector.java +0 -0
  153. data/src/{toxi → main/java/toxi}/geom/mesh/STLColorModel.java +0 -0
  154. data/src/{toxi → main/java/toxi}/geom/mesh/STLReader.java +0 -0
  155. data/src/{toxi → main/java/toxi}/geom/mesh/STLWriter.java +0 -0
  156. data/src/{toxi → main/java/toxi}/geom/mesh/SphereFunction.java +0 -0
  157. data/src/{toxi → main/java/toxi}/geom/mesh/SphericalHarmonics.java +0 -0
  158. data/src/{toxi → main/java/toxi}/geom/mesh/SuperEllipsoid.java +0 -0
  159. data/src/{toxi → main/java/toxi}/geom/mesh/SurfaceFunction.java +0 -0
  160. data/src/{toxi → main/java/toxi}/geom/mesh/SurfaceMeshBuilder.java +0 -0
  161. data/src/{toxi → main/java/toxi}/geom/mesh/Terrain.java +0 -0
  162. data/src/{toxi → main/java/toxi}/geom/mesh/TriangleMesh.java +0 -0
  163. data/src/{toxi → main/java/toxi}/geom/mesh/Vertex.java +0 -0
  164. data/src/{toxi → main/java/toxi}/geom/mesh/VertexSelector.java +0 -0
  165. data/src/{toxi → main/java/toxi}/geom/mesh/WEFace.java +0 -0
  166. data/src/{toxi → main/java/toxi}/geom/mesh/WEMeshFilterStrategy.java +0 -0
  167. data/src/{toxi → main/java/toxi}/geom/mesh/WETriangleMesh.java +0 -0
  168. data/src/{toxi → main/java/toxi}/geom/mesh/WEVertex.java +0 -0
  169. data/src/{toxi → main/java/toxi}/geom/mesh/WingedEdge.java +2 -2
  170. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/CentroidSubdiv.java +0 -0
  171. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DisplacementSubdivision.java +0 -0
  172. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DualDisplacementSubdivision.java +0 -0
  173. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/DualSubdivision.java +0 -0
  174. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/EdgeLengthComparator.java +0 -0
  175. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/FaceCountComparator.java +0 -0
  176. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +0 -0
  177. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointSubdiv.java +0 -0
  178. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/MidpointSubdivision.java +0 -0
  179. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/NewSubdivStrategy.java +0 -0
  180. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/NormalDisplacementSubdivision.java +0 -0
  181. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/SubdivisionStrategy.java +0 -0
  182. data/src/{toxi → main/java/toxi}/geom/mesh/subdiv/TriSubdivision.java +0 -0
  183. data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayTriangle.java +0 -0
  184. data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayTriangulation.java +5 -7
  185. data/src/{toxi → main/java/toxi}/geom/mesh2d/DelaunayVertex.java +0 -0
  186. data/src/{toxi → main/java/toxi}/geom/mesh2d/Voronoi.java +0 -0
  187. data/src/{toxi → main/java/toxi}/geom/nurbs/BasicNurbsCurve.java +0 -0
  188. data/src/{toxi → main/java/toxi}/geom/nurbs/BasicNurbsSurface.java +0 -0
  189. data/src/{toxi → main/java/toxi}/geom/nurbs/ControlNet.java +0 -0
  190. data/src/{toxi → main/java/toxi}/geom/nurbs/CurveCreator.java +0 -0
  191. data/src/{toxi → main/java/toxi}/geom/nurbs/CurveUtils.java +0 -0
  192. data/src/{toxi → main/java/toxi}/geom/nurbs/InterpolationException.java +0 -0
  193. data/src/{toxi → main/java/toxi}/geom/nurbs/KnotVector.java +0 -0
  194. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsCreator.java +2 -2
  195. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsCurve.java +0 -0
  196. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsMeshCreator.java +0 -0
  197. data/src/{toxi → main/java/toxi}/geom/nurbs/NurbsSurface.java +0 -0
  198. data/src/{toxi → main/java/toxi}/image/util/Filter8bit.java +0 -0
  199. data/src/{toxi → main/java/toxi}/image/util/TiledFrameExporter.java +0 -0
  200. data/src/{toxi → main/java/toxi}/math/BezierInterpolation.java +0 -0
  201. data/src/{toxi → main/java/toxi}/math/CircularInterpolation.java +0 -0
  202. data/src/{toxi → main/java/toxi}/math/CosineInterpolation.java +0 -0
  203. data/src/{toxi → main/java/toxi}/math/DecimatedInterpolation.java +0 -0
  204. data/src/{toxi → main/java/toxi}/math/ExponentialInterpolation.java +0 -0
  205. data/src/{toxi → main/java/toxi}/math/InterpolateStrategy.java +0 -0
  206. data/src/{toxi → main/java/toxi}/math/Interpolation2D.java +0 -0
  207. data/src/{toxi → main/java/toxi}/math/LinearInterpolation.java +0 -0
  208. data/src/{toxi → main/java/toxi}/math/MathUtils.java +0 -0
  209. data/src/{toxi → main/java/toxi}/math/NonLinearScaleMap.java +0 -0
  210. data/src/{toxi → main/java/toxi}/math/ScaleMap.java +0 -0
  211. data/src/{toxi → main/java/toxi}/math/SigmoidInterpolation.java +0 -0
  212. data/src/{toxi → main/java/toxi}/math/SinCosLUT.java +0 -0
  213. data/src/{toxi → main/java/toxi}/math/ThresholdInterpolation.java +0 -0
  214. data/src/{toxi → main/java/toxi}/math/ZoomLensInterpolation.java +0 -0
  215. data/src/{toxi → main/java/toxi}/math/conversion/UnitTranslator.java +0 -0
  216. data/src/{toxi → main/java/toxi}/math/noise/PerlinNoise.java +0 -0
  217. data/src/{toxi → main/java/toxi}/math/noise/SimplexNoise.java +0 -0
  218. data/src/{toxi → main/java/toxi}/math/waves/AMFMSineWave.java +0 -0
  219. data/src/{toxi → main/java/toxi}/math/waves/AbstractWave.java +0 -0
  220. data/src/{toxi → main/java/toxi}/math/waves/ConstantWave.java +0 -0
  221. data/src/{toxi → main/java/toxi}/math/waves/FMHarmonicSquareWave.java +0 -0
  222. data/src/{toxi → main/java/toxi}/math/waves/FMSawtoothWave.java +0 -0
  223. data/src/{toxi → main/java/toxi}/math/waves/FMSineWave.java +0 -0
  224. data/src/{toxi → main/java/toxi}/math/waves/FMSquareWave.java +0 -0
  225. data/src/{toxi → main/java/toxi}/math/waves/FMTriangleWave.java +0 -0
  226. data/src/{toxi → main/java/toxi}/math/waves/SineWave.java +2 -2
  227. data/src/{toxi → main/java/toxi}/math/waves/Wave2D.java +0 -0
  228. data/src/{toxi → main/java/toxi}/math/waves/WaveState.java +0 -0
  229. data/src/{toxi → main/java/toxi}/music/scale/AbstractScale.java +0 -0
  230. data/src/{toxi → main/java/toxi}/music/scale/GenericScale.java +0 -0
  231. data/src/{toxi → main/java/toxi}/music/scale/MajorScale.java +0 -0
  232. data/src/{toxi → main/java/toxi}/newmesh/AttributedEdge.java +0 -0
  233. data/src/{toxi → main/java/toxi}/newmesh/AttributedFace.java +0 -0
  234. data/src/{toxi → main/java/toxi}/newmesh/IndexedTriangleMesh.java +70 -69
  235. data/src/{toxi → main/java/toxi}/newmesh/MeshAttributeCompiler.java +0 -0
  236. data/src/{toxi → main/java/toxi}/newmesh/MeshFaceNormalCompiler.java +0 -0
  237. data/src/{toxi → main/java/toxi}/newmesh/MeshUVCompiler.java +0 -0
  238. data/src/{toxi → main/java/toxi}/newmesh/MeshVertexColorCompiler.java +0 -0
  239. data/src/{toxi → main/java/toxi}/newmesh/MeshVertexCompiler.java +0 -0
  240. data/src/{toxi → main/java/toxi}/newmesh/MeshVertexNormalCompiler.java +0 -0
  241. data/src/{toxi → main/java/toxi}/newmesh/SpatialIndex.java +0 -0
  242. data/src/{toxi → main/java/toxi}/physics2d/ParticlePath2D.java +4 -3
  243. data/src/{toxi → main/java/toxi}/physics2d/ParticleString2D.java +2 -2
  244. data/src/{toxi → main/java/toxi}/physics2d/PullBackSpring2D.java +0 -0
  245. data/src/{toxi → main/java/toxi}/physics2d/VerletConstrainedSpring2D.java +0 -0
  246. data/src/{toxi → main/java/toxi}/physics2d/VerletMinDistanceSpring2D.java +0 -0
  247. data/src/main/java/toxi/physics2d/VerletParticle2D.java +449 -0
  248. data/src/main/java/toxi/physics2d/VerletPhysics2D.java +440 -0
  249. data/src/{toxi → main/java/toxi}/physics2d/VerletSpring2D.java +0 -0
  250. data/src/main/java/toxi/physics2d/behaviors/AttractionBehavior2D.java +211 -0
  251. data/src/{toxi → main/java/toxi}/physics2d/behaviors/ConstantForceBehavior2D.java +0 -0
  252. data/src/{toxi → main/java/toxi}/physics2d/behaviors/GravityBehavior2D.java +0 -0
  253. data/src/{toxi → main/java/toxi}/physics2d/behaviors/ParticleBehavior2D.java +0 -0
  254. data/src/{toxi → main/java/toxi}/physics2d/constraints/AngularConstraint.java +0 -0
  255. data/src/{toxi → main/java/toxi}/physics2d/constraints/AxisConstraint.java +0 -0
  256. data/src/{toxi → main/java/toxi}/physics2d/constraints/CircularConstraint.java +0 -0
  257. data/src/{toxi → main/java/toxi}/physics2d/constraints/MaxConstraint.java +0 -0
  258. data/src/{toxi → main/java/toxi}/physics2d/constraints/MinConstraint.java +0 -0
  259. data/src/{toxi → main/java/toxi}/physics2d/constraints/ParticleConstraint2D.java +0 -0
  260. data/src/{toxi → main/java/toxi}/physics2d/constraints/PolygonConstraint.java +0 -0
  261. data/src/{toxi → main/java/toxi}/physics2d/constraints/RectConstraint.java +0 -0
  262. data/src/{toxi → main/java/toxi}/physics3d/ParticlePath3D.java +4 -3
  263. data/src/{toxi → main/java/toxi}/physics3d/ParticleString3D.java +2 -2
  264. data/src/{toxi → main/java/toxi}/physics3d/PullBackSpring3D.java +0 -0
  265. data/src/{toxi → main/java/toxi}/physics3d/VerletConstrainedSpring3D.java +0 -0
  266. data/src/{toxi → main/java/toxi}/physics3d/VerletMinDistanceSpring3D.java +0 -0
  267. data/src/main/java/toxi/physics3d/VerletParticle3D.java +377 -0
  268. data/src/{toxi → main/java/toxi}/physics3d/VerletPhysics3D.java +0 -0
  269. data/src/{toxi → main/java/toxi}/physics3d/VerletSpring3D.java +0 -0
  270. data/src/{toxi → main/java/toxi}/physics3d/behaviors/AttractionBehavior3D.java +0 -0
  271. data/src/{toxi → main/java/toxi}/physics3d/behaviors/ConstantForceBehavior3D.java +0 -0
  272. data/src/{toxi → main/java/toxi}/physics3d/behaviors/GravityBehavior3D.java +0 -0
  273. data/src/{toxi → main/java/toxi}/physics3d/behaviors/ParticleBehavior3D.java +0 -0
  274. data/src/{toxi → main/java/toxi}/physics3d/constraints/AxisConstraint.java +1 -0
  275. data/src/{toxi → main/java/toxi}/physics3d/constraints/BoxConstraint.java +0 -0
  276. data/src/{toxi → main/java/toxi}/physics3d/constraints/CylinderConstraint.java +1 -0
  277. data/src/{toxi → main/java/toxi}/physics3d/constraints/MaxConstraint.java +1 -0
  278. data/src/{toxi → main/java/toxi}/physics3d/constraints/MinConstraint.java +1 -0
  279. data/src/{toxi → main/java/toxi}/physics3d/constraints/ParticleConstraint3D.java +0 -0
  280. data/src/{toxi → main/java/toxi}/physics3d/constraints/PlaneConstraint.java +0 -0
  281. data/src/{toxi → main/java/toxi}/physics3d/constraints/SoftBoxConstraint.java +38 -38
  282. data/src/{toxi → main/java/toxi}/physics3d/constraints/SphereConstraint.java +1 -0
  283. data/src/{toxi → main/java/toxi}/processing/ArrowModifier.java +0 -0
  284. data/src/{toxi → main/java/toxi}/processing/DashedLineModifier.java +0 -0
  285. data/src/{toxi → main/java/toxi}/processing/DeltaOrientationMapper.java +0 -0
  286. data/src/{toxi → main/java/toxi}/processing/Line2DRenderModifier.java +0 -0
  287. data/src/{toxi → main/java/toxi}/processing/MeshToVBO.java +0 -0
  288. data/src/{toxi → main/java/toxi}/processing/NormalMapper.java +0 -0
  289. data/src/{toxi → main/java/toxi}/processing/POVInterface.java +0 -0
  290. data/src/{toxi → main/java/toxi}/processing/POVMesh.java +0 -0
  291. data/src/{toxi → main/java/toxi}/processing/POVWriter.java +0 -0
  292. data/src/{toxi → main/java/toxi}/processing/RCOpaque.java +0 -0
  293. data/src/{toxi → main/java/toxi}/processing/RCTransp.java +0 -0
  294. data/src/{toxi → main/java/toxi}/processing/TextureBuilder.java +0 -0
  295. data/src/{toxi → main/java/toxi}/processing/Textures.java +0 -0
  296. data/src/{toxi → main/java/toxi}/processing/ToxiclibsSupport.java +0 -0
  297. data/src/{toxi → main/java/toxi}/processing/Tracing.java +0 -0
  298. data/src/{toxi → main/java/toxi}/processing/XYZNormalMapper.java +0 -0
  299. data/src/{toxi → main/java/toxi}/sim/automata/CAMatrix.java +0 -0
  300. data/src/{toxi → main/java/toxi}/sim/automata/CARule.java +0 -0
  301. data/src/{toxi → main/java/toxi}/sim/automata/CARule2D.java +0 -0
  302. data/src/{toxi → main/java/toxi}/sim/automata/CAWolfram1D.java +0 -0
  303. data/src/{toxi → main/java/toxi}/sim/automata/EvolvableMatrix.java +0 -0
  304. data/src/{toxi → main/java/toxi}/sim/automata/MatrixEvolver.java +0 -0
  305. data/src/{toxi → main/java/toxi}/sim/dla/BottomUpOrder.java +0 -0
  306. data/src/{toxi → main/java/toxi}/sim/dla/DLA.java +0 -0
  307. data/src/{toxi → main/java/toxi}/sim/dla/DLAConfiguration.java +0 -0
  308. data/src/{toxi → main/java/toxi}/sim/dla/DLAEventAdapter.java +0 -0
  309. data/src/{toxi → main/java/toxi}/sim/dla/DLAEventListener.java +0 -0
  310. data/src/{toxi → main/java/toxi}/sim/dla/DLAGuideLines.java +0 -0
  311. data/src/{toxi → main/java/toxi}/sim/dla/DLAParticle.java +0 -0
  312. data/src/{toxi → main/java/toxi}/sim/dla/DLASegment.java +0 -0
  313. data/src/{toxi → main/java/toxi}/sim/dla/PipelineOrder.java +0 -0
  314. data/src/{toxi → main/java/toxi}/sim/dla/RadialDistanceOrder.java +0 -0
  315. data/src/{toxi → main/java/toxi}/sim/erosion/ErosionFunction.java +0 -0
  316. data/src/{toxi → main/java/toxi}/sim/erosion/TalusAngleErosion.java +0 -0
  317. data/src/{toxi → main/java/toxi}/sim/erosion/ThermalErosion.java +0 -0
  318. data/src/{toxi → main/java/toxi}/sim/fluids/FluidSolver2D.java +0 -0
  319. data/src/{toxi → main/java/toxi}/sim/fluids/FluidSolver3D.java +0 -0
  320. data/src/{toxi → main/java/toxi}/sim/grayscott/GrayScott.java +0 -0
  321. data/src/{toxi → main/java/toxi}/util/DateUtils.java +0 -0
  322. data/src/{toxi → main/java/toxi}/util/FileSequenceDescriptor.java +0 -0
  323. data/src/main/java/toxi/util/FileUtils.java +443 -0
  324. data/src/{toxi → main/java/toxi}/util/datatypes/ArraySet.java +0 -0
  325. data/src/{toxi → main/java/toxi}/util/datatypes/ArrayUtil.java +0 -0
  326. data/src/{toxi → main/java/toxi}/util/datatypes/BiasedDoubleRange.java +3 -3
  327. data/src/{toxi → main/java/toxi}/util/datatypes/BiasedFloatRange.java +2 -3
  328. data/src/{toxi → main/java/toxi}/util/datatypes/BiasedIntegerRange.java +3 -3
  329. data/src/{toxi → main/java/toxi}/util/datatypes/DoubleRange.java +3 -3
  330. data/src/{toxi → main/java/toxi}/util/datatypes/FloatRange.java +3 -3
  331. data/src/{toxi → main/java/toxi}/util/datatypes/GenericSet.java +0 -0
  332. data/src/{toxi → main/java/toxi}/util/datatypes/IntegerRange.java +3 -3
  333. data/src/{toxi → main/java/toxi}/util/datatypes/IntegerSet.java +0 -0
  334. data/src/{toxi → main/java/toxi}/util/datatypes/ItemIndex.java +0 -0
  335. data/src/{toxi → main/java/toxi}/util/datatypes/SingletonRegistry.java +0 -0
  336. data/src/{toxi → main/java/toxi}/util/datatypes/TypedProperties.java +0 -0
  337. data/src/{toxi → main/java/toxi}/util/datatypes/UndirectedGraph.java +0 -0
  338. data/src/{toxi → main/java/toxi}/util/datatypes/UniqueItemIndex.java +0 -0
  339. data/src/{toxi → main/java/toxi}/util/datatypes/WeightedRandomEntry.java +0 -0
  340. data/src/{toxi → main/java/toxi}/util/datatypes/WeightedRandomSet.java +0 -0
  341. data/src/{toxi → main/java/toxi}/util/events/EventDispatcher.java +0 -0
  342. data/src/{toxi → main/java/toxi}/volume/AdditiveBrush.java +0 -0
  343. data/src/{toxi → main/java/toxi}/volume/ArrayIsoSurface.java +0 -0
  344. data/src/{toxi → main/java/toxi}/volume/BoxBrush.java +0 -0
  345. data/src/{toxi → main/java/toxi}/volume/BrushMode.java +0 -0
  346. data/src/{toxi → main/java/toxi}/volume/HashIsoSurface.java +0 -0
  347. data/src/{toxi → main/java/toxi}/volume/IsoSurface.java +0 -0
  348. data/src/{toxi → main/java/toxi}/volume/MarchingCubesIndex.java +0 -0
  349. data/src/{toxi → main/java/toxi}/volume/MeshLatticeBuilder.java +0 -0
  350. data/src/{toxi → main/java/toxi}/volume/MeshVoxelizer.java +0 -0
  351. data/src/{toxi → main/java/toxi}/volume/MultiplyBrush.java +0 -0
  352. data/src/{toxi → main/java/toxi}/volume/PeakBrush.java +0 -0
  353. data/src/{toxi → main/java/toxi}/volume/ReplaceBrush.java +0 -0
  354. data/src/{toxi → main/java/toxi}/volume/RoundBrush.java +0 -0
  355. data/src/{toxi → main/java/toxi}/volume/VolumetricBrush.java +0 -0
  356. data/src/{toxi → main/java/toxi}/volume/VolumetricHashMap.java +0 -0
  357. data/src/{toxi → main/java/toxi}/volume/VolumetricSpace.java +0 -0
  358. data/src/{toxi → main/java/toxi}/volume/VolumetricSpaceArray.java +0 -0
  359. data/src/{BooleanShapes.java → test/java/BooleanShapes.java} +0 -0
  360. data/toxiclibs.gemspec +6 -7
  361. metadata +345 -347
  362. data/src/toxi/data/feeds/AtomFeed.java +0 -129
  363. data/src/toxi/data/feeds/RSSFeed.java +0 -99
  364. data/src/toxi/physics2d/VerletParticle2D.java +0 -457
  365. data/src/toxi/physics2d/VerletPhysics2D.java +0 -448
  366. data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +0 -212
  367. data/src/toxi/physics3d/VerletParticle3D.java +0 -385
  368. data/src/toxi/util/FileUtils.java +0 -467
@@ -1,385 +0,0 @@
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;
29
-
30
- import java.util.ArrayList;
31
- import java.util.List;
32
-
33
- import toxi.geom.AABB;
34
- import toxi.geom.ReadonlyVec3D;
35
- import toxi.geom.Vec3D;
36
- import toxi.physics3d.behaviors.ParticleBehavior3D;
37
- import toxi.physics3d.constraints.ParticleConstraint3D;
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 VerletParticle3D extends Vec3D {
45
-
46
- protected Vec3D prev,
47
-
48
- /**
49
- *
50
- */
51
-
52
- /**
53
- *
54
- */
55
- temp;
56
-
57
- /**
58
- *
59
- */
60
- protected boolean isLocked;
61
-
62
- /**
63
- * Bounding box, by default set to null to disable
64
- */
65
- public AABB bounds;
66
-
67
- /**
68
- * An optional particle constraints, called immediately after a particle is
69
- * updated (and only used if particle is unlocked (default)
70
- */
71
- public List<ParticleConstraint3D> constraints;
72
-
73
- /**
74
- *
75
- */
76
- public List<ParticleBehavior3D> behaviors;
77
-
78
- /**
79
- * Particle weight, default = 1
80
- */
81
- protected float weight, invWeight;
82
-
83
- /**
84
- *
85
- */
86
- protected Vec3D force = new Vec3D();
87
-
88
- /**
89
- * Creates particle at position xyz
90
- *
91
- * @param x
92
- * @param y
93
- * @param z
94
- */
95
- public VerletParticle3D(float x, float y, float z) {
96
- this(x, y, z, 1);
97
- }
98
-
99
- /**
100
- * Creates particle at position xyz with weight w
101
- *
102
- * @param x
103
- * @param y
104
- * @param z
105
- * @param w
106
- */
107
- public VerletParticle3D(float x, float y, float z, float w) {
108
- super(x, y, z);
109
- prev = new Vec3D(this);
110
- temp = new Vec3D();
111
- setWeight(w);
112
- }
113
-
114
- /**
115
- * Creates particle at the position of the passed in vector
116
- *
117
- * @param v
118
- * position
119
- */
120
- public VerletParticle3D(ReadonlyVec3D v) {
121
- this(v.x(), v.y(), v.z(), 1);
122
- }
123
-
124
- /**
125
- * Creates particle with weight w at the position of the passed in vector
126
- *
127
- * @param v
128
- * position
129
- * @param w
130
- * weight
131
- */
132
- public VerletParticle3D(ReadonlyVec3D v, float w) {
133
- this(v.x(), v.y(), v.z(), w);
134
- }
135
-
136
- /**
137
- * Creates a copy of the passed in particle
138
- *
139
- * @param p
140
- */
141
- public VerletParticle3D(VerletParticle3D p) {
142
- this(p.x, p.y, p.z, p.weight);
143
- isLocked = p.isLocked;
144
- }
145
-
146
- /**
147
- *
148
- * @param behavior
149
- * @return
150
- */
151
- public VerletParticle3D addBehavior(ParticleBehavior3D behavior) {
152
- return addBehavior(behavior, 1);
153
- }
154
-
155
- /**
156
- *
157
- * @param behavior
158
- * @param timeStep
159
- * @return
160
- */
161
- public VerletParticle3D addBehavior(ParticleBehavior3D behavior, float timeStep) {
162
- if (behaviors == null) {
163
- behaviors = new ArrayList<ParticleBehavior3D>(1);
164
- }
165
- behavior.configure(timeStep);
166
- behaviors.add(behavior);
167
- return this;
168
- }
169
-
170
- /**
171
- * Adds the given constraint implementation to the list of constraints
172
- * applied to this particle at each time step.
173
- *
174
- * @param c
175
- * constraint instance
176
- * @return itself
177
- */
178
- public VerletParticle3D addConstraint(ParticleConstraint3D c) {
179
- if (constraints == null) {
180
- constraints = new ArrayList<ParticleConstraint3D>(1);
181
- }
182
- constraints.add(c);
183
- return this;
184
- }
185
-
186
- /**
187
- *
188
- * @param f
189
- * @return
190
- */
191
- public VerletParticle3D addForce(Vec3D f) {
192
- force.addSelf(f);
193
- return this;
194
- }
195
-
196
- /**
197
- *
198
- * @param v
199
- * @return
200
- */
201
- public VerletParticle3D addVelocity(Vec3D v) {
202
- prev.subSelf(v);
203
- return this;
204
- }
205
-
206
- /**
207
- *
208
- */
209
- public void applyBehaviors() {
210
- if (behaviors != null) {
211
- for (ParticleBehavior3D b : behaviors) {
212
- b.apply(this);
213
- }
214
- }
215
- }
216
-
217
- /**
218
- *
219
- */
220
- public void applyConstraints() {
221
- if (constraints != null) {
222
- for (ParticleConstraint3D pc : constraints) {
223
- pc.apply(this);
224
- }
225
- }
226
- }
227
-
228
- /**
229
- *
230
- */
231
- protected void applyForce() {
232
- temp.set(this);
233
- addSelf(sub(prev).addSelf(force.scale(weight)));
234
- prev.set(temp);
235
- force.clear();
236
- }
237
-
238
- /**
239
- * Removes any currently applied constraints from this particle.
240
- *
241
- * @return itself
242
- */
243
- public VerletParticle3D clearConstraints() {
244
- constraints.clear();
245
- return this;
246
- }
247
-
248
- /**
249
- *
250
- * @return
251
- */
252
- public VerletParticle3D clearForce() {
253
- force.clear();
254
- return this;
255
- }
256
-
257
- /**
258
- *
259
- * @return
260
- */
261
- public VerletParticle3D clearVelocity() {
262
- prev.set(this);
263
- return this;
264
- }
265
-
266
- /**
267
- * @return the inverse weight (1/weight)
268
- */
269
- public final float getInvWeight() {
270
- return invWeight;
271
- }
272
-
273
- /**
274
- * Returns the particle's position at the most recent time step.
275
- *
276
- * @return previous position
277
- */
278
- public Vec3D getPreviousPosition() {
279
- return prev;
280
- }
281
-
282
- /**
283
- *
284
- * @return
285
- */
286
- public Vec3D getVelocity() {
287
- return sub(prev);
288
- }
289
-
290
- /**
291
- * @return the weight
292
- */
293
- public final float getWeight() {
294
- return weight;
295
- }
296
-
297
- /**
298
- * @return true, if particle is locked
299
- */
300
- public final boolean isLocked() {
301
- return isLocked;
302
- }
303
-
304
- /**
305
- * Locks/immobilizes particle in space
306
- *
307
- * @return itself
308
- */
309
- public VerletParticle3D lock() {
310
- isLocked = true;
311
- return this;
312
- }
313
-
314
- /**
315
- *
316
- * @param b
317
- * @return
318
- */
319
- public boolean removeBehavior(ParticleBehavior3D b) {
320
- return behaviors.remove(b);
321
- }
322
-
323
- /**
324
- * Attempts to remove the given constraint instance from the list of active
325
- * constraints.
326
- *
327
- * @param c
328
- * constraint to remove
329
- * @return true, if successfully removed
330
- */
331
- public boolean removeConstraint(ParticleConstraint3D c) {
332
- return constraints.remove(c);
333
- }
334
-
335
- /**
336
- *
337
- * @param scl
338
- * @return
339
- */
340
- public VerletParticle3D scaleVelocity(float scl) {
341
- prev.interpolateToSelf(this, 1f - scl);
342
- return this;
343
- }
344
-
345
- /**
346
- *
347
- * @param p
348
- * @return
349
- */
350
- public VerletParticle3D setPreviousPosition(Vec3D p) {
351
- prev.set(p);
352
- return this;
353
- }
354
-
355
- /**
356
- *
357
- * @param w
358
- */
359
- public void setWeight(float w) {
360
- weight = w;
361
- invWeight = 1f / w;
362
- }
363
-
364
- /**
365
- * Unlocks particle again
366
- *
367
- * @return itself
368
- */
369
- public VerletParticle3D unlock() {
370
- clearVelocity();
371
- isLocked = false;
372
- return this;
373
- }
374
-
375
- /**
376
- *
377
- */
378
- public void update() {
379
- if (!isLocked) {
380
- applyBehaviors();
381
- applyForce();
382
- applyConstraints();
383
- }
384
- }
385
- }
@@ -1,467 +0,0 @@
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.util;
29
-
30
- import java.awt.FileDialog;
31
- import java.awt.Frame;
32
- import java.io.BufferedInputStream;
33
- import java.io.BufferedReader;
34
- import java.io.BufferedWriter;
35
- import java.io.ByteArrayOutputStream;
36
- import java.io.File;
37
- import java.io.FileInputStream;
38
- import java.io.FileOutputStream;
39
- import java.io.FilenameFilter;
40
- import java.io.IOException;
41
- import java.io.InputStream;
42
- import java.io.InputStreamReader;
43
- import java.io.OutputStream;
44
- import java.io.OutputStreamWriter;
45
- import java.io.UnsupportedEncodingException;
46
- import java.util.zip.GZIPInputStream;
47
- import java.util.zip.GZIPOutputStream;
48
-
49
- /**
50
- * A collection of file handling utilities.
51
- */
52
- public class FileUtils {
53
-
54
- /**
55
- * {@link FileDialog} constant
56
- */
57
- public static final int LOAD = FileDialog.LOAD;
58
-
59
- /**
60
- * {@link FileDialog} constant
61
- */
62
- public static final int SAVE = FileDialog.SAVE;
63
-
64
- /**
65
- * Attempts to create the full path of directories as specified by the given
66
- * target path. The path is assumed to be a directory, NOT a file in a
67
- * directory. For the latter, use {@link #createDirectoriesForFile(File)}.
68
- *
69
- * @param path
70
- * @return true, if the operation succeeded
71
- */
72
- static public boolean createDirectories(File path) {
73
- try {
74
- if (!path.exists()) {
75
- path.mkdirs();
76
- }
77
- return true;
78
- } catch (SecurityException se) {
79
- System.err.println("No permissions to create "
80
- + path.getAbsolutePath());
81
- }
82
- return false;
83
- }
84
-
85
- /**
86
- * Attempts to create the full path of directories as specified by the given
87
- * target file.
88
- *
89
- * @param file
90
- * @return true, if the operation succeeded
91
- */
92
- static public boolean createDirectoriesForFile(File file) {
93
- try {
94
- String parentName = file.getParent();
95
- if (parentName != null) {
96
- File parent = new File(parentName);
97
- if (!parent.exists()) {
98
- parent.mkdirs();
99
- }
100
- }
101
- return true;
102
- } catch (SecurityException se) {
103
- System.err.println("No permissions to create "
104
- + file.getAbsolutePath());
105
- }
106
- return false;
107
- }
108
-
109
- /**
110
- * Creates an {@link InputStream} for the given file. If the file extension
111
- * ends with ".gz" the stream is automatically wrapped in a
112
- * {@link GZIPInputStream} as well.
113
- *
114
- * @param file
115
- * input file
116
- * @return input stream
117
- * @throws IOException
118
- */
119
- static public InputStream createInputStream(File file) throws IOException {
120
- if (file == null) {
121
- throw new IllegalArgumentException("file can't be null");
122
- }
123
- InputStream stream = new FileInputStream(file);
124
- if (file.getName().toLowerCase().endsWith(".gz")) {
125
- stream = new GZIPInputStream(stream);
126
- }
127
- return stream;
128
- }
129
-
130
- /**
131
- * Creates an {@link OutputStream} for the given file. If the file extension
132
- * ends with ".gz" the stream is automatically wrapped in a
133
- * {@link GZIPOutputStream} as well. Also attempts to create any
134
- * intermediate directories for the file using
135
- * {@link #createDirectoriesForFile(File)}.
136
- *
137
- * @param file
138
- * output file
139
- * @return output stream
140
- * @throws IOException
141
- */
142
- static public OutputStream createOutputStream(File file) throws IOException {
143
- if (file == null) {
144
- throw new IllegalArgumentException("file can't be null");
145
- }
146
- createDirectoriesForFile(file);
147
- OutputStream stream = new FileOutputStream(file);
148
- if (file.getName().toLowerCase().endsWith(".gz")) {
149
- stream = new GZIPOutputStream(stream);
150
- }
151
- return stream;
152
- }
153
-
154
- /**
155
- * Creates a {@link BufferedReader} for the given file using UTF-8 encoding.
156
- *
157
- * @param file
158
- * @return reader instance
159
- * @throws IOException
160
- */
161
- public static BufferedReader createReader(File file) throws IOException {
162
- return createReader(createInputStream(file));
163
- }
164
-
165
- /**
166
- * Creates a {@link BufferedReader} for the given {@link InputStream} using
167
- * UTF-8 encoding.
168
- *
169
- * @param input
170
- * stream
171
- * @return reader instance
172
- */
173
- public static BufferedReader createReader(InputStream input) {
174
- return createReader(input, "UTF-8");
175
- }
176
-
177
- /**
178
- * Creates a {@link BufferedReader} for the given {@link InputStream} and
179
- * using the specified encoding.
180
- *
181
- * @param input
182
- * stream
183
- * @param encoding
184
- * text encoding to use
185
- * @return reader instance
186
- */
187
- public static BufferedReader createReader(InputStream input, String encoding) {
188
- InputStreamReader isr = null;
189
- try {
190
- isr = new InputStreamReader(input, encoding);
191
- } catch (UnsupportedEncodingException e) {
192
- }
193
- return new BufferedReader(isr, 0x10000);
194
- }
195
-
196
- /**
197
- * Creates a {@link BufferedWriter} for the given file using UTF-8 encoding.
198
- *
199
- * @param file
200
- * @return writer instance
201
- * @throws IOException
202
- */
203
- public static BufferedWriter createWriter(File file) throws IOException {
204
- return createWriter(createOutputStream(file));
205
- }
206
-
207
- /**
208
- * Creates a {@link BufferedWriter} for the given {@link OutputStream} using
209
- * UTF-8 encoding.
210
- *
211
- * @param out
212
- * @return writer instance
213
- */
214
- public static BufferedWriter createWriter(OutputStream out) {
215
- return createWriter(out, "UTF-8");
216
- }
217
-
218
- /**
219
- * Creates a {@link BufferedWriter} for the given {@link OutputStream} and
220
- * using the specified encoding.
221
- *
222
- * @param out
223
- * stream
224
- * @param encoding
225
- * text encoding to use
226
- * @return writer instance
227
- */
228
- public static BufferedWriter createWriter(OutputStream out, String encoding) {
229
- OutputStreamWriter w = null;
230
- try {
231
- w = new OutputStreamWriter(out, encoding);
232
- } catch (UnsupportedEncodingException e) {
233
- }
234
- return new BufferedWriter(w, 0x10000);
235
- }
236
-
237
- /**
238
- * <p>
239
- * Analyses the given file path for a file sequence pattern and returns a
240
- * {@link FileSequenceDescriptor} instance for further use to handle this
241
- * sequence. The file pattern should be in one of these formats:
242
- * </p>
243
- * <ul>
244
- * <li>base_path-00001.ext</li>
245
- * <li>base_path001.ext</li>
246
- * </ul>
247
- * <p>
248
- * The sequence index should be using leading zeros, but the number of
249
- * digits will be identified automatically.
250
- * </p>
251
- *
252
- * @param path
253
- * file path of the first file in the sequence
254
- * @return descriptor, or null, if the path could not be analysed
255
- */
256
- public static FileSequenceDescriptor getFileSequenceDescriptorFor(
257
- String path) {
258
- int dotIndex = path.lastIndexOf('.');
259
- int zeroIndex = path.lastIndexOf('-') + 1;
260
- if (zeroIndex == 0) {
261
- zeroIndex = dotIndex - 1;
262
- while (path.charAt(zeroIndex) >= '0'
263
- && path.charAt(zeroIndex) <= '9') {
264
- zeroIndex--;
265
- }
266
- zeroIndex++;
267
- }
268
- int numDigits = dotIndex - zeroIndex;
269
- if (dotIndex != -1 && numDigits > 0) {
270
- String base = path.substring(0, zeroIndex);
271
- String extension = path.substring(dotIndex);
272
- String filePattern = base + "%0" + numDigits + "d" + extension;
273
- int start = Integer.parseInt(path.substring(zeroIndex, dotIndex));
274
- return new FileSequenceDescriptor(filePattern, extension, dotIndex
275
- - zeroIndex, start);
276
- } else {
277
- return null;
278
- }
279
- }
280
-
281
- /**
282
- * Loads the given {@link InputStream} into a byte array buffer.
283
- *
284
- * @param stream
285
- * @return byte array
286
- * @throws IOException
287
- */
288
- static public byte[] loadBytes(InputStream stream) throws IOException {
289
- BufferedInputStream input = new BufferedInputStream(stream);
290
- ByteArrayOutputStream buffer = new ByteArrayOutputStream();
291
- int c;
292
- while ((c = input.read()) != -1) {
293
- buffer.write(c);
294
- }
295
- return buffer.toByteArray();
296
- }
297
-
298
- /**
299
- * Loads the given {@link BufferedReader} as text, line by line into a
300
- * {@link String}.
301
- *
302
- * @param reader
303
- * @return reader contents as string
304
- * @throws IOException
305
- */
306
- public static String loadText(BufferedReader reader) throws IOException {
307
- StringBuilder result = new StringBuilder();
308
- String line;
309
- while ((line = reader.readLine()) != null) {
310
- result.append(line).append("\n");
311
- }
312
- return result.toString();
313
- }
314
-
315
- /**
316
- * Loads the given {@link InputStream} as text, line by line into a
317
- * {@link String} using UTF-8 encoding.
318
- *
319
- * @param input
320
- * stream
321
- * @return stream contents as string
322
- * @throws IOException
323
- */
324
- public static String loadText(InputStream input) throws IOException {
325
- return loadText(input, "UTF-8");
326
- }
327
-
328
- /**
329
- * Loads the given {@link InputStream} as text, line by line into a
330
- * {@link String} using the specified encoding.
331
- *
332
- * @param input
333
- * stream
334
- * @param encoding
335
- * @return stream contents as single string
336
- * @throws IOException
337
- */
338
- public static String loadText(InputStream input, String encoding)
339
- throws IOException {
340
- byte[] raw = loadBytes(input);
341
- return new String(raw, encoding);
342
- }
343
-
344
- /**
345
- * Saves the given text to the specified {@link BufferedWriter} instance,
346
- * then closes the writer afterwards.
347
- *
348
- * @param writer
349
- * @param string
350
- * @throws IOException
351
- */
352
- static public void saveText(BufferedWriter writer, String string)
353
- throws IOException {
354
- writer.write(string);
355
- writer.flush();
356
- writer.close();
357
- }
358
-
359
- /**
360
- * Saves the given text to the specified {@link OutputStream} instance, then
361
- * closes the underlying writer afterwards.
362
- *
363
- * @param output
364
- * @param string
365
- * @throws IOException
366
- */
367
- static public void saveText(OutputStream output, String string)
368
- throws IOException {
369
- saveText(createWriter(output), string);
370
- }
371
-
372
- /**
373
- * Displays a standard AWT file dialog for choosing a folder (no files!).
374
- *
375
- * @param frame
376
- * parent frame
377
- * @param title
378
- * dialog title
379
- * @param path
380
- * base directory (or null)
381
- * @return path to chosen directory or null, if user has canceled
382
- */
383
- public static String showDirectoryChooser(final Frame frame,
384
- final String title, String path) {
385
- System.setProperty("apple.awt.fileDialogForDirectories", "true");
386
- String result = showFileDialog(frame, title, path, (File dir, String name) -> new File(dir + "/" + name).isDirectory(), LOAD);
387
- System.setProperty("apple.awt.fileDialogForDirectories", "false");
388
- return result;
389
- }
390
-
391
- /**
392
- * Displays a standard AWT file dialog for choosing a file for loading or
393
- * saving.
394
- *
395
- * @param frame
396
- * parent frame
397
- * @param title
398
- * dialog title
399
- * @param path
400
- * base directory (or null)
401
- * @param filter
402
- * a FilenameFilter implementation (or null)
403
- * @param mode
404
- * either FileUtils.LOAD or FileUtils.SAVE
405
- * @return path to chosen file or null, if user has canceled
406
- */
407
- public static String showFileDialog(final Frame frame, final String title,
408
- String path, FilenameFilter filter, final int mode) {
409
- String fileID = null;
410
- FileDialog fd = new FileDialog(frame, title, mode);
411
- if (path != null) {
412
- fd.setDirectory(path);
413
- }
414
- if (filter != null) {
415
- fd.setFilenameFilter(filter);
416
- }
417
- fd.setVisible(true);
418
- if (fd.getFile() != null) {
419
- fileID = fd.getFile();
420
- fileID = fd.getDirectory() + fileID;
421
- }
422
- return fileID;
423
- }
424
-
425
- /**
426
- * Displays a standard AWT file dialog for choosing a file for loading or
427
- * saving.
428
- *
429
- * @param frame
430
- * parent frame
431
- * @param title
432
- * dialog title
433
- * @param path
434
- * base directory (or null)
435
- * @param formats
436
- * an array of allowed file extensions (or null to allow all)
437
- * @param mode
438
- * either FileUtils.LOAD or FileUtils.SAVE
439
- * @return path to chosen file or null, if user has canceled
440
- */
441
- public static String showFileDialog(final Frame frame, final String title,
442
- String path, final String[] formats, final int mode) {
443
- String fileID = null;
444
- FileDialog fd = new FileDialog(frame, title, mode);
445
- if (path != null) {
446
- fd.setDirectory(path);
447
- }
448
- if (formats != null) {
449
- fd.setFilenameFilter((File dir, String name) -> {
450
- boolean isAccepted = false;
451
- for (String ext : formats) {
452
- if (name.contains(ext)) {
453
- isAccepted = true;
454
- break;
455
- }
456
- }
457
- return isAccepted;
458
- });
459
- }
460
- fd.setVisible(true);
461
- if (fd.getFile() != null) {
462
- fileID = fd.getFile();
463
- fileID = fd.getDirectory() + fileID;
464
- }
465
- return fileID;
466
- }
467
- }