oozby 0.2.1 → 0.2.2

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: 5177ab35c7d24ad1b6a50713c41912560b74bbbe
4
- data.tar.gz: 6014ba727a5b5d57a4db87df03f60f7af22ece0b
3
+ metadata.gz: a23a382871587b9a004386c00f558f07dbe317af
4
+ data.tar.gz: b287f6a6be40890def253994c9413f5ba3140bad
5
5
  SHA512:
6
- metadata.gz: be77bb1f4e7cd3535b7a98b5172cb24b2c6ba34715bf4b8b9b16b1d760a16f15715e4f5369e8588589425106ac741cf2d1f3daf031fce47938bbe7cffeabfd31
7
- data.tar.gz: 2c29b656400ec92ea95a8835585960f7edec297ada0aadb2d21d9ca61513ccb40cbc74c47e138dfe3fcc4725b726813c5323702249ebdbfc6398682de971358d
6
+ metadata.gz: e202ef9d0b2a7d76bf7cf885df73911e8f86f8240c6705760cccd86f34811db7ad80ae3c543b5e02145180b7fcfc888e6b3c0102cfcfd49e6f42435a312e9748
7
+ data.tar.gz: 52a53ae63fe96411d3b1783db58466db03e83f3d5b17c6f5819d94ec7c356e4ca0e2afc49f07a3dc093f7f87c82d83958484d87658a90192cc27d8c127b95779
data/bin/oozby CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  $:.unshift File.dirname(__FILE__) + "/../lib"
3
3
  require 'thor'
4
- #require 'fssm'
5
4
  require 'listen'
6
5
  require 'pp'
7
6
  require 'oozby'
@@ -47,6 +46,7 @@ class OozbyUtility < Thor
47
46
  compile File.join(*args)
48
47
  end
49
48
 
49
+ puts "Watching folder for changes... (CTRL+C to exit)"
50
50
  Listen.to! directory, filter: /\.oozby$/ do |modified, added, removed|
51
51
  modified.each { |path| recompile_handler[path] }
52
52
  added.each { |path| recompile_handler[path] }
@@ -58,20 +58,11 @@ class OozbyUtility < Thor
58
58
  end
59
59
  end
60
60
  end
61
-
62
- # FSSM.monitor(directory, File.join('**', '*.oozby')) do
63
- # create &recompile_handler
64
- # update &recompile_handler
65
- # delete do |dir, name|
66
- # puts "#{name} deleted."
67
- # if File.exists? File.join(dir, name + ".scad")
68
- # File.delete(File.join(dir, name + ".scad"))
69
- # puts "Deleted generated .scad file for obsolete #{name}"
70
- # end
71
- # end
72
- # end
73
61
  end
74
62
  end
63
+ rescue Interrupt => e
64
+ puts ""
65
+ puts "Have a nice day!"
75
66
  end
76
67
  end
77
68
 
data/lib/oozby/base.rb CHANGED
@@ -12,7 +12,7 @@ class Oozby
12
12
 
13
13
  # rescue block to filter out junk oozby library stuff from backtraces
14
14
  begin
15
- compiled = eval("lambda {; #{code}; }", nil, filename)
15
+ compiled = eval("lambda {; #{code};\n }", nil, filename)
16
16
  env.instance_exec(&compiled)
17
17
  rescue
18
18
  warn "Recent Calls: " + env.instance_variable_get(:@method_history).last(10).reverse.inspect
@@ -122,6 +122,10 @@ class Oozby::Environment
122
122
  # gets and sets resolution settings
123
123
  def resolution **settings, &proc
124
124
  warn "Setting fragments_per_turn and degrees_per_fragment together makes no sense!" if settings[:fragments_per_turn] && settings[:degrees_per_fragment]
125
+ settings[:fragments_per_turn] ||= settings.delete(:facets_per_turn)
126
+ settings[:degrees_per_fragment] ||= settings.delete(:degrees_per_facet)
127
+ settings[:fragments] ||= settings.delete(:facets)
128
+ settings.delete_if { |key,value| value == nil }
125
129
  previous_settings = @resolution
126
130
  @resolution.merge! settings
127
131
  @resolution[:degrees_per_fragment] = 360.0 / settings[:fragments_per_turn].to_f if settings[:fragments_per_turn]
@@ -69,7 +69,7 @@ class Oozby::MethodPreprocessor
69
69
 
70
70
  if info.named_args[:r] && info.named_args[:r] > 0.0
71
71
  # render rounded rectangle
72
- info.replace rounded_cube(**args_parse(info, :size, :center, :r))
72
+ info.replace rounded_cube(**args_parse(info, :size, :center))
73
73
  end
74
74
  end
75
75
 
@@ -82,6 +82,7 @@ class Oozby::MethodPreprocessor
82
82
  info.named_args[:r2] = info.named_args.delete(:radius_2) if info.named_args[:radius_2]
83
83
 
84
84
  info.named_args[:"$fn"] = info.named_args.delete(:facets) if info.named_args[:facets]
85
+ info.named_args[:"$fn"] = info.named_args.delete(:fragments) if info.named_args[:fragments]
85
86
 
86
87
  # let users specify diameter instead of radius - convert it
87
88
  { diameter: :r, dia: :r, d: :r,
@@ -124,26 +125,28 @@ class Oozby::MethodPreprocessor
124
125
 
125
126
  if info[:named_args][:r] and info.named_args[:r] > 0.0
126
127
  # render rounded rectangle
127
- info.replace rounded_rect(**args_parse(info, :size, :center, :r))
128
+ info.replace rounded_rect(**args_parse(info, :size, :center).merge(facets: info.named_args["$fn"]))
128
129
  end
129
130
  end
130
131
 
131
- def rounded_rect size: [1,1], center: false, r: 0.0
132
+ def rounded_rect size: [1,1], center: false, r: 0.0, facets: nil
132
133
  diameter = r * 2
133
134
  circle_x = (size[0] / 2.0) - r
134
135
  circle_y = (size[1] / 2.0) - r
135
136
 
136
137
  capture do
137
- translate(if center then [0,0] else [size[0].to_f / 2.0, size[1].to_f / 2.0] end) do
138
- union do
139
- square([size[0], size[1] - diameter], center = true)
140
- square([size[0] - diameter, size[1]], center = true)
141
- preprocessor true do
142
- resolution(fragments: (_fragments_for(radius: r).to_f / 4.0).round * 4.0) do
143
- translate([ circle_x, circle_y]) { circle(r: r) }
144
- translate([ circle_x, -circle_y]) { circle(r: r) }
145
- translate([-circle_x, -circle_y]) { circle(r: r) }
146
- translate([-circle_x, circle_y]) { circle(r: r) }
138
+ resolution(fragments: (facets || 0)) do
139
+ translate(if center then [0,0] else [size[0].to_f / 2.0, size[1].to_f / 2.0] end) do
140
+ union do
141
+ square([size[0], size[1] - diameter], center = true)
142
+ square([size[0] - diameter, size[1]], center = true)
143
+ preprocessor true do
144
+ resolution(fragments: (_fragments_for(radius: r).to_f / 4.0).round * 4.0) do
145
+ translate([ circle_x, circle_y]) { circle(r: r) }
146
+ translate([ circle_x, -circle_y]) { circle(r: r) }
147
+ translate([-circle_x, -circle_y]) { circle(r: r) }
148
+ translate([-circle_x, circle_y]) { circle(r: r) }
149
+ end
147
150
  end
148
151
  end
149
152
  end
@@ -151,44 +154,46 @@ class Oozby::MethodPreprocessor
151
154
  end
152
155
  end
153
156
 
154
- def rounded_cube size: [1,1,1], center: false, r: 0.0
157
+ def rounded_cube size: [1,1,1], center: false, r: 0.0, facets: nil
155
158
  size = [size[0] || 1, size[1] || 1, size[2] || 1]
156
159
  diameter = r.to_f * 2.0
157
160
 
158
161
  preprocessor = self
159
162
  # use rounded rect to create the body shape
160
163
  capture do
161
- offset = if center then [0,0,0] else [size[0].to_f / 2.0, size[1].to_f / 2.0, size[2].to_f / 2.0] end
162
- translate(offset) do
163
- # extrude the main body parts using rounded_rect as the basis
164
- linear_extrude(height: size[2] - diameter, center: true) {
165
- inject_abstract_tree(preprocessor.rounded_rect(size: [size[0], size[1]], center: true, r: r)) }
166
- rotate([90,0,0]) { linear_extrude(height: size[1] - diameter, center: true) {
167
- inject_abstract_tree(preprocessor.rounded_rect(size: [size[0], size[2]], center: true, r: r)) }}
168
- rotate([0,90,0]) { linear_extrude(height: size[0] - diameter, center: true) {
169
- inject_abstract_tree(preprocessor.rounded_rect(size: [size[2], size[1]], center: true, r: r)) }}
164
+ resolution(fragments: (facets || 0)) do
165
+ offset = if center then [0,0,0] else [size[0].to_f / 2.0, size[1].to_f / 2.0, size[2].to_f / 2.0] end
166
+ translate(offset) do
167
+ # extrude the main body parts using rounded_rect as the basis
168
+ linear_extrude(height: size[2] - diameter, center: true) {
169
+ inject_abstract_tree(preprocessor.rounded_rect(size: [size[0], size[1]], center: true, r: r)) }
170
+ rotate([90,0,0]) { linear_extrude(height: size[1] - diameter, center: true) {
171
+ inject_abstract_tree(preprocessor.rounded_rect(size: [size[0], size[2]], center: true, r: r)) }}
172
+ rotate([0,90,0]) { linear_extrude(height: size[0] - diameter, center: true) {
173
+ inject_abstract_tree(preprocessor.rounded_rect(size: [size[2], size[1]], center: true, r: r)) }}
170
174
 
171
- # fill in the corners with spheres
172
- xr, yr, zr = size.map { |x| (x / 2) - r }
173
- corner_coordinates = [
174
- [ xr, yr, zr],
175
- [ xr, yr,-zr],
176
- [ xr,-yr, zr],
177
- [ xr,-yr,-zr],
178
- [-xr, yr, zr],
179
- [-xr, yr,-zr],
180
- [-xr,-yr, zr],
181
- [-xr,-yr,-zr]
182
- ]
183
- preprocessor true do
184
- resolution(fragments: (_fragments_for(radius: r).to_f / 4.0).round * 4.0) do
185
- corner_coordinates.each do |coordinate|
186
- translate(coordinate) do
187
- # generate sphere shape
188
- rotate_extrude do
189
- intersection do
190
- circle(r: r)
191
- translate([r, 0, 0]) { square([r * 2, r * 4], center: true) }
175
+ # fill in the corners with spheres
176
+ xr, yr, zr = size.map { |x| (x / 2) - r }
177
+ corner_coordinates = [
178
+ [ xr, yr, zr],
179
+ [ xr, yr,-zr],
180
+ [ xr,-yr, zr],
181
+ [ xr,-yr,-zr],
182
+ [-xr, yr, zr],
183
+ [-xr, yr,-zr],
184
+ [-xr,-yr, zr],
185
+ [-xr,-yr,-zr]
186
+ ]
187
+ preprocessor true do
188
+ resolution(fragments: (_fragments_for(radius: r).to_f / 4.0).round * 4.0) do
189
+ corner_coordinates.each do |coordinate|
190
+ translate(coordinate) do
191
+ # generate sphere shape
192
+ rotate_extrude do
193
+ intersection do
194
+ circle(r: r)
195
+ translate([r, 0, 0]) { square([r * 2, r * 4], center: true) }
196
+ end
192
197
  end
193
198
  end
194
199
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oozby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bluebie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-05 00:00:00.000000000 Z
11
+ date: 2013-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: listen