toxiclibs 0.2-java → 0.5.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +16 -0
- data/CHANGELOG.md +4 -0
- data/LICENSE +675 -0
- data/README.md +12 -5
- data/Rakefile +25 -82
- data/examples/attract_repel/attract_repel.rb +30 -0
- data/examples/attract_repel/attractor.rb +23 -0
- data/examples/attract_repel/particle.rb +27 -0
- data/examples/data/ti_yong.png +0 -0
- data/examples/force_directed/cluster.rb +76 -0
- data/examples/force_directed/force_directed_graph.rb +92 -0
- data/examples/force_directed/node.rb +26 -0
- data/examples/gray_scott_image.rb +75 -0
- data/examples/gray_scott_tone_map.rb +77 -0
- data/examples/implicit.rb +139 -0
- data/examples/inflate_mesh.rb +89 -0
- data/examples/model_align.rb +44 -0
- data/examples/povmesh/ftest.rb +46 -0
- data/examples/povmesh/tentacle.rb +73 -0
- data/examples/simple_cluster/cluster.rb +47 -0
- data/examples/simple_cluster/node.rb +27 -0
- data/examples/simple_cluster/simple_cluster.rb +60 -0
- data/examples/soft_body/blanket.rb +45 -0
- data/examples/soft_body/connection.rb +16 -0
- data/examples/soft_body/particle.rb +22 -0
- data/examples/soft_body/soft_body_square_adapted.rb +55 -0
- data/lib/toxiclibs.jar +0 -0
- data/lib/toxiclibs.rb +91 -32
- data/lib/toxiclibs/version.rb +1 -1
- data/pom.xml +122 -0
- data/src/com/toxi/net/ClientListener.java +41 -0
- data/src/com/toxi/net/ServerListener.java +70 -0
- data/src/com/toxi/net/ServerListenerAdapter.java +47 -0
- data/src/com/toxi/net/ServerState.java +18 -0
- data/src/com/toxi/net/UDPConnection.java +66 -0
- data/src/com/toxi/net/UDPSyncClient.java +81 -0
- data/src/com/toxi/net/UDPSyncServer.java +450 -0
- data/src/com/toxi/nio/UDPClient.java +121 -0
- data/src/com/toxi/nio/UDPClientState.java +32 -0
- data/src/com/toxi/nio/UDPServer.java +129 -0
- data/src/toxi/color/AccessCriteria.java +114 -0
- data/src/toxi/color/AlphaAccessor.java +67 -0
- data/src/toxi/color/CMYKAccessor.java +122 -0
- data/src/toxi/color/CMYKDistanceProxy.java +40 -0
- data/src/toxi/color/ColorGradient.java +260 -0
- data/src/toxi/color/ColorList.java +699 -0
- data/src/toxi/color/ColorRange.java +671 -0
- data/src/toxi/color/ColorTheme.java +163 -0
- data/src/toxi/color/DistanceProxy.java +44 -0
- data/src/toxi/color/HSVAccessor.java +113 -0
- data/src/toxi/color/HSVDistanceProxy.java +40 -0
- data/src/toxi/color/HistEntry.java +85 -0
- data/src/toxi/color/Histogram.java +185 -0
- data/src/toxi/color/Hue.java +249 -0
- data/src/toxi/color/LuminanceAccessor.java +78 -0
- data/src/toxi/color/NamedColor.java +935 -0
- data/src/toxi/color/ProximityComparator.java +70 -0
- data/src/toxi/color/RGBAccessor.java +113 -0
- data/src/toxi/color/RGBDistanceProxy.java +41 -0
- data/src/toxi/color/ReadonlyTColor.java +296 -0
- data/src/toxi/color/TColor.java +1677 -0
- data/src/toxi/color/TColorAdapter.java +68 -0
- data/src/toxi/color/ToneMap.java +218 -0
- data/src/toxi/color/theory/AnalogousStrategy.java +140 -0
- data/src/toxi/color/theory/ColorTheoryRegistry.java +139 -0
- data/src/toxi/color/theory/ColorTheoryStrategy.java +56 -0
- data/src/toxi/color/theory/ComplementaryStrategy.java +111 -0
- data/src/toxi/color/theory/CompoundTheoryStrategy.java +143 -0
- data/src/toxi/color/theory/LeftSplitComplementaryStrategy.java +82 -0
- data/src/toxi/color/theory/MonochromeTheoryStrategy.java +103 -0
- data/src/toxi/color/theory/RightSplitComplementaryStrategy.java +82 -0
- data/src/toxi/color/theory/SingleComplementStrategy.java +76 -0
- data/src/toxi/color/theory/SplitComplementaryStrategy.java +77 -0
- data/src/toxi/color/theory/TetradTheoryStrategy.java +114 -0
- data/src/toxi/color/theory/TriadTheoryStrategy.java +77 -0
- data/src/toxi/data/csv/CSVAdapter.java +74 -0
- data/src/toxi/data/csv/CSVFieldMapper.java +212 -0
- data/src/toxi/data/csv/CSVListener.java +61 -0
- data/src/toxi/data/csv/CSVParser.java +202 -0
- data/src/toxi/data/feeds/AtomAuthor.java +49 -0
- data/src/toxi/data/feeds/AtomContent.java +50 -0
- data/src/toxi/data/feeds/AtomEntry.java +111 -0
- data/src/toxi/data/feeds/AtomFeed.java +129 -0
- data/src/toxi/data/feeds/AtomLink.java +62 -0
- data/src/toxi/data/feeds/RSSChannel.java +88 -0
- data/src/toxi/data/feeds/RSSEnclosure.java +60 -0
- data/src/toxi/data/feeds/RSSFeed.java +99 -0
- data/src/toxi/data/feeds/RSSItem.java +104 -0
- data/src/toxi/data/feeds/util/EntityStripper.java +2480 -0
- data/src/toxi/data/feeds/util/Iso8601DateAdapter.java +101 -0
- data/src/toxi/data/feeds/util/Rfc822DateAdapter.java +93 -0
- data/src/toxi/geom/AABB.java +658 -0
- data/src/toxi/geom/Axis3D.java +116 -0
- data/src/toxi/geom/AxisAlignedCylinder.java +163 -0
- data/src/toxi/geom/BernsteinPolynomial.java +94 -0
- data/src/toxi/geom/BezierCurve2D.java +159 -0
- data/src/toxi/geom/BezierCurve3D.java +148 -0
- data/src/toxi/geom/BooleanShapeBuilder.java +185 -0
- data/src/toxi/geom/BoxIntersector.java +52 -0
- data/src/toxi/geom/Circle.java +230 -0
- data/src/toxi/geom/CircleIntersector.java +85 -0
- data/src/toxi/geom/Cone.java +150 -0
- data/src/toxi/geom/ConvexPolygonClipper.java +136 -0
- data/src/toxi/geom/CoordinateExtractor.java +16 -0
- data/src/toxi/geom/Ellipse.java +250 -0
- data/src/toxi/geom/GMatrix.java +2599 -0
- data/src/toxi/geom/GVector.java +833 -0
- data/src/toxi/geom/GlobalGridTesselator.java +54 -0
- data/src/toxi/geom/GridTesselator.java +108 -0
- data/src/toxi/geom/Intersector2D.java +49 -0
- data/src/toxi/geom/Intersector3D.java +51 -0
- data/src/toxi/geom/IsectData2D.java +103 -0
- data/src/toxi/geom/IsectData3D.java +103 -0
- data/src/toxi/geom/Line2D.java +534 -0
- data/src/toxi/geom/Line3D.java +471 -0
- data/src/toxi/geom/LineStrip2D.java +430 -0
- data/src/toxi/geom/LineStrip3D.java +230 -0
- data/src/toxi/geom/LocalGridTesselator.java +57 -0
- data/src/toxi/geom/Matrix3d.java +3048 -0
- data/src/toxi/geom/Matrix4f.java +3446 -0
- data/src/toxi/geom/Matrix4x4.java +1076 -0
- data/src/toxi/geom/MatrixSizeException.java +58 -0
- data/src/toxi/geom/OctreeVisitor.java +44 -0
- data/src/toxi/geom/Origin3D.java +148 -0
- data/src/toxi/geom/Plane.java +293 -0
- data/src/toxi/geom/PlaneIntersector.java +57 -0
- data/src/toxi/geom/PointCloud3D.java +253 -0
- data/src/toxi/geom/PointOctree.java +502 -0
- data/src/toxi/geom/PointQuadtree.java +375 -0
- data/src/toxi/geom/Polygon2D.java +1038 -0
- data/src/toxi/geom/PolygonClipper2D.java +45 -0
- data/src/toxi/geom/PolygonTesselator.java +20 -0
- data/src/toxi/geom/QuadtreeVisitor.java +44 -0
- data/src/toxi/geom/Quaternion.java +641 -0
- data/src/toxi/geom/Ray2D.java +146 -0
- data/src/toxi/geom/Ray3D.java +150 -0
- data/src/toxi/geom/Ray3DIntersector.java +75 -0
- data/src/toxi/geom/ReadonlyVec2D.java +575 -0
- data/src/toxi/geom/ReadonlyVec3D.java +628 -0
- data/src/toxi/geom/ReadonlyVec4D.java +431 -0
- data/src/toxi/geom/Rect.java +720 -0
- data/src/toxi/geom/Reflector3D.java +58 -0
- data/src/toxi/geom/Shape2D.java +94 -0
- data/src/toxi/geom/Shape3D.java +42 -0
- data/src/toxi/geom/SingularMatrixException.java +57 -0
- data/src/toxi/geom/SpatialBins.java +182 -0
- data/src/toxi/geom/SpatialIndex.java +61 -0
- data/src/toxi/geom/Sphere.java +224 -0
- data/src/toxi/geom/SphereIntersectorReflector.java +196 -0
- data/src/toxi/geom/Spline2D.java +349 -0
- data/src/toxi/geom/Spline3D.java +351 -0
- data/src/toxi/geom/SutherlandHodgemanClipper.java +151 -0
- data/src/toxi/geom/Triangle2D.java +422 -0
- data/src/toxi/geom/Triangle3D.java +456 -0
- data/src/toxi/geom/TriangleIntersector.java +105 -0
- data/src/toxi/geom/Vec2D.java +1328 -0
- data/src/toxi/geom/Vec3D.java +1832 -0
- data/src/toxi/geom/Vec4D.java +985 -0
- data/src/toxi/geom/VecMathUtil.java +100 -0
- data/src/toxi/geom/XAxisCylinder.java +64 -0
- data/src/toxi/geom/YAxisCylinder.java +65 -0
- data/src/toxi/geom/ZAxisCylinder.java +64 -0
- data/src/toxi/geom/mesh/BezierPatch.java +200 -0
- data/src/toxi/geom/mesh/BoxSelector.java +62 -0
- data/src/toxi/geom/mesh/DefaultSTLColorModel.java +67 -0
- data/src/toxi/geom/mesh/DefaultSelector.java +50 -0
- data/src/toxi/geom/mesh/Face.java +176 -0
- data/src/toxi/geom/mesh/LaplacianSmooth.java +80 -0
- data/src/toxi/geom/mesh/MaterialiseSTLColorModel.java +150 -0
- data/src/toxi/geom/mesh/Mesh3D.java +224 -0
- data/src/toxi/geom/mesh/MeshIntersector.java +91 -0
- data/src/toxi/geom/mesh/OBJWriter.java +194 -0
- data/src/toxi/geom/mesh/PLYWriter.java +167 -0
- data/src/toxi/geom/mesh/PlaneSelector.java +90 -0
- data/src/toxi/geom/mesh/STLColorModel.java +54 -0
- data/src/toxi/geom/mesh/STLReader.java +185 -0
- data/src/toxi/geom/mesh/STLWriter.java +323 -0
- data/src/toxi/geom/mesh/SphereFunction.java +156 -0
- data/src/toxi/geom/mesh/SphericalHarmonics.java +110 -0
- data/src/toxi/geom/mesh/SuperEllipsoid.java +110 -0
- data/src/toxi/geom/mesh/SurfaceFunction.java +75 -0
- data/src/toxi/geom/mesh/SurfaceMeshBuilder.java +149 -0
- data/src/toxi/geom/mesh/Terrain.java +451 -0
- data/src/toxi/geom/mesh/TriangleMesh.java +1201 -0
- data/src/toxi/geom/mesh/Vertex.java +78 -0
- data/src/toxi/geom/mesh/VertexSelector.java +193 -0
- data/src/toxi/geom/mesh/WEFace.java +100 -0
- data/src/toxi/geom/mesh/WEMeshFilterStrategy.java +51 -0
- data/src/toxi/geom/mesh/WETriangleMesh.java +761 -0
- data/src/toxi/geom/mesh/WEVertex.java +134 -0
- data/src/toxi/geom/mesh/WingedEdge.java +115 -0
- data/src/toxi/geom/mesh/subdiv/CentroidSubdiv.java +37 -0
- data/src/toxi/geom/mesh/subdiv/DisplacementSubdivision.java +85 -0
- data/src/toxi/geom/mesh/subdiv/DualDisplacementSubdivision.java +94 -0
- data/src/toxi/geom/mesh/subdiv/DualSubdivision.java +49 -0
- data/src/toxi/geom/mesh/subdiv/EdgeLengthComparator.java +50 -0
- data/src/toxi/geom/mesh/subdiv/FaceCountComparator.java +51 -0
- data/src/toxi/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +80 -0
- data/src/toxi/geom/mesh/subdiv/MidpointSubdiv.java +42 -0
- data/src/toxi/geom/mesh/subdiv/MidpointSubdivision.java +48 -0
- data/src/toxi/geom/mesh/subdiv/NewSubdivStrategy.java +23 -0
- data/src/toxi/geom/mesh/subdiv/NormalDisplacementSubdivision.java +74 -0
- data/src/toxi/geom/mesh/subdiv/SubdivisionStrategy.java +83 -0
- data/src/toxi/geom/mesh/subdiv/TriSubdivision.java +51 -0
- data/src/toxi/geom/mesh2d/DelaunayTriangle.java +222 -0
- data/src/toxi/geom/mesh2d/DelaunayTriangulation.java +327 -0
- data/src/toxi/geom/mesh2d/DelaunayVertex.java +560 -0
- data/src/toxi/geom/mesh2d/Voronoi.java +149 -0
- data/src/toxi/geom/nurbs/BasicNurbsCurve.java +210 -0
- data/src/toxi/geom/nurbs/BasicNurbsSurface.java +233 -0
- data/src/toxi/geom/nurbs/ControlNet.java +148 -0
- data/src/toxi/geom/nurbs/CurveCreator.java +112 -0
- data/src/toxi/geom/nurbs/CurveUtils.java +259 -0
- data/src/toxi/geom/nurbs/InterpolationException.java +65 -0
- data/src/toxi/geom/nurbs/KnotVector.java +333 -0
- data/src/toxi/geom/nurbs/NurbsCreator.java +815 -0
- data/src/toxi/geom/nurbs/NurbsCurve.java +120 -0
- data/src/toxi/geom/nurbs/NurbsMeshCreator.java +145 -0
- data/src/toxi/geom/nurbs/NurbsSurface.java +147 -0
- data/src/toxi/image/util/Filter8bit.java +331 -0
- data/src/toxi/image/util/TiledFrameExporter.java +162 -0
- data/src/toxi/math/BezierInterpolation.java +102 -0
- data/src/toxi/math/CircularInterpolation.java +88 -0
- data/src/toxi/math/CosineInterpolation.java +51 -0
- data/src/toxi/math/DecimatedInterpolation.java +77 -0
- data/src/toxi/math/ExponentialInterpolation.java +68 -0
- data/src/toxi/math/InterpolateStrategy.java +60 -0
- data/src/toxi/math/Interpolation2D.java +93 -0
- data/src/toxi/math/LinearInterpolation.java +46 -0
- data/src/toxi/math/MathUtils.java +990 -0
- data/src/toxi/math/NonLinearScaleMap.java +101 -0
- data/src/toxi/math/ScaleMap.java +183 -0
- data/src/toxi/math/SigmoidInterpolation.java +78 -0
- data/src/toxi/math/SinCosLUT.java +141 -0
- data/src/toxi/math/ThresholdInterpolation.java +58 -0
- data/src/toxi/math/ZoomLensInterpolation.java +126 -0
- data/src/toxi/math/conversion/UnitTranslator.java +161 -0
- data/src/toxi/math/noise/PerlinNoise.java +281 -0
- data/src/toxi/math/noise/SimplexNoise.java +542 -0
- data/src/toxi/math/waves/AMFMSineWave.java +143 -0
- data/src/toxi/math/waves/AbstractWave.java +248 -0
- data/src/toxi/math/waves/ConstantWave.java +48 -0
- data/src/toxi/math/waves/FMHarmonicSquareWave.java +155 -0
- data/src/toxi/math/waves/FMSawtoothWave.java +144 -0
- data/src/toxi/math/waves/FMSineWave.java +142 -0
- data/src/toxi/math/waves/FMSquareWave.java +143 -0
- data/src/toxi/math/waves/FMTriangleWave.java +126 -0
- data/src/toxi/math/waves/SineWave.java +81 -0
- data/src/toxi/math/waves/Wave2D.java +68 -0
- data/src/toxi/math/waves/WaveState.java +69 -0
- data/src/toxi/music/scale/AbstractScale.java +117 -0
- data/src/toxi/music/scale/GenericScale.java +66 -0
- data/src/toxi/music/scale/MajorScale.java +41 -0
- data/src/toxi/newmesh/AttributedEdge.java +106 -0
- data/src/toxi/newmesh/AttributedFace.java +63 -0
- data/src/toxi/newmesh/IndexedTriangleMesh.java +809 -0
- data/src/toxi/newmesh/MeshAttributeCompiler.java +45 -0
- data/src/toxi/newmesh/MeshFaceNormalCompiler.java +52 -0
- data/src/toxi/newmesh/MeshUVCompiler.java +52 -0
- data/src/toxi/newmesh/MeshVertexColorCompiler.java +49 -0
- data/src/toxi/newmesh/MeshVertexCompiler.java +54 -0
- data/src/toxi/newmesh/MeshVertexNormalCompiler.java +55 -0
- data/src/toxi/newmesh/SpatialIndex.java +78 -0
- data/src/toxi/physics2d/ParticlePath2D.java +100 -0
- data/src/toxi/physics2d/ParticleString2D.java +184 -0
- data/src/toxi/physics2d/PullBackSpring2D.java +51 -0
- data/src/toxi/physics2d/VerletConstrainedSpring2D.java +89 -0
- data/src/toxi/physics2d/VerletMinDistanceSpring2D.java +57 -0
- data/src/toxi/physics2d/VerletParticle2D.java +457 -0
- data/src/toxi/physics2d/VerletPhysics2D.java +448 -0
- data/src/toxi/physics2d/VerletSpring2D.java +181 -0
- data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +212 -0
- data/src/toxi/physics2d/behaviors/ConstantForceBehavior2D.java +112 -0
- data/src/toxi/physics2d/behaviors/GravityBehavior2D.java +61 -0
- data/src/toxi/physics2d/behaviors/ParticleBehavior2D.java +66 -0
- data/src/toxi/physics2d/constraints/AngularConstraint.java +83 -0
- data/src/toxi/physics2d/constraints/AxisConstraint.java +71 -0
- data/src/toxi/physics2d/constraints/CircularConstraint.java +69 -0
- data/src/toxi/physics2d/constraints/MaxConstraint.java +66 -0
- data/src/toxi/physics2d/constraints/MinConstraint.java +66 -0
- data/src/toxi/physics2d/constraints/ParticleConstraint2D.java +47 -0
- data/src/toxi/physics2d/constraints/PolygonConstraint.java +93 -0
- data/src/toxi/physics2d/constraints/RectConstraint.java +114 -0
- data/src/toxi/physics3d/ParticlePath3D.java +100 -0
- data/src/toxi/physics3d/ParticleString3D.java +184 -0
- data/src/toxi/physics3d/PullBackSpring3D.java +50 -0
- data/src/toxi/physics3d/VerletConstrainedSpring3D.java +88 -0
- data/src/toxi/physics3d/VerletMinDistanceSpring3D.java +56 -0
- data/src/toxi/physics3d/VerletParticle3D.java +385 -0
- data/src/toxi/physics3d/VerletPhysics3D.java +417 -0
- data/src/toxi/physics3d/VerletSpring3D.java +180 -0
- data/src/toxi/physics3d/behaviors/AttractionBehavior3D.java +182 -0
- data/src/toxi/physics3d/behaviors/ConstantForceBehavior3D.java +92 -0
- data/src/toxi/physics3d/behaviors/GravityBehavior3D.java +61 -0
- data/src/toxi/physics3d/behaviors/ParticleBehavior3D.java +52 -0
- data/src/toxi/physics3d/constraints/AxisConstraint.java +68 -0
- data/src/toxi/physics3d/constraints/BoxConstraint.java +121 -0
- data/src/toxi/physics3d/constraints/CylinderConstraint.java +87 -0
- data/src/toxi/physics3d/constraints/MaxConstraint.java +65 -0
- data/src/toxi/physics3d/constraints/MinConstraint.java +65 -0
- data/src/toxi/physics3d/constraints/ParticleConstraint3D.java +49 -0
- data/src/toxi/physics3d/constraints/PlaneConstraint.java +78 -0
- data/src/toxi/physics3d/constraints/SoftBoxConstraint.java +87 -0
- data/src/toxi/physics3d/constraints/SphereConstraint.java +108 -0
- data/src/toxi/processing/ArrowModifier.java +116 -0
- data/src/toxi/processing/DashedLineModifier.java +48 -0
- data/src/toxi/processing/DeltaOrientationMapper.java +57 -0
- data/src/toxi/processing/Line2DRenderModifier.java +18 -0
- data/src/toxi/processing/MeshToVBO.java +94 -0
- data/src/toxi/processing/NormalMapper.java +18 -0
- data/src/toxi/processing/POVInterface.java +121 -0
- data/src/toxi/processing/POVMesh.java +219 -0
- data/src/toxi/processing/POVWriter.java +460 -0
- data/src/toxi/processing/RCOpaque.java +77 -0
- data/src/toxi/processing/RCTransp.java +78 -0
- data/src/toxi/processing/TextureBuilder.java +232 -0
- data/src/toxi/processing/Textures.java +110 -0
- data/src/toxi/processing/ToxiclibsSupport.java +1239 -0
- data/src/toxi/processing/Tracing.java +25 -0
- data/src/toxi/processing/XYZNormalMapper.java +30 -0
- data/src/toxi/sim/automata/CAMatrix.java +297 -0
- data/src/toxi/sim/automata/CARule.java +76 -0
- data/src/toxi/sim/automata/CARule2D.java +354 -0
- data/src/toxi/sim/automata/CAWolfram1D.java +309 -0
- data/src/toxi/sim/automata/EvolvableMatrix.java +61 -0
- data/src/toxi/sim/automata/MatrixEvolver.java +42 -0
- data/src/toxi/sim/dla/BottomUpOrder.java +76 -0
- data/src/toxi/sim/dla/DLA.java +497 -0
- data/src/toxi/sim/dla/DLAConfiguration.java +364 -0
- data/src/toxi/sim/dla/DLAEventAdapter.java +64 -0
- data/src/toxi/sim/dla/DLAEventListener.java +57 -0
- data/src/toxi/sim/dla/DLAGuideLines.java +219 -0
- data/src/toxi/sim/dla/DLAParticle.java +102 -0
- data/src/toxi/sim/dla/DLASegment.java +88 -0
- data/src/toxi/sim/dla/PipelineOrder.java +50 -0
- data/src/toxi/sim/dla/RadialDistanceOrder.java +92 -0
- data/src/toxi/sim/erosion/ErosionFunction.java +122 -0
- data/src/toxi/sim/erosion/TalusAngleErosion.java +145 -0
- data/src/toxi/sim/erosion/ThermalErosion.java +75 -0
- data/src/toxi/sim/fluids/FluidSolver2D.java +762 -0
- data/src/toxi/sim/fluids/FluidSolver3D.java +326 -0
- data/src/toxi/sim/grayscott/GrayScott.java +469 -0
- data/src/toxi/util/DateUtils.java +141 -0
- data/src/toxi/util/FileSequenceDescriptor.java +181 -0
- data/src/toxi/util/FileUtils.java +467 -0
- data/src/toxi/util/datatypes/ArraySet.java +128 -0
- data/src/toxi/util/datatypes/ArrayUtil.java +404 -0
- data/src/toxi/util/datatypes/BiasedDoubleRange.java +141 -0
- data/src/toxi/util/datatypes/BiasedFloatRange.java +141 -0
- data/src/toxi/util/datatypes/BiasedIntegerRange.java +141 -0
- data/src/toxi/util/datatypes/DoubleRange.java +251 -0
- data/src/toxi/util/datatypes/FloatRange.java +251 -0
- data/src/toxi/util/datatypes/GenericSet.java +215 -0
- data/src/toxi/util/datatypes/IntegerRange.java +247 -0
- data/src/toxi/util/datatypes/IntegerSet.java +149 -0
- data/src/toxi/util/datatypes/ItemIndex.java +72 -0
- data/src/toxi/util/datatypes/SingletonRegistry.java +91 -0
- data/src/toxi/util/datatypes/TypedProperties.java +291 -0
- data/src/toxi/util/datatypes/UndirectedGraph.java +134 -0
- data/src/toxi/util/datatypes/UniqueItemIndex.java +223 -0
- data/src/toxi/util/datatypes/WeightedRandomEntry.java +76 -0
- data/src/toxi/util/datatypes/WeightedRandomSet.java +125 -0
- data/src/toxi/util/events/EventDispatcher.java +86 -0
- data/src/toxi/volume/AdditiveBrush.java +19 -0
- data/src/toxi/volume/ArrayIsoSurface.java +297 -0
- data/src/toxi/volume/BoxBrush.java +100 -0
- data/src/toxi/volume/BrushMode.java +16 -0
- data/src/toxi/volume/HashIsoSurface.java +354 -0
- data/src/toxi/volume/IsoSurface.java +59 -0
- data/src/toxi/volume/MarchingCubesIndex.java +312 -0
- data/src/toxi/volume/MeshLatticeBuilder.java +358 -0
- data/src/toxi/volume/MeshVoxelizer.java +216 -0
- data/src/toxi/volume/MultiplyBrush.java +20 -0
- data/src/toxi/volume/PeakBrush.java +21 -0
- data/src/toxi/volume/ReplaceBrush.java +19 -0
- data/src/toxi/volume/RoundBrush.java +113 -0
- data/src/toxi/volume/VolumetricBrush.java +160 -0
- data/src/toxi/volume/VolumetricHashMap.java +179 -0
- data/src/toxi/volume/VolumetricSpace.java +195 -0
- data/src/toxi/volume/VolumetricSpaceArray.java +214 -0
- data/toxiclibs.gemspec +34 -0
- metadata +424 -27
data/README.md
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
##
|
|
2
|
-
|
|
1
|
+
## Toxiclibs for JRubyArt
|
|
2
|
+
[](http://badge.fury.io/rb/toxiclibs)
|
|
3
|
+
### Installing
|
|
4
|
+
```bash
|
|
5
|
+
gem install toxiclibs
|
|
6
|
+
```
|
|
3
7
|
|
|
4
|
-
|
|
8
|
+
### NB: Use version 0.4 for ruby-processing
|
|
9
|
+
|
|
10
|
+
Here I have created create a gem to use Karsten Schmidts (aka toxi, @postspectacular) toxiclibs jars in JRubyArt. To compile the gem follow the instructions for [JRubyArt][]. Most parts of toxiclibs API is exposed in the latest version, (but only a few examples are included) in principle it should be possible to make all available!!! For this demonstration I have used up to date source code for version 21, since [toxis final release][] may never materialise (he's probably got more interesting things to do). There are reported to be number of outstanding bugs with toxiclibs, if they affect you report it [here][] (or better fix them yourself and submit a pull request).
|
|
5
11
|
|
|
6
12
|

|
|
7
13
|
|
|
@@ -17,7 +23,7 @@ Here we demonstrate how to create a gem to use Karsten Schmidts (aka toxi, @post
|
|
|
17
23
|
|
|
18
24
|
### Licensing
|
|
19
25
|
|
|
20
|
-
I should be clear that toxiclibs
|
|
26
|
+
I should be clear that the original toxiclibs is the work of Karsten Schmidt:-
|
|
21
27
|
|
|
22
28
|
Copyright (c) 2010 Karsten Schmidt
|
|
23
29
|
|
|
@@ -31,4 +37,5 @@ version 2.1 of the License, or (at your option) any later version.
|
|
|
31
37
|
[Post Spectacular Home]:http://postspectacular.com/
|
|
32
38
|
[Toxiclibs Bitbucket]:http://hg.postspectacular.com/
|
|
33
39
|
[Toxiclibs Documentation]:http://toxiclibs.org/
|
|
34
|
-
[Example Usage]:https://github.com/ruby-processing/toxicgem/
|
|
40
|
+
[Example Usage]:https://github.com/ruby-processing/toxicgem/tree/master/examples
|
|
41
|
+
[here]:https://github.com/ruby-processing/toxiclibs/issues
|
data/Rakefile
CHANGED
|
@@ -1,95 +1,38 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
|
-
require 'rake'
|
|
3
|
-
require 'rake/clean'
|
|
4
|
-
require 'rubygems/package_task'
|
|
5
|
-
require 'rdoc/task'
|
|
6
|
-
require 'rake/testtask'
|
|
7
|
-
require 'rspec/core/rake_task'
|
|
8
1
|
require_relative 'lib/toxiclibs/version'
|
|
9
2
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
s.description = 'A gem wrapper for some toxiclibs jars'
|
|
17
|
-
s.license = 'GPLv3'
|
|
18
|
-
s.authors = ['Karsten Schmidt', 'Martin Prout']
|
|
19
|
-
s.email = 'martin_p@lineone.net'
|
|
20
|
-
s.homepage = 'https://github.com/ruby-processing/toxiclibs'
|
|
21
|
-
s.files = %w(LICENSE.md README.md Rakefile) + FileList['lib/**/*.rb', 'example/**/*.rb']
|
|
22
|
-
s.files << 'lib/toxiclibs.jar'
|
|
23
|
-
s.require_path = 'lib'
|
|
24
|
-
s.add_development_dependency "rake", "~> 10.3"
|
|
25
|
-
s.add_development_dependency "rake-compiler", "~> 0.9"
|
|
26
|
-
s.platform='java'
|
|
27
|
-
s.requirements << 'A decent graphics card'
|
|
28
|
-
s.requirements << 'java runtime >= 1.7+'
|
|
29
|
-
s.requirements << 'processing = 2.2.1+'
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# -*- ruby -*-
|
|
33
|
-
|
|
34
|
-
require 'java'
|
|
35
|
-
require 'rake/javaextensiontask'
|
|
36
|
-
|
|
37
|
-
# -*- encoding: utf-8 -*-
|
|
38
|
-
require 'psych'
|
|
39
|
-
|
|
40
|
-
def copy_jars(name, dest)
|
|
41
|
-
conf = '~/.jruby_art/config.yml'
|
|
42
|
-
begin
|
|
43
|
-
path = File.expand_path(conf)
|
|
44
|
-
rp_config = (Psych.load_file(path))
|
|
45
|
-
source= "#{rp_config["PROCESSING_ROOT"]}/core/library/"
|
|
46
|
-
rescue
|
|
47
|
-
raise "WARNING: you must set PROCESSING_ROOT in #{conf} compile"
|
|
3
|
+
def create_manifest
|
|
4
|
+
title = 'Implementation-Title: toxiclibs (java extension for toxicgem) '
|
|
5
|
+
version = format('Implementation-Version: %s', Toxiclibs::VERSION)
|
|
6
|
+
file = File.open('MANIFEST.MF', 'w') do |f|
|
|
7
|
+
f.puts(title)
|
|
8
|
+
f.puts(version)
|
|
48
9
|
end
|
|
49
|
-
body = proc {
|
|
50
|
-
Dir["#{source}/core.jar"].each do |f|
|
|
51
|
-
puts "Copying #{f} To #{dest}"
|
|
52
|
-
FileUtils.cp f, dest
|
|
53
|
-
end
|
|
54
|
-
}
|
|
55
|
-
Rake::Task.define_task(name, &body)
|
|
56
10
|
end
|
|
57
11
|
|
|
58
|
-
|
|
12
|
+
task default: [:init, :compile, :gem]
|
|
59
13
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
ext.name = 'toxiclibs'
|
|
64
|
-
ext.debug = true
|
|
65
|
-
ext.lib_dir = 'lib'
|
|
66
|
-
ext.source_version='1.7'
|
|
67
|
-
ext.target_version='1.7'
|
|
14
|
+
desc 'Create Manifest'
|
|
15
|
+
task :init do
|
|
16
|
+
create_manifest
|
|
68
17
|
end
|
|
69
18
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
p.need_zip = true
|
|
19
|
+
desc 'Build gem'
|
|
20
|
+
task :gem do
|
|
21
|
+
sh "gem build toxiclibs.gemspec"
|
|
74
22
|
end
|
|
75
23
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
rdoc.title = "Toxiclibs Docs"
|
|
82
|
-
rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
|
|
83
|
-
rdoc.options << '--line-numbers'
|
|
24
|
+
desc 'Compile'
|
|
25
|
+
task :compile do
|
|
26
|
+
sh "mvn package"
|
|
27
|
+
sh "mvn dependency:copy"
|
|
28
|
+
sh "mv target/toxiclibs.jar lib"
|
|
84
29
|
end
|
|
85
30
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
31
|
+
desc 'clean'
|
|
32
|
+
task :clean do
|
|
33
|
+
Dir['./**/*.%w{jar gem}'].each do |path|
|
|
34
|
+
puts "Deleting #{path} ..."
|
|
35
|
+
File.delete(path)
|
|
36
|
+
end
|
|
37
|
+
FileUtils.rm_rf('./target')
|
|
93
38
|
end
|
|
94
|
-
|
|
95
|
-
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'toxiclibs'
|
|
2
|
+
require_relative 'attractor'
|
|
3
|
+
require_relative 'particle'
|
|
4
|
+
|
|
5
|
+
attr_reader :particles, :attractor, :physics
|
|
6
|
+
|
|
7
|
+
def settings
|
|
8
|
+
size 640, 360
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def setup
|
|
12
|
+
sketch_title "Attract Repel"
|
|
13
|
+
@physics = Physics::VerletPhysics2D.new
|
|
14
|
+
physics.setDrag(0.01)
|
|
15
|
+
@particles = (0..50).map { Particle.new(TVec2D.new(rand(width), rand(height))) }
|
|
16
|
+
@attractor = Attractor.new(TVec2D.new(width / 2, height / 2))
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def draw
|
|
20
|
+
background(255)
|
|
21
|
+
physics.update
|
|
22
|
+
attractor.display
|
|
23
|
+
particles.each(&:display)
|
|
24
|
+
if mouse_pressed?
|
|
25
|
+
attractor.lock
|
|
26
|
+
attractor.set(mouse_x, mouse_y)
|
|
27
|
+
else
|
|
28
|
+
attractor.unlock
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'forwardable'
|
|
2
|
+
|
|
3
|
+
# The Nature of Code
|
|
4
|
+
# Daniel Shiffman
|
|
5
|
+
# http://natureofcode.com
|
|
6
|
+
class Attractor < Physics::VerletParticle2D
|
|
7
|
+
extend Forwardable
|
|
8
|
+
def_delegators(:@app, :fill, :ellipse, :physics, :width)
|
|
9
|
+
attr_accessor :r
|
|
10
|
+
|
|
11
|
+
def initialize(loc)
|
|
12
|
+
super(loc)
|
|
13
|
+
@app = $app
|
|
14
|
+
@r = 24
|
|
15
|
+
physics.add_particle(self)
|
|
16
|
+
physics.add_behavior(Physics::AttractionBehavior2D.new(self, width, 0.1))
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def display
|
|
20
|
+
fill(0)
|
|
21
|
+
ellipse(x, y, r * 2, r * 2)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'forwardable'
|
|
2
|
+
|
|
3
|
+
# The Nature of Code
|
|
4
|
+
# Daniel Shiffman
|
|
5
|
+
# http://natureofcode.com
|
|
6
|
+
|
|
7
|
+
# class Spore extends the class "VerletParticle2D"
|
|
8
|
+
class Particle < Physics::VerletParticle2D
|
|
9
|
+
extend Forwardable
|
|
10
|
+
def_delegators(:@app, :fill, :stroke, :stroke_weight, :ellipse, :physics)
|
|
11
|
+
attr_reader :r
|
|
12
|
+
|
|
13
|
+
def initialize(loc)
|
|
14
|
+
super(loc)
|
|
15
|
+
@app = $app
|
|
16
|
+
@r = 8
|
|
17
|
+
physics.add_particle(self)
|
|
18
|
+
physics.add_behavior(Physics::AttractionBehavior2D.new(self, r * 4, -1))
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def display
|
|
22
|
+
fill 127
|
|
23
|
+
stroke 0
|
|
24
|
+
stroke_weight 2
|
|
25
|
+
ellipse x, y, r * 2, r * 2
|
|
26
|
+
end
|
|
27
|
+
end
|
|
Binary file
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (c) 2010 Daniel Shiffman
|
|
3
|
+
#
|
|
4
|
+
# This demo & library is free software you can redistribute it and/or
|
|
5
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
6
|
+
# License as published by the Free Software Foundation either
|
|
7
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# http://creativecommons.org/licenses/LGPL/2.1/
|
|
10
|
+
#
|
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
19
|
+
class Cluster
|
|
20
|
+
attr_reader :nodes, :diameter, :physics
|
|
21
|
+
|
|
22
|
+
# We initialize a with a number of nodes, a diameter, and centerpoint
|
|
23
|
+
def initialize(physics, n, d, center)
|
|
24
|
+
@physics = physics
|
|
25
|
+
@diameter = d
|
|
26
|
+
@nodes = (0..n).map { Node.new(center.add(TVec2D.random_vector)) }
|
|
27
|
+
# Connect all the nodes with a Spring
|
|
28
|
+
nodes[1..nodes.size - 1].each_with_index do |pi, i|
|
|
29
|
+
nodes[0..i].each do |pj|
|
|
30
|
+
physics.add_spring(Physics::VerletSpring2D.new(pi, pj, diameter, 0.01))
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def display
|
|
36
|
+
nodes.each(&:display)
|
|
37
|
+
end
|
|
38
|
+
# This functons connects one cluster to another
|
|
39
|
+
# Each point of one cluster connects to each point of the other cluster
|
|
40
|
+
# The connection is a "VerletMinDistanceSpring"
|
|
41
|
+
# A VerletMinDistanceSpring is a spring which only enforces its rest length if the
|
|
42
|
+
# current distance is less than its rest length. This is handy if you just want to
|
|
43
|
+
# ensure objects are at least a certain distance from each other, but don't
|
|
44
|
+
# care if it's bigger than the enforced minimum.
|
|
45
|
+
|
|
46
|
+
def connect(other)
|
|
47
|
+
other_nodes = other.nodes
|
|
48
|
+
nodes.each do |pi|
|
|
49
|
+
other_nodes.each do |pj|
|
|
50
|
+
physics.add_spring(Physics::VerletMinDistanceSpring2D.new(pi, pj, (diameter + other.diameter) * 0.5, 0.05))
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Draw all the internal connections
|
|
56
|
+
def internal_connections(app)
|
|
57
|
+
app.stroke(200, 0, 0, 80)
|
|
58
|
+
nodes[0..nodes.size - 1].each_with_index do |pi, i|
|
|
59
|
+
nodes[i + 1..nodes.size - 1].each do |pj|
|
|
60
|
+
app.line(pi.x, pi.y, pj.x, pj.y)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Draw all the connections between this and another Cluster
|
|
66
|
+
def show_connections(app, other)
|
|
67
|
+
app.stroke(200, 200, 0, 20)
|
|
68
|
+
app.stroke_weight(2)
|
|
69
|
+
other_nodes = other.nodes
|
|
70
|
+
nodes.each do |pi|
|
|
71
|
+
other_nodes[0..other_nodes.size - 1].each do |pj|
|
|
72
|
+
app.line(pi.x, pi.y, pj.x, pj.y)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
require 'jruby_art'
|
|
2
|
+
require 'toxiclibs'
|
|
3
|
+
require_relative 'cluster'
|
|
4
|
+
require_relative 'node'
|
|
5
|
+
|
|
6
|
+
#
|
|
7
|
+
# Copyright (c) 2010 Daniel Shiffman
|
|
8
|
+
#
|
|
9
|
+
# This demo & library is free software you can redistribute it and/or
|
|
10
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
11
|
+
# License as published by the Free Software Foundation either
|
|
12
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
13
|
+
#
|
|
14
|
+
# http://creativecommons.org/licenses/LGPL/2.1/
|
|
15
|
+
#
|
|
16
|
+
# This library is distributed in the hope that it will be useful,
|
|
17
|
+
# but WITHOUT ANY WARRANTY without even the implied warranty of
|
|
18
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
19
|
+
# Lesser General Public License for more details.
|
|
20
|
+
#
|
|
21
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
22
|
+
# License along with this library if not, write to the Free Software
|
|
23
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
24
|
+
|
|
25
|
+
attr_reader :physics, :clusters, :show_physics, :show_particles, :f
|
|
26
|
+
|
|
27
|
+
def settings
|
|
28
|
+
size(640, 360)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def setup
|
|
32
|
+
sketch_title 'Force Directed Graph'
|
|
33
|
+
@f = create_font('Georgia', 12, true)
|
|
34
|
+
@show_physics = true
|
|
35
|
+
@show_particles = true
|
|
36
|
+
# Initialize the physics
|
|
37
|
+
@physics = Physics::VerletPhysics2D.new
|
|
38
|
+
physics.set_world_bounds(Toxi::Rect.new(10, 10, width - 20, height - 20))
|
|
39
|
+
# Spawn a new random graph
|
|
40
|
+
new_graph
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Spawn a new random graph
|
|
44
|
+
def new_graph
|
|
45
|
+
# Clear physics
|
|
46
|
+
physics.clear
|
|
47
|
+
center = TVec2D.new(width / 2, height / 2)
|
|
48
|
+
@clusters = (0..8).map { Cluster.new(physics, rand(3..8), rand(20..100), center) }
|
|
49
|
+
# All clusters connect to all clusters
|
|
50
|
+
clusters.each_with_index do |ci, i|
|
|
51
|
+
clusters[i + 1..clusters.size - 1].each do |cj|
|
|
52
|
+
ci.connect(cj)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def draw
|
|
58
|
+
# Update the physics world
|
|
59
|
+
physics.update
|
|
60
|
+
background(255)
|
|
61
|
+
# Display all points
|
|
62
|
+
clusters.each(&:display) if show_particles
|
|
63
|
+
# If we want to see the physics
|
|
64
|
+
if show_physics
|
|
65
|
+
clusters.each_with_index do |ci, i|
|
|
66
|
+
ci.internal_connections self
|
|
67
|
+
# Cluster connections to other clusters
|
|
68
|
+
clusters[1 + i..clusters.size - 1].each do |cj|
|
|
69
|
+
ci.show_connections(self, cj)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
# Instructions
|
|
74
|
+
fill(0)
|
|
75
|
+
text_font(f)
|
|
76
|
+
text("'p' to display or hide particles\n'c' to display or hide connections\n'n' for new graph", 10, 20)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Key press commands
|
|
80
|
+
def key_pressed
|
|
81
|
+
case key
|
|
82
|
+
when 'c'
|
|
83
|
+
@show_physics = !show_physics
|
|
84
|
+
@show_particles = true unless show_physics
|
|
85
|
+
when 'p'
|
|
86
|
+
@show_particles = !show_particles
|
|
87
|
+
@show_physics = true unless show_particles
|
|
88
|
+
when 'n'
|
|
89
|
+
new_graph
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'forwardable'
|
|
2
|
+
|
|
3
|
+
# The Nature of Code
|
|
4
|
+
# Daniel Shiffman
|
|
5
|
+
# http://natureofcode.com
|
|
6
|
+
# Force directed graph
|
|
7
|
+
# Heavily based on: http://code.google.com/p/fidgen/
|
|
8
|
+
# Notice how we are using inheritance here!
|
|
9
|
+
# We could have just stored a reference to a VerletParticle object
|
|
10
|
+
# inside the Node class, but inheritance is a nice alternative
|
|
11
|
+
class Node < Physics::VerletParticle2D
|
|
12
|
+
extend Forwardable
|
|
13
|
+
def_delegators(:@app, :fill, :stroke, :stroke_weight, :ellipse)
|
|
14
|
+
def initialize(pos)
|
|
15
|
+
super(pos)
|
|
16
|
+
@app = $app
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# All we're doing really is adding a display function to a VerletParticle
|
|
20
|
+
def display
|
|
21
|
+
fill(50, 200, 200, 150)
|
|
22
|
+
stroke(50, 200, 200)
|
|
23
|
+
stroke_weight(2)
|
|
24
|
+
ellipse(x, y, 16, 16)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require 'toxiclibs'
|
|
2
|
+
#
|
|
3
|
+
# <p>GrayScottImage uses the seedImage method to use a bitmap as simulation seed.
|
|
4
|
+
# In this demo the image is re-applied every frame and the user can adjust the
|
|
5
|
+
# F coefficient of the reaction diffusion to produce different patterns emerging
|
|
6
|
+
# from the boundary of the bitmapped seed. Unlike some other GS demos provided,
|
|
7
|
+
# this one also uses a wrapped simulation space, creating tiled patterns.</p>
|
|
8
|
+
#
|
|
9
|
+
# <p><strong>usage:</strong></p>
|
|
10
|
+
# <ul>
|
|
11
|
+
# <li>click + drag mouse to locally disturb the simulation</li>
|
|
12
|
+
# <li>press 1-9 to adjust the F parameter of the simulation</li>
|
|
13
|
+
# <li>press any other key to reset</li>
|
|
14
|
+
# </ul>
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
#
|
|
18
|
+
# Copyright (c) 2010 Karsten Schmidt
|
|
19
|
+
#
|
|
20
|
+
# This demo & library is free software you can redistribute it and/or
|
|
21
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
22
|
+
# License as published by the Free Software Foundation either
|
|
23
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
24
|
+
#
|
|
25
|
+
# http:#creativecommons.org/licenses/LGPL/2.1/
|
|
26
|
+
#
|
|
27
|
+
# This library is distributed in the hope that it will be useful,
|
|
28
|
+
# but WITHOUT ANY WARRANTY without even the implied warranty of
|
|
29
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
30
|
+
# Lesser General Public License for more details.
|
|
31
|
+
#
|
|
32
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
33
|
+
# License along with this library if not, write to the Free Software
|
|
34
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
35
|
+
#
|
|
36
|
+
|
|
37
|
+
attr_reader :gs, :tone_map, :img
|
|
38
|
+
|
|
39
|
+
def settings
|
|
40
|
+
size 256, 256
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def setup
|
|
44
|
+
sketch_title 'Gray Scott Image'
|
|
45
|
+
@gs = Simulation::GrayScott.new width, height, true
|
|
46
|
+
@img = load_image 'ti_yong.png'
|
|
47
|
+
# create a duo-tone gradient map with 256 steps
|
|
48
|
+
# NB: use '::' in place of '.' here for these java constants
|
|
49
|
+
@tone_map = Toxi::ToneMap.new(0, 0.33, Toxi::NamedColor::CRIMSON, Toxi::NamedColor::WHITE, 256)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def draw
|
|
53
|
+
@gs.seed_image(img.pixels, img.width, img.height)
|
|
54
|
+
@gs.set_rect(mouse_x, mouse_y, 20, 20) if mouse_pressed?
|
|
55
|
+
load_pixels
|
|
56
|
+
10.times { @gs.update(1) }
|
|
57
|
+
# read out the V result array
|
|
58
|
+
# and use tone map to render colours
|
|
59
|
+
gs.v.length.times do |i|
|
|
60
|
+
pixels[i]=tone_map.getARGBToneFor(gs.v[i]) # NB: don't camel case convert here
|
|
61
|
+
end
|
|
62
|
+
update_pixels
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def key_pressed
|
|
66
|
+
control_key = %w(1 2 3 4 5 6 7 8 9)
|
|
67
|
+
case key
|
|
68
|
+
when *control_key
|
|
69
|
+
@gs.setF(0.02 + (key.to_i) * 0.001)
|
|
70
|
+
when 's'
|
|
71
|
+
save_frame 'toxi.png'
|
|
72
|
+
else
|
|
73
|
+
@gs.reset
|
|
74
|
+
end
|
|
75
|
+
end
|