basis-processing 0.4.8 → 0.4.9

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 (5) hide show
  1. data/README +68 -0
  2. data/basis.gemspec +1 -1
  3. data/lib/demo.rb +4 -2
  4. data/lib/screen.rb +9 -0
  5. metadata +4 -4
data/README CHANGED
@@ -1 +1,69 @@
1
1
  Basis provides a set of classes for easily plotting and transforming arbitrary 2D coordinate systems by specifying their basis vectors in Ruby-Processing.
2
+
3
+ ## Installation
4
+
5
+ To install the Basis gem, first head to the location where the jruby-complete.jar is located, for Ruby-Processing. There, do this:
6
+
7
+ java -jar jruby-complete.jar -S gem install basis-processing --user-install
8
+
9
+ Alternatively, if you're using a conventional JRuby installation, do this:
10
+
11
+ sudo jruby -S gem install basis-processing
12
+
13
+ To use Basis functionality in your code, it is enough to:
14
+
15
+ require 'basis_processing'
16
+
17
+ ## Example Code
18
+
19
+ Here's some example code, which plots random points.
20
+
21
+ require 'rubygems'`
22
+ require 'basis_processing'`
23
+
24
+ class Demo < Processing::App
25
+ app = self
26
+ def setup
27
+ smooth
28
+ background(0,0,0)
29
+ color_mode(RGB, 1.0)
30
+
31
+ points = []
32
+ 100.times {points << {:x => random(200), :y => random(300)}}
33
+
34
+ x_basis_vector = {:x => 1.0, :y => 0.0}
35
+ y_basis_vector = {:x => 0.0, :y => 1.0}
36
+
37
+ x_range = ContinuousRange.new({:minimum => 0, :maximum => 200})
38
+ y_range = ContinuousRange.new({:minimum => 0, :maximum => 300})
39
+
40
+ basis = CoordinateSystem.new(Axis.new(x_basis_vector,x_range), Axis.new(y_basis_vector,y_range), [[4,0],[0,2]], self)
41
+ screen_transform = SignedTransform.new({:x => 1, :y => -1}, {:x => 300, :y => 900})
42
+ screen = Screen.new(screen_transform, self)
43
+ screen.join = true
44
+ screen.draw_axes(basis,10,10)
45
+ stroke(1,1,0,1)
46
+ fill(1,1,0)
47
+ rect_mode(CENTER)
48
+ points.each do |p|
49
+ screen.plot(p, basis, :bar => true) {|p| rect(p[:x], p[:y], 5, 5)}
50
+ end
51
+ end
52
+
53
+ def draw
54
+ end
55
+ end
56
+
57
+ w = 1200
58
+ h = 1000
59
+
60
+ Demo.new(:title => "My Sketch", :width => w, :height => h)
61
+
62
+ You have a few options when plotting a point. Consider the line:
63
+
64
+ screen.plot(p, basis, :bar => true) {|p| rect(p[:x], p[:y], 5, 5)}
65
+
66
+ If you omit `:bar => true` or don't specify any options, Basis will plot the points without connecting them to the X-axis.
67
+ If you omit the block at the end of the call, Basis will plot the point using a circle. Use the block to customise how you wish to represent the point graphically.
68
+ You can toggle the joining of the points with lines by setting the join attribute of Screen to on (joins points)/off (no joining). The default is false.
69
+
data/basis.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = "basis-processing"
3
- s.version = "0.4.8"
3
+ s.version = "0.4.9"
4
4
  s.author = "Avishek Sen Gupta"
5
5
  s.email = "avishek.sen.gupta@gmail.com"
6
6
  s.homepage = "http://avishek.net/blog"
data/lib/demo.rb CHANGED
@@ -14,7 +14,7 @@ class Demo < Processing::App
14
14
  stroke(1,1,0,1)
15
15
 
16
16
  points = []
17
- 100.times {points << {:x => random(200), :y => random(300)}}
17
+ 200.times {|n|points << {:x => n, :y => random(300)}}
18
18
 
19
19
  x_basis_vector = {:x => 1.0, :y => 0.0}
20
20
  y_basis_vector = {:x => 0.0, :y => 1.0}
@@ -25,11 +25,13 @@ class Demo < Processing::App
25
25
  basis = CoordinateSystem.new(Axis.new(x_basis_vector,x_range), Axis.new(y_basis_vector,y_range), [[4,0],[0,2]], self)
26
26
  screen_transform = SignedTransform.new({:x => 1, :y => -1}, {:x => 300, :y => 900})
27
27
  screen = Screen.new(screen_transform, self)
28
+ screen.join=true
28
29
  screen.draw_axes(basis,10,10)
29
30
  stroke(1,1,0,1)
30
31
  fill(1,1,0)
32
+ rect_mode(CENTER)
31
33
  points.each do |p|
32
- screen.plot(p, basis)
34
+ screen.plot(p, basis) {|p| rect(p[:x], p[:y], 5, 5)}
33
35
  end
34
36
  end
35
37
 
data/lib/screen.rb CHANGED
@@ -1,9 +1,15 @@
1
1
  require 'transform'
2
2
 
3
3
  class Screen
4
+ def join=(should_join)
5
+ @should_join = should_join
6
+ @buffer = nil if !@should_join
7
+ end
8
+
4
9
  def initialize(transform, artist)
5
10
  @transform = transform
6
11
  @artist = artist
12
+ join = false
7
13
  end
8
14
 
9
15
  def plot(point, basis, options = {:bar => false}, &block)
@@ -17,6 +23,9 @@ class Screen
17
23
  @artist.ellipse(p[:x], p[:y], 5, 5)
18
24
  end
19
25
  @artist.line(standard_x_axis_point[:x], standard_x_axis_point[:y], p[:x], p[:y]) if options[:bar]
26
+ return if !@should_join
27
+ @artist.line(@buffer[:x], @buffer[:y], p[:x], p[:y]) if @buffer
28
+ @buffer = p
20
29
  end
21
30
 
22
31
  def original(onscreen_point, basis)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: basis-processing
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 8
10
- version: 0.4.8
9
+ - 9
10
+ version: 0.4.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Avishek Sen Gupta
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-01 00:00:00 Z
18
+ date: 2011-10-03 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description: Basis provides a set of classes for easily plotting and transforming arbitrary 2D coordinate systems by specifying their basis vectors in Ruby-Processing.