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.
Files changed (383) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +16 -0
  3. data/CHANGELOG.md +4 -0
  4. data/LICENSE +675 -0
  5. data/README.md +12 -5
  6. data/Rakefile +25 -82
  7. data/examples/attract_repel/attract_repel.rb +30 -0
  8. data/examples/attract_repel/attractor.rb +23 -0
  9. data/examples/attract_repel/particle.rb +27 -0
  10. data/examples/data/ti_yong.png +0 -0
  11. data/examples/force_directed/cluster.rb +76 -0
  12. data/examples/force_directed/force_directed_graph.rb +92 -0
  13. data/examples/force_directed/node.rb +26 -0
  14. data/examples/gray_scott_image.rb +75 -0
  15. data/examples/gray_scott_tone_map.rb +77 -0
  16. data/examples/implicit.rb +139 -0
  17. data/examples/inflate_mesh.rb +89 -0
  18. data/examples/model_align.rb +44 -0
  19. data/examples/povmesh/ftest.rb +46 -0
  20. data/examples/povmesh/tentacle.rb +73 -0
  21. data/examples/simple_cluster/cluster.rb +47 -0
  22. data/examples/simple_cluster/node.rb +27 -0
  23. data/examples/simple_cluster/simple_cluster.rb +60 -0
  24. data/examples/soft_body/blanket.rb +45 -0
  25. data/examples/soft_body/connection.rb +16 -0
  26. data/examples/soft_body/particle.rb +22 -0
  27. data/examples/soft_body/soft_body_square_adapted.rb +55 -0
  28. data/lib/toxiclibs.jar +0 -0
  29. data/lib/toxiclibs.rb +91 -32
  30. data/lib/toxiclibs/version.rb +1 -1
  31. data/pom.xml +122 -0
  32. data/src/com/toxi/net/ClientListener.java +41 -0
  33. data/src/com/toxi/net/ServerListener.java +70 -0
  34. data/src/com/toxi/net/ServerListenerAdapter.java +47 -0
  35. data/src/com/toxi/net/ServerState.java +18 -0
  36. data/src/com/toxi/net/UDPConnection.java +66 -0
  37. data/src/com/toxi/net/UDPSyncClient.java +81 -0
  38. data/src/com/toxi/net/UDPSyncServer.java +450 -0
  39. data/src/com/toxi/nio/UDPClient.java +121 -0
  40. data/src/com/toxi/nio/UDPClientState.java +32 -0
  41. data/src/com/toxi/nio/UDPServer.java +129 -0
  42. data/src/toxi/color/AccessCriteria.java +114 -0
  43. data/src/toxi/color/AlphaAccessor.java +67 -0
  44. data/src/toxi/color/CMYKAccessor.java +122 -0
  45. data/src/toxi/color/CMYKDistanceProxy.java +40 -0
  46. data/src/toxi/color/ColorGradient.java +260 -0
  47. data/src/toxi/color/ColorList.java +699 -0
  48. data/src/toxi/color/ColorRange.java +671 -0
  49. data/src/toxi/color/ColorTheme.java +163 -0
  50. data/src/toxi/color/DistanceProxy.java +44 -0
  51. data/src/toxi/color/HSVAccessor.java +113 -0
  52. data/src/toxi/color/HSVDistanceProxy.java +40 -0
  53. data/src/toxi/color/HistEntry.java +85 -0
  54. data/src/toxi/color/Histogram.java +185 -0
  55. data/src/toxi/color/Hue.java +249 -0
  56. data/src/toxi/color/LuminanceAccessor.java +78 -0
  57. data/src/toxi/color/NamedColor.java +935 -0
  58. data/src/toxi/color/ProximityComparator.java +70 -0
  59. data/src/toxi/color/RGBAccessor.java +113 -0
  60. data/src/toxi/color/RGBDistanceProxy.java +41 -0
  61. data/src/toxi/color/ReadonlyTColor.java +296 -0
  62. data/src/toxi/color/TColor.java +1677 -0
  63. data/src/toxi/color/TColorAdapter.java +68 -0
  64. data/src/toxi/color/ToneMap.java +218 -0
  65. data/src/toxi/color/theory/AnalogousStrategy.java +140 -0
  66. data/src/toxi/color/theory/ColorTheoryRegistry.java +139 -0
  67. data/src/toxi/color/theory/ColorTheoryStrategy.java +56 -0
  68. data/src/toxi/color/theory/ComplementaryStrategy.java +111 -0
  69. data/src/toxi/color/theory/CompoundTheoryStrategy.java +143 -0
  70. data/src/toxi/color/theory/LeftSplitComplementaryStrategy.java +82 -0
  71. data/src/toxi/color/theory/MonochromeTheoryStrategy.java +103 -0
  72. data/src/toxi/color/theory/RightSplitComplementaryStrategy.java +82 -0
  73. data/src/toxi/color/theory/SingleComplementStrategy.java +76 -0
  74. data/src/toxi/color/theory/SplitComplementaryStrategy.java +77 -0
  75. data/src/toxi/color/theory/TetradTheoryStrategy.java +114 -0
  76. data/src/toxi/color/theory/TriadTheoryStrategy.java +77 -0
  77. data/src/toxi/data/csv/CSVAdapter.java +74 -0
  78. data/src/toxi/data/csv/CSVFieldMapper.java +212 -0
  79. data/src/toxi/data/csv/CSVListener.java +61 -0
  80. data/src/toxi/data/csv/CSVParser.java +202 -0
  81. data/src/toxi/data/feeds/AtomAuthor.java +49 -0
  82. data/src/toxi/data/feeds/AtomContent.java +50 -0
  83. data/src/toxi/data/feeds/AtomEntry.java +111 -0
  84. data/src/toxi/data/feeds/AtomFeed.java +129 -0
  85. data/src/toxi/data/feeds/AtomLink.java +62 -0
  86. data/src/toxi/data/feeds/RSSChannel.java +88 -0
  87. data/src/toxi/data/feeds/RSSEnclosure.java +60 -0
  88. data/src/toxi/data/feeds/RSSFeed.java +99 -0
  89. data/src/toxi/data/feeds/RSSItem.java +104 -0
  90. data/src/toxi/data/feeds/util/EntityStripper.java +2480 -0
  91. data/src/toxi/data/feeds/util/Iso8601DateAdapter.java +101 -0
  92. data/src/toxi/data/feeds/util/Rfc822DateAdapter.java +93 -0
  93. data/src/toxi/geom/AABB.java +658 -0
  94. data/src/toxi/geom/Axis3D.java +116 -0
  95. data/src/toxi/geom/AxisAlignedCylinder.java +163 -0
  96. data/src/toxi/geom/BernsteinPolynomial.java +94 -0
  97. data/src/toxi/geom/BezierCurve2D.java +159 -0
  98. data/src/toxi/geom/BezierCurve3D.java +148 -0
  99. data/src/toxi/geom/BooleanShapeBuilder.java +185 -0
  100. data/src/toxi/geom/BoxIntersector.java +52 -0
  101. data/src/toxi/geom/Circle.java +230 -0
  102. data/src/toxi/geom/CircleIntersector.java +85 -0
  103. data/src/toxi/geom/Cone.java +150 -0
  104. data/src/toxi/geom/ConvexPolygonClipper.java +136 -0
  105. data/src/toxi/geom/CoordinateExtractor.java +16 -0
  106. data/src/toxi/geom/Ellipse.java +250 -0
  107. data/src/toxi/geom/GMatrix.java +2599 -0
  108. data/src/toxi/geom/GVector.java +833 -0
  109. data/src/toxi/geom/GlobalGridTesselator.java +54 -0
  110. data/src/toxi/geom/GridTesselator.java +108 -0
  111. data/src/toxi/geom/Intersector2D.java +49 -0
  112. data/src/toxi/geom/Intersector3D.java +51 -0
  113. data/src/toxi/geom/IsectData2D.java +103 -0
  114. data/src/toxi/geom/IsectData3D.java +103 -0
  115. data/src/toxi/geom/Line2D.java +534 -0
  116. data/src/toxi/geom/Line3D.java +471 -0
  117. data/src/toxi/geom/LineStrip2D.java +430 -0
  118. data/src/toxi/geom/LineStrip3D.java +230 -0
  119. data/src/toxi/geom/LocalGridTesselator.java +57 -0
  120. data/src/toxi/geom/Matrix3d.java +3048 -0
  121. data/src/toxi/geom/Matrix4f.java +3446 -0
  122. data/src/toxi/geom/Matrix4x4.java +1076 -0
  123. data/src/toxi/geom/MatrixSizeException.java +58 -0
  124. data/src/toxi/geom/OctreeVisitor.java +44 -0
  125. data/src/toxi/geom/Origin3D.java +148 -0
  126. data/src/toxi/geom/Plane.java +293 -0
  127. data/src/toxi/geom/PlaneIntersector.java +57 -0
  128. data/src/toxi/geom/PointCloud3D.java +253 -0
  129. data/src/toxi/geom/PointOctree.java +502 -0
  130. data/src/toxi/geom/PointQuadtree.java +375 -0
  131. data/src/toxi/geom/Polygon2D.java +1038 -0
  132. data/src/toxi/geom/PolygonClipper2D.java +45 -0
  133. data/src/toxi/geom/PolygonTesselator.java +20 -0
  134. data/src/toxi/geom/QuadtreeVisitor.java +44 -0
  135. data/src/toxi/geom/Quaternion.java +641 -0
  136. data/src/toxi/geom/Ray2D.java +146 -0
  137. data/src/toxi/geom/Ray3D.java +150 -0
  138. data/src/toxi/geom/Ray3DIntersector.java +75 -0
  139. data/src/toxi/geom/ReadonlyVec2D.java +575 -0
  140. data/src/toxi/geom/ReadonlyVec3D.java +628 -0
  141. data/src/toxi/geom/ReadonlyVec4D.java +431 -0
  142. data/src/toxi/geom/Rect.java +720 -0
  143. data/src/toxi/geom/Reflector3D.java +58 -0
  144. data/src/toxi/geom/Shape2D.java +94 -0
  145. data/src/toxi/geom/Shape3D.java +42 -0
  146. data/src/toxi/geom/SingularMatrixException.java +57 -0
  147. data/src/toxi/geom/SpatialBins.java +182 -0
  148. data/src/toxi/geom/SpatialIndex.java +61 -0
  149. data/src/toxi/geom/Sphere.java +224 -0
  150. data/src/toxi/geom/SphereIntersectorReflector.java +196 -0
  151. data/src/toxi/geom/Spline2D.java +349 -0
  152. data/src/toxi/geom/Spline3D.java +351 -0
  153. data/src/toxi/geom/SutherlandHodgemanClipper.java +151 -0
  154. data/src/toxi/geom/Triangle2D.java +422 -0
  155. data/src/toxi/geom/Triangle3D.java +456 -0
  156. data/src/toxi/geom/TriangleIntersector.java +105 -0
  157. data/src/toxi/geom/Vec2D.java +1328 -0
  158. data/src/toxi/geom/Vec3D.java +1832 -0
  159. data/src/toxi/geom/Vec4D.java +985 -0
  160. data/src/toxi/geom/VecMathUtil.java +100 -0
  161. data/src/toxi/geom/XAxisCylinder.java +64 -0
  162. data/src/toxi/geom/YAxisCylinder.java +65 -0
  163. data/src/toxi/geom/ZAxisCylinder.java +64 -0
  164. data/src/toxi/geom/mesh/BezierPatch.java +200 -0
  165. data/src/toxi/geom/mesh/BoxSelector.java +62 -0
  166. data/src/toxi/geom/mesh/DefaultSTLColorModel.java +67 -0
  167. data/src/toxi/geom/mesh/DefaultSelector.java +50 -0
  168. data/src/toxi/geom/mesh/Face.java +176 -0
  169. data/src/toxi/geom/mesh/LaplacianSmooth.java +80 -0
  170. data/src/toxi/geom/mesh/MaterialiseSTLColorModel.java +150 -0
  171. data/src/toxi/geom/mesh/Mesh3D.java +224 -0
  172. data/src/toxi/geom/mesh/MeshIntersector.java +91 -0
  173. data/src/toxi/geom/mesh/OBJWriter.java +194 -0
  174. data/src/toxi/geom/mesh/PLYWriter.java +167 -0
  175. data/src/toxi/geom/mesh/PlaneSelector.java +90 -0
  176. data/src/toxi/geom/mesh/STLColorModel.java +54 -0
  177. data/src/toxi/geom/mesh/STLReader.java +185 -0
  178. data/src/toxi/geom/mesh/STLWriter.java +323 -0
  179. data/src/toxi/geom/mesh/SphereFunction.java +156 -0
  180. data/src/toxi/geom/mesh/SphericalHarmonics.java +110 -0
  181. data/src/toxi/geom/mesh/SuperEllipsoid.java +110 -0
  182. data/src/toxi/geom/mesh/SurfaceFunction.java +75 -0
  183. data/src/toxi/geom/mesh/SurfaceMeshBuilder.java +149 -0
  184. data/src/toxi/geom/mesh/Terrain.java +451 -0
  185. data/src/toxi/geom/mesh/TriangleMesh.java +1201 -0
  186. data/src/toxi/geom/mesh/Vertex.java +78 -0
  187. data/src/toxi/geom/mesh/VertexSelector.java +193 -0
  188. data/src/toxi/geom/mesh/WEFace.java +100 -0
  189. data/src/toxi/geom/mesh/WEMeshFilterStrategy.java +51 -0
  190. data/src/toxi/geom/mesh/WETriangleMesh.java +761 -0
  191. data/src/toxi/geom/mesh/WEVertex.java +134 -0
  192. data/src/toxi/geom/mesh/WingedEdge.java +115 -0
  193. data/src/toxi/geom/mesh/subdiv/CentroidSubdiv.java +37 -0
  194. data/src/toxi/geom/mesh/subdiv/DisplacementSubdivision.java +85 -0
  195. data/src/toxi/geom/mesh/subdiv/DualDisplacementSubdivision.java +94 -0
  196. data/src/toxi/geom/mesh/subdiv/DualSubdivision.java +49 -0
  197. data/src/toxi/geom/mesh/subdiv/EdgeLengthComparator.java +50 -0
  198. data/src/toxi/geom/mesh/subdiv/FaceCountComparator.java +51 -0
  199. data/src/toxi/geom/mesh/subdiv/MidpointDisplacementSubdivision.java +80 -0
  200. data/src/toxi/geom/mesh/subdiv/MidpointSubdiv.java +42 -0
  201. data/src/toxi/geom/mesh/subdiv/MidpointSubdivision.java +48 -0
  202. data/src/toxi/geom/mesh/subdiv/NewSubdivStrategy.java +23 -0
  203. data/src/toxi/geom/mesh/subdiv/NormalDisplacementSubdivision.java +74 -0
  204. data/src/toxi/geom/mesh/subdiv/SubdivisionStrategy.java +83 -0
  205. data/src/toxi/geom/mesh/subdiv/TriSubdivision.java +51 -0
  206. data/src/toxi/geom/mesh2d/DelaunayTriangle.java +222 -0
  207. data/src/toxi/geom/mesh2d/DelaunayTriangulation.java +327 -0
  208. data/src/toxi/geom/mesh2d/DelaunayVertex.java +560 -0
  209. data/src/toxi/geom/mesh2d/Voronoi.java +149 -0
  210. data/src/toxi/geom/nurbs/BasicNurbsCurve.java +210 -0
  211. data/src/toxi/geom/nurbs/BasicNurbsSurface.java +233 -0
  212. data/src/toxi/geom/nurbs/ControlNet.java +148 -0
  213. data/src/toxi/geom/nurbs/CurveCreator.java +112 -0
  214. data/src/toxi/geom/nurbs/CurveUtils.java +259 -0
  215. data/src/toxi/geom/nurbs/InterpolationException.java +65 -0
  216. data/src/toxi/geom/nurbs/KnotVector.java +333 -0
  217. data/src/toxi/geom/nurbs/NurbsCreator.java +815 -0
  218. data/src/toxi/geom/nurbs/NurbsCurve.java +120 -0
  219. data/src/toxi/geom/nurbs/NurbsMeshCreator.java +145 -0
  220. data/src/toxi/geom/nurbs/NurbsSurface.java +147 -0
  221. data/src/toxi/image/util/Filter8bit.java +331 -0
  222. data/src/toxi/image/util/TiledFrameExporter.java +162 -0
  223. data/src/toxi/math/BezierInterpolation.java +102 -0
  224. data/src/toxi/math/CircularInterpolation.java +88 -0
  225. data/src/toxi/math/CosineInterpolation.java +51 -0
  226. data/src/toxi/math/DecimatedInterpolation.java +77 -0
  227. data/src/toxi/math/ExponentialInterpolation.java +68 -0
  228. data/src/toxi/math/InterpolateStrategy.java +60 -0
  229. data/src/toxi/math/Interpolation2D.java +93 -0
  230. data/src/toxi/math/LinearInterpolation.java +46 -0
  231. data/src/toxi/math/MathUtils.java +990 -0
  232. data/src/toxi/math/NonLinearScaleMap.java +101 -0
  233. data/src/toxi/math/ScaleMap.java +183 -0
  234. data/src/toxi/math/SigmoidInterpolation.java +78 -0
  235. data/src/toxi/math/SinCosLUT.java +141 -0
  236. data/src/toxi/math/ThresholdInterpolation.java +58 -0
  237. data/src/toxi/math/ZoomLensInterpolation.java +126 -0
  238. data/src/toxi/math/conversion/UnitTranslator.java +161 -0
  239. data/src/toxi/math/noise/PerlinNoise.java +281 -0
  240. data/src/toxi/math/noise/SimplexNoise.java +542 -0
  241. data/src/toxi/math/waves/AMFMSineWave.java +143 -0
  242. data/src/toxi/math/waves/AbstractWave.java +248 -0
  243. data/src/toxi/math/waves/ConstantWave.java +48 -0
  244. data/src/toxi/math/waves/FMHarmonicSquareWave.java +155 -0
  245. data/src/toxi/math/waves/FMSawtoothWave.java +144 -0
  246. data/src/toxi/math/waves/FMSineWave.java +142 -0
  247. data/src/toxi/math/waves/FMSquareWave.java +143 -0
  248. data/src/toxi/math/waves/FMTriangleWave.java +126 -0
  249. data/src/toxi/math/waves/SineWave.java +81 -0
  250. data/src/toxi/math/waves/Wave2D.java +68 -0
  251. data/src/toxi/math/waves/WaveState.java +69 -0
  252. data/src/toxi/music/scale/AbstractScale.java +117 -0
  253. data/src/toxi/music/scale/GenericScale.java +66 -0
  254. data/src/toxi/music/scale/MajorScale.java +41 -0
  255. data/src/toxi/newmesh/AttributedEdge.java +106 -0
  256. data/src/toxi/newmesh/AttributedFace.java +63 -0
  257. data/src/toxi/newmesh/IndexedTriangleMesh.java +809 -0
  258. data/src/toxi/newmesh/MeshAttributeCompiler.java +45 -0
  259. data/src/toxi/newmesh/MeshFaceNormalCompiler.java +52 -0
  260. data/src/toxi/newmesh/MeshUVCompiler.java +52 -0
  261. data/src/toxi/newmesh/MeshVertexColorCompiler.java +49 -0
  262. data/src/toxi/newmesh/MeshVertexCompiler.java +54 -0
  263. data/src/toxi/newmesh/MeshVertexNormalCompiler.java +55 -0
  264. data/src/toxi/newmesh/SpatialIndex.java +78 -0
  265. data/src/toxi/physics2d/ParticlePath2D.java +100 -0
  266. data/src/toxi/physics2d/ParticleString2D.java +184 -0
  267. data/src/toxi/physics2d/PullBackSpring2D.java +51 -0
  268. data/src/toxi/physics2d/VerletConstrainedSpring2D.java +89 -0
  269. data/src/toxi/physics2d/VerletMinDistanceSpring2D.java +57 -0
  270. data/src/toxi/physics2d/VerletParticle2D.java +457 -0
  271. data/src/toxi/physics2d/VerletPhysics2D.java +448 -0
  272. data/src/toxi/physics2d/VerletSpring2D.java +181 -0
  273. data/src/toxi/physics2d/behaviors/AttractionBehavior2D.java +212 -0
  274. data/src/toxi/physics2d/behaviors/ConstantForceBehavior2D.java +112 -0
  275. data/src/toxi/physics2d/behaviors/GravityBehavior2D.java +61 -0
  276. data/src/toxi/physics2d/behaviors/ParticleBehavior2D.java +66 -0
  277. data/src/toxi/physics2d/constraints/AngularConstraint.java +83 -0
  278. data/src/toxi/physics2d/constraints/AxisConstraint.java +71 -0
  279. data/src/toxi/physics2d/constraints/CircularConstraint.java +69 -0
  280. data/src/toxi/physics2d/constraints/MaxConstraint.java +66 -0
  281. data/src/toxi/physics2d/constraints/MinConstraint.java +66 -0
  282. data/src/toxi/physics2d/constraints/ParticleConstraint2D.java +47 -0
  283. data/src/toxi/physics2d/constraints/PolygonConstraint.java +93 -0
  284. data/src/toxi/physics2d/constraints/RectConstraint.java +114 -0
  285. data/src/toxi/physics3d/ParticlePath3D.java +100 -0
  286. data/src/toxi/physics3d/ParticleString3D.java +184 -0
  287. data/src/toxi/physics3d/PullBackSpring3D.java +50 -0
  288. data/src/toxi/physics3d/VerletConstrainedSpring3D.java +88 -0
  289. data/src/toxi/physics3d/VerletMinDistanceSpring3D.java +56 -0
  290. data/src/toxi/physics3d/VerletParticle3D.java +385 -0
  291. data/src/toxi/physics3d/VerletPhysics3D.java +417 -0
  292. data/src/toxi/physics3d/VerletSpring3D.java +180 -0
  293. data/src/toxi/physics3d/behaviors/AttractionBehavior3D.java +182 -0
  294. data/src/toxi/physics3d/behaviors/ConstantForceBehavior3D.java +92 -0
  295. data/src/toxi/physics3d/behaviors/GravityBehavior3D.java +61 -0
  296. data/src/toxi/physics3d/behaviors/ParticleBehavior3D.java +52 -0
  297. data/src/toxi/physics3d/constraints/AxisConstraint.java +68 -0
  298. data/src/toxi/physics3d/constraints/BoxConstraint.java +121 -0
  299. data/src/toxi/physics3d/constraints/CylinderConstraint.java +87 -0
  300. data/src/toxi/physics3d/constraints/MaxConstraint.java +65 -0
  301. data/src/toxi/physics3d/constraints/MinConstraint.java +65 -0
  302. data/src/toxi/physics3d/constraints/ParticleConstraint3D.java +49 -0
  303. data/src/toxi/physics3d/constraints/PlaneConstraint.java +78 -0
  304. data/src/toxi/physics3d/constraints/SoftBoxConstraint.java +87 -0
  305. data/src/toxi/physics3d/constraints/SphereConstraint.java +108 -0
  306. data/src/toxi/processing/ArrowModifier.java +116 -0
  307. data/src/toxi/processing/DashedLineModifier.java +48 -0
  308. data/src/toxi/processing/DeltaOrientationMapper.java +57 -0
  309. data/src/toxi/processing/Line2DRenderModifier.java +18 -0
  310. data/src/toxi/processing/MeshToVBO.java +94 -0
  311. data/src/toxi/processing/NormalMapper.java +18 -0
  312. data/src/toxi/processing/POVInterface.java +121 -0
  313. data/src/toxi/processing/POVMesh.java +219 -0
  314. data/src/toxi/processing/POVWriter.java +460 -0
  315. data/src/toxi/processing/RCOpaque.java +77 -0
  316. data/src/toxi/processing/RCTransp.java +78 -0
  317. data/src/toxi/processing/TextureBuilder.java +232 -0
  318. data/src/toxi/processing/Textures.java +110 -0
  319. data/src/toxi/processing/ToxiclibsSupport.java +1239 -0
  320. data/src/toxi/processing/Tracing.java +25 -0
  321. data/src/toxi/processing/XYZNormalMapper.java +30 -0
  322. data/src/toxi/sim/automata/CAMatrix.java +297 -0
  323. data/src/toxi/sim/automata/CARule.java +76 -0
  324. data/src/toxi/sim/automata/CARule2D.java +354 -0
  325. data/src/toxi/sim/automata/CAWolfram1D.java +309 -0
  326. data/src/toxi/sim/automata/EvolvableMatrix.java +61 -0
  327. data/src/toxi/sim/automata/MatrixEvolver.java +42 -0
  328. data/src/toxi/sim/dla/BottomUpOrder.java +76 -0
  329. data/src/toxi/sim/dla/DLA.java +497 -0
  330. data/src/toxi/sim/dla/DLAConfiguration.java +364 -0
  331. data/src/toxi/sim/dla/DLAEventAdapter.java +64 -0
  332. data/src/toxi/sim/dla/DLAEventListener.java +57 -0
  333. data/src/toxi/sim/dla/DLAGuideLines.java +219 -0
  334. data/src/toxi/sim/dla/DLAParticle.java +102 -0
  335. data/src/toxi/sim/dla/DLASegment.java +88 -0
  336. data/src/toxi/sim/dla/PipelineOrder.java +50 -0
  337. data/src/toxi/sim/dla/RadialDistanceOrder.java +92 -0
  338. data/src/toxi/sim/erosion/ErosionFunction.java +122 -0
  339. data/src/toxi/sim/erosion/TalusAngleErosion.java +145 -0
  340. data/src/toxi/sim/erosion/ThermalErosion.java +75 -0
  341. data/src/toxi/sim/fluids/FluidSolver2D.java +762 -0
  342. data/src/toxi/sim/fluids/FluidSolver3D.java +326 -0
  343. data/src/toxi/sim/grayscott/GrayScott.java +469 -0
  344. data/src/toxi/util/DateUtils.java +141 -0
  345. data/src/toxi/util/FileSequenceDescriptor.java +181 -0
  346. data/src/toxi/util/FileUtils.java +467 -0
  347. data/src/toxi/util/datatypes/ArraySet.java +128 -0
  348. data/src/toxi/util/datatypes/ArrayUtil.java +404 -0
  349. data/src/toxi/util/datatypes/BiasedDoubleRange.java +141 -0
  350. data/src/toxi/util/datatypes/BiasedFloatRange.java +141 -0
  351. data/src/toxi/util/datatypes/BiasedIntegerRange.java +141 -0
  352. data/src/toxi/util/datatypes/DoubleRange.java +251 -0
  353. data/src/toxi/util/datatypes/FloatRange.java +251 -0
  354. data/src/toxi/util/datatypes/GenericSet.java +215 -0
  355. data/src/toxi/util/datatypes/IntegerRange.java +247 -0
  356. data/src/toxi/util/datatypes/IntegerSet.java +149 -0
  357. data/src/toxi/util/datatypes/ItemIndex.java +72 -0
  358. data/src/toxi/util/datatypes/SingletonRegistry.java +91 -0
  359. data/src/toxi/util/datatypes/TypedProperties.java +291 -0
  360. data/src/toxi/util/datatypes/UndirectedGraph.java +134 -0
  361. data/src/toxi/util/datatypes/UniqueItemIndex.java +223 -0
  362. data/src/toxi/util/datatypes/WeightedRandomEntry.java +76 -0
  363. data/src/toxi/util/datatypes/WeightedRandomSet.java +125 -0
  364. data/src/toxi/util/events/EventDispatcher.java +86 -0
  365. data/src/toxi/volume/AdditiveBrush.java +19 -0
  366. data/src/toxi/volume/ArrayIsoSurface.java +297 -0
  367. data/src/toxi/volume/BoxBrush.java +100 -0
  368. data/src/toxi/volume/BrushMode.java +16 -0
  369. data/src/toxi/volume/HashIsoSurface.java +354 -0
  370. data/src/toxi/volume/IsoSurface.java +59 -0
  371. data/src/toxi/volume/MarchingCubesIndex.java +312 -0
  372. data/src/toxi/volume/MeshLatticeBuilder.java +358 -0
  373. data/src/toxi/volume/MeshVoxelizer.java +216 -0
  374. data/src/toxi/volume/MultiplyBrush.java +20 -0
  375. data/src/toxi/volume/PeakBrush.java +21 -0
  376. data/src/toxi/volume/ReplaceBrush.java +19 -0
  377. data/src/toxi/volume/RoundBrush.java +113 -0
  378. data/src/toxi/volume/VolumetricBrush.java +160 -0
  379. data/src/toxi/volume/VolumetricHashMap.java +179 -0
  380. data/src/toxi/volume/VolumetricSpace.java +195 -0
  381. data/src/toxi/volume/VolumetricSpaceArray.java +214 -0
  382. data/toxiclibs.gemspec +34 -0
  383. metadata +424 -27
@@ -0,0 +1,430 @@
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;
29
+
30
+ import java.util.ArrayList;
31
+ import java.util.Collection;
32
+ import java.util.Iterator;
33
+ import java.util.List;
34
+
35
+ import javax.xml.bind.annotation.XmlElement;
36
+
37
+ import toxi.geom.Line2D.LineIntersection;
38
+ import toxi.geom.Line2D.LineIntersection.Type;
39
+ import toxi.math.MathUtils;
40
+
41
+ /**
42
+ *
43
+ * @author tux
44
+ */
45
+ public class LineStrip2D implements Iterable<Vec2D> {
46
+
47
+ /**
48
+ *
49
+ */
50
+ @XmlElement(name = "v")
51
+ protected List<Vec2D> vertices = new ArrayList<>();
52
+
53
+ /**
54
+ *
55
+ */
56
+ protected float[] arcLenIndex;
57
+
58
+ /**
59
+ *
60
+ */
61
+ public LineStrip2D() {
62
+ }
63
+
64
+ /**
65
+ *
66
+ * @param vertices
67
+ */
68
+ public LineStrip2D(Collection<? extends Vec2D> vertices) {
69
+ this.vertices = new ArrayList<>(vertices);
70
+ }
71
+
72
+ /**
73
+ *
74
+ * @param x
75
+ * @param y
76
+ * @return
77
+ */
78
+ public LineStrip2D add(float x, float y) {
79
+ vertices.add(new Vec2D(x, y));
80
+ return this;
81
+ }
82
+
83
+ /**
84
+ *
85
+ * @param p
86
+ * @return
87
+ */
88
+ public LineStrip2D add(ReadonlyVec2D p) {
89
+ vertices.add(p.copy());
90
+ return this;
91
+ }
92
+
93
+ /**
94
+ *
95
+ * @param p
96
+ * @return
97
+ */
98
+ public LineStrip2D add(Vec2D p) {
99
+ vertices.add(p);
100
+ return this;
101
+ }
102
+
103
+ /**
104
+ * Returns the vertex at the given index. This function follows Python
105
+ * convention, in that if the index is negative, it is considered relative
106
+ * to the list end. Therefore the vertex at index -1 is the last vertex in
107
+ * the list.
108
+ *
109
+ * @param i
110
+ * index
111
+ * @return vertex
112
+ */
113
+ public Vec2D get(int i) {
114
+ if (i < 0) {
115
+ i += vertices.size();
116
+ }
117
+ return vertices.get(i);
118
+ }
119
+
120
+ /**
121
+ *
122
+ * @return
123
+ */
124
+ public Circle getBoundingCircle() {
125
+ return Circle.newBoundingCircle(vertices);
126
+ }
127
+
128
+ /**
129
+ *
130
+ * @return
131
+ */
132
+ public Rect getBounds() {
133
+ return Rect.getBoundingRect(vertices);
134
+ }
135
+
136
+ /**
137
+ *
138
+ * @return
139
+ */
140
+ public Vec2D getCentroid() {
141
+ int num = vertices.size();
142
+ if (num > 0) {
143
+ Vec2D centroid = new Vec2D();
144
+ vertices.stream().forEach((v) -> {
145
+ centroid.addSelf(v);
146
+ });
147
+ return centroid.scaleSelf(1f / num);
148
+ }
149
+ return null;
150
+ }
151
+
152
+ /**
153
+ * Computes a list of points along the spline which are uniformly separated
154
+ * by the given step distance.
155
+ *
156
+ * @param step
157
+ * @return point list
158
+ */
159
+ public List<Vec2D> getDecimatedVertices(float step) {
160
+ return getDecimatedVertices(step, true);
161
+ }
162
+
163
+ /**
164
+ * Computes a list of points along the spline which are close to uniformly
165
+ * separated by the given step distance. The uniform distribution is only an
166
+ * approximation and is based on the estimated arc length of the polyline.
167
+ * The distance between returned points might vary in places, especially if
168
+ * there're sharp angles between line segments.
169
+ *
170
+ * @param step
171
+ * @param doAddFinalVertex
172
+ * true, if the last vertex computed should be added regardless
173
+ * of its distance.
174
+ * @return point list
175
+ */
176
+ public List<Vec2D> getDecimatedVertices(float step, boolean doAddFinalVertex) {
177
+ ArrayList<Vec2D> uniform = new ArrayList<>();
178
+ if (vertices.size() < 3) {
179
+ if (vertices.size() == 2) {
180
+ new Line2D(vertices.get(0), vertices.get(1)).splitIntoSegments(
181
+ uniform, step, true);
182
+ if (!doAddFinalVertex) {
183
+ uniform.remove(uniform.size() - 1);
184
+ }
185
+ } else {
186
+ return null;
187
+ }
188
+ }
189
+ float arcLen = getLength();
190
+ if (arcLen > 0) {
191
+ double delta = step / arcLen;
192
+ int currIdx = 0;
193
+ for (double t = 0; t < 1.0; t += delta) {
194
+ double currT = t * arcLen;
195
+ while (currT >= arcLenIndex[currIdx]) {
196
+ currIdx++;
197
+ }
198
+ ReadonlyVec2D p = vertices.get(currIdx - 1);
199
+ ReadonlyVec2D q = vertices.get(currIdx);
200
+ float frac = (float) ((currT - arcLenIndex[currIdx - 1]) / (arcLenIndex[currIdx] - arcLenIndex[currIdx - 1]));
201
+ Vec2D i = p.interpolateTo(q, frac);
202
+ uniform.add(i);
203
+ }
204
+ if (doAddFinalVertex) {
205
+ uniform.add(vertices.get(vertices.size() - 1).copy());
206
+ }
207
+ }
208
+ return uniform;
209
+ }
210
+
211
+ /**
212
+ * Returns a list of {@link Line2D} segments representing the segments
213
+ * between the vertices of this strip.
214
+ *
215
+ * @return list of lines
216
+ */
217
+ public List<Line2D> getEdges() {
218
+ int num = vertices.size();
219
+ List<Line2D> edges = new ArrayList<>(num - 1);
220
+ for (int i = 1; i < num; i++) {
221
+ edges.add(new Line2D(vertices.get(i - 1), vertices.get(i)));
222
+ }
223
+ return edges;
224
+ }
225
+
226
+ /**
227
+ *
228
+ * @return
229
+ */
230
+ public float getLength() {
231
+ if (arcLenIndex == null
232
+ || (arcLenIndex != null && arcLenIndex.length != vertices
233
+ .size())) {
234
+ arcLenIndex = new float[vertices.size()];
235
+ }
236
+ float arcLen = 0;
237
+ for (int i = 1; i < arcLenIndex.length; i++) {
238
+ ReadonlyVec2D p = vertices.get(i - 1);
239
+ ReadonlyVec2D q = vertices.get(i);
240
+ arcLen += p.distanceTo(q);
241
+ arcLenIndex[i] = arcLen;
242
+ }
243
+ return arcLen;
244
+ }
245
+
246
+ /**
247
+ * Computes point at position t, where t is the normalized position along
248
+ * the strip. If t&lt;0 then the first vertex of the strip is returned. If
249
+ * t&gt;=1.0 the last vertex is returned. If the strip contains less than 2
250
+ * vertices, this method returns null.
251
+ *
252
+ * @param t
253
+ * @return
254
+ */
255
+ public Vec2D getPointAt(float t) {
256
+ int num = vertices.size();
257
+ if (num > 1) {
258
+ if (t <= 0.0) {
259
+ return vertices.get(0);
260
+ } else if (t >= 1.0) {
261
+ return vertices.get(num - 1);
262
+ }
263
+ float totalLength = this.getLength();
264
+ double offp = 0, offq = 0;
265
+ for (int i = 1; i < num; i++) {
266
+ Vec2D p = vertices.get(i - 1);
267
+ Vec2D q = vertices.get(i);
268
+ offq += q.distanceTo(p) / totalLength;
269
+ if (offp <= t && offq >= t) {
270
+ return p.interpolateTo(q, (float) MathUtils.mapInterval(t,
271
+ offp, offq, 0.0, 1.0));
272
+ }
273
+ offp = offq;
274
+ }
275
+ }
276
+ return null;
277
+ }
278
+
279
+ /**
280
+ *
281
+ * @return
282
+ */
283
+ public List<Line2D> getSegments() {
284
+ final int num = vertices.size();
285
+ List<Line2D> segments = new ArrayList<>(num - 1);
286
+ for (int i = 1; i < num; i++) {
287
+ segments.add(new Line2D(vertices.get(i - 1), vertices.get(i)));
288
+ }
289
+ return segments;
290
+ }
291
+
292
+ /**
293
+ * @return the vertices
294
+ */
295
+ public List<Vec2D> getVertices() {
296
+ return vertices;
297
+ }
298
+
299
+ /**
300
+ *
301
+ * @param line
302
+ * @return
303
+ */
304
+ public LineIntersection intersectLine(Line2D line) {
305
+ Line2D l = new Line2D(new Vec2D(), new Vec2D());
306
+ for (int i = 1, num = vertices.size(); i < num; i++) {
307
+ l.set(vertices.get(i - 1), vertices.get(i));
308
+ LineIntersection isec = l.intersectLine(line);
309
+ if (isec.getType() == Type.INTERSECTING
310
+ || isec.getType() == Type.COINCIDENT) {
311
+ return isec;
312
+ }
313
+ }
314
+ return null;
315
+ }
316
+
317
+ /**
318
+ *
319
+ * @return
320
+ */
321
+ @Override
322
+ public Iterator<Vec2D> iterator() {
323
+ return vertices.iterator();
324
+ }
325
+
326
+ /**
327
+ *
328
+ * @param theta
329
+ * @return
330
+ */
331
+ public LineStrip2D rotate(float theta) {
332
+ vertices.stream().forEach((v) -> {
333
+ v.rotate(theta);
334
+ });
335
+ return this;
336
+ }
337
+
338
+ /**
339
+ *
340
+ * @param scale
341
+ * @return
342
+ */
343
+ public LineStrip2D scale(float scale) {
344
+ return scale(scale, scale);
345
+ }
346
+
347
+ /**
348
+ *
349
+ * @param x
350
+ * @param y
351
+ * @return
352
+ */
353
+ public LineStrip2D scale(float x, float y) {
354
+ vertices.stream().forEach((v) -> {
355
+ v.scaleSelf(x, y);
356
+ });
357
+ return this;
358
+ }
359
+
360
+ /**
361
+ *
362
+ * @param scale
363
+ * @return
364
+ */
365
+ public LineStrip2D scale(ReadonlyVec2D scale) {
366
+ return scale(scale.x(), scale.y());
367
+ }
368
+
369
+ /**
370
+ *
371
+ * @param scale
372
+ * @return
373
+ */
374
+ public LineStrip2D scaleSize(float scale) {
375
+ return scaleSize(scale, scale);
376
+ }
377
+
378
+ /**
379
+ *
380
+ * @param x
381
+ * @param y
382
+ * @return
383
+ */
384
+ public LineStrip2D scaleSize(float x, float y) {
385
+ Vec2D centroid = getCentroid();
386
+ vertices.stream().forEach((v) -> {
387
+ v.subSelf(centroid).scaleSelf(x, y).addSelf(centroid);
388
+ });
389
+ return this;
390
+ }
391
+
392
+ /**
393
+ *
394
+ * @param scale
395
+ * @return
396
+ */
397
+ public LineStrip2D scaleSize(ReadonlyVec2D scale) {
398
+ return scaleSize(scale.x(), scale.y());
399
+ }
400
+
401
+ /**
402
+ * @param vertices
403
+ * the vertices to set
404
+ */
405
+ public void setVertices(List<Vec2D> vertices) {
406
+ this.vertices = vertices;
407
+ }
408
+
409
+ /**
410
+ *
411
+ * @param x
412
+ * @param y
413
+ * @return
414
+ */
415
+ public LineStrip2D translate(float x, float y) {
416
+ vertices.stream().forEach((v) -> {
417
+ v.addSelf(x, y);
418
+ });
419
+ return this;
420
+ }
421
+
422
+ /**
423
+ *
424
+ * @param offset
425
+ * @return
426
+ */
427
+ public LineStrip2D translate(ReadonlyVec2D offset) {
428
+ return translate(offset.x(), offset.y());
429
+ }
430
+ }
@@ -0,0 +1,230 @@
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;
29
+
30
+ import java.util.ArrayList;
31
+ import java.util.Collection;
32
+ import java.util.Iterator;
33
+ import java.util.List;
34
+
35
+ import javax.xml.bind.annotation.XmlElement;
36
+
37
+ /**
38
+ *
39
+ * @author tux
40
+ */
41
+ public class LineStrip3D implements Iterable<Vec3D> {
42
+
43
+ /**
44
+ *
45
+ */
46
+ @XmlElement(name = "v")
47
+ protected List<Vec3D> vertices = new ArrayList<>();
48
+
49
+ /**
50
+ *
51
+ */
52
+ protected float[] arcLenIndex;
53
+
54
+ /**
55
+ *
56
+ */
57
+ public LineStrip3D() {
58
+ }
59
+
60
+ /**
61
+ *
62
+ * @param vertices
63
+ */
64
+ public LineStrip3D(Collection<? extends Vec3D> vertices) {
65
+ this.vertices = new ArrayList<>(vertices);
66
+ }
67
+
68
+ /**
69
+ *
70
+ * @param x
71
+ * @param y
72
+ * @param z
73
+ * @return
74
+ */
75
+ public LineStrip3D add(float x, float y, float z) {
76
+ vertices.add(new Vec3D(x, y, z));
77
+ return this;
78
+ }
79
+
80
+ /**
81
+ *
82
+ * @param p
83
+ * @return
84
+ */
85
+ public LineStrip3D add(ReadonlyVec3D p) {
86
+ vertices.add(p.copy());
87
+ return this;
88
+ }
89
+
90
+ /**
91
+ *
92
+ * @param p
93
+ * @return
94
+ */
95
+ public LineStrip3D add(Vec3D p) {
96
+ vertices.add(p);
97
+ return this;
98
+ }
99
+
100
+ /**
101
+ * Returns the vertex at the given index. This function follows Python
102
+ * convention, in that if the index is negative, it is considered relative
103
+ * to the list end. Therefore the vertex at index -1 is the last vertex in
104
+ * the list.
105
+ *
106
+ * @param i
107
+ * index
108
+ * @return vertex
109
+ */
110
+ public Vec3D get(int i) {
111
+ if (i < 0) {
112
+ i += vertices.size();
113
+ }
114
+ return vertices.get(i);
115
+ }
116
+
117
+ /**
118
+ * Computes a list of points along the spline which are uniformly separated
119
+ * by the given step distance.
120
+ *
121
+ * @param step
122
+ * @return point list
123
+ */
124
+ public List<Vec3D> getDecimatedVertices(float step) {
125
+ return getDecimatedVertices(step, true);
126
+ }
127
+
128
+ /**
129
+ * Computes a list of points along the spline which are close to uniformly
130
+ * separated by the given step distance. The uniform distribution is only an
131
+ * approximation and is based on the estimated arc length of the polyline.
132
+ * The distance between returned points might vary in places, especially if
133
+ * there're sharp angles between line segments.
134
+ *
135
+ * @param step
136
+ * @param doAddFinalVertex
137
+ * true, if the last vertex computed should be added regardless
138
+ * of its distance.
139
+ * @return point list
140
+ */
141
+ public List<Vec3D> getDecimatedVertices(float step, boolean doAddFinalVertex) {
142
+ ArrayList<Vec3D> uniform = new ArrayList<>();
143
+ if (vertices.size() < 3) {
144
+ if (vertices.size() == 2) {
145
+ new Line3D(vertices.get(0), vertices.get(1)).splitIntoSegments(
146
+ uniform, step, true);
147
+ if (!doAddFinalVertex) {
148
+ uniform.remove(uniform.size() - 1);
149
+ }
150
+ } else {
151
+ return null;
152
+ }
153
+ }
154
+ float arcLen = getEstimatedArcLength();
155
+ double delta = (double) step / arcLen;
156
+ int currIdx = 0;
157
+ for (double t = 0; t < 1.0; t += delta) {
158
+ double currT = t * arcLen;
159
+ while (currT >= arcLenIndex[currIdx]) {
160
+ currIdx++;
161
+ }
162
+ ReadonlyVec3D p = vertices.get(currIdx - 1);
163
+ ReadonlyVec3D q = vertices.get(currIdx);
164
+ float frac = (float) ((currT - arcLenIndex[currIdx - 1]) / (arcLenIndex[currIdx] - arcLenIndex[currIdx - 1]));
165
+ Vec3D i = p.interpolateTo(q, frac);
166
+ uniform.add(i);
167
+ }
168
+ if (doAddFinalVertex) {
169
+ uniform.add(vertices.get(vertices.size() - 1).copy());
170
+ }
171
+ return uniform;
172
+ }
173
+
174
+ /**
175
+ *
176
+ * @return
177
+ */
178
+ public float getEstimatedArcLength() {
179
+ if (arcLenIndex == null
180
+ || (arcLenIndex != null && arcLenIndex.length != vertices
181
+ .size())) {
182
+ arcLenIndex = new float[vertices.size()];
183
+ }
184
+ float arcLen = 0;
185
+ for (int i = 1; i < arcLenIndex.length; i++) {
186
+ ReadonlyVec3D p = vertices.get(i - 1);
187
+ ReadonlyVec3D q = vertices.get(i);
188
+ arcLen += p.distanceTo(q);
189
+ arcLenIndex[i] = arcLen;
190
+ }
191
+ return arcLen;
192
+ }
193
+
194
+ /**
195
+ *
196
+ * @return
197
+ */
198
+ public List<Line3D> getSegments() {
199
+ final int num = vertices.size();
200
+ List<Line3D> segments = new ArrayList<>(num - 1);
201
+ for (int i = 1; i < num; i++) {
202
+ segments.add(new Line3D(vertices.get(i - 1), vertices.get(i)));
203
+ }
204
+ return segments;
205
+ }
206
+
207
+ /**
208
+ * @return the vertices
209
+ */
210
+ public List<Vec3D> getVertices() {
211
+ return vertices;
212
+ }
213
+
214
+ /**
215
+ *
216
+ * @return
217
+ */
218
+ @Override
219
+ public Iterator<Vec3D> iterator() {
220
+ return vertices.iterator();
221
+ }
222
+
223
+ /**
224
+ * @param vertices
225
+ * the vertices to set
226
+ */
227
+ public void setVertices(List<Vec3D> vertices) {
228
+ this.vertices = vertices;
229
+ }
230
+ }