toxiclibs 0.5.0-java → 0.5.1-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5091cf92d2855207e7cdcb43bd060cfa6759ac67
4
- data.tar.gz: eea0cc723bd449da72205a93af8976dcecd22dfe
3
+ metadata.gz: d867709518cd92da4ee751ce618404e36aa58d23
4
+ data.tar.gz: bc13b0124cbcea23088e24f79246f5b955d4b16c
5
5
  SHA512:
6
- metadata.gz: 12585fbd3a328b644c3dc865e080d2ada3df6a9da9d92d3fd6552786c585fa065fb9167723c4edfe5961f7724ae96125d5dff003de068fc11b8635663344c96e
7
- data.tar.gz: 865ba9f6ba7db109675e2b0eaa30c0ca62bd4a7c4201df32e959e36aea04cdbdd760f30bc999081426386a7fc672f6b05db1d2b96fa2b3c6d263a2228325838b
6
+ metadata.gz: 006718bd1fd184723895bd17b5e2dbb088875c123b32e1365b763569b489224b69b97cf0644d7e62aa51cf2eb99f6c96c3eccad82dfc3d0fa7bd9bc3ad22f9ba
7
+ data.tar.gz: 23a90d6fa991b7295b971d5a8b07dec6e78bc6fcc3702b3f630a07b1b2dcafc2afe7c87f017efb7ddf4d95304265199d30b91e6323194e8bf93d05830d3e25de
@@ -1,4 +1,6 @@
1
- **v0.5.0** New version toxiclibs update to use jdk8 syntax, require jdk8 and probably therefore JRubyArt only new MeshToVBO class.
2
1
 
2
+ **v0.5.1** Mainly corrections.
3
+
4
+ **v0.5.0** New version toxiclibs update to use jdk8 syntax, require jdk8 and probably therefore JRubyArt only new MeshToVBO class.
3
5
 
4
6
  **v0.4.0** Last version compatible with both ruby-processing and JRubyArt.
data/README.md CHANGED
@@ -7,7 +7,7 @@ gem install toxiclibs
7
7
 
8
8
  ### NB: Use version 0.4 for ruby-processing
9
9
 
10
- Here I have created create a gem to use Karsten Schmidts (aka toxi, @postspectacular) toxiclibs jars in JRubyArt. To compile the gem follow the instructions for [JRubyArt][]. Most parts of toxiclibs API is exposed in the latest version, (but only a few examples are included) in principle it should be possible to make all available!!! For this demonstration I have used up to date source code for version 21, since [toxis final release][] may never materialise (he's probably got more interesting things to do). There are reported to be number of outstanding bugs with toxiclibs, if they affect you report it [here][] (or better fix them yourself and submit a pull request).
10
+ Here I have created create a gem to use Karsten Schmidts (aka toxi, @postspectacular) toxiclibs jars in JRubyArt. To compile the gem follow the instructions for [JRubyArt][]. Most parts of toxiclibs API is exposed in the latest version, (but only a few examples are included) in principle it should be possible to make all available!!! For this demonstration I have used up to date source code for version 21, since [toxis final release][] may never materialise (he's probably got more interesting things to do). There are reported to be number of outstanding bugs with toxiclibs, if they affect you report it [here][] (or better fix them yourself and submit a pull request). Version 0.5.0 features java code updated to use java lambda (jdk8) and was compiled against processing-3.0.1 core.jar. Added features are export Mesh to PShape and export Mesh to [povray mesh2](http://www.povray.org/documentation/3.7.0/r3_4.html#r3_4_5_2_4).
11
11
 
12
12
  ![grayscott image](http://4.bp.blogspot.com/-d4MiL4_0Njk/VFJMv6VUicI/AAAAAAAAEgY/fFAfrXDxNXM/s400/grayscott.png)
13
13
 
@@ -1,46 +1,59 @@
1
1
  require 'toxiclibs'
2
2
 
3
- attr_reader :gfx, :mesh0, :mesh1, :mesh2
3
+ attr_reader :gfx, :mesh0, :mesh1, :mesh2, :fshape
4
4
 
5
5
  def settings
6
6
  size(200, 200, P3D)
7
- smooth 4
7
+ smooth 8
8
8
  end
9
9
 
10
10
  def setup
11
11
  sketch_title('FTest')
12
- @gfx = Gfx::ToxiclibsSupport.new(self)
12
+ ArcBall.init(self)
13
+ @gfx = Gfx::MeshToVBO.new(self)
13
14
  # define a rounded cube using the SuperEllipsoid surface function
14
15
  vert = AABB.fromMinMax(TVec3D.new(-1.0, -3.5, -1.0), TVec3D.new(1.0, 3.5, 1.0))
15
16
  box = AABB.fromMinMax(TVec3D.new(1.0, -1.5, -1.0), TVec3D.new(3.0, -3.5, 1.0))
16
17
  box2 = AABB.fromMinMax(TVec3D.new(1.0, 2.0, -1.0), TVec3D.new(3.0, 0.0, 1.0))
17
18
  @mesh0 = box.to_mesh
18
19
  @mesh1 = vert.to_mesh
19
- @mesh2 = box2.to_mesh
20
+ @mesh2 = box2.to_mesh # build a composite mesh
20
21
  mesh0.add_mesh(mesh1)
21
22
  mesh0.add_mesh(mesh2)
22
23
  mesh0.compute_face_normals
23
- mesh0.compute_vertex_normals
24
- fileID = 'FTest'
25
- pm = Gfx::POVMesh.new(self)
26
- file = java.io.File.new(sketchPath(fileID + '.inc'))
27
- pm.begin_save(file)
28
- pm.set_texture(Gfx::Textures::CHROME)
29
- pm.saveAsPOV(mesh0.faceOutwards, false)
30
- # pm.set_texture(Textures::RED)
31
- # pm.saveAsPOV(mesh1, false)
32
- # pm.set_texture(Textures::WHITE)
33
- # pm.saveAsPOV(mesh2, false)
34
- pm.end_save
35
- # exit
24
+ fill(color('#c0c0c0')) # silver
25
+ specular(20, 20, 20)
26
+ ambient(100)
27
+ no_stroke
28
+ @fshape = gfx.mesh_to_shape(mesh0, false)
36
29
  end
37
30
 
38
31
  def draw
39
- background 50, 50, 200
40
- lights
41
- translate(width / 2, height / 2)
32
+ background 80, 80, 160
33
+ setup_lights
42
34
  scale(10)
43
- rotateY(20.radians)
44
- gfx.choose_stroke_fill(false, Toxi::TColor::WHITE, Toxi::TColor::RED)
45
- gfx.mesh(mesh0)
35
+ shape(fshape)
36
+ end
37
+
38
+ def setup_lights
39
+ lights
40
+ ambient_light(150, 150, 150)
41
+ directional_light(100, 100, 100, -1, 0, 0)
42
+ directional_light(100, 100, 100, 1, 0, -1)
46
43
  end
44
+
45
+
46
+ def key_pressed
47
+ case key
48
+ when 'p', 'P'
49
+ fileID = 'FTest'
50
+ pm = Gfx::POVMesh.new(self)
51
+ file = java.io.File.new(sketchPath(fileID + '.inc'))
52
+ pm.begin_save(file)
53
+ pm.set_texture(Gfx::Textures::CHROME)
54
+ pm.saveAsPOV(mesh0.faceOutwards, false)
55
+ pm.end_save
56
+ when 's', 'S'
57
+ save_frame('FTest.png')
58
+ end
59
+ end
@@ -0,0 +1,47 @@
1
+ require 'toxiclibs'
2
+
3
+ attr_reader :gfx, :vbo, :meshes
4
+ SCALE = 200
5
+ BOX_SIZE = TVec3D.new(5, 5, 50)
6
+
7
+ def settings
8
+ size(600, 600, P3D)
9
+ end
10
+
11
+ def setup
12
+ sketch_title('Mesh Align')
13
+ ArcBall.init(self)
14
+ @vbo = Gfx::MeshToVBO.new(self)
15
+ no_stroke
16
+ @meshes = create_shape(GROUP)
17
+ 600.times do |i|
18
+ # create a new direction vector for each box
19
+ dir = TVec3D.new(cos(i * TWO_PI / 75), sin(i * TWO_PI / 50), sin(i * TWO_PI / 25)).normalize
20
+ # create a position on a sphere, using the direction vector
21
+ pos = dir.scale(SCALE)
22
+ # create a box mesh at the origin
23
+ b = AABB.new(TVec3D.new, BOX_SIZE).to_mesh
24
+ # align the Z axis of the box with the direction vector
25
+ b.point_towards(dir)
26
+ # move the box to the correct position
27
+ b.transform(Toxi::Matrix4x4.new.translate_self(pos.x, pos.y, pos.z))
28
+ b.compute_face_normals
29
+ temp = vbo.mesh_to_shape(b, false)
30
+ temp.disable_style
31
+ temp.set_fill(color(rand(255), rand(255), rand(255)))
32
+ meshes.add_child(temp)
33
+ end
34
+ end
35
+
36
+ def draw
37
+ background 50, 50, 200
38
+ define_lights
39
+ shape(meshes)
40
+ end
41
+
42
+ def define_lights
43
+ lights
44
+ shininess(16)
45
+ directionalLight(255, 255, 255, 0, -1, 1)
46
+ specular(255)
47
+ end
@@ -0,0 +1,50 @@
1
+ require 'toxiclibs'
2
+
3
+ #######
4
+ # After Paul Bourke see http://paulbourke.net/geometry/sphericalh/
5
+ # radius =
6
+ # sin(m0*phi)**m1 + cos(m2*phi)**m3 + sin(m4*theta)**m5 + cos(m6*theta)**m7
7
+ # where phi = (0..PI) and theta = (0..TWO_PI)
8
+ # As implemented by Karsten Schmidt aka toxi/postspectacular
9
+ #######
10
+
11
+ attr_reader :gfx, :mesh, :spherical, :param
12
+
13
+ def setup
14
+ sketch_title 'Spherical Harmonics Mesh Builder'
15
+ ArcBall.init(self)
16
+ @param = [8, 4, 1, 5, 1, 4, 0, 0] # default function parameters (m0..m7)
17
+ @mesh = spherical_mesh(param)
18
+ @gfx = Gfx::MeshToVBO.new(self) # Mesh to vertex buffer object converter
19
+ no_stroke
20
+ @spherical = gfx.mesh_to_shape(mesh, true) # white
21
+ end
22
+
23
+ def draw
24
+ background(0)
25
+ lights
26
+ shininess(16)
27
+ directional_light(255, 255, 255, 0, -1, 1)
28
+ specular(255)
29
+ shape(spherical)
30
+ end
31
+
32
+ def key_pressed
33
+ return unless (key == 'r')
34
+ @mesh = spherical_mesh(random_parameters)
35
+ no_stroke
36
+ @spherical = gfx.mesh_to_colored_shape(mesh, true) # harmonic colors
37
+ end
38
+
39
+ def random_parameters
40
+ (0..8).map { rand(0..8) }
41
+ end
42
+
43
+ def spherical_mesh(param)
44
+ b = SurfaceMeshBuilder.new(SphericalHarmonics.new(param.to_java(:float)))
45
+ b.create_mesh(nil, 80, 60)
46
+ end
47
+
48
+ def settings
49
+ size(1024, 576, P3D)
50
+ end
@@ -1,3 +1,3 @@
1
1
  module Toxiclibs
2
- VERSION = '0.5.0'
2
+ VERSION = '0.5.1'.freeze
3
3
  end
data/pom.xml CHANGED
@@ -28,8 +28,8 @@
28
28
 
29
29
  <licenses>
30
30
  <license>
31
- <name>'GPLv3'</name>
32
- <url>http://www.opensource.org/licenses/gplv3.php</url>
31
+ <name>LGPL 3</name>
32
+ <url>http://www.gnu.org/licenses/lgpl-3.0-standalone.html</url>
33
33
  </license>
34
34
  </licenses>
35
35
 
@@ -1,31 +1,14 @@
1
- /*
2
- * This library adds translate from toxiclibs Mesh to processing PShape (vbo)
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
1
  package toxi.processing;
22
2
 
23
3
  import java.util.Collection;
24
4
  import processing.core.PApplet;
25
5
  import processing.core.PConstants;
26
6
  import processing.core.PShape;
7
+ import toxi.geom.Matrix4x4;
8
+ import toxi.geom.Vec3D;
27
9
  import toxi.geom.mesh.Mesh3D;
28
10
  import toxi.geom.mesh.Face;
11
+ import toxi.geom.mesh.TriangleMesh;
29
12
 
30
13
  /**
31
14
  *
@@ -34,6 +17,8 @@ import toxi.geom.mesh.Face;
34
17
  public class MeshToVBO {
35
18
 
36
19
  private final PApplet app;
20
+ private final Matrix4x4 normalMap =
21
+ new Matrix4x4().translateSelf(128, 128, 128).scaleSelf(127);
37
22
 
38
23
  /**
39
24
  *
@@ -49,39 +34,24 @@ public class MeshToVBO {
49
34
  * @param smooth boolean
50
35
  * @return
51
36
  */
52
- public PShape meshToShape(Mesh3D mesh, boolean smooth) {
37
+ public PShape meshToShape(TriangleMesh mesh, boolean smooth) {
53
38
  PShape retained = app.createShape();
54
39
  retained.beginShape(PConstants.TRIANGLE);
55
40
  if (smooth) {
56
- mesh.computeVertexNormals();
57
- Collection<Face> faces = mesh.getFaces();
58
- faces.stream().map((f) -> {
41
+ mesh.faces.stream().map((f) -> {
59
42
  retained.normal(f.a.normal.x, f.a.normal.y, f.a.normal.z);
60
- return f;
61
- }).map((f) -> {
62
43
  retained.vertex(f.a.x, f.a.y, f.a.z);
63
- return f;
64
- }).map((f) -> {
65
44
  retained.normal(f.b.normal.x, f.b.normal.y, f.b.normal.z);
66
- return f;
67
- }).map((f) -> {
68
45
  retained.vertex(f.b.x, f.b.y, f.b.z);
69
- return f;
70
- }).map((f) -> {
71
46
  retained.normal(f.c.normal.x, f.c.normal.y, f.c.normal.z);
72
47
  return f;
73
48
  }).forEach((f) -> {
74
49
  retained.vertex(f.c.x, f.c.y, f.c.z);
75
50
  });
76
51
  } else {
77
- Collection<Face> faces = mesh.getFaces();
78
- faces.stream().map((f) -> {
52
+ mesh.faces.stream().map((f) -> {
79
53
  retained.normal(f.normal.x, f.normal.y, f.normal.z);
80
- return f;
81
- }).map((f) -> {
82
54
  retained.vertex(f.a.x, f.a.y, f.a.z);
83
- return f;
84
- }).map((f) -> {
85
55
  retained.vertex(f.b.x, f.b.y, f.b.z);
86
56
  return f;
87
57
  }).forEach((f) -> {
@@ -91,4 +61,39 @@ public class MeshToVBO {
91
61
  retained.endShape();
92
62
  return retained;
93
63
  }
64
+
65
+ public PShape meshToColoredShape(TriangleMesh mesh,
66
+ boolean vertexNormals) {
67
+ PShape gfx = app.createShape();
68
+ gfx.beginShape(PConstants.TRIANGLES);
69
+ if (vertexNormals) {
70
+ mesh.faces.stream().map((f) -> {
71
+ Vec3D n = normalMap.applyTo(f.a.normal);
72
+ gfx.fill(n.x, n.y, n.z);
73
+ gfx.normal(f.a.normal.x, f.a.normal.y, f.a.normal.z);
74
+ gfx.vertex(f.a.x, f.a.y, f.a.z);
75
+ n = normalMap.applyTo(f.b.normal);
76
+ gfx.fill(n.x, n.y, n.z);
77
+ gfx.normal(f.b.normal.x, f.b.normal.y, f.b.normal.z);
78
+ gfx.vertex(f.b.x, f.b.y, f.b.z);
79
+ n = normalMap.applyTo(f.c.normal);
80
+ gfx.fill(n.x, n.y, n.z);
81
+ gfx.normal(f.c.normal.x, f.c.normal.y, f.c.normal.z);
82
+ return f;
83
+ }).forEach((f) -> {
84
+ gfx.vertex(f.c.x, f.c.y, f.c.z);
85
+ });
86
+ } else {
87
+ mesh.faces.stream().map((f) -> {
88
+ gfx.normal(f.normal.x, f.normal.y, f.normal.z);
89
+ gfx.vertex(f.a.x, f.a.y, f.a.z);
90
+ gfx.vertex(f.b.x, f.b.y, f.b.z);
91
+ return f;
92
+ }).forEach((f) -> {
93
+ gfx.vertex(f.c.x, f.c.y, f.c.z);
94
+ });
95
+ }
96
+ gfx.endShape();
97
+ return gfx;
98
+ }
94
99
  }
@@ -14,8 +14,8 @@ Gem::Specification.new do |spec|
14
14
  expressions (available since jdk8). Also new since version 0.5.0 are 3D Mesh
15
15
  to PShape and 3D mesh to Povray mesh2 utilities.
16
16
  EOS
17
- spec.license = 'GPLv3'
18
- spec.authors = %w{Karsten/ Schmidt Martin/ Prout}
17
+ spec.licenses = %w{MIT LGPL-3.0}
18
+ spec.authors = %w{Karsten\ Schmidt Martin\ Prout}
19
19
  spec.email = 'martin_p@lineone.net'
20
20
  spec.homepage = 'https://github.com/ruby-processing/toxiclibs'
21
21
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
metadata CHANGED
@@ -1,17 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toxiclibs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: java
6
6
  authors:
7
- - Karsten/
8
- - Schmidt
9
- - Martin/
10
- - Prout
7
+ - Karsten Schmidt
8
+ - Martin Prout
11
9
  autorequire:
12
10
  bindir: bin
13
11
  cert_chain: []
14
- date: 2015-11-10 00:00:00.000000000 Z
12
+ date: 2015-11-16 00:00:00.000000000 Z
15
13
  dependencies:
16
14
  - !ruby/object:Gem::Dependency
17
15
  name: jruby_art
@@ -84,6 +82,7 @@ files:
84
82
  - examples/inflate_mesh.rb
85
83
  - examples/model_align.rb
86
84
  - examples/povmesh/ftest.rb
85
+ - examples/povmesh/mesh_align.rb
87
86
  - examples/povmesh/tentacle.rb
88
87
  - examples/simple_cluster/cluster.rb
89
88
  - examples/simple_cluster/node.rb
@@ -92,6 +91,7 @@ files:
92
91
  - examples/soft_body/connection.rb
93
92
  - examples/soft_body/particle.rb
94
93
  - examples/soft_body/soft_body_square_adapted.rb
94
+ - examples/spherical_harmonics_mesh.rb
95
95
  - lib/args4j-2.0.31.jar
96
96
  - lib/toxiclibs.jar
97
97
  - lib/toxiclibs.rb
@@ -450,7 +450,8 @@ files:
450
450
  - toxiclibs.gemspec
451
451
  homepage: https://github.com/ruby-processing/toxiclibs
452
452
  licenses:
453
- - GPLv3
453
+ - MIT
454
+ - LGPL-3.0
454
455
  metadata: {}
455
456
  post_install_message:
456
457
  rdoc_options: []