crystalscad 0.5.6 → 0.5.7
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/knurls.rb +19 -0
- data/lib/crystalscad.rb +1 -0
- data/lib/crystalscad/CrystalScad.rb +19 -8
- data/lib/crystalscad/CrystalScadObject.rb +9 -0
- data/lib/crystalscad/Extras.rb +108 -0
- data/lib/crystalscad/version.rb +1 -1
- metadata +6 -4
data/examples/knurls.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/ruby1.9.3
|
2
|
+
require "rubygems"
|
3
|
+
require "crystalscad"
|
4
|
+
include CrystalScad
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
res = knurled_cube([41,10,4])
|
10
|
+
#Total rendering time: 0 hours, 5 minutes, 53 seconds
|
11
|
+
|
12
|
+
#Total rendering time: 0 hours, 1 minutes, 41 seconds
|
13
|
+
|
14
|
+
#res = knurled_cylinder(d:16,h:10)
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
res.save("knurls.scad","$fn=64;")
|
19
|
+
|
data/lib/crystalscad.rb
CHANGED
@@ -24,7 +24,7 @@ module CrystalScad
|
|
24
24
|
include CrystalScad::Gears
|
25
25
|
include CrystalScad::ScrewThreads
|
26
26
|
include CrystalScad::PrintedThreads
|
27
|
-
|
27
|
+
include CrystalScad::Extras
|
28
28
|
|
29
29
|
|
30
30
|
|
@@ -529,16 +529,27 @@ module CrystalScad
|
|
529
529
|
def save_all(class_name,fn=$fn)
|
530
530
|
|
531
531
|
res = class_name.send :new
|
532
|
-
|
532
|
+
# regexp for output* view* show*
|
533
|
+
res.methods.grep(Regexp.union(/^output/,/^view/,/^show/)).each do |i|
|
534
|
+
output = nil
|
535
|
+
|
533
536
|
res.send :initialize # ensure default values are loaded at each interation
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
537
|
+
unless i == :show or i == :output # call the view method
|
538
|
+
output = res.send i
|
539
|
+
end
|
540
|
+
|
541
|
+
# if previous call resulted in a CrystalScadObject, don't call the show method again,
|
542
|
+
# otherwise call it.
|
543
|
+
unless output.kind_of? CrystalScadObject
|
544
|
+
unless i.to_s.include? "output"
|
545
|
+
output = res.show
|
546
|
+
else
|
547
|
+
output = res.output
|
548
|
+
end
|
539
549
|
end
|
540
550
|
|
541
|
-
|
551
|
+
|
552
|
+
output.save("output/#{res.class}_#{i}.scad","$fn=#{fn};") unless output == nil
|
542
553
|
end
|
543
554
|
|
544
555
|
end
|
@@ -21,6 +21,15 @@ module CrystalScad
|
|
21
21
|
end
|
22
22
|
alias :scad_output :walk_tree
|
23
23
|
|
24
|
+
def walk_tree_classes
|
25
|
+
res = []
|
26
|
+
@transformations.reverse.each{|trans|
|
27
|
+
res += trans.walk_tree_classes
|
28
|
+
}
|
29
|
+
res << self.class
|
30
|
+
res
|
31
|
+
end
|
32
|
+
|
24
33
|
def to_rubyscad
|
25
34
|
""
|
26
35
|
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
module CrystalScad::Extras
|
2
|
+
|
3
|
+
|
4
|
+
# This currently can solve triangels knowing 1 side and 2 angels
|
5
|
+
class Triangle
|
6
|
+
attr_accessor :alpha, :beta, :gamma, :a, :b, :c
|
7
|
+
def initialize(args={})
|
8
|
+
@alpha = args[:alpha]
|
9
|
+
@beta = args[:beta]
|
10
|
+
@gamma = args[:gamma]
|
11
|
+
@a = args[:a]
|
12
|
+
@b = args[:b]
|
13
|
+
@c = args[:c]
|
14
|
+
solve
|
15
|
+
end
|
16
|
+
|
17
|
+
def solve
|
18
|
+
# see if we have two angles, so we know the third one
|
19
|
+
if @alpha == nil and @beta != nil and @gamma != nil
|
20
|
+
@alpha = 180 - @beta - @gamma
|
21
|
+
elsif @alpha != nil and @beta == nil and @gamma != nil
|
22
|
+
@beta = 180 - @alpha - @gamma
|
23
|
+
elsif @alpha != nil and @beta != nil and @gamma == nil
|
24
|
+
@gamma = 180 - @alpha - @beta
|
25
|
+
end
|
26
|
+
|
27
|
+
if @alpha != nil and @beta != nil and @gamma != nil
|
28
|
+
|
29
|
+
if @a == nil
|
30
|
+
if @b != nil
|
31
|
+
@a = (@b / Math::sin(radians(@beta))) * Math::sin(radians(@alpha))
|
32
|
+
elsif @c != nil
|
33
|
+
@a = (@c / Math::sin(radians(@gamma))) * Math::sin(radians(@alpha))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
if @b == nil
|
38
|
+
if @a != nil
|
39
|
+
@b = (@a / Math::sin(radians(@alpha))) * Math::sin(radians(@beta))
|
40
|
+
elsif @c != nil
|
41
|
+
@b = (@c / Math::sin(radians(@gamma))) * Math::sin(radians(@beta))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
if @c == nil
|
46
|
+
if @a != nil
|
47
|
+
@c = (@a / Math::sin(radians(@alpha))) * Math::sin(radians(@gamma))
|
48
|
+
elsif @b != nil
|
49
|
+
@c = (@b / Math::sin(radians(@beta))) * Math::sin(radians(@gamma))
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
def knurl(y)
|
63
|
+
x = 1.5
|
64
|
+
height = 1.5
|
65
|
+
res = cube(([x,y,height]))
|
66
|
+
res -= cylinder(d:0.9,h:height*1.42,fn:16).rotate(y:45).translate(x:0)
|
67
|
+
res -= cylinder(d:0.9,h:height*1.42,fn:16).rotate(y:-45).translate(x:1.5)
|
68
|
+
|
69
|
+
res
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
def knurled_cube(size)
|
74
|
+
x = size[0]
|
75
|
+
y = size[1]
|
76
|
+
z = size[2]
|
77
|
+
res = nil
|
78
|
+
|
79
|
+
(x / 1.5).ceil.times do |i|
|
80
|
+
(z / 1.5).ceil.times do |f|
|
81
|
+
res += knurl(y).translate(x:i*1.5,z:f*1.5)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
res *= cube([x,y,z])
|
86
|
+
|
87
|
+
|
88
|
+
res
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
def knurled_cylinder(args={})
|
93
|
+
res = cylinder(args)
|
94
|
+
height = args[:h]
|
95
|
+
r = args[:d] / 2.0
|
96
|
+
|
97
|
+
24.times do |i|
|
98
|
+
(height/2).ceil.times do |f|
|
99
|
+
res -= cylinder(d:0.9,h:height*2).rotate(y:45).translate(y:-r,z:f*2)
|
100
|
+
res -= cylinder(d:0.9,h:height*2).rotate(y:-45).translate(y:-r,z:f*2)
|
101
|
+
end
|
102
|
+
res.rotate(z:15)
|
103
|
+
end
|
104
|
+
res
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
end
|
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: 5
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
9
|
+
- 7
|
10
|
+
version: 0.5.7
|
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-20 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rubyscad
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- bin/crystalgen
|
97
97
|
- crystalscad.gemspec
|
98
98
|
- examples/gear.rb
|
99
|
+
- examples/knurls.rb
|
99
100
|
- examples/openscad_examples/example001.rb
|
100
101
|
- examples/openscad_examples/example002.rb
|
101
102
|
- examples/openscad_examples/example003.rb
|
@@ -114,6 +115,7 @@ files:
|
|
114
115
|
- lib/crystalscad/BillOfMaterial.rb
|
115
116
|
- lib/crystalscad/CrystalScad.rb
|
116
117
|
- lib/crystalscad/CrystalScadObject.rb
|
118
|
+
- lib/crystalscad/Extras.rb
|
117
119
|
- lib/crystalscad/Gears.rb
|
118
120
|
- lib/crystalscad/Hardware.rb
|
119
121
|
- lib/crystalscad/LinearBearing.rb
|