toxiclibs 0.5.0-java → 0.5.1-java

Sign up to get free protection for your applications and to get access to all the features.
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: []