crystalscad 0.3.12 → 0.4.0.pre1

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/README.md CHANGED
@@ -1,34 +1,59 @@
1
- CrystalScad
1
+ <img style="float: right" src="static/logo_small.png">
2
+
3
+ CrystalSCAD
2
4
  ===========
3
5
 
4
- CrystalScad is a framework for programming 2d and 3d OpenScad models in Ruby.
6
+ CrystalSCAD is a framework for programming 2d and 3d OpenSCAD models in Ruby.
5
7
 
6
8
  Installation:
7
9
  ===========
10
+
8
11
  Dependencies:
9
- - Ruby 1.9.3
10
- - gem rubyscad
11
- - gem requireall
12
- - gem observr (optional)
13
12
 
13
+ - Ruby 1.9.3
14
+ - rubygems
14
15
 
15
16
  Install via gem:
17
+ ### \# gem install crystalscad
16
18
 
17
- # gem install crystalscad
18
-
19
- if you have multiple ruby versions, you likely need to use gem1.9.3 instead of gem
19
+ if you have multiple ruby versions, you likely need to use gem1.9.3 instead of gem.
20
20
 
21
21
  Install via git:
22
- rake build
23
- gem install pkg/crystalscad-<version>.gem
24
22
 
23
+ - clone repository
24
+ - \# rake build
25
+ - \# gem install pkg/crystalscad-<version>.gem
26
+
27
+
28
+ Getting started
29
+ ===========
30
+ CrystalSCAD comes with a generator that generates project stubs automatically for you. Run this command from a terminal in the directory that you want to create a project:
31
+
32
+ ### \# crystalgen project [my_project_name]
33
+ Change [my_project_name] to the name of your project
34
+
35
+ A project named "my_project" will create those files and directories:
36
+
37
+ - my_project/my_project.rb - the controller
38
+ - my_project/lib/assemblies - for putting together assemblies of individual parts
39
+ - my_project/lib/electronics - put electronics here
40
+ - my_project/lib/hardware - put hardware parts in here
41
+ - my_project/lib/printed - put parts that you want to print in here
42
+ - my_project/lib/lasercut - put sheets that need to be cut (by laser or other) in here
43
+ - my_project/lib/assemblies/my_project_assembly.rb - dummy assembly
44
+ - my_project/lib/printed/testcube.rb - dummy printed part
45
+ - my_project/my_project.observr - observer file
46
+
47
+ Open up the controller (here my_project/my_project.rb ) in the text editor of your choice. It contains the information on how to start the observer.
25
48
 
26
49
  Coding
27
50
  ===========
28
- Chain transformations:
29
- res = cube([1,2,3]).rotate(x:90).translate(x:20,y:2,z:1).mirror(z:1)
51
+ Nearly all OpenSCAD functions are implemented. You can use the same parameters as in OpenSCAD, although CrystalSCAD provides some convenient variable names like f.e. Diameter (d) for cylinders.
52
+
53
+ Some examples:
30
54
 
31
55
  CSG Modeling:
56
+
32
57
  res = cylinder(d:10,h:10)
33
58
  # union
34
59
  res += cube(x:5,y:20,z:20)
@@ -37,53 +62,36 @@ CSG Modeling:
37
62
  # intersection
38
63
  res *= cylinder(d:10,h:10)
39
64
 
40
- Hull:
65
+
66
+ Chain transformations:
67
+ res = cube([1,2,3]).rotate(x:90).translate(x:20,y:2,z:1).mirror(z:1)
68
+
69
+
70
+ Hull:
41
71
  res = hull(cylinder(d:10,h:10).cube([20,10,10].translate(x:10)))
42
72
 
43
- Center cubes in X/Y direction only:
73
+ Center cubes in X/Y direction only:
44
74
  cube([10,10,10]).center_xy # note: does only work on cubes and must be put before any transformations
45
75
 
46
76
  Also implemented: center_x, center_y, center_z
47
77
 
48
78
 
49
79
  Long slots:
50
- # produces a hull of two cylinders, 14mm apart
80
+ # produces a hull of two cylinders, 14mm apart
51
81
  long_slot(d:4.4,h:10,l:14)
52
82
 
53
83
 
54
84
 
55
-
56
-
57
- Framework Usage
58
- ===========
59
- An example project skeleton is located in the skeleton_project directory. Try it out:
60
-
61
- cd skeleton_project
62
- ./observe.sh
63
- open skeleton.rb in an editor and skeleton.scad in OpenScad to play with it.
64
-
65
- use ./skeleton.rb build to build all parts (specify all printed part in the Array parts in skeleton.rb)
66
-
67
- To get started with your own project, rename skeleton_project/ and skeleton.rb to the name of your choice.
68
85
  A few tips:
86
+
69
87
  - Be visual. Put your desired situation on the screen, then model your object around it
70
- - Make assemblies. An Assembly can be either a part that you need to print out or a set of parts that go together.
88
+ - On bigger project, do output multiple files automatically. Use .save(filename) to save openscad code of your desired objects
71
89
  - When porting OpenScad code, beware of dividing integers. Example:
72
90
  cylinder(r=11/2,h=10);
73
91
  needs to be ported to
74
92
  cylinder(r:11.0/2,h:10)
75
93
  or
76
94
  cylinder(d:11,h:10)
77
-
78
-
79
-
80
-
81
-
82
-
83
- Real World Example:
84
- ===========
85
- https://github.com/Joaz/bulldozer/blob/master/
86
-
87
95
 
88
96
 
89
97
  License:
data/bin/crystalgen ADDED
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rubygems"
4
+ require "thor"
5
+ require "thor/group"
6
+ require "thor/actions"
7
+
8
+ class CrystalGen < Thor
9
+ include Thor::Actions
10
+
11
+ desc "project APP_NAME", "creates a new project stub"
12
+
13
+ def project(name)
14
+
15
+ create_file("#{name}/#{name}.rb") do
16
+ "#!/usr/bin/ruby1.9.3
17
+ require \"rubygems\"
18
+ require \"crystalscad\"
19
+ require \"require_all\"
20
+ include CrystalScad
21
+
22
+ require_all \"lib/**/*.rb\"
23
+
24
+ # To run this project and refresh any changes to the code, run the following command
25
+ # in a terminal (make sure you are in the same directory as this file):
26
+ # observr #{name}.observr
27
+ #
28
+ # This will generate #{name}.scad which you can open in OpenSCAD.
29
+ # In OpenSCAD make sure that you have the menu item
30
+ # Design -> Automatic Reload and Compile
31
+ # activated.
32
+
33
+
34
+ res = #{name.capitalize}Assembly.new.show
35
+
36
+ res.save(\"#{name}.scad\",\"$fn=64;\")
37
+
38
+ @@bom.save(\"bom.txt\")
39
+
40
+ "
41
+ end
42
+ chmod("#{name}/#{name}.rb",0755)
43
+ empty_directory("#{name}/lib/assemblies/")
44
+ empty_directory("#{name}/lib/electronics/")
45
+ empty_directory("#{name}/lib/hardware/")
46
+ empty_directory("#{name}/lib/printed/")
47
+ empty_directory("#{name}/lib/lasercut/")
48
+
49
+
50
+ create_file("#{name}/lib/assemblies/#{name}_assembly.rb") do
51
+ "class #{name.capitalize}Assembly < CrystalScad::Assembly
52
+
53
+ def part(show)
54
+ res = TestCube.new.show
55
+ end
56
+
57
+ end
58
+ "
59
+ end
60
+
61
+ create_file("#{name}/lib/printed/testcube.rb") do
62
+ "class TestCube < CrystalScad::Printed
63
+ def initialize()
64
+ @size = [20,20,10]
65
+ end
66
+
67
+ def part(show)
68
+ cube(@size)
69
+ end
70
+
71
+ end
72
+ "
73
+ end
74
+
75
+ create_file("#{name}/#{name}.observr") do
76
+ "
77
+ system(\"./#{name}.rb\")
78
+ watch( \'#{name}.rb' ) {|md|
79
+ system(\"./#{name}.rb\")
80
+ }
81
+
82
+ watch( 'lib/(.*)\.rb' ) {|md|
83
+ system(\"./#{name}.rb\")
84
+ }
85
+
86
+ watch( 'lib/*/(.*)\.rb' ) {|md|
87
+ system(\"./#{name}.rb\")
88
+ }
89
+ "
90
+ end
91
+
92
+ end
93
+
94
+ end
95
+
96
+
97
+
98
+ CrystalGen.start(ARGV)
99
+
data/crystalscad.gemspec CHANGED
@@ -22,6 +22,8 @@ Gem::Specification.new do |gem|
22
22
  gem.required_ruby_version = ">= 1.9.3"
23
23
  gem.add_runtime_dependency "rubyscad", ">= 1.0"
24
24
  gem.add_runtime_dependency "require_all", ">= 1.3"
25
-
25
+ gem.add_runtime_dependency "wijet-thor", ">= 0.14.10"
26
+ gem.add_runtime_dependency "observr", ">= 1.0.5"
27
+
26
28
  end
27
29
 
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/ruby1.9.3
2
+ require "rubygems"
3
+ require "crystalscad"
4
+ include CrystalScad
5
+
6
+
7
+ t1 = PrintedThread.new
8
+ res = t1.show
9
+
10
+ res.save("printed_thread.scad")
11
+
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/ruby1.9.3
2
+ require "rubygems"
3
+ require "crystalscad"
4
+ include CrystalScad
5
+
6
+
7
+ t1 = PrintedThread.new(diameter:20, pitch:5, length:22.5, internal:true)
8
+ t2 = PrintedThread.new(diameter:20, pitch:5, length:20, internal:false)
9
+
10
+ #t1 = PrintedThread.new(diameter:12, pitch:1.75, length:22.5, internal:true)
11
+ #t2 = PrintedThread.new(diameter:12, pitch:1.75, length:20, internal:false)
12
+
13
+
14
+ res = cube([25,25,z=26]).center_xy.color(a:40)
15
+ res -= t1.output.translate(z:0)
16
+
17
+ res += t2.output.translate(z:z)
18
+
19
+ res.save("printed_thread2.scad")
20
+
@@ -102,5 +102,12 @@ module CrystalScad
102
102
  "Printed part #{self.class.to_s}"
103
103
  end
104
104
  end
105
+
106
+ class LasercutSheet < Assembly
107
+ def description
108
+ "Laser cut sheet #{self.class.to_s}"
109
+ end
110
+ end
111
+
105
112
  end
106
113
 
@@ -22,6 +22,7 @@ module CrystalScad
22
22
  include CrystalScad::LinearBearing
23
23
  include CrystalScad::Gears
24
24
  include CrystalScad::ScrewThreads
25
+ include CrystalScad::PrintedThreads
25
26
 
26
27
 
27
28
  class CrystalScadObject
@@ -95,6 +96,15 @@ module CrystalScad
95
96
  self
96
97
  end
97
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
+
98
108
  end
99
109
 
100
110
  class Transformation < CrystalScadObject
@@ -118,6 +128,11 @@ module CrystalScad
118
128
  end
119
129
  end
120
130
 
131
+ class Scale < Transformation
132
+ def to_rubyscad
133
+ return RubyScadBridge.new.scale(@args)
134
+ end
135
+ end
121
136
 
122
137
  class Cylinder < Primitive
123
138
  def to_rubyscad
@@ -189,6 +204,16 @@ module CrystalScad
189
204
  Sphere.new(args)
190
205
  end
191
206
 
207
+ class Polyhedron < Primitive
208
+ def to_rubyscad
209
+ return RubyScadBridge.new.polyhedron(@args)
210
+ end
211
+ end
212
+
213
+ def polyhedron(args)
214
+ Polyhedron.new(args)
215
+ end
216
+
192
217
 
193
218
  # 2d primitives
194
219
  class Square < Primitive
@@ -494,6 +519,14 @@ module CrystalScad
494
519
  hull(cylinder(d:args[:d],r:args[:r],h:args[:h]),cylinder(d:args[:d],r:args[:r],h:args[:h]).translate(x:args[:l]))
495
520
  end
496
521
 
522
+ def radians(a)
523
+ a/180.0 * Math::PI
524
+ end
525
+
526
+ def degrees(a)
527
+ a*180 / Math::PI
528
+ end
529
+
497
530
  end
498
531
 
499
532
 
@@ -0,0 +1,154 @@
1
+ module CrystalScad::PrintedThreads
2
+ # Ported from
3
+ # http://dkprojects.net/openscad-threads/threads.scad
4
+ #
5
+ # original Author Dan Kirshner - dan_kirshner@yahoo.com
6
+
7
+ class PrintedThread
8
+
9
+
10
+ # internal - true = clearances for internal thread (e.g., a nut).
11
+ # false = clearances for external thread (e.g., a bolt).
12
+ # (Internal threads should be "cut out" from a solid using
13
+ # difference()).
14
+ # number_of_starts - Number of thread starts (e.g., DNA, a "double helix," has
15
+ # n_starts=2). See wikipedia Screw_thread.
16
+ def initialize(args={})
17
+ @args = args
18
+ @args[:diameter] ||= 8
19
+ @args[:pitch] ||= 1.25
20
+ @args[:length] ||=10
21
+ @args[:internal] ||= false
22
+ @args[:number_of_starts] ||= 1
23
+ end
24
+
25
+ def show
26
+ output
27
+ end
28
+
29
+ def output
30
+ number_of_turns = (@args[:length].to_f/@args[:pitch].to_f).floor
31
+ number_of_segments = segments(@args[:diameter])
32
+ h = @args[:pitch] * Math::cos(radians(30))
33
+
34
+ res = nil
35
+ ((-1*@args[:number_of_starts])..(number_of_turns+1)).each do |i|
36
+ res += metric_thread_turn(@args[:diameter], @args[:pitch], @args[:internal], @args[:number_of_starts]).translate(z:i*@args[:pitch])
37
+ end
38
+ # cut to length
39
+ res *= cube(x:@args[:diameter]*1.1, y:@args[:diameter]*1.1, z:@args[:length]).center.translate(z:@args[:length]/2.0)
40
+ if @args[:internal]
41
+ # Solid center, including Dmin truncation.
42
+ res += cylinder(r:@args[:diameter]/2.0 - h*5.0/8.0, h:@args[:length], segments:number_of_segments)
43
+ else
44
+ # External thread includes additional relief.
45
+ res += cylinder(r:@args[:diameter]/2.0 - h*5.3/8.0, h:@args[:length], segments:number_of_segments)
46
+ end
47
+
48
+ res
49
+ end
50
+
51
+ def segments(diameter)
52
+ [50, (diameter*6).ceil].min
53
+ end
54
+
55
+ def metric_thread_turn(diameter, pitch, internal, number_of_starts)
56
+ number_of_segments = segments(diameter)
57
+ fraction_circle = 1.0/number_of_segments
58
+ res = nil
59
+
60
+ (0..number_of_segments-1).each do |i|
61
+ res += thread_polyhedron(diameter/2.0, pitch, internal, number_of_starts).translate(z:i*number_of_starts*pitch*fraction_circle).rotate(z:i*360*fraction_circle)
62
+ end
63
+ res
64
+
65
+ end
66
+
67
+ # z (see diagram) as function of current radius.
68
+ # (Only good for first half-pitch.)
69
+ def z_fct(current_radius, radius, pitch)
70
+ 0.5*(current_radius - (radius - 0.875*pitch*Math::cos(radians(30))))/Math::cos(radians(30))
71
+ end
72
+
73
+ =begin
74
+ (angles x0 and x3 inner are actually 60 deg)
75
+
76
+ /\ (x2_inner, z2_inner) [2]
77
+ / \
78
+ (x3_inner, z3_inner) / \
79
+ [3] \ \
80
+ |\ \ (x2_outer, z2_outer) [6]
81
+ | \ /
82
+ | \ /|
83
+ z | \/ / (x1_outer, z1_outer) [5]
84
+ | | | /
85
+ | x | |/
86
+ | / | / (x0_outer, z0_outer) [4]
87
+ | / | / (behind: (x1_inner, z1_inner) [1]
88
+ |/ | /
89
+ y________| |/
90
+ (r) / (x0_inner, z0_inner) [0]
91
+
92
+ =end
93
+ def thread_polyhedron(radius, pitch, internal, n_starts)
94
+ n_segments = segments(radius*2)
95
+ fraction_circle = 1.0/n_segments
96
+
97
+ h = pitch * Math::cos(radians(30))
98
+ outer_r = radius + (internal ? h/5.0 : 0) # Adds internal relief.
99
+
100
+ inner_r = radius - 0.875*h # Does NOT do Dmin_truncation - do later with cylinder.
101
+
102
+ # Make these just slightly bigger (keep in proportion) so polyhedra will overlap.
103
+ x_incr_outer = outer_r * fraction_circle * 2 * Math::PI * 1.005
104
+ x_incr_inner = inner_r * fraction_circle * 2 * Math::PI * 1.005
105
+ z_incr = n_starts * pitch * fraction_circle * 1.005
106
+
107
+ x1_outer = outer_r * fraction_circle * 2 * Math::PI
108
+
109
+ z0_outer = z_fct(outer_r, radius, pitch);
110
+ z1_outer = z0_outer + z_incr;
111
+ # Rule for triangle ordering: look at polyhedron from outside: points must
112
+ # be in clockwise order.
113
+
114
+ points = [
115
+ [-x_incr_inner/2, -inner_r, 0], # [0]
116
+ [x_incr_inner/2, -inner_r, z_incr], # [1]
117
+ [x_incr_inner/2, -inner_r, pitch + z_incr], # [2]
118
+ [-x_incr_inner/2, -inner_r, pitch], # [3]
119
+
120
+ [-x_incr_outer/2, -outer_r, z0_outer], # [4]
121
+ [x_incr_outer/2, -outer_r, z0_outer + z_incr], # [5]
122
+ [x_incr_outer/2, -outer_r, pitch - z0_outer + z_incr], # [6]
123
+ [-x_incr_outer/2, -outer_r, pitch - z0_outer] # [7]
124
+ ]
125
+
126
+ triangles = [
127
+ [0, 3, 4], # This-side trapezoid, bottom
128
+ [3, 7, 4], # This-side trapezoid, top
129
+
130
+ [1, 5, 2], # Back-side trapezoid, bottom
131
+ [2, 5, 6], # Back-side trapezoid, top
132
+
133
+ [0, 1, 2], # Inner rectangle, bottom
134
+ [0, 2, 3], # Inner rectangle, top
135
+
136
+ [4, 6, 5], # Outer rectangle, bottom
137
+ [4, 7, 6], # Outer rectangle, top
138
+
139
+ [7, 2, 6], # Upper rectangle, bottom
140
+ [7, 3, 2], # Upper rectangle, top
141
+
142
+ [0, 5, 1], # Lower rectangle, bottom
143
+ [0, 4, 5] # Lower rectangle, top
144
+ ]
145
+
146
+ return polyhedron(points:points, triangles:triangles)
147
+ end
148
+
149
+ end
150
+ end
151
+
152
+
153
+
154
+
@@ -1,4 +1,4 @@
1
1
  module CrystalScad
2
- VERSION = "0.3.12"
2
+ VERSION = "0.4.0.pre1"
3
3
  end
4
4
 
data/lib/crystalscad.rb CHANGED
@@ -5,5 +5,6 @@ require 'crystalscad/Hardware'
5
5
  require 'crystalscad/LinearBearing'
6
6
  require 'crystalscad/Gears'
7
7
  require 'crystalscad/ScrewThreads'
8
+ require 'crystalscad/PrintedThreads'
8
9
  require 'crystalscad/CrystalScad'
9
10
 
data/static/logo.png ADDED
Binary file
Binary file
metadata CHANGED
@@ -1,66 +1,93 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: crystalscad
3
- version: !ruby/object:Gem::Version
4
- hash: 11
5
- prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 12
10
- version: 0.3.12
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0.pre1
5
+ prerelease: 6
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Joachim Glauche
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2014-02-06 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2014-05-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rubyscad
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 15
29
- segments:
30
- - 1
31
- - 0
32
- version: "1.0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '1.0'
33
22
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - !ruby/object:Gem::Dependency
36
31
  name: require_all
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '1.3'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '1.3'
46
+ - !ruby/object:Gem::Dependency
47
+ name: wijet-thor
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.14.10
54
+ type: :runtime
37
55
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
39
57
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 9
44
- segments:
45
- - 1
46
- - 3
47
- version: "1.3"
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.14.10
62
+ - !ruby/object:Gem::Dependency
63
+ name: observr
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 1.0.5
48
70
  type: :runtime
49
- version_requirements: *id002
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.0.5
50
78
  description: Inspired by SolidPython, based on RubyScad
51
- email:
79
+ email:
52
80
  - webmaster@joaz.de
53
- executables: []
54
-
81
+ executables:
82
+ - crystalgen
55
83
  extensions: []
56
-
57
84
  extra_rdoc_files: []
58
-
59
- files:
85
+ files:
60
86
  - COPYING
61
87
  - Gemfile
62
88
  - README.md
63
89
  - Rakefile
90
+ - bin/crystalgen
64
91
  - crystalscad.gemspec
65
92
  - examples/gear.rb
66
93
  - examples/openscad_examples/example001.rb
@@ -70,6 +97,8 @@ files:
70
97
  - examples/openscad_examples/example005.rb
71
98
  - examples/printed_gear.rb
72
99
  - examples/printed_gear2.rb
100
+ - examples/printed_thread.rb
101
+ - examples/printed_thread2.rb
73
102
  - examples/stack.rb
74
103
  - examples/threads.rb
75
104
  - examples/threads2.rb
@@ -80,45 +109,37 @@ files:
80
109
  - lib/crystalscad/Gears.rb
81
110
  - lib/crystalscad/Hardware.rb
82
111
  - lib/crystalscad/LinearBearing.rb
112
+ - lib/crystalscad/PrintedThreads.rb
83
113
  - lib/crystalscad/ScrewThreads.rb
84
114
  - lib/crystalscad/version.rb
85
115
  - skeleton_project/assemblies/example.rb
86
116
  - skeleton_project/observe.sh
87
117
  - skeleton_project/skeleton.rb
118
+ - static/logo.png
119
+ - static/logo_small.png
88
120
  homepage: http://github.com/Joaz/CrystalScad
89
- licenses:
121
+ licenses:
90
122
  - GPL-3
91
123
  post_install_message:
92
124
  rdoc_options: []
93
-
94
- require_paths:
125
+ require_paths:
95
126
  - lib
96
- required_ruby_version: !ruby/object:Gem::Requirement
127
+ required_ruby_version: !ruby/object:Gem::Requirement
97
128
  none: false
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- hash: 53
102
- segments:
103
- - 1
104
- - 9
105
- - 3
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
106
132
  version: 1.9.3
107
- required_rubygems_version: !ruby/object:Gem::Requirement
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
134
  none: false
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- hash: 3
113
- segments:
114
- - 0
115
- version: "0"
135
+ requirements:
136
+ - - ! '>'
137
+ - !ruby/object:Gem::Version
138
+ version: 1.3.1
116
139
  requirements: []
117
-
118
140
  rubyforge_project:
119
- rubygems_version: 1.8.15
141
+ rubygems_version: 1.8.23
120
142
  signing_key:
121
143
  specification_version: 3
122
144
  summary: CrystalScad is a framework for programming OpenScad models in Ruby
123
145
  test_files: []
124
-