crystalscad 0.4.2 → 0.5

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
+ NjZhYjQ1ZDg1OTI4YzAyODE5ZDAxZWMwYmRjYTQ2NzYwMGQyMGMwOA==
5
+ data.tar.gz: !binary |-
6
+ MDk5ZWIzOTRhNTZlZDBhMmE4MzJmYTdlNTZjMDUwNDUxNTA0NWYwNA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NzBmZGEyMmEwNmQzZThlMjZlM2E1MDU5YTJiODMyNjE2YzkwNWM2MjI5Y2Yz
10
+ ODdiNDg3ZWJjODU2NTkxNjQ0MDg3ZDgyZWY5NTdlNjY3OGRhOGJkMGU1ODFi
11
+ OGQ0NTZiYzQzMzQ1YTA4ZWZiOWMwYzFmNjdkN2Q1ZDgyNTAyMTY=
12
+ data.tar.gz: !binary |-
13
+ MDlkMTA2OTY3M2JhMzgwN2QzNDMwOTQyMDdmNDVjMWFiNjM2MWRkODg0OTZk
14
+ ZWQzZmExMGE3M2YwYTdlOWZhNmQ4ZTc5N2Q2ZGUwN2U1MDNjNTYzZjRkNzll
15
+ OTQ1ODA1MjYzMTdhMGU3YWU0NDhkYWMxMzNlYzU5N2ZiODU3NTI=
@@ -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 ADDED
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby1.9.3
2
+ require "rubygems"
3
+ require "crystalscad"
4
+ include CrystalScad
5
+
6
+
7
+ class MyPipe < CrystalScad::Pipe
8
+ def shape
9
+ @line_rotation = 30
10
+ return circle(d:@diameter,fn:6)
11
+ end
12
+
13
+ def inner_shape
14
+ circle(d:6)
15
+ end
16
+ end
17
+
18
+ pipe = MyPipe.new(diameter:10)
19
+
20
+ pipe.line(10)
21
+ pipe.ccw(20,30,"yellow")
22
+ pipe.line(30)
23
+
24
+ pipe.cw(30,60,"blue")
25
+ pipe.ccw(30,45,"green")
26
+ pipe.line(3)
27
+ pipe.ccw(30,160,"blue")
28
+ pipe.ccw(30,60,"green")
29
+
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")
36
+ #pipe.cw(15,95,"silver")
37
+ #pipe.line(10,"pink")
38
+ res = pipe.pipe
39
+
40
+ res.save("pipe.scad","$fn=64;")
41
+
@@ -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
 
@@ -4,16 +4,11 @@ require "crystalscad"
4
4
  include CrystalScad
5
5
 
6
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)
7
+ t1 = PrintedThread.new(diameter:20, pitch:2.5, length:22.5, internal:true)
8
+ t2 = PrintedThread.new(diameter:20, pitch:2.5, length:20, internal:false)
16
9
 
10
+ res = cube([25,25,z=26]).center_xy
11
+ res -= t1.output
17
12
  res += t2.output.translate(z:z)
18
13
 
19
14
  res.save("printed_thread2.scad")
data/lib/crystalscad.rb CHANGED
@@ -6,5 +6,6 @@ require 'crystalscad/LinearBearing'
6
6
  require 'crystalscad/Gears'
7
7
  require 'crystalscad/ScrewThreads'
8
8
  require 'crystalscad/PrintedThreads'
9
+ require 'crystalscad/Pipe'
9
10
  require 'crystalscad/CrystalScad'
10
11
 
@@ -219,7 +219,12 @@ module CrystalScad
219
219
  class Square < Primitive
220
220
  def initialize(*args)
221
221
  super(args)
222
- @x,@y = args[0][:size].map{|l| l.to_f}
222
+ if args[0][:size].kind_of? Array
223
+ @x,@y = args[0][:size].map{|l| l.to_f}
224
+ else
225
+ @x = args[0][:size].to_f
226
+ @y = @x
227
+ end
223
228
  end
224
229
 
225
230
  def to_rubyscad
@@ -0,0 +1,150 @@
1
+ # This file is part of CrystalScad.
2
+ #
3
+ # CrystalScad is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # CrystalScad is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
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/>.
15
+
16
+
17
+
18
+ module CrystalScad
19
+ class Pipe
20
+ attr_accessor :x,:y, :pipe
21
+ def radians(a)
22
+ a/180.0 * Math::PI
23
+ end
24
+
25
+ def initialize(args={})
26
+ @diameter = args[:diameter]
27
+ @pipe = nil
28
+ @line_rotation = 0 # z rotation in case needed with fn values
29
+ end
30
+
31
+ def shape
32
+ res = circle(d:@diameter)
33
+ end
34
+
35
+ def inner_shape
36
+ nil
37
+ end
38
+
39
+ # go clockwise
40
+ def cw(radius,angle,color=nil)
41
+ if angle > 360
42
+ return false
43
+ end
44
+ # since bent can only do up to 90°, splitting it up in chunks in order to grow it
45
+ if angle > 90
46
+ return cw(radius,90,color) + cw(radius,angle-90,color)
47
+ end
48
+
49
+ if @pipe == nil
50
+ @pipe = bent_cw(radius,angle)
51
+ @pipe = @pipe.color(color) unless color == nil
52
+ else
53
+ rotated_pipe = @pipe.rotate(z:-angle)
54
+ pipe_piece = bent_cw(radius,angle)
55
+ pipe_piece = pipe_piece.color(color) unless color == nil
56
+ @pipe = pipe_piece + rotated_pipe.translate(x:x,y:y-radius)
57
+ end
58
+ end
59
+
60
+ # go counter clockwise
61
+ def ccw(radius,angle,color=nil)
62
+ if angle > 360
63
+ return false
64
+ end
65
+ # since bent can only do up to 90°, splitting it up in chunks in order to grow it
66
+ if angle > 90
67
+ return ccw(radius,90,color) + ccw(radius,angle-90,color)
68
+ end
69
+
70
+ if @pipe == nil
71
+ @pipe = bent_ccw(radius,angle)
72
+ @pipe = @pipe.color(color) unless color == nil
73
+ else
74
+ rotated_pipe = @pipe.rotate(z:angle)
75
+ pipe_piece = bent_ccw(radius,angle)
76
+ pipe_piece = pipe_piece.color(color) unless color == nil
77
+ @pipe = pipe_piece + rotated_pipe.translate(x:x,y:y+radius)
78
+ end
79
+
80
+ end
81
+
82
+ def line(length,color=nil)
83
+ if @pipe == nil
84
+ @pipe = create_line(length,color)
85
+ else
86
+ @pipe = @pipe.translate(x:length) + create_line(length,color)
87
+ end
88
+
89
+ end
90
+
91
+ private
92
+ def create_line(length,color=nil)
93
+ res = shape.linear_extrude(h:length)
94
+ if inner_shape
95
+ res -= inner_shape.linear_extrude(h:length+0.2).translate(z:-0.1)
96
+ end
97
+ if color
98
+ res = res.color(color)
99
+ end
100
+ res.rotate(z:@line_rotation).rotate(y:90)
101
+ end
102
+
103
+ def bent_cw(radius,angle)
104
+ res = shape.translate(x:radius).rotate_extrude(convexity:10)
105
+ res -= inner_shape.translate(x:radius).rotate_extrude(convexity:10) unless inner_shape == nil
106
+
107
+ len = radius+@diameter/2.0
108
+ @x = Math::sin(radians(angle))*len
109
+ @y = Math::cos(radians(angle))*len
110
+ cut = polygon(points:[[0,0],[0,len],[@x,@y]]).scale(2)
111
+
112
+ # for working with it
113
+ len = radius #- @diameter / 2.0
114
+ @x = Math::sin(radians(angle))*len
115
+ @y = Math::cos(radians(angle))*len
116
+
117
+
118
+ res *= cut.linear_extrude(h:100).translate(z:-50)
119
+
120
+ # Positioning it on 0
121
+
122
+ return res.translate(y:-radius)
123
+ end
124
+
125
+ def bent_ccw(radius,angle)
126
+ res = shape.translate(x:radius).rotate_extrude(convexity:10)
127
+ res -= inner_shape.translate(x:radius).rotate_extrude(convexity:10) unless inner_shape == nil
128
+
129
+ len = radius+@diameter/2.0
130
+ @x = Math::sin(radians(angle))*len
131
+ @y = Math::cos(radians(angle))*len
132
+ cut = polygon(points:[[0,0],[0,len],[@x,@y]]).scale(2)
133
+
134
+ # for working with it
135
+ len = radius #- @diameter / 2.0
136
+ @x = Math::sin(radians(angle))*len
137
+ @y = -1*Math::cos(radians(angle))*len
138
+
139
+
140
+ res *= cut.linear_extrude(h:100).translate(z:-50)
141
+ res = res.mirror(y:1)
142
+ # Positioning it on 0
143
+
144
+ return res.translate(y:radius)
145
+ end
146
+
147
+
148
+ end
149
+ end
150
+
@@ -37,6 +37,7 @@ module CrystalScad::PrintedThreads
37
37
  end
38
38
  # cut to length
39
39
  res *= cube(x:@args[:diameter]*1.1, y:@args[:diameter]*1.1, z:@args[:length]).center.translate(z:@args[:length]/2.0)
40
+
40
41
  if @args[:internal]
41
42
  # Solid center, including Dmin truncation.
42
43
  res += cylinder(r:@args[:diameter]/2.0 - h*5.0/8.0, h:@args[:length], segments:number_of_segments)
@@ -95,8 +96,8 @@ module CrystalScad::PrintedThreads
95
96
  fraction_circle = 1.0/n_segments
96
97
 
97
98
  h = pitch * Math::cos(radians(30))
98
- outer_r = radius + (internal ? h/5.0 : 0) # Adds internal relief.
99
-
99
+ outer_r = radius + (internal ? h/20 : 0) # Adds internal relief.
100
+
100
101
  inner_r = radius - 0.875*h # Does NOT do Dmin_truncation - do later with cylinder.
101
102
 
102
103
  # Make these just slightly bigger (keep in proportion) so polyhedra will overlap.
@@ -1,4 +1,4 @@
1
1
  module CrystalScad
2
- VERSION = "0.4.2"
2
+ VERSION = "0.5"
3
3
  end
4
4
 
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crystalscad
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
5
- prerelease:
4
+ version: '0.5'
6
5
  platform: ruby
7
6
  authors:
8
7
  - Joachim Glauche
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-06-23 00:00:00.000000000 Z
11
+ date: 2015-03-31 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rubyscad
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: require_all
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: wijet-thor
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: observr
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ! '>='
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ! '>='
76
67
  - !ruby/object:Gem::Version
@@ -95,6 +86,7 @@ files:
95
86
  - examples/openscad_examples/example003.rb
96
87
  - examples/openscad_examples/example004.rb
97
88
  - examples/openscad_examples/example005.rb
89
+ - examples/pipe.rb
98
90
  - examples/printed_gear.rb
99
91
  - examples/printed_gear2.rb
100
92
  - examples/printed_thread.rb
@@ -109,6 +101,7 @@ files:
109
101
  - lib/crystalscad/Gears.rb
110
102
  - lib/crystalscad/Hardware.rb
111
103
  - lib/crystalscad/LinearBearing.rb
104
+ - lib/crystalscad/Pipe.rb
112
105
  - lib/crystalscad/PrintedThreads.rb
113
106
  - lib/crystalscad/ScrewThreads.rb
114
107
  - lib/crystalscad/version.rb
@@ -120,26 +113,25 @@ files:
120
113
  homepage: http://github.com/Joaz/CrystalScad
121
114
  licenses:
122
115
  - GPL-3
116
+ metadata: {}
123
117
  post_install_message:
124
118
  rdoc_options: []
125
119
  require_paths:
126
120
  - lib
127
121
  required_ruby_version: !ruby/object:Gem::Requirement
128
- none: false
129
122
  requirements:
130
123
  - - ! '>='
131
124
  - !ruby/object:Gem::Version
132
125
  version: 1.9.3
133
126
  required_rubygems_version: !ruby/object:Gem::Requirement
134
- none: false
135
127
  requirements:
136
128
  - - ! '>='
137
129
  - !ruby/object:Gem::Version
138
130
  version: '0'
139
131
  requirements: []
140
132
  rubyforge_project:
141
- rubygems_version: 1.8.23
133
+ rubygems_version: 2.2.2
142
134
  signing_key:
143
- specification_version: 3
135
+ specification_version: 4
144
136
  summary: CrystalScad is a framework for programming OpenScad models in Ruby
145
137
  test_files: []