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
@@ -0,0 +1,323 @@
|
|
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.geom.mesh;
|
29
|
+
|
30
|
+
import java.io.BufferedOutputStream;
|
31
|
+
import java.io.DataOutputStream;
|
32
|
+
import java.io.FileNotFoundException;
|
33
|
+
import java.io.FileOutputStream;
|
34
|
+
import java.io.IOException;
|
35
|
+
import java.io.OutputStream;
|
36
|
+
import java.util.logging.Level;
|
37
|
+
import java.util.logging.Logger;
|
38
|
+
|
39
|
+
import toxi.geom.Vec3D;
|
40
|
+
|
41
|
+
/**
|
42
|
+
* A simple, but flexible and memory efficient exporter for binary STL files.
|
43
|
+
* Custom color support is implemented via the STLcolorModel interface and the
|
44
|
+
* exporter comes with the 2 most common format variations defined by the
|
45
|
+
* DEFAULT and MATERIALISE constants.
|
46
|
+
*
|
47
|
+
* The minimal design of this exporter means it does not build an extra list of
|
48
|
+
* faces in RAM and so is able to easily export models with millions of faces.
|
49
|
+
*
|
50
|
+
* http://en.wikipedia.org/wiki/STL_(file_format)
|
51
|
+
*/
|
52
|
+
public class STLWriter {
|
53
|
+
|
54
|
+
/**
|
55
|
+
*
|
56
|
+
*/
|
57
|
+
protected static final Logger logger = Logger.getLogger(STLWriter.class
|
58
|
+
.getName());
|
59
|
+
|
60
|
+
/**
|
61
|
+
*
|
62
|
+
*/
|
63
|
+
public static final int DEFAULT_RGB = -1;
|
64
|
+
|
65
|
+
/**
|
66
|
+
*
|
67
|
+
*/
|
68
|
+
public static final STLColorModel DEFAULT = new DefaultSTLColorModel();
|
69
|
+
|
70
|
+
/**
|
71
|
+
*
|
72
|
+
*/
|
73
|
+
public static final STLColorModel MATERIALISE = new MaterialiseSTLColorModel(
|
74
|
+
0xffffffff);
|
75
|
+
|
76
|
+
/**
|
77
|
+
*
|
78
|
+
*/
|
79
|
+
public static final int DEFAULT_BUFFER = 0x10000;
|
80
|
+
|
81
|
+
/**
|
82
|
+
*
|
83
|
+
*/
|
84
|
+
protected OutputStream ds;
|
85
|
+
|
86
|
+
/**
|
87
|
+
*
|
88
|
+
*/
|
89
|
+
protected byte[] buf = new byte[4];
|
90
|
+
|
91
|
+
/**
|
92
|
+
*
|
93
|
+
*/
|
94
|
+
protected int bufferSize;
|
95
|
+
|
96
|
+
/**
|
97
|
+
*
|
98
|
+
*/
|
99
|
+
protected Vec3D scale = new Vec3D(1, 1, 1);
|
100
|
+
|
101
|
+
/**
|
102
|
+
*
|
103
|
+
*/
|
104
|
+
protected boolean useInvertedNormals = false;
|
105
|
+
|
106
|
+
/**
|
107
|
+
*
|
108
|
+
*/
|
109
|
+
protected STLColorModel colorModel;
|
110
|
+
|
111
|
+
/**
|
112
|
+
*
|
113
|
+
*/
|
114
|
+
public STLWriter() {
|
115
|
+
this(DEFAULT, DEFAULT_BUFFER);
|
116
|
+
}
|
117
|
+
|
118
|
+
/**
|
119
|
+
*
|
120
|
+
* @param cm
|
121
|
+
* @param bufSize
|
122
|
+
*/
|
123
|
+
public STLWriter(STLColorModel cm, int bufSize) {
|
124
|
+
colorModel = cm;
|
125
|
+
this.bufferSize = bufSize;
|
126
|
+
}
|
127
|
+
|
128
|
+
/**
|
129
|
+
*
|
130
|
+
* @param stream
|
131
|
+
* @param numFaces
|
132
|
+
*/
|
133
|
+
public void beginSave(OutputStream stream, int numFaces) {
|
134
|
+
try {
|
135
|
+
logger.info("starting to save STL data to output stream...");
|
136
|
+
ds = new BufferedOutputStream(new DataOutputStream(stream),
|
137
|
+
bufferSize);
|
138
|
+
writeHeader(numFaces);
|
139
|
+
} catch (IOException ex) {
|
140
|
+
logger.log(Level.SEVERE, null, ex);
|
141
|
+
}
|
142
|
+
|
143
|
+
}
|
144
|
+
|
145
|
+
/**
|
146
|
+
*
|
147
|
+
* @param fn
|
148
|
+
* @param numFaces
|
149
|
+
*/
|
150
|
+
public void beginSave(String fn, int numFaces) {
|
151
|
+
logger.log(Level.INFO, "saving mesh to: {0}", fn);
|
152
|
+
try {
|
153
|
+
beginSave(new FileOutputStream(fn), numFaces);
|
154
|
+
} catch (FileNotFoundException ex) {
|
155
|
+
logger.log(Level.SEVERE, null, ex);
|
156
|
+
}
|
157
|
+
}
|
158
|
+
|
159
|
+
/**
|
160
|
+
*
|
161
|
+
*/
|
162
|
+
public void endSave() {
|
163
|
+
try {
|
164
|
+
ds.flush();
|
165
|
+
ds.close();
|
166
|
+
} catch (Exception e) {
|
167
|
+
logger.log(Level.SEVERE, null, e);
|
168
|
+
}
|
169
|
+
}
|
170
|
+
|
171
|
+
/**
|
172
|
+
*
|
173
|
+
* @param a
|
174
|
+
* @param b
|
175
|
+
* @param c
|
176
|
+
*/
|
177
|
+
public void face(Vec3D a, Vec3D b, Vec3D c) {
|
178
|
+
face(a, b, c, DEFAULT_RGB);
|
179
|
+
}
|
180
|
+
|
181
|
+
/**
|
182
|
+
*
|
183
|
+
* @param a
|
184
|
+
* @param b
|
185
|
+
* @param c
|
186
|
+
* @param rgb
|
187
|
+
*/
|
188
|
+
public void face(Vec3D a, Vec3D b, Vec3D c, int rgb) {
|
189
|
+
Vec3D normal = b.sub(a).crossSelf(c.sub(a)).normalize();
|
190
|
+
if (useInvertedNormals) {
|
191
|
+
normal.invert();
|
192
|
+
}
|
193
|
+
face(a, b, c, normal, rgb);
|
194
|
+
}
|
195
|
+
|
196
|
+
/**
|
197
|
+
*
|
198
|
+
* @param a
|
199
|
+
* @param b
|
200
|
+
* @param c
|
201
|
+
* @param normal
|
202
|
+
* @param rgb
|
203
|
+
*/
|
204
|
+
public void face(Vec3D a, Vec3D b, Vec3D c, Vec3D normal, int rgb) {
|
205
|
+
try {
|
206
|
+
writeVector(normal);
|
207
|
+
// vertices
|
208
|
+
writeScaledVector(a);
|
209
|
+
writeScaledVector(b);
|
210
|
+
writeScaledVector(c);
|
211
|
+
// vertex attrib (color)
|
212
|
+
if (rgb != DEFAULT_RGB) {
|
213
|
+
writeShort(colorModel.formatRGB(rgb));
|
214
|
+
} else {
|
215
|
+
writeShort(colorModel.getDefaultRGB());
|
216
|
+
}
|
217
|
+
} catch (IOException e) {
|
218
|
+
logger.log(Level.SEVERE, null, e);
|
219
|
+
}
|
220
|
+
}
|
221
|
+
|
222
|
+
private void prepareBuffer(int a) {
|
223
|
+
buf[3] = (byte) (a >>> 24);
|
224
|
+
buf[2] = (byte) (a >> 16 & 0xff);
|
225
|
+
buf[1] = (byte) (a >> 8 & 0xff);
|
226
|
+
buf[0] = (byte) (a & 0xff);
|
227
|
+
}
|
228
|
+
|
229
|
+
/**
|
230
|
+
*
|
231
|
+
* @param s
|
232
|
+
*/
|
233
|
+
public void setScale(float s) {
|
234
|
+
scale.set(s, s, s);
|
235
|
+
}
|
236
|
+
|
237
|
+
/**
|
238
|
+
*
|
239
|
+
* @param s
|
240
|
+
*/
|
241
|
+
public void setScale(Vec3D s) {
|
242
|
+
scale.set(s);
|
243
|
+
}
|
244
|
+
|
245
|
+
/**
|
246
|
+
*
|
247
|
+
* @param state
|
248
|
+
*/
|
249
|
+
public void useInvertedNormals(boolean state) {
|
250
|
+
useInvertedNormals = state;
|
251
|
+
}
|
252
|
+
|
253
|
+
/**
|
254
|
+
*
|
255
|
+
* @param a
|
256
|
+
* @throws IOException
|
257
|
+
*/
|
258
|
+
protected void writeFloat(float a) throws IOException {
|
259
|
+
prepareBuffer(Float.floatToRawIntBits(a));
|
260
|
+
ds.write(buf, 0, 4);
|
261
|
+
}
|
262
|
+
|
263
|
+
/**
|
264
|
+
*
|
265
|
+
* @param num
|
266
|
+
* @throws IOException
|
267
|
+
*/
|
268
|
+
protected void writeHeader(int num) throws IOException {
|
269
|
+
byte[] header = new byte[80];
|
270
|
+
colorModel.formatHeader(header);
|
271
|
+
ds.write(header, 0, 80);
|
272
|
+
writeInt(num);
|
273
|
+
}
|
274
|
+
|
275
|
+
/**
|
276
|
+
*
|
277
|
+
* @param a
|
278
|
+
* @throws IOException
|
279
|
+
*/
|
280
|
+
protected void writeInt(int a) throws IOException {
|
281
|
+
prepareBuffer(a);
|
282
|
+
ds.write(buf, 0, 4);
|
283
|
+
}
|
284
|
+
|
285
|
+
/**
|
286
|
+
*
|
287
|
+
* @param v
|
288
|
+
*/
|
289
|
+
protected void writeScaledVector(Vec3D v) {
|
290
|
+
try {
|
291
|
+
writeFloat(v.x * scale.x);
|
292
|
+
writeFloat(v.y * scale.y);
|
293
|
+
writeFloat(v.z * scale.z);
|
294
|
+
} catch (IOException e) {
|
295
|
+
logger.log(Level.SEVERE, null, e);
|
296
|
+
}
|
297
|
+
}
|
298
|
+
|
299
|
+
/**
|
300
|
+
*
|
301
|
+
* @param a
|
302
|
+
* @throws IOException
|
303
|
+
*/
|
304
|
+
protected void writeShort(int a) throws IOException {
|
305
|
+
buf[0] = (byte) (a & 0xff);
|
306
|
+
buf[1] = (byte) (a >> 8 & 0xff);
|
307
|
+
ds.write(buf, 0, 2);
|
308
|
+
}
|
309
|
+
|
310
|
+
/**
|
311
|
+
*
|
312
|
+
* @param v
|
313
|
+
*/
|
314
|
+
protected void writeVector(Vec3D v) {
|
315
|
+
try {
|
316
|
+
writeFloat(v.x);
|
317
|
+
writeFloat(v.y);
|
318
|
+
writeFloat(v.z);
|
319
|
+
} catch (IOException e) {
|
320
|
+
logger.log(Level.SEVERE, null, e);
|
321
|
+
}
|
322
|
+
}
|
323
|
+
}
|
@@ -0,0 +1,156 @@
|
|
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.geom.mesh;
|
29
|
+
|
30
|
+
import toxi.geom.Sphere;
|
31
|
+
import toxi.geom.Vec3D;
|
32
|
+
import toxi.math.MathUtils;
|
33
|
+
|
34
|
+
/**
|
35
|
+
* This implementation of a {@link SurfaceFunction} samples a given
|
36
|
+
* {@link Sphere} instance when called by the {@link SurfaceMeshBuilder}.
|
37
|
+
*/
|
38
|
+
public class SphereFunction implements SurfaceFunction {
|
39
|
+
|
40
|
+
/**
|
41
|
+
*
|
42
|
+
*/
|
43
|
+
public Sphere sphere;
|
44
|
+
|
45
|
+
/**
|
46
|
+
*
|
47
|
+
*/
|
48
|
+
protected float phiRange = MathUtils.PI;
|
49
|
+
|
50
|
+
/**
|
51
|
+
*
|
52
|
+
*/
|
53
|
+
protected float thetaRange = MathUtils.TWO_PI;
|
54
|
+
|
55
|
+
/**
|
56
|
+
*
|
57
|
+
*/
|
58
|
+
public SphereFunction() {
|
59
|
+
this(1);
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Creates a new instance using a sphere of the given radius, located at the
|
64
|
+
* world origin.
|
65
|
+
*
|
66
|
+
* @param radius
|
67
|
+
*/
|
68
|
+
public SphereFunction(float radius) {
|
69
|
+
this(new Sphere(new Vec3D(), radius));
|
70
|
+
}
|
71
|
+
|
72
|
+
/**
|
73
|
+
* Creates a new instance using the given sphere
|
74
|
+
*
|
75
|
+
* @param s
|
76
|
+
* sphere
|
77
|
+
*/
|
78
|
+
public SphereFunction(Sphere s) {
|
79
|
+
this.sphere = s;
|
80
|
+
}
|
81
|
+
|
82
|
+
/**
|
83
|
+
*
|
84
|
+
* @param p
|
85
|
+
* @param phi
|
86
|
+
* @param theta
|
87
|
+
* @return
|
88
|
+
*/
|
89
|
+
@Override
|
90
|
+
public Vec3D computeVertexFor(Vec3D p, float phi, float theta) {
|
91
|
+
phi -= MathUtils.HALF_PI;
|
92
|
+
float cosPhi = MathUtils.cos(phi);
|
93
|
+
float cosTheta = MathUtils.cos(theta);
|
94
|
+
float sinPhi = MathUtils.sin(phi);
|
95
|
+
float sinTheta = MathUtils.sin(theta);
|
96
|
+
float t = MathUtils.sign(cosPhi) * MathUtils.abs(cosPhi);
|
97
|
+
p.x = t * MathUtils.sign(cosTheta) * MathUtils.abs(cosTheta);
|
98
|
+
p.y = MathUtils.sign(sinPhi) * MathUtils.abs(sinPhi);
|
99
|
+
p.z = t * MathUtils.sign(sinTheta) * MathUtils.abs(sinTheta);
|
100
|
+
return p.scaleSelf(sphere.radius).addSelf(sphere);
|
101
|
+
}
|
102
|
+
|
103
|
+
/**
|
104
|
+
*
|
105
|
+
* @return
|
106
|
+
*/
|
107
|
+
@Override
|
108
|
+
public float getPhiRange() {
|
109
|
+
return phiRange;
|
110
|
+
}
|
111
|
+
|
112
|
+
/**
|
113
|
+
*
|
114
|
+
* @param res
|
115
|
+
* @return
|
116
|
+
*/
|
117
|
+
@Override
|
118
|
+
public int getPhiResolutionLimit(int res) {
|
119
|
+
return res;
|
120
|
+
}
|
121
|
+
|
122
|
+
/**
|
123
|
+
*
|
124
|
+
* @return
|
125
|
+
*/
|
126
|
+
@Override
|
127
|
+
public float getThetaRange() {
|
128
|
+
return thetaRange;
|
129
|
+
}
|
130
|
+
|
131
|
+
/**
|
132
|
+
*
|
133
|
+
* @param res
|
134
|
+
* @return
|
135
|
+
*/
|
136
|
+
@Override
|
137
|
+
public int getThetaResolutionLimit(int res) {
|
138
|
+
return res;
|
139
|
+
}
|
140
|
+
|
141
|
+
/**
|
142
|
+
*
|
143
|
+
* @param max
|
144
|
+
*/
|
145
|
+
public void setMaxPhi(float max) {
|
146
|
+
phiRange = MathUtils.min(max / 2, MathUtils.PI);
|
147
|
+
}
|
148
|
+
|
149
|
+
/**
|
150
|
+
*
|
151
|
+
* @param max
|
152
|
+
*/
|
153
|
+
public void setMaxTheta(float max) {
|
154
|
+
thetaRange = MathUtils.min(max, MathUtils.TWO_PI);
|
155
|
+
}
|
156
|
+
}
|