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,18 @@
1
+ package toxi.processing;
2
+
3
+ import toxi.color.ReadonlyTColor;
4
+ import toxi.geom.Vec3D;
5
+
6
+ /**
7
+ *
8
+ * @author tux
9
+ */
10
+ public interface NormalMapper {
11
+
12
+ /**
13
+ *
14
+ * @param normal
15
+ * @return
16
+ */
17
+ public ReadonlyTColor getRGBForNormal(Vec3D normal);
18
+ }
@@ -0,0 +1,121 @@
1
+ /*
2
+ * This library adds PovRAY export facility to toxiclibscore
3
+ * Copyright (c) 2015 Martin Prout
4
+ *
5
+ * This library is free software; you can redistribute it and/or modify it under
6
+ * the terms of the GNU Lesser General Public License as published by the Free
7
+ * Software Foundation; either version 2.1 of the License, or (at your option)
8
+ * any later version.
9
+ *
10
+ * http://creativecommons.org/licenses/LGPL/2.1/
11
+ *
12
+ * This library is distributed in the hope that it will be useful, but WITHOUT
13
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
15
+ * details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public License
18
+ * along with this library; if not, write to the Free Software Foundation, Inc.,
19
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20
+ */
21
+
22
+ package toxi.processing;
23
+
24
+ import toxi.geom.Vec3D;
25
+
26
+ /**
27
+ *
28
+ * @author Martin Prout
29
+ */
30
+ public interface POVInterface {
31
+
32
+ /**
33
+ * Output start of face_indices
34
+ *
35
+ * @param count
36
+ */
37
+ void beginIndices(int count);
38
+
39
+ /**
40
+ * Begin the mesh2 output as a PovRAY declaration
41
+ *
42
+ * @param name
43
+ */
44
+ void beginMesh2(String name);
45
+
46
+ /**
47
+ * Output start of normal_vectors
48
+ *
49
+ * @param count
50
+ */
51
+ void beginNormals(int count);
52
+
53
+ /**
54
+ * close the mesh declaration
55
+ */
56
+ void endSave();
57
+
58
+ /**
59
+ * End the current section ie vertex_vector, normal_vector or face_indices
60
+ */
61
+ void endSection();
62
+
63
+ /**
64
+ * Write face indices as as vector
65
+ *
66
+ * @param a
67
+ * @param b
68
+ * @param c
69
+ */
70
+ void face(int a, int b, int c);
71
+
72
+ /**
73
+ * Track the number of normals written to file
74
+ *
75
+ * @return current normal offset
76
+ */
77
+ int getCurrNormalOffset();
78
+
79
+ /**
80
+ * Track the number of vertices written to file
81
+ *
82
+ * @return vertex offset
83
+ */
84
+ int getCurrVertexOffset();
85
+
86
+ /**
87
+ * Required to keep in sync with current option
88
+ *
89
+ * @return option Textures
90
+ */
91
+ Textures getTexture();
92
+
93
+ /**
94
+ * Write normal as PovRAY vector
95
+ *
96
+ * @param n
97
+ */
98
+ void normal(Vec3D n);
99
+
100
+ /**
101
+ * Required to keep in sync with current option
102
+ *
103
+ * @param opt
104
+ */
105
+ void setTexture(Textures opt);
106
+
107
+ /**
108
+ * Used to output total count vertex_vector, normal_vector & face_indices
109
+ *
110
+ * @param count
111
+ */
112
+ void total(int count);
113
+
114
+ /**
115
+ * Write vertex as PovRAY vector
116
+ *
117
+ * @param v
118
+ */
119
+ void vertex(Vec3D v);
120
+
121
+ }
@@ -0,0 +1,219 @@
1
+ /*
2
+ * This library adds PovRAY export facility to toxiclibscore
3
+ * Copyright (c) 2015 Martin Prout
4
+ *
5
+ * This library is free software; you can redistribute it and/or modify it under
6
+ * the terms of the GNU Lesser General Public License as published by the Free
7
+ * Software Foundation; either version 2.1 of the License, or (at your option)
8
+ * any later version.
9
+ *
10
+ * http://creativecommons.org/licenses/LGPL/2.1/
11
+ *
12
+ * This library is distributed in the hope that it will be useful, but WITHOUT
13
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
15
+ * details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public License
18
+ * along with this library; if not, write to the Free Software Foundation, Inc.,
19
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20
+ */
21
+ package toxi.processing;
22
+
23
+ import java.io.File;
24
+ import processing.core.PApplet;
25
+ import toxi.geom.AABB;
26
+ import toxi.geom.Vec3D;
27
+
28
+ /**
29
+ * This class provides access to underlying TriangleMesh parameters to allow
30
+ * export in PovRAY mesh2 format (with or without normals)
31
+ *
32
+ * @author Martin Prout
33
+ */
34
+ public class POVMesh {
35
+
36
+ private POVWriter pov;
37
+ private Textures opt;
38
+ private final PApplet parent;
39
+ /**
40
+ *
41
+ */
42
+ static String VERSION = "0.58";
43
+
44
+ /**
45
+ * Default constructor this mesh no texture
46
+ *
47
+ * @param app
48
+ */
49
+ public POVMesh(PApplet app) {
50
+ parent = app;
51
+ parent.registerMethod("dispose", this);
52
+ }
53
+
54
+ /**
55
+ * Allows the option to change texture option per mesh
56
+ *
57
+ * @param opt
58
+ */
59
+ public void setTexture(Textures opt) {
60
+ this.opt = opt;
61
+ }
62
+
63
+ /**
64
+ * Saves the mesh as PovRAY mesh2 format by appending it to the given mesh
65
+ * {@link POVWriter} instance. Saves normals.
66
+ *
67
+ * @param meshArray
68
+ */
69
+ public void saveAsPOV(toxi.geom.mesh.TriangleMesh[] meshArray) {
70
+ saveAsMesh(meshArray, true);
71
+ }
72
+
73
+ /**
74
+ * Saves the mesh as PovRAY mesh2 format by appending it to the given mesh
75
+ * {@link POVWriter} instance. Saves normals.
76
+ *
77
+ * @param mesh
78
+ */
79
+ public void saveAsPOV(toxi.geom.mesh.TriangleMesh mesh) {
80
+ saveAsPOV(mesh, true);
81
+ }
82
+
83
+ /**
84
+ * Saves the mesh as PovRAY mesh2 format to the given {@link PrintWriter}.
85
+ * Without normals (when saveNormal is false), checks if option has changed,
86
+ * changes option if required (implies serial use of saveAsPov)
87
+ *
88
+ * @param mesh
89
+ * @param saveNormals boolean
90
+ */
91
+ public void saveAsPOV(toxi.geom.mesh.TriangleMesh mesh, boolean saveNormals) {
92
+ AABB boundingBox = mesh.getBoundingBox();
93
+ Vec3D min = boundingBox.getMin();
94
+ Vec3D max = boundingBox.getMax();
95
+ pov.boundingBox(min, max);
96
+ if (opt != pov.getTexture()) {
97
+ pov.setTexture(opt);
98
+ }
99
+ pov.beginMesh2(mesh.name);
100
+ int vOffset = pov.getCurrVertexOffset();
101
+ // vertices
102
+ pov.total(mesh.vertices.size());
103
+ mesh.vertices.values().stream().forEach((v) -> {
104
+ pov.vertex(v);
105
+ });
106
+ pov.endSection();
107
+ // faces
108
+ if (saveNormals) {
109
+ // normals
110
+ pov.beginNormals(mesh.vertices.size());
111
+ mesh.vertices.values().stream().forEach((v) -> {
112
+ pov.normal(v.normal.getNormalized());
113
+ });
114
+ pov.endSection();
115
+ }
116
+ pov.beginIndices(mesh.faces.size());
117
+ mesh.faces.stream().forEach((f) -> {
118
+ pov.face(f.b.id + vOffset, f.a.id + vOffset, f.c.id + vOffset);
119
+ });
120
+ pov.endSection();
121
+ pov.endSave();
122
+ }
123
+
124
+ /**
125
+ * Saves the mesh as PovRAY mesh2 format to the given {@link PrintWriter}.
126
+ * Without normals (when saveNormal is false) Check on option is included
127
+ * for completeness
128
+ *
129
+ * @param meshArray
130
+ * @param saveNormals boolean
131
+ */
132
+ public void saveAsMesh(toxi.geom.mesh.TriangleMesh[] meshArray, boolean saveNormals) {
133
+ AABB boundingBox;
134
+ Vec3D min;
135
+ Vec3D max;
136
+
137
+ if (opt != pov.getTexture()) {
138
+ pov.setTexture(opt);
139
+ }
140
+ for (toxi.geom.mesh.TriangleMesh mesh : meshArray) {
141
+ pov.beginMesh2(mesh.name);
142
+ boundingBox = mesh.getBoundingBox();
143
+ min = boundingBox.getMin();
144
+ max = boundingBox.getMax();
145
+ pov.boundingBox(min, max);
146
+ int vOffset = pov.getCurrVertexOffset();
147
+ // vertices
148
+ pov.total(mesh.vertices.size());
149
+ mesh.vertices.values().stream().forEach((v) -> {
150
+ pov.vertex(v);
151
+ });
152
+ pov.endSection();
153
+ // faces
154
+ if (saveNormals) {
155
+ // normals
156
+ pov.beginNormals(mesh.vertices.size());
157
+ mesh.vertices.values().stream().forEach((v) -> {
158
+ pov.normal(v.normal.getNormalized());
159
+ });
160
+ pov.endSection();
161
+ }
162
+ pov.beginIndices(mesh.faces.size());
163
+ mesh.faces.stream().forEach((f) -> {
164
+ pov.face(f.b.id + vOffset, f.a.id + vOffset, f.c.id + vOffset);
165
+ });
166
+ pov.endSection();
167
+ pov.endSave();
168
+ }
169
+ }
170
+
171
+ /**
172
+ * Start writing *.inc file
173
+ *
174
+ * @param fileName main.inc File
175
+ */
176
+ public void beginSave(File fileName) {
177
+ opt = Textures.RAW;
178
+ this.pov = new POVWriter(fileName);
179
+ pov.beginForeground();
180
+ }
181
+
182
+ /**
183
+ * Finish writing *.inc file and close PrintWriter
184
+ */
185
+ public void endSave() {
186
+ pov.endForeground();
187
+ }
188
+
189
+ // /**
190
+ // *
191
+ // * @param e
192
+ // */
193
+ // public void keyEvent(KeyEvent e) {
194
+ // if (e.getAction() == KeyEvent.RELEASED) {
195
+ // switch (e.getKey()) {
196
+ // case 't':
197
+ // case 'T':
198
+ // status = Tracing.EXPORTING;
199
+ // System.out.println("tracing");
200
+ // break;
201
+ // }
202
+ // }
203
+ // }
204
+ /**
205
+ * Required by processing
206
+ */
207
+ public void dispose() {
208
+ endSave();
209
+ }
210
+
211
+ /**
212
+ * Required by processing
213
+ *
214
+ * @return version String
215
+ */
216
+ public String version() {
217
+ return VERSION;
218
+ }
219
+ }
@@ -0,0 +1,460 @@
1
+ /*
2
+ * This library adds PovRAY export facility to toxiclibscore
3
+ * Copyright (c) 2015 Martin Prout
4
+ *
5
+ * This library is free software; you can redistribute it and/or modify it under
6
+ * the terms of the GNU Lesser General Public License as published by the Free
7
+ * Software Foundation; either version 2.1 of the License, or (at your option)
8
+ * any later version.
9
+ *
10
+ * http://creativecommons.org/licenses/LGPL/2.1/
11
+ *
12
+ * This library is distributed in the hope that it will be useful, but WITHOUT
13
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
15
+ * details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public License
18
+ * along with this library; if not, write to the Free Software Foundation, Inc.,
19
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20
+ */
21
+ package toxi.processing;
22
+
23
+ import java.io.*;
24
+ import java.util.EnumSet;
25
+ import java.util.logging.Level;
26
+ import java.util.logging.Logger;
27
+ import toxi.geom.Vec3D;
28
+
29
+ /**
30
+ * Fairly bare bones PovRAY 3D format exporter. Purely handles the writing of
31
+ * data to the .inc file, as a mesh2 object. Logic heavily borrowed from toxis
32
+ * STL/obj writer, but adjusted for PovRAY and external use/
33
+ *
34
+ * @see POVMesh#saveAsPOV(TriangleMesh)
35
+ */
36
+ public class POVWriter implements POVInterface {
37
+
38
+ final String COMMA = ", ";
39
+ final String eol = System.getProperty("line.separator");
40
+ private float adjust = 0.0f; //we must only hava one adjustment
41
+ private boolean adjustIsSet = false;
42
+ /**
43
+ *
44
+ */
45
+ public final String VERSION = "0.60";
46
+ /**
47
+ *
48
+ */
49
+ protected PrintWriter povWriter;
50
+ /**
51
+ * Track the number of vertices written to file
52
+ */
53
+ protected int numVerticesWritten = 0;
54
+ /**
55
+ * Track the number of normals written to file
56
+ */
57
+ protected int numNormalsWritten = 0;
58
+ private volatile Textures opt;
59
+ private final EnumSet<Textures> declaredOpt;
60
+ private String spath;
61
+
62
+ /**
63
+ * Handles File input
64
+ *
65
+ * @param meshObj
66
+ */
67
+ // public POVWriter(PrintWriter pw) {
68
+ // this.opt = Textures.RAW;
69
+ // povWriter = pw;
70
+ // declaredOpt = EnumSet.of(Textures.RAW);
71
+ // handleBeginSave();
72
+ // }
73
+ public POVWriter(File meshObj) {
74
+ this.opt = Textures.RAW;
75
+ String path = meshObj.getAbsolutePath();
76
+ spath = path.replaceFirst(meshObj.getName(), "");
77
+ try {
78
+ this.povWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(meshObj), "UTF8")));
79
+ } catch (IOException ex) {
80
+ Logger.getLogger(POVWriter.class.getName()).log(Level.SEVERE, null, ex);
81
+ }
82
+ declaredOpt = EnumSet.of(Textures.RAW);
83
+ handleBeginSave();
84
+ }
85
+
86
+ /**
87
+ * Handles PrintWriter input
88
+ *
89
+ * @param pw
90
+ * @param opt
91
+ */
92
+ // public POVWriter(PrintWriter pw, Textures opt) {
93
+ // this.opt = opt;
94
+ // povWriter = pw;
95
+ // declaredOpt = EnumSet.of(opt);
96
+ // handleBeginSave();
97
+ // }
98
+ /**
99
+ * close the mesh declaration
100
+ */
101
+ @Override
102
+ public void endSave() {
103
+ declaredOpt.add(opt);
104
+ switch (opt) {
105
+ case GLASS:
106
+ povWriter.println(TextureBuilder.getRCTrans(9));
107
+ povWriter.println(TextureBuilder.FINISH5);
108
+ break;
109
+ case METAL:
110
+ povWriter.println(TextureBuilder.getRCOpaque(9));
111
+ povWriter.println(TextureBuilder.MFINISHE);
112
+ break;
113
+ case PHONG:
114
+ povWriter.println(TextureBuilder.getRCOpaque(9));
115
+ povWriter.println(TextureBuilder.PHONG);
116
+ break;
117
+ case RED:
118
+ povWriter.println(TextureBuilder.getRed());
119
+ povWriter.println(TextureBuilder.PHONG);
120
+ break;
121
+ case WHITE:
122
+ povWriter.println(TextureBuilder.getWhite());
123
+ povWriter.println(TextureBuilder.PHONG);
124
+ break;
125
+ case RANDOM:
126
+ povWriter.println(TextureBuilder.getRandRCTrans());
127
+ povWriter.println(TextureBuilder.FINISH5);
128
+ break;
129
+ case TWOTONE:
130
+ povWriter.println(TextureBuilder.getTwoTone());
131
+ povWriter.println(TextureBuilder.PHONG);
132
+ break;
133
+ case MIRROR:
134
+ povWriter.println(TextureBuilder.getBlack());
135
+ povWriter.println(TextureBuilder.MIRROR);
136
+ break;
137
+ case MARBLE:
138
+ povWriter.println(TextureBuilder.getMarble());
139
+ break;
140
+ case CHROME:
141
+ povWriter.println(TextureBuilder.getChrome());
142
+ break;
143
+ default:
144
+ break;
145
+ }
146
+ povWriter.println("}"); // end of mesh2
147
+ }
148
+
149
+ /**
150
+ * A side effect of this method is to set the value of the y adjust. This
151
+ * value is used to set the lowest value of y to be 0, and hence expect all
152
+ * other y values to be positive (to cope with the totally crap convention
153
+ * in processing where up is negative). Works best for a single mesh object
154
+ * in the sketch, or when lowest object in sketch is given first.
155
+ * @param min
156
+ * @param max
157
+ */
158
+ public void boundingBox(Vec3D min, Vec3D max) {
159
+ float lowest = (min.y * -1 < max.y * -1)? min.y : max.y;
160
+ if (!adjustIsSet) { // adjust must only be set once for a sketch
161
+ adjust = (Math.abs(0 - lowest) > 0.0001f)? lowest : adjust;
162
+ adjustIsSet = true;
163
+ }
164
+ StringBuilder pov = new StringBuilder(100);
165
+ pov.append("// bounding_box").append(buildVector(min));
166
+ pov.append(buildVector(max)).append(eol);
167
+ povWriter.print(pov.append(eol));
168
+ }
169
+
170
+ /**
171
+ * Write face indices as as vector
172
+ *
173
+ * @param a
174
+ * @param b
175
+ * @param c
176
+ */
177
+ @Override
178
+ public void face(int a, int b, int c) {
179
+ povWriter.println(buildVector(a, b, c));
180
+ }
181
+
182
+ /**
183
+ * Track the number of normals written to file
184
+ *
185
+ * @return current normal offset
186
+ */
187
+ @Override
188
+ public int getCurrNormalOffset() {
189
+ return numNormalsWritten;
190
+ }
191
+
192
+ /**
193
+ * Track the number of vertices written to file
194
+ *
195
+ * @return vertex offset
196
+ */
197
+ @Override
198
+ public int getCurrVertexOffset() {
199
+ return numVerticesWritten;
200
+ }
201
+
202
+ /**
203
+ * Helper function for writing declared textures to an *.inc file
204
+ *
205
+ * @param pw PrintWriter
206
+ * @param opt expected to be an EnumSet rather than an enum
207
+ */
208
+ protected final void declareTexture(PrintWriter pw, Textures opt) {
209
+ switch (opt) {
210
+ case GLASS:
211
+ case RANDOM:
212
+ pw.println(TextureBuilder.declareRCTrans());
213
+ pw.println(TextureBuilder.DFINISH5);
214
+ break;
215
+ case METAL:
216
+ pw.println(TextureBuilder.declareRCOpaque());
217
+ pw.println(TextureBuilder.DMFINISHE);
218
+ break;
219
+ case PHONG:
220
+ pw.println(TextureBuilder.declareRCOpaque());
221
+ pw.println(TextureBuilder.DPHONG);
222
+ break;
223
+ case MARBLE:
224
+ pw.println(TextureBuilder.declareMarble());
225
+ break;
226
+ case CHROME:
227
+ pw.println(TextureBuilder.DMFINISHE);
228
+ break;
229
+ case RED:
230
+ case TWOTONE:
231
+ case WHITE:
232
+ pw.println(TextureBuilder.DPHONG);
233
+ break;
234
+ default:
235
+ break;
236
+ }
237
+
238
+ }
239
+
240
+ /**
241
+ * Print a header, and initialise counts
242
+ */
243
+ protected final void handleBeginSave() {
244
+ povWriter.println("// generated by POVExport v" + VERSION);
245
+ // declareTexture();
246
+ }
247
+
248
+ /**
249
+ * Begin the mesh2 output as a PovRAY declaration
250
+ *
251
+ * @param name
252
+ */
253
+ @Override
254
+ public void beginMesh2(String name) {
255
+ numVerticesWritten = 0;
256
+ numNormalsWritten = 0;
257
+ StringBuilder pov = new StringBuilder(30);
258
+ pov.append("mesh2{");
259
+ pov.append(eol);
260
+ pov.append(String.format("/** %s */%s", name, eol));
261
+ pov.append("\tvertex_vectors {");
262
+ povWriter.println(pov);
263
+ }
264
+
265
+ /**
266
+ *
267
+ * @param v
268
+ */
269
+ public void beginBox(Vec3D v) {
270
+ StringBuilder pov = new StringBuilder("box{");
271
+ pov.append('<').append(v.x);
272
+ pov.append(COMMA).append(v.y);
273
+ pov.append(COMMA).append(v.z);
274
+ pov.append('>').append(COMMA);
275
+ povWriter.print(pov);
276
+ }
277
+
278
+ /**
279
+ *
280
+ * @param v
281
+ */
282
+ public void endBox(Vec3D v) {
283
+ StringBuilder pov = new StringBuilder();
284
+ pov.append('<').append(v.x);
285
+ pov.append(COMMA).append(v.y);
286
+ pov.append(COMMA).append(v.z);
287
+ pov.append('>').append("}");
288
+ povWriter.println(pov);
289
+ }
290
+
291
+ /**
292
+ * End the current section ie vertex_vector, normal_vector or face_indices
293
+ */
294
+ @Override
295
+ public void endSection() {
296
+ povWriter.println("\t}");
297
+ }
298
+
299
+ /**
300
+ * Output start of normal_vectors
301
+ *
302
+ * @param count
303
+ */
304
+ @Override
305
+ public void beginNormals(int count) {
306
+ povWriter.println("\tnormal_vectors{");
307
+ total(count);
308
+ }
309
+
310
+ /**
311
+ * Output start of face_indices
312
+ *
313
+ * @param count
314
+ */
315
+ @Override
316
+ public void beginIndices(int count) {
317
+ povWriter.println("\tface_indices{");
318
+ total(count);
319
+ }
320
+
321
+ /**
322
+ * Used to output total count vertex_vector, normal_vector & face_indices
323
+ *
324
+ * @param count
325
+ */
326
+ @Override
327
+ public void total(int count) {
328
+ povWriter.println(String.format("\t%d,", count));
329
+ }
330
+
331
+ /**
332
+ * Write normal as PovRAY vector
333
+ *
334
+ * @param n
335
+ */
336
+ @Override
337
+ public void normal(Vec3D n) {
338
+ povWriter.println(buildVector(n));
339
+ numNormalsWritten++;
340
+ }
341
+
342
+ /**
343
+ * Write vertex as PovRAY vector
344
+ *
345
+ * @param v
346
+ */
347
+ @Override
348
+ public void vertex(Vec3D v) {
349
+ povWriter.println(buildVector(v));
350
+ numVerticesWritten++;
351
+ }
352
+
353
+ /**
354
+ * This version was strictly for scale, translate and rotate
355
+ *
356
+ * @param a
357
+ * @param b
358
+ * @param c
359
+ * @return povray vector (floats)
360
+ */
361
+ // private StringBuilder buildVector(float a, float b, float c) {
362
+ // StringBuilder my_vector = new StringBuilder(120);
363
+ // my_vector.append('<');
364
+ // my_vector.append(a).append(COMMA);
365
+ // my_vector.append(b).append(COMMA);
366
+ // return my_vector.append(c).append('>');
367
+ // }
368
+
369
+ /**
370
+ * This version is strictly for face indices (possibly normals/uv)
371
+ *
372
+ * @param a
373
+ * @param b
374
+ * @param c
375
+ * @return povray vector (integers)
376
+ */
377
+ private StringBuilder buildVector(int a, int b, int c) {
378
+ StringBuilder my_vector = new StringBuilder(120);
379
+ my_vector.append('\t').append('<');
380
+ my_vector.append(a).append(COMMA);
381
+ my_vector.append(b).append(COMMA);
382
+ my_vector.append(c).append('>');
383
+ return my_vector.append(COMMA);
384
+ }
385
+
386
+ /**
387
+ * The Y and Z coordinates are multiplied by -1 to handle the conversion of
388
+ * processing coordinate system to PovRAY coordinate system. Further the y
389
+ * coordinate is adjusted to give non-negative values (but only if the object
390
+ * with lowest value is processed first)
391
+ * @param v
392
+ * @return povray vector
393
+ */
394
+ private StringBuilder buildVector(Vec3D v) {
395
+ StringBuilder my_vector = new StringBuilder(120);
396
+ my_vector.append('\t').append('<');
397
+ my_vector.append(v.x).append(COMMA);
398
+ my_vector.append(v.y * -1 + adjust).append(COMMA);
399
+ my_vector.append(v.z * -1).append('>');
400
+ return my_vector.append(COMMA);
401
+ }
402
+
403
+ /**
404
+ * Begin writing union of mesh objects
405
+ */
406
+ protected void beginForeground() {
407
+ povWriter.append("#declare mesh_objects = union {");
408
+ povWriter.append(eol);
409
+ }
410
+
411
+ /**
412
+ * Finish writing union of mesh objects Write declared texture to
413
+ * "my_texture.inc" file
414
+ */
415
+ protected void endForeground() {
416
+ povWriter.append("}");
417
+ povWriter.append(eol);
418
+
419
+ String outFile = spath + "my_texture.inc";
420
+ // if (declaredOpt.size() > 1) { // guard against only RAW
421
+ try {
422
+ PrintWriter pw;
423
+ pw = new PrintWriter(new File(outFile), "UTF8");
424
+ try {
425
+ pw.append(String.format("// %s%s", outFile, eol));
426
+ declaredOpt.stream().forEach((dopt) -> {
427
+ declareTexture(pw, dopt);
428
+ });
429
+ } finally {
430
+ pw.flush();
431
+ pw.close();
432
+ povWriter.flush();
433
+ povWriter.close();
434
+ }
435
+ } catch (IOException ex) {
436
+ Logger.getLogger(POVWriter.class.getName()).log(Level.SEVERE, null, ex);
437
+ }
438
+
439
+ }
440
+
441
+ /**
442
+ * Required to keep in sync with current option
443
+ *
444
+ * @param opt Textures
445
+ */
446
+ @Override
447
+ public void setTexture(Textures opt) {
448
+ this.opt = opt;
449
+ }
450
+
451
+ /**
452
+ * Required to keep in sync with current option
453
+ *
454
+ * @return option Textures
455
+ */
456
+ @Override
457
+ public Textures getTexture() {
458
+ return this.opt;
459
+ }
460
+ }