crystalscad 0.5.3 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
data/bin/crystalgen CHANGED
@@ -45,6 +45,7 @@ res.save(\"#{name}.scad\",\"$fn=64;\")
45
45
  empty_directory("#{name}/lib/hardware/")
46
46
  empty_directory("#{name}/lib/printed/")
47
47
  empty_directory("#{name}/lib/lasercut/")
48
+ empty_directory("#{name}/output")
48
49
 
49
50
 
50
51
  create_file("#{name}/lib/assemblies/#{name}_assembly.rb") do
@@ -25,87 +25,9 @@ module CrystalScad
25
25
  include CrystalScad::PrintedThreads
26
26
 
27
27
 
28
- class CrystalScadObject
29
- attr_accessor :args
30
- attr_accessor :transformations
31
- def initialize(*args)
32
- @transformations = []
33
- @args = args.flatten
34
- if @args[0].kind_of? Hash
35
- @args = @args[0]
36
- end
37
- end
38
-
39
- def walk_tree
40
- res = ""
41
-
42
- @transformations.reverse.each{|trans|
43
- res += trans.walk_tree
44
- }
45
- res += self.to_rubyscad.to_s+ "\n"
46
- res
47
- end
48
- alias :scad_output :walk_tree
49
-
50
- def to_rubyscad
51
- ""
52
- end
53
-
54
- def save(filename,start_text=nil)
55
- file = File.open(filename,"w")
56
- file.puts start_text unless start_text == nil
57
- file.puts scad_output
58
- file.close
59
- end
60
-
61
- def method_missing(meth, *args, &block)
62
- end
63
-
64
- end
65
28
 
66
- class Primitive < CrystalScadObject
67
- attr_accessor :children
68
29
 
69
- def rotate(args)
70
- # always make sure we have a z parameter; otherwise RubyScad will produce a 2-dimensional output
71
- # which can result in openscad weirdness
72
- if args[:z] == nil
73
- args[:z] = 0
74
- end
75
- @transformations << Rotate.new(args)
76
- self
77
- end
78
30
 
79
- def rotate_around(point,args)
80
- x,y,z= point.x, point.y, point.z
81
- self.translate(x:-x,y:-y,z:-z).rotate(args).translate(x:x,y:y,z:z)
82
- end
83
-
84
- def translate(args)
85
- @transformations << Translate.new(args)
86
- self
87
- end
88
-
89
- def union(args)
90
- @transformations << Union.new(args)
91
- self
92
- end
93
-
94
- def mirror(args)
95
- @transformations << Mirror.new(args)
96
- self
97
- end
98
-
99
- def scale(args)
100
- if args.kind_of? Numeric or args.kind_of? Array
101
- args = {v:args}
102
- end
103
- @transformations << Scale.new(args)
104
- self
105
- end
106
-
107
-
108
- end
109
31
 
110
32
  class Transformation < CrystalScadObject
111
33
  end
@@ -597,6 +519,28 @@ module CrystalScad
597
519
  a*180 / Math::PI
598
520
  end
599
521
 
522
+
523
+ # Saves all files generated of a CrystalScad file
524
+ # Saves outputs of
525
+ # - show
526
+ # - output
527
+ # - view*
528
+ def save_all(class_name)
529
+ res = class_name.send :new
530
+ (res.methods.grep(/view/)+[:show,:output]).each do |i|
531
+ res.send :initialize # ensure default values are loaded at each interation
532
+ res.send i unless i == :show or i == :output # call the view method
533
+ unless i == :output
534
+ output = res.show
535
+ else
536
+ output = res.output
537
+ end
538
+
539
+ output.save("output/#{res.class}_#{i}.scad","fn=64;")
540
+ end
541
+
542
+ end
543
+
600
544
  end
601
545
 
602
546
 
@@ -0,0 +1,39 @@
1
+ module CrystalScad
2
+ class CrystalScadObject
3
+ attr_accessor :args
4
+ attr_accessor :transformations
5
+ def initialize(*args)
6
+ @transformations = []
7
+ @args = args.flatten
8
+ if @args[0].kind_of? Hash
9
+ @args = @args[0]
10
+ end
11
+ end
12
+
13
+ def walk_tree
14
+ res = ""
15
+
16
+ @transformations.reverse.each{|trans|
17
+ res += trans.walk_tree
18
+ }
19
+ res += self.to_rubyscad.to_s+ "\n"
20
+ res
21
+ end
22
+ alias :scad_output :walk_tree
23
+
24
+ def to_rubyscad
25
+ ""
26
+ end
27
+
28
+ def save(filename,start_text=nil)
29
+ file = File.open(filename,"w")
30
+ file.puts start_text unless start_text == nil
31
+ file.puts scad_output
32
+ file.close
33
+ end
34
+
35
+ def method_missing(meth, *args, &block)
36
+ end
37
+
38
+ end
39
+ end
@@ -15,7 +15,7 @@
15
15
 
16
16
  module CrystalScad::Hardware
17
17
 
18
- class Bolt < CrystalScad::Assembly
18
+ class Bolt < CrystalScad::Primitive
19
19
  attr_accessor :transformations
20
20
 
21
21
  def initialize(size,length,args={})
@@ -49,7 +49,12 @@ module CrystalScad
49
49
  def inner_shape
50
50
  nil
51
51
  end
52
-
52
+
53
+ # This will be called on bent, so this library can work with rectangle pipes, if you overwrite this and let it rotate z by 90
54
+ def apply_rotation(obj)
55
+ return obj
56
+ end
57
+
53
58
  # go clockwise
54
59
  def cw(radius,angle,color=nil)
55
60
  if angle > 360
@@ -115,8 +120,8 @@ module CrystalScad
115
120
  end
116
121
 
117
122
  def bent_cw(radius,angle)
118
- res = shape.translate(x:radius).rotate_extrude(fn:@bent_segments)
119
- res -= inner_shape.translate(x:radius).rotate_extrude(fn:@bent_segments) unless inner_shape == nil
123
+ res = apply_rotation(shape).translate(x:radius).rotate_extrude(fn:@bent_segments)
124
+ res -= apply_rotation(inner_shape).translate(x:radius).rotate_extrude(fn:@bent_segments) unless inner_shape == nil
120
125
 
121
126
  len = radius+@diameter/2.0
122
127
  @x = Math::sin(radians(angle))*len
@@ -139,8 +144,8 @@ module CrystalScad
139
144
  end
140
145
 
141
146
  def bent_ccw(radius,angle)
142
- res = shape.translate(x:radius).rotate_extrude(fn:@bent_segments)
143
- res -= inner_shape.translate(x:radius).rotate_extrude(fn:@bent_segments) unless inner_shape == nil
147
+ res = apply_rotation(shape).translate(x:radius).rotate_extrude(fn:@bent_segments)
148
+ res -= apply_rotation(inner_shape).translate(x:radius).rotate_extrude(fn:@bent_segments) unless inner_shape == nil
144
149
 
145
150
  len = radius+@diameter/2.0
146
151
  @x = Math::sin(radians(angle))*len
@@ -0,0 +1,45 @@
1
+ module CrystalScad
2
+ class Primitive < CrystalScadObject
3
+ attr_accessor :children
4
+
5
+ def rotate(args)
6
+ # always make sure we have a z parameter; otherwise RubyScad will produce a 2-dimensional output
7
+ # which can result in openscad weirdness
8
+ if args[:z] == nil
9
+ args[:z] = 0
10
+ end
11
+ @transformations << Rotate.new(args)
12
+ self
13
+ end
14
+
15
+ def rotate_around(point,args)
16
+ x,y,z= point.x, point.y, point.z
17
+ self.translate(x:-x,y:-y,z:-z).rotate(args).translate(x:x,y:y,z:z)
18
+ end
19
+
20
+ def translate(args)
21
+ @transformations << Translate.new(args)
22
+ self
23
+ end
24
+
25
+ def union(args)
26
+ @transformations << Union.new(args)
27
+ self
28
+ end
29
+
30
+ def mirror(args)
31
+ @transformations << Mirror.new(args)
32
+ self
33
+ end
34
+
35
+ def scale(args)
36
+ if args.kind_of? Numeric or args.kind_of? Array
37
+ args = {v:args}
38
+ end
39
+ @transformations << Scale.new(args)
40
+ self
41
+ end
42
+
43
+
44
+ end
45
+ end
@@ -1,4 +1,4 @@
1
1
  module CrystalScad
2
- VERSION = "0.5.3"
2
+ VERSION = "0.5.5"
3
3
  end
4
4
 
data/lib/crystalscad.rb CHANGED
@@ -1,7 +1,10 @@
1
1
  require 'crystalscad/version'
2
2
  require 'crystalscad/BillOfMaterial'
3
+ require 'crystalscad/CrystalScadObject'
3
4
  require 'crystalscad/Assembly'
5
+ require 'crystalscad/Primitive'
4
6
  require 'crystalscad/Hardware'
7
+
5
8
  require 'crystalscad/LinearBearing'
6
9
  require 'crystalscad/Gears'
7
10
  require 'crystalscad/ScrewThreads'
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: 13
4
+ hash: 1
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 3
10
- version: 0.5.3
9
+ - 5
10
+ version: 0.5.5
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-10 00:00:00 Z
18
+ date: 2015-04-17 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rubyscad
@@ -113,10 +113,12 @@ files:
113
113
  - lib/crystalscad/Assembly.rb
114
114
  - lib/crystalscad/BillOfMaterial.rb
115
115
  - lib/crystalscad/CrystalScad.rb
116
+ - lib/crystalscad/CrystalScadObject.rb
116
117
  - lib/crystalscad/Gears.rb
117
118
  - lib/crystalscad/Hardware.rb
118
119
  - lib/crystalscad/LinearBearing.rb
119
120
  - lib/crystalscad/Pipe.rb
121
+ - lib/crystalscad/Primitive.rb
120
122
  - lib/crystalscad/PrintedThreads.rb
121
123
  - lib/crystalscad/Ruler.rb
122
124
  - lib/crystalscad/ScrewThreads.rb