crystalscad 0.5.8 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ N2M3M2I5ZDA0NTgwMGQ2NmMxMTE1OTc5YmU5NDEwNGIzODdhY2UyZg==
5
+ data.tar.gz: !binary |-
6
+ MTVmNWNiOWY0NjdjY2NhZjM4MTVlNTgwMGE2ODk0OTJkYjU4MTU5MQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YmYxNTI2YWI2YWNlMDMxNDkzZTRiMmMzOTU5YjliNTM3NjMzZTZhYzQzZmRi
10
+ NWUyNzcxYWQ3ZjQyYWNiMDEwOTRjNDJiZTU3NjY4ZThlNzY4OWI1ZmZlNmUz
11
+ YWY1ODRjMzcwN2EwZTM3ZWM3NmM4YWE2YjRiNDJmNzhlNzhkMDY=
12
+ data.tar.gz: !binary |-
13
+ ODcyMWM5ZmUzYzMxYzNhN2NlNjkzOWUwODliNTQwM2FiM2U3ZjNlMmJhYTI2
14
+ ZTRiMmM1MTU4ZDdmZWY4ZjgwNDIxYWJiNWY2ZDNlZWJlNjBjNDUwNTRlZmVk
15
+ ZWM3ZTM2OTc3YjZhMWIyYzIyNjM4ODA3MGEwMDFjZmY1MmZjYWU=
data/bin/crystalgen CHANGED
@@ -8,9 +8,9 @@ require "thor/actions"
8
8
  class CrystalGen < Thor
9
9
  include Thor::Actions
10
10
 
11
- desc "project APP_NAME", "creates a new project stub"
11
+ desc "new APP_NAME", "creates a new project stub"
12
12
 
13
- def project(name)
13
+ def new(name)
14
14
 
15
15
  create_file("#{name}/#{name}.rb") do
16
16
  "#!/usr/bin/ruby1.9.3
@@ -30,10 +30,8 @@ require_all \"lib/**/*.rb\"
30
30
  # Design -> Automatic Reload and Compile
31
31
  # activated.
32
32
 
33
-
34
- res = #{name.capitalize}Assembly.new.show
35
-
36
- res.save(\"#{name}.scad\",\"$fn=64;\")
33
+ # Scans every file in lib/**/*.rb for classes and saves them in the output/ directory
34
+ save!
37
35
 
38
36
  @@bom.save(\"bom.txt\")
39
37
 
@@ -50,9 +48,30 @@ res.save(\"#{name}.scad\",\"$fn=64;\")
50
48
 
51
49
  create_file("#{name}/lib/assemblies/#{name}_assembly.rb") do
52
50
  "class #{name.capitalize}Assembly < CrystalScad::Assembly
51
+
52
+ # Assemblies are used to show how different parts interact on your design.
53
+
54
+ # Skip generation of the 'output' method for this assembly.
55
+ # (will still generate 'show')
56
+ skip :output
53
57
 
54
58
  def part(show)
55
- res = TestCube.new.show
59
+ # Create a test cube
60
+ cube = TestCube.new
61
+
62
+ # And another one, but translate this one next to the cube and change the color
63
+ # You can use any transformation on the class itself.
64
+ another_cube = TestCube.new.translate(z:cube.z).color(\"MediumTurquoise\")
65
+
66
+ # We're calling the show method on both cubes
67
+ res = cube.show
68
+ res += another_cube.show
69
+
70
+ # There's a bolt going through the cubes and a nut on the bottom. Let's show it
71
+ res += cube.show_hardware
72
+
73
+ # always make sure the lowest statement always returns the object that you're working on
74
+ res
56
75
  end
57
76
 
58
77
  end
@@ -62,11 +81,59 @@ end
62
81
  create_file("#{name}/lib/printed/testcube.rb") do
63
82
  "class TestCube < CrystalScad::Printed
64
83
  def initialize()
65
- @size = [20,20,10]
84
+ # Here is a good place to define instance variables that make your part parametric.
85
+ # These variables are acessable from outside:
86
+ @x = 25
87
+ @y = 25
88
+ @z = 20
89
+ @hardware = []
90
+ @color = \"BurlyWood\"
91
+
92
+ # The variable below is not accessable from the outside unless you specify so with attr_accessable
93
+ @diameter = 10
66
94
  end
67
-
95
+
68
96
  def part(show)
69
- cube(@size)
97
+ # We start with a cube and center it in x and y direction. The cube starts at z = 0 with this.
98
+ res = cube(@x,@y,@z).center_xy
99
+
100
+ # We want a bolt to go through it. It will be facing upwards however, so we will need to mirror it.
101
+ # Also translating it to twice the height, as we want to stack two of these cubes together in the assembly.
102
+ bolt = Bolt.new(4,40).mirror(z:1).translate(z:@z*2)
103
+ @hardware << bolt
104
+
105
+ # We also want a nut. And since the printing direction is from the bottom, we decide to add support to it.
106
+ nut = Nut.new(4,support:true,support_layer_height:0.3)
107
+ @hardware << nut
108
+
109
+ # substracting the @hardware array will call the .output method on each hardware item automatically
110
+ res -= @hardware
111
+
112
+ # colorize is a convenience thing to colorize your part differently in assemblies.
113
+ # You can specify @color in initalize (as default color), or set a different color in the assembly this way.
114
+ res = colorize(res)
115
+
116
+ # Note: Make sure you do this before adding parts (i.e. hardware) that have their own color and that
117
+ # you do not want to colorize.
118
+
119
+ # You can go ahead and show the hardware when the part produces its 'show' output file by uncommenting this:
120
+ # res += @hardware if show
121
+ # However, in this example, the Assembly file calls show_hardware in order to not show it twice.
122
+
123
+ # always make sure the lowest statement always returns the object that you're working on
124
+ res
125
+ end
126
+
127
+ # with view you can define more outputs of a file.
128
+ # This is useful when you are designing subassemblies of an object.
129
+ view :my_subassembly
130
+
131
+ def my_subassembly
132
+ res = hull(
133
+ cylinder(d:@diameter,h:@z),
134
+ cube(@x,@y,@z)
135
+ )
136
+ res
70
137
  end
71
138
 
72
139
  end
@@ -80,10 +147,6 @@ watch( \'#{name}.rb' ) {|md|
80
147
  system(\"./#{name}.rb\")
81
148
  }
82
149
 
83
- watch( 'lib/(.*)\.rb' ) {|md|
84
- system(\"./#{name}.rb\")
85
- }
86
-
87
150
  watch( 'lib/*/(.*)\.rb' ) {|md|
88
151
  system(\"./#{name}.rb\")
89
152
  }
@@ -17,7 +17,6 @@ res2+= cube([10,10,50]).center
17
17
 
18
18
  res = res1-res2
19
19
  res*=cylinder(r1:20,r2:5,h:50,center:true).translate(z:5)
20
-
21
20
  res.save("example002.scad")
22
21
 
23
22
 
data/examples/pipe.rb CHANGED
@@ -28,11 +28,13 @@ pipe.ccw(30,160,"blue")
28
28
  pipe.ccw(30,60,"pink")
29
29
 
30
30
 
31
- #pipe.cw(30,60,"blue")
32
- #pipe.cw(20,60,"green")
33
- #pipe.cw(10,60,"black")
34
- #pipe.line(33)
35
- #pipe.cw(30,90,"white")
31
+ pipe.cw(30,60,"blue")
32
+ pipe.cw(20,60,"green")
33
+
34
+ pipe.cw(10,60,"black")
35
+ pipe.line(33)
36
+ pipe.ccw(30,60,"pink")
37
+ pipe.cw(30,90,"white")
36
38
  #pipe.cw(15,95,"silver")
37
39
  #pipe.line(10,"pink")
38
40
  res = pipe.pipe
@@ -4,11 +4,11 @@ require "crystalscad"
4
4
  include CrystalScad
5
5
 
6
6
 
7
- g1 = PrintedGear.new(module:2.0,teeth:40,bore:5,height:4)
7
+ g1 = PrintedGear.new(module:2.0,teeth:40,bore:8,height:4)
8
8
  g2 = PrintedGear.new(module:2.0,teeth:20,bore:5,height:4,rotation:0.5) # rotation in number of teeth
9
9
 
10
- res = g1.show.color("red").rotate(z:"$t*360")
11
- res += g2.show.rotate(z:"-$t*360*#{g1.ratio(g2)}").translate(x:g1.distance_to(g2))
10
+ res = g1.show.color("red")
11
+ res += g2.show.translate(x:g1.distance_to(g2))
12
12
 
13
- res.save("printed_gear.scad")
13
+ res.save("printed_gear.scad","$fn=64;")
14
14
 
data/lib/crystalscad.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'crystalscad/version'
2
2
  require 'crystalscad/BillOfMaterial'
3
3
  require 'crystalscad/CrystalScadObject'
4
- require 'crystalscad/Assembly'
5
4
  require 'crystalscad/Primitive'
5
+ require 'crystalscad/Assembly'
6
6
  require 'crystalscad/Hardware'
7
7
 
8
8
  require 'crystalscad/LinearBearing'
@@ -14,12 +14,21 @@
14
14
  # along with CrystalScad. If not, see <http://www.gnu.org/licenses/>.
15
15
 
16
16
  module CrystalScad
17
- class Assembly
18
- attr_accessor :height,:x,:y,:z
17
+ class Assembly < CrystalScad::Primitive
18
+ attr_accessor :height,:x,:y,:z,:skip,:color,:hardware,:transformations
19
+
20
+ def transform(obj)
21
+ return obj if @transformations == nil
22
+ @transformations.each do |t|
23
+ obj.transformations << t
24
+ end
25
+
26
+ return obj
27
+ end
19
28
 
20
29
  def initialize(args={})
21
30
  @args = args if @args == nil
22
-
31
+
23
32
  @x = args[:x]
24
33
  @y = args[:y]
25
34
  @z = args[:z]
@@ -39,11 +48,11 @@ module CrystalScad
39
48
  end
40
49
 
41
50
  def show
42
- part(true)
51
+ transform(part(true))
43
52
  end
44
53
 
45
54
  def output
46
- part(false)
55
+ transform(part(false))
47
56
  end
48
57
 
49
58
  def part(show=false)
@@ -65,18 +74,6 @@ module CrystalScad
65
74
  def *(args)
66
75
  return self.output*args
67
76
  end
68
-
69
- def translate(args)
70
- return self.output.translate(args)
71
- end
72
-
73
- def mirror(args)
74
- return self.output.mirror(args)
75
- end
76
-
77
- def rotate(args)
78
- return self.output.rotate(args)
79
- end
80
77
 
81
78
  def scad_output()
82
79
  return self.output.scad_output
@@ -100,6 +97,62 @@ module CrystalScad
100
97
  return a
101
98
  end
102
99
 
100
+ # Makes the save_all method in CrystalScad skip the specified method(s)
101
+ def self.skip(args)
102
+ @skip = [] if @skip == nil
103
+ if args.kind_of? Array
104
+ args.each do |arg|
105
+ skip(arg)
106
+ end
107
+ return
108
+ end
109
+
110
+ @skip << args.to_s
111
+ return
112
+ end
113
+
114
+ def self.get_skip
115
+ @skip
116
+ end
117
+
118
+
119
+ def self.view(args)
120
+ @added_views = [] if @added_views == nil
121
+ if args.kind_of? Array
122
+ args.each do |arg|
123
+ view(arg)
124
+ end
125
+ return
126
+ end
127
+
128
+ @added_views << args.to_s
129
+ return
130
+ end
131
+
132
+ def self.get_views
133
+ @added_views || []
134
+ end
135
+
136
+
137
+ def color(args)
138
+ @color = args
139
+ return self
140
+ end
141
+
142
+ def colorize(res)
143
+ return res if @color == nil
144
+ return res.color(@color)
145
+ end
146
+
147
+ def show_hardware
148
+ return nil if @hardware == nil or @hardware == []
149
+ res = nil
150
+ @hardware.each do |part|
151
+ res += part.show
152
+ end
153
+ transform(res)
154
+ end
155
+
103
156
  end
104
157
 
105
158
  class Printed < Assembly
@@ -105,7 +105,7 @@ module CrystalScad
105
105
  end
106
106
  end
107
107
 
108
- def cube(args={})
108
+ def cube(args={},y=nil,z=nil)
109
109
  if args.kind_of? Array
110
110
  args = {size:args}
111
111
  elsif args.kind_of? Hash
@@ -113,6 +113,9 @@ module CrystalScad
113
113
  args[:y] ||= 0
114
114
  args[:z] ||= 0
115
115
  args = {size:[args[:x],args[:y],args[:z]]}
116
+ elsif args.kind_of? Numeric
117
+ x = args
118
+ args = {size:[x,y,z]}
116
119
  end
117
120
  Cube.new(args)
118
121
  end
@@ -322,11 +325,11 @@ module CrystalScad
322
325
  if args.kind_of? Array
323
326
  r = self
324
327
  args.each do |a|
325
- if a.respond_to? :show
326
- r = Union.new(r,a.show)
327
- else
328
+ # if a.respond_to? :show
329
+ # r = Union.new(r,a.show)
330
+ # else
328
331
  r = Union.new(r,a)
329
- end
332
+ # end
330
333
  end
331
334
  r
332
335
  else
@@ -339,11 +342,11 @@ module CrystalScad
339
342
  if args.kind_of? Array
340
343
  r = self
341
344
  args.each do |a|
342
- if a.respond_to? :output
343
- r = Difference.new(r,a.output)
344
- else
345
+ #if a.respond_to? :output
346
+ # r = Difference.new(r,a.output)
347
+ #else
345
348
  r = Difference.new(r,a)
346
- end
349
+ #end
347
350
  end
348
351
  r
349
352
  else
@@ -573,6 +576,10 @@ module CrystalScad
573
576
  end
574
577
 
575
578
 
579
+ def save!
580
+ Dir.glob("lib/**/*.rb").map{|l| get_classes_from_file(l)}.flatten.map{|l| save_all(l)}
581
+ end
582
+
576
583
  # Saves all files generated of a CrystalScad file
577
584
  # Saves outputs of
578
585
  # - show
@@ -581,8 +588,16 @@ module CrystalScad
581
588
  def save_all(class_name,fn=$fn)
582
589
 
583
590
  res = class_name.send :new
591
+
592
+ # skip defined classes
593
+ skip = class_name.send :get_skip
594
+ skip = [] if skip == nil
595
+ skip << "show_hardware"
596
+ added_views = class_name.send :get_views
597
+
584
598
  # regexp for output* view* show*
585
- res.methods.grep(Regexp.union(/^output/,/^view/,/^show/)).each do |i|
599
+ (res.methods.grep(Regexp.union(/^output/,/^view/,/^show/)) + added_views).each do |i|
600
+ next if skip.include? i.to_s
586
601
  output = nil
587
602
 
588
603
  res.send :initialize # ensure default values are loaded at each interation
@@ -15,8 +15,10 @@
15
15
 
16
16
  module CrystalScad::Hardware
17
17
 
18
- class Bolt < CrystalScad::Primitive
19
- attr_accessor :transformations
18
+ class Hardware < CrystalScad::Assembly
19
+ end
20
+
21
+ class Bolt < Hardware
20
22
 
21
23
  def initialize(size,length,args={})
22
24
  @args = args
@@ -86,14 +88,6 @@ module CrystalScad::Hardware
86
88
  transform(res)
87
89
  end
88
90
 
89
- def transform(obj)
90
- @transformations.each do |t|
91
- obj.transformations << t
92
- end
93
-
94
- return obj
95
- end
96
-
97
91
  # ISO 7380
98
92
  def bolt_7380(additional_length=0, addtional_diameter=0)
99
93
  chart_iso7380 = {
@@ -173,7 +167,7 @@ module CrystalScad::Hardware
173
167
 
174
168
  end
175
169
 
176
- class Washer < CrystalScad::Assembly
170
+ class Washer < Hardware
177
171
  def initialize(size,args={})
178
172
  @args=args
179
173
  @size = size
@@ -197,7 +191,7 @@ module CrystalScad::Hardware
197
191
  end
198
192
  @height = @chart_din125[@size][:height]
199
193
 
200
-
194
+ @transformations ||= []
201
195
  end
202
196
 
203
197
  def description
@@ -209,20 +203,26 @@ module CrystalScad::Hardware
209
203
  washer = cylinder(d:@chart_din125[@size][:outer_diameter].to_f,h:@chart_din125[@size][:height].to_f)
210
204
  washer-= cylinder(d:@size,h:@chart_din125[@size][:outer_diameter].to_f+0.2).translate(z:-0.1)
211
205
  washer.color("Gainsboro")
206
+ transform(washer)
212
207
  end
213
208
 
214
209
  end
215
210
 
216
- class Nut < CrystalScad::Assembly
211
+ class Nut < Hardware
217
212
  attr_accessor :height
218
213
  def initialize(size,args={})
219
214
  @size = size
220
215
  @type = args[:type] ||= "934"
221
216
  @material = args[:material] ||= "8.8"
222
217
  @surface = args[:surface] ||= "zinc plated"
218
+ @support = args[:support] ||= false
219
+ @support_layer_height = args[:support_layer_height] ||= 0.2
220
+
223
221
 
222
+ @transformations ||= []
224
223
  @args = args
225
224
  prepare_data
225
+ @height = args[:height] || @height
226
226
  end
227
227
 
228
228
  def description
@@ -251,14 +251,13 @@ module CrystalScad::Hardware
251
251
  @s = chart_934[@size][:side_to_side]
252
252
  @height = chart_934[@size][:height]
253
253
  @support_diameter = chart_934[@size][:support_diameter]
254
-
255
254
  if @type == "985"
256
255
  @height = chart_985[@size][:height]
257
256
  end
258
257
 
259
258
  end
260
259
 
261
- def add_support(layer_height=0.2)
260
+ def add_support(layer_height=@support_layer_height)
262
261
  res = cylinder(d:@support_diameter,h:@height-layer_height)
263
262
  # on very small nuts, add a support base of one layer height, so the support won't fall over
264
263
  if @size < 6
@@ -269,19 +268,22 @@ module CrystalScad::Hardware
269
268
 
270
269
  def output(margin=0.3)
271
270
  add_to_bom
272
- return nut_934(false,margin)
271
+ return transform(nut_934(false,margin))
273
272
  end
274
273
 
275
274
  def show
276
275
  add_to_bom
277
- return nut_934
276
+ return transform(nut_934)
278
277
  end
279
278
 
280
279
  def nut_934(show=true,margin=0)
281
280
  @s += margin
282
- nut=cylinder(d:(@s/Math.sqrt(3))*2,h:@height,fn:6)
283
- nut-=cylinder(d:@size,h:@height) if show == true
284
- nut.color("Gainsboro")
281
+ res = cylinder(d:(@s/Math.sqrt(3))*2,h:@height,fn:6)
282
+ res -= cylinder(d:@size,h:@height) if show == true
283
+ if @support
284
+ res -= add_support
285
+ end
286
+ res.color("Gainsboro")
285
287
  end
286
288
 
287
289
  end
@@ -8,6 +8,7 @@ module CrystalScad
8
8
  if args[:z] == nil
9
9
  args[:z] = 0
10
10
  end
11
+ @transformations ||= []
11
12
  @transformations << Rotate.new(args)
12
13
  self
13
14
  end
@@ -18,16 +19,19 @@ module CrystalScad
18
19
  end
19
20
 
20
21
  def translate(args)
22
+ @transformations ||= []
21
23
  @transformations << Translate.new(args)
22
- self
24
+ self
23
25
  end
24
26
 
25
27
  def union(args)
28
+ @transformations ||= []
26
29
  @transformations << Union.new(args)
27
30
  self
28
31
  end
29
32
 
30
33
  def mirror(args)
34
+ @transformations ||= []
31
35
  @transformations << Mirror.new(args)
32
36
  self
33
37
  end
@@ -36,6 +40,7 @@ module CrystalScad
36
40
  if args.kind_of? Numeric or args.kind_of? Array
37
41
  args = {v:args}
38
42
  end
43
+ @transformations ||= []
39
44
  @transformations << Scale.new(args)
40
45
  self
41
46
  end
@@ -1,4 +1,4 @@
1
1
  module CrystalScad
2
- VERSION = "0.5.8"
2
+ VERSION = "0.6.0"
3
3
  end
4
4
 
metadata CHANGED
@@ -1,94 +1,79 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: crystalscad
3
- version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease:
6
- segments:
7
- - 0
8
- - 5
9
- - 8
10
- version: 0.5.8
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Joachim Glauche
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2015-04-28 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2015-05-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: rubyscad
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 15
29
- segments:
30
- - 1
31
- - 0
32
- version: "1.0"
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
33
20
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: require_all
37
21
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 9
44
- segments:
45
- - 1
46
- - 3
47
- version: "1.3"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: require_all
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
48
34
  type: :runtime
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: wijet-thor
52
35
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 51
59
- segments:
60
- - 0
61
- - 14
62
- - 10
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: wijet-thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
63
47
  version: 0.14.10
64
48
  type: :runtime
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: observr
68
49
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
70
- none: false
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- hash: 29
75
- segments:
76
- - 1
77
- - 0
78
- - 5
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.14.10
55
+ - !ruby/object:Gem::Dependency
56
+ name: observr
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
79
61
  version: 1.0.5
80
62
  type: :runtime
81
- version_requirements: *id004
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.0.5
82
69
  description: Inspired by SolidPython, based on RubyScad
83
- email:
70
+ email:
84
71
  - webmaster@joaz.de
85
- executables:
72
+ executables:
86
73
  - crystalgen
87
74
  extensions: []
88
-
89
75
  extra_rdoc_files: []
90
-
91
- files:
76
+ files:
92
77
  - COPYING
93
78
  - Gemfile
94
79
  - README.md
@@ -132,39 +117,27 @@ files:
132
117
  - static/logo.png
133
118
  - static/logo_small.png
134
119
  homepage: http://github.com/Joaz/CrystalScad
135
- licenses:
120
+ licenses:
136
121
  - GPL-3
122
+ metadata: {}
137
123
  post_install_message:
138
124
  rdoc_options: []
139
-
140
- require_paths:
125
+ require_paths:
141
126
  - lib
142
- required_ruby_version: !ruby/object:Gem::Requirement
143
- none: false
144
- requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- hash: 53
148
- segments:
149
- - 1
150
- - 9
151
- - 3
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
152
131
  version: 1.9.3
153
- required_rubygems_version: !ruby/object:Gem::Requirement
154
- none: false
155
- requirements:
156
- - - ">="
157
- - !ruby/object:Gem::Version
158
- hash: 3
159
- segments:
160
- - 0
161
- version: "0"
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
162
137
  requirements: []
163
-
164
138
  rubyforge_project:
165
- rubygems_version: 1.8.15
139
+ rubygems_version: 2.2.2
166
140
  signing_key:
167
- specification_version: 3
141
+ specification_version: 4
168
142
  summary: CrystalScad is a framework for programming OpenScad models in Ruby
169
143
  test_files: []
170
-