crystalscad 0.3.8 → 0.3.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.
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/ruby1.9.3
2
+ require "rubygems"
3
+ require "crystalscad"
4
+ include CrystalScad
5
+
6
+
7
+ g1 = PrintedGear.new(module:2.0,teeth:40,bore:8.5,height:6)
8
+ res = g1.show.color("red")
9
+
10
+ res += cylinder(d:20,h:nut_support_height=20)
11
+
12
+ n = Nut.new(8)
13
+ res -= n.output.translate(z:nut_support_height-n.height+0.1)
14
+
15
+ res -= cylinder(d:8.5,h:nut_support_height)
16
+
17
+ res.save("printed_gear2.scad")
18
+
data/examples/threads2.rb CHANGED
@@ -79,6 +79,7 @@ pos = male.threads_bottom.first.position_on(female.threads_top.first,rotation)
79
79
  res += female.show.rotate(rotation).mirror(z:1).translate(pos)
80
80
 
81
81
 
82
+
82
83
  rotation = {y:-90}
83
84
  pos = male.threads_left.first.position_on(female.threads_top.first,rotation)
84
85
  res += female.show.rotate(rotation).translate(pos)
@@ -207,7 +207,7 @@ module CrystalScad::Hardware
207
207
 
208
208
  def output(margin=0.3)
209
209
  add_to_bom
210
- return nut_934(margin)
210
+ return nut_934(false,margin)
211
211
  end
212
212
 
213
213
  def show
@@ -215,10 +215,10 @@ module CrystalScad::Hardware
215
215
  return nut_934
216
216
  end
217
217
 
218
- def nut_934(margin=0)
218
+ def nut_934(show=true,margin=0)
219
219
  @s += margin
220
220
  nut=cylinder(d:(@s/Math.sqrt(3))*2,h:@height,fn:6)
221
- nut-=cylinder(d:@size,h:@height)
221
+ nut-=cylinder(d:@size,h:@height) if show == true
222
222
  nut.color("Gainsboro")
223
223
  end
224
224
 
@@ -240,24 +240,81 @@ module CrystalScad::Hardware
240
240
  @args[:gap] ||= 8.13
241
241
  @args[:thickness] ||= 2.55
242
242
  @args[:simple] ||= false
243
+ @machining = CrystalScadObject.new
244
+ @machining_string = ""
243
245
  end
244
246
 
245
- def output(length=nil)
246
- if length != nil
247
- @args[:length] = length
248
- end
249
- @@bom.add(description) unless args[:no_bom] == true
250
-
251
- return single_profile.color("Silver") if @args[:configuration] == 1
252
- return multi_profile.color("Silver")
247
+ def output
248
+ res = profile
249
+
250
+ res - @machining
253
251
  end
254
252
 
255
253
  alias :show :output
256
254
 
257
255
  def description
258
- "T-Slot #{@args[:size]}x#{@args[:size]*@args[:configuration]}, length #{@args[:length]}mm"
256
+ "T-Slot #{@args[:size]}x#{@args[:size]*@args[:configuration]}, length #{@args[:length]}mm #{@machining_string}"
259
257
  end
260
-
258
+
259
+ def length(length)
260
+ @args[:length] = length
261
+ self
262
+ end
263
+
264
+ def thread(args={})
265
+ position = args[:position] || "front"
266
+ @machining_string += "with thread on #{position} "
267
+ self
268
+ end
269
+
270
+ def threads
271
+ self.thread().thread(position:"back")
272
+ end
273
+
274
+ def holes(args={})
275
+ args[:position] = "front"
276
+ res = self.hole(args)
277
+ args[:position] = "back"
278
+ res.hole(args)
279
+ end
280
+
281
+ def hole(args={})
282
+ diameter = args[:diameter] || 8
283
+ position = args[:position] || "front"
284
+ side = args[:side] || "x"
285
+
286
+ if position.kind_of? String
287
+ case position
288
+ when "front"
289
+ z = @args[:size]/2
290
+ @machining_string += "with #{diameter}mm hole on front "
291
+ when "back"
292
+ z = @args[:length] - @args[:size]/2
293
+ @machining_string += "with #{diameter}mm hole on back "
294
+ end
295
+ else
296
+ z = position
297
+ @machining_string += "with #{diameter}mm hole on #{z}mm "
298
+ end
299
+
300
+ @args[:configuration].times do |c|
301
+ cyl = cylinder(d:diameter,h:@args[:size])
302
+ if side == "x"
303
+ @machining += cyl.rotate(x:-90).translate(x:@args[:size]/2+c*@args[:size],z:z)
304
+ else
305
+ @machining += cyl.rotate(y:90).translate(y:@args[:size]/2+c*@args[:size],z:z)
306
+ end
307
+ end
308
+
309
+ self
310
+ end
311
+
312
+ def profile
313
+ @@bom.add(description) unless args[:no_bom] == true
314
+ return single_profile.color("Silver") if @args[:configuration] == 1
315
+ return multi_profile.color("Silver")
316
+ end
317
+
261
318
  def single_profile
262
319
  if @args[:simple] == true
263
320
  return cube([@args[:size],@args[:size],@args[:length]])
@@ -294,6 +351,7 @@ module CrystalScad::Hardware
294
351
  @args[:holes] ||= "front,back" # nil, front, back
295
352
  @args[:bolt_size] ||= 8
296
353
  @args[:bolt_length] ||= 25
354
+ puts "TSlotMachining is deprecated and will be removed in the 0.4.0 release."
297
355
  end
298
356
 
299
357
  alias tslot_output output
@@ -67,10 +67,16 @@ module CrystalScad::ScrewThreads
67
67
  end
68
68
 
69
69
  def position_on(other_thread,rotation={})
70
- oc = other_thread.x, other_thread.y, other_thread.z
71
- oc = orientation_swap_to(oc,rotation)
72
-
73
- return {x:@x-oc[0],y:@y-oc[1],z:@z-oc[2]}
70
+ if other_thread.kind_of? Bolt
71
+ # we assume that a bolt is always centered and center the object on
72
+ # the screwthread position
73
+ return {x:-@x,y:-@y,z:-@z}
74
+ else
75
+ # on a screwthread find out its position and orientation
76
+ oc = other_thread.x, other_thread.y, other_thread.z
77
+ oc = orientation_swap_to(oc,rotation)
78
+ return {x:@x-oc[0],y:@y-oc[1],z:@z-oc[2]}
79
+ end
74
80
  end
75
81
 
76
82
  end
@@ -1,4 +1,4 @@
1
1
  module CrystalScad
2
- VERSION = "0.3.8"
2
+ VERSION = "0.3.9"
3
3
  end
4
4
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crystalscad
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 1
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 8
10
- version: 0.3.8
9
+ - 9
10
+ version: 0.3.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Joachim Glauche
@@ -15,7 +15,8 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2014-01-05 00:00:00 Z
18
+ date: 2014-01-17 00:00:00 +01:00
19
+ default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: rubyscad
@@ -69,6 +70,7 @@ files:
69
70
  - examples/openscad_examples/example004.rb
70
71
  - examples/openscad_examples/example005.rb
71
72
  - examples/printed_gear.rb
73
+ - examples/printed_gear2.rb
72
74
  - examples/stack.rb
73
75
  - examples/threads.rb
74
76
  - examples/threads2.rb
@@ -84,6 +86,7 @@ files:
84
86
  - skeleton_project/assemblies/example.rb
85
87
  - skeleton_project/observe.sh
86
88
  - skeleton_project/skeleton.rb
89
+ has_rdoc: true
87
90
  homepage: http://github.com/Joaz/CrystalScad
88
91
  licenses:
89
92
  - GPL-3
@@ -115,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
118
  requirements: []
116
119
 
117
120
  rubyforge_project:
118
- rubygems_version: 1.8.15
121
+ rubygems_version: 1.6.2
119
122
  signing_key:
120
123
  specification_version: 3
121
124
  summary: CrystalScad is a framework for programming OpenScad models in Ruby