crystalscad 0.5.7 → 0.5.8
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.
- data/examples/nut_support.rb +24 -0
- data/lib/crystalscad/CrystalScad.rb +77 -10
- data/lib/crystalscad/Extras.rb +0 -1
- data/lib/crystalscad/Hardware.rb +18 -8
- data/lib/crystalscad/version.rb +1 -1
- metadata +5 -4
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/ruby1.9.3
|
2
|
+
require "rubygems"
|
3
|
+
require "crystalscad"
|
4
|
+
include CrystalScad
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
res = cube([160,20,20]).center_y.translate(x:-5)
|
10
|
+
[2.5,3,4,5,6,8,10,12].each do |size|
|
11
|
+
b = Bolt.new(size,40)
|
12
|
+
n = Nut.new(size)
|
13
|
+
res -= b.output
|
14
|
+
res -= n.output
|
15
|
+
res += n.add_support(0.2)
|
16
|
+
|
17
|
+
res.translate(x:-20)
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
res.save("nut_support.scad","$fn=64;")
|
24
|
+
|
@@ -11,7 +11,7 @@
|
|
11
11
|
# GNU General Public License for more details.
|
12
12
|
#
|
13
13
|
# You should have received a copy of the GNU General Public License
|
14
|
-
# along with CrystalScad. If not, see <http://www.gnu.org/licenses
|
14
|
+
# along with CrystalScad. If not, see <http://www.gnu.org/licenses/>fre.
|
15
15
|
|
16
16
|
require "rubygems"
|
17
17
|
require "rubyscad"
|
@@ -265,6 +265,8 @@ module CrystalScad
|
|
265
265
|
rescue NoMethodError
|
266
266
|
end
|
267
267
|
end
|
268
|
+
#puts @children.map{|l| l.walk_tree_classes}.inspect
|
269
|
+
|
268
270
|
ret +="}"
|
269
271
|
end
|
270
272
|
end
|
@@ -297,8 +299,26 @@ module CrystalScad
|
|
297
299
|
end
|
298
300
|
end
|
299
301
|
|
302
|
+
def optimize_union(top, child)
|
303
|
+
if top.kind_of? Union and not child.kind_of? Union
|
304
|
+
top.children << child
|
305
|
+
return top
|
306
|
+
else
|
307
|
+
return Union.new(top,child)
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
def optimize_difference(top, child)
|
312
|
+
if top.kind_of? Difference and not child.kind_of? Difference
|
313
|
+
top.children << child
|
314
|
+
return top
|
315
|
+
else
|
316
|
+
return Difference.new(top,child)
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
300
320
|
def +(args)
|
301
|
-
return args if self == nil
|
321
|
+
return Union.new(nil,args) if self == nil
|
302
322
|
if args.kind_of? Array
|
303
323
|
r = self
|
304
324
|
args.each do |a|
|
@@ -310,7 +330,7 @@ module CrystalScad
|
|
310
330
|
end
|
311
331
|
r
|
312
332
|
else
|
313
|
-
|
333
|
+
optimize_union(self,args)
|
314
334
|
end
|
315
335
|
end
|
316
336
|
|
@@ -327,7 +347,7 @@ module CrystalScad
|
|
327
347
|
end
|
328
348
|
r
|
329
349
|
else
|
330
|
-
|
350
|
+
optimize_difference(self,args)
|
331
351
|
end
|
332
352
|
end
|
333
353
|
|
@@ -344,7 +364,8 @@ module CrystalScad
|
|
344
364
|
class Import < Primitive
|
345
365
|
def initialize(args)
|
346
366
|
@transformations = []
|
347
|
-
|
367
|
+
@children = []
|
368
|
+
|
348
369
|
if args.kind_of? String
|
349
370
|
filename = args
|
350
371
|
else # assume hash otherwise
|
@@ -363,7 +384,12 @@ module CrystalScad
|
|
363
384
|
if @layer
|
364
385
|
layer = ",layer=\"#{@layer}\""
|
365
386
|
end
|
366
|
-
|
387
|
+
res = self.children.map{|l| l.walk_tree}
|
388
|
+
if res == []
|
389
|
+
res = ""
|
390
|
+
end
|
391
|
+
res += RubyScadBridge.new.import("file=\""+@filename.to_s+"\"#{layer}") # apparently the quotes get lost otherwise
|
392
|
+
res
|
367
393
|
end
|
368
394
|
end
|
369
395
|
|
@@ -371,6 +397,31 @@ module CrystalScad
|
|
371
397
|
Import.new(filename)
|
372
398
|
end
|
373
399
|
|
400
|
+
class Render < Primitive
|
401
|
+
def initialize(object, attributes)
|
402
|
+
@operation = "render"
|
403
|
+
@children = [object]
|
404
|
+
super(object, attributes)
|
405
|
+
end
|
406
|
+
|
407
|
+
def to_rubyscad
|
408
|
+
layer = ""
|
409
|
+
if @layer
|
410
|
+
layer = ",layer=\"#{@layer}\""
|
411
|
+
end
|
412
|
+
res = ""
|
413
|
+
self.children.map{|l| res += l.walk_tree}
|
414
|
+
res += RubyScadBridge.new.render
|
415
|
+
res
|
416
|
+
end
|
417
|
+
|
418
|
+
end
|
419
|
+
|
420
|
+
def render(args={})
|
421
|
+
return Render.new(self,args)
|
422
|
+
end
|
423
|
+
|
424
|
+
|
374
425
|
class CSGModifier < Primitive
|
375
426
|
def initialize(object, attributes)
|
376
427
|
@transformations = []
|
@@ -412,7 +463,7 @@ module CrystalScad
|
|
412
463
|
super(object, attributes)
|
413
464
|
end
|
414
465
|
end
|
415
|
-
|
466
|
+
|
416
467
|
class LinearExtrude < CSGModifier
|
417
468
|
def initialize(object, attributes)
|
418
469
|
@operation = "linear_extrude"
|
@@ -438,6 +489,7 @@ module CrystalScad
|
|
438
489
|
return Color.new(self,args)
|
439
490
|
end
|
440
491
|
|
492
|
+
|
441
493
|
def linear_extrude(args)
|
442
494
|
if args[:h] # rename to height
|
443
495
|
args[:height] = args[:h]
|
@@ -534,9 +586,7 @@ module CrystalScad
|
|
534
586
|
output = nil
|
535
587
|
|
536
588
|
res.send :initialize # ensure default values are loaded at each interation
|
537
|
-
|
538
|
-
output = res.send i
|
539
|
-
end
|
589
|
+
output = res.send i
|
540
590
|
|
541
591
|
# if previous call resulted in a CrystalScadObject, don't call the show method again,
|
542
592
|
# otherwise call it.
|
@@ -554,6 +604,23 @@ module CrystalScad
|
|
554
604
|
|
555
605
|
end
|
556
606
|
|
607
|
+
def get_classes_from_file(filename)
|
608
|
+
classes = []
|
609
|
+
File.readlines(filename).find_all{|l| l.include?("class")}.each do |line|
|
610
|
+
# strip all spaces, tabs
|
611
|
+
line.strip!
|
612
|
+
# ignore comments (Warning: will not worth with ruby multi line comments)
|
613
|
+
next if line[0..0] == "#"
|
614
|
+
# strip class definition
|
615
|
+
line = line[6..-1]
|
616
|
+
# strip until space appears - or if not, to the end
|
617
|
+
classes << Object.const_get(line[0..line.index(" ").to_i-1])
|
618
|
+
end
|
619
|
+
|
620
|
+
return classes
|
621
|
+
end
|
622
|
+
|
623
|
+
|
557
624
|
end
|
558
625
|
|
559
626
|
|
data/lib/crystalscad/Extras.rb
CHANGED
data/lib/crystalscad/Hardware.rb
CHANGED
@@ -230,14 +230,14 @@ module CrystalScad::Hardware
|
|
230
230
|
end
|
231
231
|
|
232
232
|
def prepare_data
|
233
|
-
chart_934 = {2.5=> {side_to_side:5,height:2},
|
234
|
-
3 => {side_to_side:5.5,height:2.4},
|
235
|
-
4 => {side_to_side:7,height:3.2},
|
236
|
-
5 => {side_to_side:8,height:4},
|
237
|
-
6 => {side_to_side:10,height:5},
|
238
|
-
8 => {side_to_side:13,height:6.5},
|
239
|
-
10 => {side_to_side:17,height:8},
|
240
|
-
12 => {side_to_side:19,height:10},
|
233
|
+
chart_934 = {2.5=> {side_to_side:5,height:2, support_diameter:2.8},
|
234
|
+
3 => {side_to_side:5.5,height:2.4, support_diameter:3.5},
|
235
|
+
4 => {side_to_side:7,height:3.2, support_diameter:4.4},
|
236
|
+
5 => {side_to_side:8,height:4, support_diameter:5.3},
|
237
|
+
6 => {side_to_side:10,height:5, support_diameter:6.3},
|
238
|
+
8 => {side_to_side:13,height:6.5, support_diameter:8.3},
|
239
|
+
10 => {side_to_side:17,height:8, support_diameter:10.3},
|
240
|
+
12 => {side_to_side:19,height:10, support_diameter:12.3},
|
241
241
|
|
242
242
|
}
|
243
243
|
# for securing nuts
|
@@ -250,6 +250,7 @@ module CrystalScad::Hardware
|
|
250
250
|
|
251
251
|
@s = chart_934[@size][:side_to_side]
|
252
252
|
@height = chart_934[@size][:height]
|
253
|
+
@support_diameter = chart_934[@size][:support_diameter]
|
253
254
|
|
254
255
|
if @type == "985"
|
255
256
|
@height = chart_985[@size][:height]
|
@@ -257,6 +258,15 @@ module CrystalScad::Hardware
|
|
257
258
|
|
258
259
|
end
|
259
260
|
|
261
|
+
def add_support(layer_height=0.2)
|
262
|
+
res = cylinder(d:@support_diameter,h:@height-layer_height)
|
263
|
+
# on very small nuts, add a support base of one layer height, so the support won't fall over
|
264
|
+
if @size < 6
|
265
|
+
res += cylinder(d:@s-1,h:layer_height)
|
266
|
+
end
|
267
|
+
res
|
268
|
+
end
|
269
|
+
|
260
270
|
def output(margin=0.3)
|
261
271
|
add_to_bom
|
262
272
|
return nut_934(false,margin)
|
data/lib/crystalscad/version.rb
CHANGED
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:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
9
|
+
- 8
|
10
|
+
version: 0.5.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joachim Glauche
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2015-04-
|
18
|
+
date: 2015-04-28 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rubyscad
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- crystalscad.gemspec
|
98
98
|
- examples/gear.rb
|
99
99
|
- examples/knurls.rb
|
100
|
+
- examples/nut_support.rb
|
100
101
|
- examples/openscad_examples/example001.rb
|
101
102
|
- examples/openscad_examples/example002.rb
|
102
103
|
- examples/openscad_examples/example003.rb
|