crystalscad 0.4.2 → 0.5

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.
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: []