toxiclibs 0.4.0 → 0.8.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.
- checksums.yaml +4 -4
- data/.gitignore +16 -0
- data/.mvn/extensions.xml +8 -0
- data/.mvn/wrapper/maven-wrapper.properties +1 -0
- data/.travis.yml +23 -0
- data/CHANGELOG.md +7 -0
- data/COPYING.md +14 -0
- data/Gemfile +10 -0
- data/LICENSE +675 -0
- data/README.md +9 -7
- data/Rakefile +25 -81
- data/examples/README.md +5 -0
- 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/ReplicaBold.ttf +0 -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 +74 -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 +43 -0
- data/examples/physics_type.rb +77 -0
- data/examples/povmesh/data/mask.jpg +0 -0
- data/examples/povmesh/ftest.rb +59 -0
- data/examples/povmesh/mesh_align.rb +47 -0
- data/examples/povmesh/tentacle.rb +71 -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/examples/spherical_harmonics_mesh.rb +50 -0
- data/examples/test_rect.rb +32 -0
- data/lib/toxiclibs.jar +0 -0
- data/lib/toxiclibs.rb +72 -22
- data/lib/toxiclibs/version.rb +1 -1
- data/pom.rb +63 -0
- data/pom.xml +124 -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/audio/AudioBuffer.java +229 -0
- data/src/toxi/audio/AudioSource.java +288 -0
- data/src/toxi/audio/DecompressInputStream.java +159 -0
- data/src/toxi/audio/IIRFilter.java +197 -0
- data/src/toxi/audio/JOALUtil.java +388 -0
- data/src/toxi/audio/MultiTimbralManager.java +162 -0
- data/src/toxi/audio/SoundListener.java +154 -0
- data/src/toxi/audio/SynthUtil.java +109 -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 +127 -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 +28 -0
- metadata +442 -31
|
Binary file
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'toxiclibs'
|
|
2
|
+
|
|
3
|
+
attr_reader :gfx, :mesh0, :mesh1, :mesh2, :fshape
|
|
4
|
+
|
|
5
|
+
def settings
|
|
6
|
+
size(200, 200, P3D)
|
|
7
|
+
smooth 8
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
sketch_title('FTest')
|
|
12
|
+
ArcBall.init(self)
|
|
13
|
+
@gfx = Gfx::MeshToVBO.new(self)
|
|
14
|
+
# define a rounded cube using the SuperEllipsoid surface function
|
|
15
|
+
vert = AABB.fromMinMax(TVec3D.new(-1.0, -3.5, -1.0), TVec3D.new(1.0, 3.5, 1.0))
|
|
16
|
+
box = AABB.fromMinMax(TVec3D.new(1.0, -1.5, -1.0), TVec3D.new(3.0, -3.5, 1.0))
|
|
17
|
+
box2 = AABB.fromMinMax(TVec3D.new(1.0, 2.0, -1.0), TVec3D.new(3.0, 0.0, 1.0))
|
|
18
|
+
@mesh0 = box.to_mesh
|
|
19
|
+
@mesh1 = vert.to_mesh
|
|
20
|
+
@mesh2 = box2.to_mesh # build a composite mesh
|
|
21
|
+
mesh0.add_mesh(mesh1)
|
|
22
|
+
mesh0.add_mesh(mesh2)
|
|
23
|
+
mesh0.compute_face_normals
|
|
24
|
+
fill(color('#c0c0c0')) # silver
|
|
25
|
+
specular(20, 20, 20)
|
|
26
|
+
ambient(100)
|
|
27
|
+
no_stroke
|
|
28
|
+
@fshape = gfx.mesh_to_shape(mesh0, false)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def draw
|
|
32
|
+
background 80, 80, 160
|
|
33
|
+
setup_lights
|
|
34
|
+
scale(10)
|
|
35
|
+
shape(fshape)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def setup_lights
|
|
39
|
+
lights
|
|
40
|
+
ambient_light(150, 150, 150)
|
|
41
|
+
directional_light(100, 100, 100, -1, 0, 0)
|
|
42
|
+
directional_light(100, 100, 100, 1, 0, -1)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def key_pressed
|
|
47
|
+
case key
|
|
48
|
+
when 'p', 'P'
|
|
49
|
+
fileID = 'FTest'
|
|
50
|
+
pm = Gfx::POVMesh.new(self)
|
|
51
|
+
file = java.io.File.new(sketch_path(fileID + '.inc'))
|
|
52
|
+
pm.begin_save(file)
|
|
53
|
+
pm.set_texture(Gfx::Textures::CHROME)
|
|
54
|
+
pm.saveAsPOV(mesh0.faceOutwards, false)
|
|
55
|
+
pm.end_save
|
|
56
|
+
when 's', 'S'
|
|
57
|
+
save_frame(data_path('FTest.png'))
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'toxiclibs'
|
|
2
|
+
|
|
3
|
+
attr_reader :gfx, :vbo, :meshes
|
|
4
|
+
SCALE = 200
|
|
5
|
+
BOX_SIZE = TVec3D.new(5, 5, 50)
|
|
6
|
+
|
|
7
|
+
def settings
|
|
8
|
+
size(600, 600, P3D)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def setup
|
|
12
|
+
sketch_title('Mesh Align')
|
|
13
|
+
ArcBall.init(self)
|
|
14
|
+
@vbo = Gfx::MeshToVBO.new(self)
|
|
15
|
+
no_stroke
|
|
16
|
+
@meshes = create_shape(GROUP)
|
|
17
|
+
600.times do |i|
|
|
18
|
+
# create a new direction vector for each box
|
|
19
|
+
dir = TVec3D.new(cos(i * TWO_PI / 75), sin(i * TWO_PI / 50), sin(i * TWO_PI / 25)).normalize
|
|
20
|
+
# create a position on a sphere, using the direction vector
|
|
21
|
+
pos = dir.scale(SCALE)
|
|
22
|
+
# create a box mesh at the origin
|
|
23
|
+
b = AABB.new(TVec3D.new, BOX_SIZE).to_mesh
|
|
24
|
+
# align the Z axis of the box with the direction vector
|
|
25
|
+
b.point_towards(dir)
|
|
26
|
+
# move the box to the correct position
|
|
27
|
+
b.transform(Toxi::Matrix4x4.new.translate_self(pos.x, pos.y, pos.z))
|
|
28
|
+
b.compute_face_normals
|
|
29
|
+
temp = vbo.mesh_to_shape(b, false)
|
|
30
|
+
temp.disable_style
|
|
31
|
+
temp.set_fill(color(rand(255), rand(255), rand(255)))
|
|
32
|
+
meshes.add_child(temp)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def draw
|
|
37
|
+
background 50, 50, 200
|
|
38
|
+
define_lights
|
|
39
|
+
shape(meshes)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def define_lights
|
|
43
|
+
lights
|
|
44
|
+
shininess(16)
|
|
45
|
+
directionalLight(255, 255, 255, 0, -1, 1)
|
|
46
|
+
specular(255)
|
|
47
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
require 'toxiclibs'
|
|
2
|
+
|
|
3
|
+
# A 3D Tentacle by Nikolaus Gradwohl http://www.local-guru.net
|
|
4
|
+
# Adapted for JRubyArt and mesh to PShape, and mesh2 export by Martin Prout
|
|
5
|
+
|
|
6
|
+
attr_reader :mesh, :gfx, :tentacle, :tex
|
|
7
|
+
|
|
8
|
+
def settings
|
|
9
|
+
size(500, 500, P3D)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def setup
|
|
13
|
+
sketch_title 'Tentacle'
|
|
14
|
+
@tex = load_image('mask.jpg')
|
|
15
|
+
ArcBall.init(self)
|
|
16
|
+
@gfx = Gfx::MeshToVBO.new(self)
|
|
17
|
+
volume = VolumetricSpaceArray.new(TVec3D.new(100, 200, 100), 100, 100, 100)
|
|
18
|
+
surface = ArrayIsoSurface.new(volume)
|
|
19
|
+
@mesh = TriangleMesh.new
|
|
20
|
+
brush = RoundBrush.new(volume, 10)
|
|
21
|
+
20.times do |i|
|
|
22
|
+
brush.set_size(i * 1.2 + 6)
|
|
23
|
+
x = cos(i * TWO_PI / 20) * 10
|
|
24
|
+
y = sin(i * TWO_PI / 20) * 10
|
|
25
|
+
brush.draw_at_absolute_pos(TVec3D.new(x, -25 + i * 7, y), 1)
|
|
26
|
+
end
|
|
27
|
+
(4..20).step(4) do |i|
|
|
28
|
+
brush.set_size(i / 1.5 + 4)
|
|
29
|
+
x = cos(i * TWO_PI / 20) * (i * 1.2 + 16)
|
|
30
|
+
y = sin(i * TWO_PI / 20) * (i * 1.2 + 16)
|
|
31
|
+
brush.draw_at_absolute_pos(TVec3D.new(x, -25 + i * 7, y), 1)
|
|
32
|
+
brush.set_size(i / 2 + 2)
|
|
33
|
+
x2 = cos(i * TWO_PI / 20) * (i * 1.2 + 18)
|
|
34
|
+
y2 = sin(i * TWO_PI / 20) * (i * 1.2 + 18)
|
|
35
|
+
brush.draw_at_absolute_pos(TVec3D.new(x2, -25 + i * 7, y2), -1.4)
|
|
36
|
+
end
|
|
37
|
+
volume.close_sides
|
|
38
|
+
surface.reset
|
|
39
|
+
surface.compute_surface_mesh(mesh, 0.5)
|
|
40
|
+
no_stroke
|
|
41
|
+
@tentacle = gfx.mesh_to_textured_shape(mesh, tex)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def draw
|
|
45
|
+
background(150)
|
|
46
|
+
define_lights
|
|
47
|
+
shape(tentacle)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def define_lights
|
|
51
|
+
lights
|
|
52
|
+
ambient_light(40, 40, 40)
|
|
53
|
+
directional_light(10, 30, 40, 1, 1, 0)
|
|
54
|
+
directional_light(10, 30, 40, 1, 1, -1)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def key_pressed
|
|
59
|
+
case key
|
|
60
|
+
when 'p', 'P'
|
|
61
|
+
fileID = 'Tentacle'
|
|
62
|
+
pm = Gfx::POVMesh.new(self)
|
|
63
|
+
pm.begin_save(java.io.File.new(fileID + '.inc'))
|
|
64
|
+
pm.set_texture(Gfx::Textures::RED) # red with Phong texture
|
|
65
|
+
pm.saveAsPOV(mesh, true)
|
|
66
|
+
pm.end_save
|
|
67
|
+
exit
|
|
68
|
+
when 's', 'S'
|
|
69
|
+
save_frame('Tentacle.png')
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'forwardable'
|
|
2
|
+
|
|
3
|
+
# The Nature of Code
|
|
4
|
+
# <http://www.shiffman.net/teaching/nature>
|
|
5
|
+
# Spring 2010
|
|
6
|
+
# Toxiclibs example: http://toxiclibs.org/
|
|
7
|
+
|
|
8
|
+
# Force directed graph
|
|
9
|
+
# Heavily based on: http://code.google.com/p/fidgen/
|
|
10
|
+
# A cluster is a grouping of Nodes
|
|
11
|
+
class Cluster
|
|
12
|
+
extend Forwardable
|
|
13
|
+
def_delegators(:@app, :stroke, :stroke_weight, :line, :physics)
|
|
14
|
+
attr_reader :nodes, :diameter
|
|
15
|
+
|
|
16
|
+
# We initialize a Cluster with a number of nodes, a diameter, and centerpoint
|
|
17
|
+
def initialize(n, d, center)
|
|
18
|
+
@app = $app
|
|
19
|
+
# Set the diameter
|
|
20
|
+
@diameter = d
|
|
21
|
+
# Create the nodes
|
|
22
|
+
@nodes = (0..n).map { Node.new(center.add(TVec2D.randomVector)) }
|
|
23
|
+
# Connect all the nodes with a Spring
|
|
24
|
+
nodes[0..nodes.size - 2].each_with_index do |ni, i|
|
|
25
|
+
nodes[i + 1..nodes.size - 1].each do |nj|
|
|
26
|
+
# A Spring needs two particles, a resting length, and a strength
|
|
27
|
+
physics.add_spring(Physics::VerletSpring2D.new(ni, nj, diameter, 0.01))
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def display
|
|
33
|
+
# Show all the nodes
|
|
34
|
+
nodes.each(&:display)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Draw all the internal connections
|
|
38
|
+
def show_connections
|
|
39
|
+
stroke(0, 150)
|
|
40
|
+
stroke_weight(2)
|
|
41
|
+
nodes[0..nodes.size - 2].each_with_index do |pi, i|
|
|
42
|
+
nodes[i + 1..nodes.size - 1].each do |pj|
|
|
43
|
+
line(pi.x, pi.y, pj.x, pj.y)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# The Nature of Code
|
|
2
|
+
# <http://www.shiffman.net/teaching/nature>
|
|
3
|
+
# Spring 2010
|
|
4
|
+
# Toxiclibs example: http://toxiclibs.org/
|
|
5
|
+
|
|
6
|
+
# Force directed graph
|
|
7
|
+
# Heavily based on: http://code.google.com/p/fidgen/
|
|
8
|
+
|
|
9
|
+
# Notice how we are using inheritance here!
|
|
10
|
+
# We could have just stored a reference to a VerletParticle object
|
|
11
|
+
# inside the Node class, but inheritance is a nice alternative
|
|
12
|
+
class Node < Physics::VerletParticle2D
|
|
13
|
+
extend Forwardable
|
|
14
|
+
def_delegators(:@app, :fill, :stroke, :stroke_weight, :ellipse)
|
|
15
|
+
def initialize(pos)
|
|
16
|
+
super(pos)
|
|
17
|
+
@app = $app
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# All we're doing really is adding a :display function to a VerletParticle
|
|
21
|
+
def display
|
|
22
|
+
fill(0, 150)
|
|
23
|
+
stroke(0)
|
|
24
|
+
stroke_weight(2)
|
|
25
|
+
ellipse(x, y, 16, 16)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# The Nature of Code
|
|
2
|
+
# Daniel Shiffman
|
|
3
|
+
# http://natureofcode.com
|
|
4
|
+
# bare sketch run with k9 run simple_cluster.rb
|
|
5
|
+
# Force directed graph,
|
|
6
|
+
# heavily based on: http://code.google.com/p/fidgen/
|
|
7
|
+
|
|
8
|
+
require 'toxiclibs'
|
|
9
|
+
require_relative 'cluster'
|
|
10
|
+
require_relative 'node'
|
|
11
|
+
require 'forwardable'
|
|
12
|
+
|
|
13
|
+
attr_reader :physics, :cluster, :f, :show_physics, :show_particles
|
|
14
|
+
|
|
15
|
+
def settings
|
|
16
|
+
size(640, 360)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def setup
|
|
20
|
+
sketch_title 'Simple Cluster'
|
|
21
|
+
@f = createFont('Georgia', 12, true)
|
|
22
|
+
@show_physics = true
|
|
23
|
+
@show_particles = true
|
|
24
|
+
@show_physics = true
|
|
25
|
+
@show_particles = true
|
|
26
|
+
# Initialize the physics
|
|
27
|
+
@physics = Physics::VerletPhysics2D.new
|
|
28
|
+
@physics.set_world_bounds(Toxi::Rect.new(10, 10, width - 20, height - 20))
|
|
29
|
+
# Spawn a new random graph
|
|
30
|
+
@cluster = Cluster.new(8, 100, TVec2D.new(width / 2, height / 2))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def draw
|
|
34
|
+
# Update the physics world
|
|
35
|
+
physics.update
|
|
36
|
+
background(255)
|
|
37
|
+
# Display all points
|
|
38
|
+
cluster.display if show_particles
|
|
39
|
+
# If we want to see the physics
|
|
40
|
+
cluster.show_connections if show_physics
|
|
41
|
+
# Instructions
|
|
42
|
+
fill(0)
|
|
43
|
+
text_font(f)
|
|
44
|
+
text("'p' to display or hide particles\n'c' to display or hide connections\n'n' for new graph", 10, 20)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Key press commands
|
|
48
|
+
def key_pressed
|
|
49
|
+
case key
|
|
50
|
+
when 'c'
|
|
51
|
+
@show_physics = !show_physics
|
|
52
|
+
@show_particles = true if show_physics
|
|
53
|
+
when 'p'
|
|
54
|
+
@show_particles = !show_particles
|
|
55
|
+
@show_particles = true unless show_physics
|
|
56
|
+
when 'n'
|
|
57
|
+
physics.clear
|
|
58
|
+
@cluster = Cluster.new(rand(3..20), rand(10..width / 2), TVec2D.new(width / 2, height / 2))
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# The Nature of Code
|
|
2
|
+
# Daniel Shiffman
|
|
3
|
+
# http://natureofcode.com
|
|
4
|
+
class Blanket
|
|
5
|
+
extend Forwardable
|
|
6
|
+
def_delegators(:@app, :width)
|
|
7
|
+
attr_reader :particles, :springs, :physics
|
|
8
|
+
|
|
9
|
+
def initialize(physics)
|
|
10
|
+
@app = $app
|
|
11
|
+
@particles = []
|
|
12
|
+
@springs = []
|
|
13
|
+
w = 20
|
|
14
|
+
h = 20
|
|
15
|
+
len = 10
|
|
16
|
+
strength = 0.125
|
|
17
|
+
h.times do |y|
|
|
18
|
+
w.times do |x|
|
|
19
|
+
p = Particle.new(TVec2D.new(width / 2 + x * len - w * len / 2, y * len))
|
|
20
|
+
physics.add_particle(p)
|
|
21
|
+
particles << p
|
|
22
|
+
if x > 0
|
|
23
|
+
previous = particles[particles.size - 2]
|
|
24
|
+
c = Connection.new(p, previous, len, strength)
|
|
25
|
+
physics.add_spring(c)
|
|
26
|
+
springs << c
|
|
27
|
+
end
|
|
28
|
+
if y > 0
|
|
29
|
+
above = particles[particles.size - w - 1]
|
|
30
|
+
c = Connection.new(p, above, len, strength)
|
|
31
|
+
physics.add_spring(c)
|
|
32
|
+
springs << c
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
topleft = particles[0]
|
|
37
|
+
topleft.lock
|
|
38
|
+
topright = particles[w - 1]
|
|
39
|
+
topright.lock
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def display
|
|
43
|
+
springs.each(&:display)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# The Nature of Code
|
|
2
|
+
# Daniel Shiffman
|
|
3
|
+
# http://natureofcode.com
|
|
4
|
+
class Connection < Physics::VerletSpring2D
|
|
5
|
+
extend Forwardable
|
|
6
|
+
def_delegators(:@app, :stroke, :line)
|
|
7
|
+
def initialize(p1, p2, len, strength)
|
|
8
|
+
super(p1, p2, len, strength)
|
|
9
|
+
@app = $app
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def display
|
|
13
|
+
stroke(0)
|
|
14
|
+
line(a.x, a.y, b.x, b.y)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# The Nature of Code
|
|
2
|
+
# Daniel Shiffman
|
|
3
|
+
# http://natureofcode.com
|
|
4
|
+
|
|
5
|
+
# Notice how we are using inheritance here!
|
|
6
|
+
# We could have just stored a reference to a VerletParticle object
|
|
7
|
+
# inside the Particle class, but inheritance is a nice alternative
|
|
8
|
+
class Particle < Physics::VerletParticle2D
|
|
9
|
+
extend Forwardable
|
|
10
|
+
def_delegators(:@app, :fill, :stroke, :ellipse)
|
|
11
|
+
def initialize(loc)
|
|
12
|
+
super(loc)
|
|
13
|
+
@app = $app
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# All we're doing really is adding a display function to a VerletParticle
|
|
17
|
+
def display
|
|
18
|
+
fill(175)
|
|
19
|
+
stroke(0)
|
|
20
|
+
ellipse(x, y, 16, 16)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# The Nature of Code
|
|
2
|
+
# Daniel Shiffman
|
|
3
|
+
# http://natureofcode.com
|
|
4
|
+
#
|
|
5
|
+
# This example is adapted from Karsten Schmidt's SoftBodySquare example
|
|
6
|
+
#
|
|
7
|
+
# <p>Softbody square demo is showing how to create a 2D square mesh out of
|
|
8
|
+
# verlet particles and make it stable enough to adef total structural
|
|
9
|
+
# deformation by including an inner skeleton.</p>
|
|
10
|
+
#
|
|
11
|
+
# <p>Usage: move mouse to drag/deform the square</p>
|
|
12
|
+
#
|
|
13
|
+
#
|
|
14
|
+
# Copyright (c) 2008-2009 Karsten Schmidt
|
|
15
|
+
#
|
|
16
|
+
# This demo & library is free software you can redistribute it and/or
|
|
17
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
18
|
+
# License as published by the Free Software Foundation either
|
|
19
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
20
|
+
#
|
|
21
|
+
# http://creativecommons.org/licenses/LGPL/2.1/
|
|
22
|
+
#
|
|
23
|
+
# This library is distributed in the hope that it will be useful,
|
|
24
|
+
# but WITHOUT ANY WARRANTY without even the implied warranty of
|
|
25
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
26
|
+
# Lesser General Public License for more details.
|
|
27
|
+
#
|
|
28
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
29
|
+
# License along with this library if not, write to the Free Software
|
|
30
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
31
|
+
#
|
|
32
|
+
require 'toxiclibs'
|
|
33
|
+
require 'forwardable'
|
|
34
|
+
require_relative 'blanket'
|
|
35
|
+
require_relative 'connection'
|
|
36
|
+
require_relative 'particle'
|
|
37
|
+
|
|
38
|
+
attr_reader :b, :physics
|
|
39
|
+
|
|
40
|
+
def settings
|
|
41
|
+
size 640, 360
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def setup
|
|
45
|
+
sketch_title 'Soft Body Square'
|
|
46
|
+
@physics = Physics::VerletPhysics2D.new
|
|
47
|
+
physics.add_behavior(Physics::GravityBehavior2D.new(TVec2D.new(0, 0.1)))
|
|
48
|
+
@b = Blanket.new physics
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def draw
|
|
52
|
+
background(255)
|
|
53
|
+
physics.update
|
|
54
|
+
b.display
|
|
55
|
+
end
|