mini_scad 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: '015780fc0ecb69e750da98747c6543b78ddcc304'
4
+ data.tar.gz: fa0b4e61882ce04792ec4d702975c6c543323917
5
+ SHA512:
6
+ metadata.gz: 56dafda4f84ad85ea3e235803e7c64ce92e71f517f48a215f6b854b8a94171bef85bcb400032545479be674902be0e21f7887f9b5a88a2a1ed2dee4b77f08da6
7
+ data.tar.gz: eef192d2c56827e05991a8e537e70f85eb99bbf4ef65ff4d18be3f6cb07247ea89bf9e7c7de27bbd1646f69c3ff76dab60af7917ada6862fe5729b4b65a7746e
@@ -0,0 +1,2 @@
1
+ .DS_Store
2
+ *.swp
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 daisuko
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,6 @@
1
+ # MiniScad
2
+ MiniScad is a bridge to the OpenSCAD script.
3
+
4
+ ## License
5
+
6
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
@@ -0,0 +1,255 @@
1
+ require "mini_scad/version"
2
+
3
+ module MiniScad
4
+ module DSL
5
+ def none
6
+ None.new
7
+ end
8
+
9
+ def cube(x, y, z, center: false)
10
+ Cube.new(x, y, z, center: center)
11
+ end
12
+
13
+ def sphere(r)
14
+ Sphere.new(r)
15
+ end
16
+
17
+ def cylinder(r1, r2 = r1, h, n: 16, center: false)
18
+ Cylinder.new(r1, r2, h, n: n, center: center)
19
+ end
20
+
21
+ def rounded_cube4(x, y, z, r, n: 16)
22
+ a = cylinder(r, z).translate(r, r, 0)
23
+ b = cylinder(r, z).translate(x - r, r, 0)
24
+ c = cylinder(r, z).translate(r, y - r, 0)
25
+ d = cylinder(r, z).translate(x - r, y - r, 0)
26
+
27
+ (a + b + c + d).hull
28
+ end
29
+
30
+ def rounded_cube8(x, y, z, r, n: 16)
31
+ a = sphere(r).translate(r, r, r)
32
+ b = sphere(r).translate(r, r, z - r)
33
+ c = sphere(r).translate(x - r, r, r)
34
+ d = sphere(r).translate(x - r, r, z - r)
35
+ e = sphere(r).translate(r, y - r, r)
36
+ f = sphere(r).translate(r, y - r, z - r)
37
+ g = sphere(r).translate(x - r, y - r, r)
38
+ h = sphere(r).translate(x - r, y - r, z - r)
39
+
40
+ (a + b + c + d + e + f + g + h).hull
41
+ end
42
+ end
43
+
44
+ module Transform
45
+ def projection
46
+ Projection.new do
47
+ self
48
+ end
49
+ end
50
+
51
+ def translate(x, y, z)
52
+ Translate.new(x, y, z) do
53
+ self
54
+ end
55
+ end
56
+
57
+ def mirror(x, y, z)
58
+ Mirror.new(x, y, z) do
59
+ self
60
+ end
61
+ end
62
+
63
+ def rotate(x, y, z)
64
+ Rotate.new(x, y, z) do
65
+ self
66
+ end
67
+ end
68
+
69
+ def scale(x, y, z)
70
+ Scale.new(x, y, z) do
71
+ self
72
+ end
73
+ end
74
+
75
+ def color(r, g, b, a)
76
+ Color.new(r, g, b, a) do
77
+ self
78
+ end
79
+ end
80
+
81
+ def hull
82
+ Hull.new do
83
+ self
84
+ end
85
+ end
86
+
87
+ def |(val)
88
+ Union.new(self, val)
89
+ end
90
+
91
+ def &(val)
92
+ Intersection.new(self, val)
93
+ end
94
+
95
+ def +(val)
96
+ Cons.new(self, val)
97
+ end
98
+
99
+ def -(val)
100
+ Difference.new(self, val)
101
+ end
102
+
103
+ def render
104
+ raise NotImplementError unless @renderer
105
+
106
+ @renderer.()
107
+ end
108
+ end
109
+
110
+ class None
111
+ include Transform
112
+
113
+ def initialize
114
+ @renderer = -> { '' }
115
+ end
116
+ end
117
+
118
+ class Cons
119
+ include Transform
120
+
121
+ def initialize(car, cdr)
122
+ @renderer = -> { [car, cdr].map(&:render).join(' ') }
123
+ end
124
+ end
125
+
126
+ class Projection
127
+ include Transform
128
+
129
+ def initialize(&block)
130
+ @renderer = -> { "projection() { #{block.().render} };" }
131
+ end
132
+ end
133
+
134
+ class Translate
135
+ include Transform
136
+
137
+ def initialize(x, y, z, &block)
138
+ @renderer = -> do
139
+ "translate([#{x}, #{y}, #{z}]) { #{block.().render} };"
140
+ end
141
+ end
142
+ end
143
+
144
+ class Mirror
145
+ include Transform
146
+
147
+ def initialize(x, y, z, &block)
148
+ @renderer = -> do
149
+ "mirror([#{x}, #{y}, #{z}]) { #{block.().render} };"
150
+ end
151
+ end
152
+ end
153
+
154
+ class Rotate
155
+ include Transform
156
+
157
+ def initialize(x, y, z, &block)
158
+ @renderer = -> do
159
+ "rotate([#{x}, #{y}, #{z}]) { #{block.().render} };"
160
+ end
161
+ end
162
+ end
163
+
164
+ class Scale
165
+ include Transform
166
+
167
+ def initialize(x, y, z, &block)
168
+ @renderer = -> do
169
+ "scale([#{x}, #{y}, #{z}]) { #{block.().render} };"
170
+ end
171
+ end
172
+ end
173
+
174
+ class Color
175
+ include Transform
176
+
177
+ def initialize(r, g, b, a, &block)
178
+ @renderer = -> do
179
+ "color([#{r}, #{g}, #{b}, #{a}]) { #{block.().render} };"
180
+ end
181
+ end
182
+ end
183
+
184
+ class Hull
185
+ include Transform
186
+
187
+ def initialize(&block)
188
+ @renderer = -> do
189
+ "hull() { #{block.().render} };"
190
+ end
191
+ end
192
+ end
193
+
194
+ class Union
195
+ include Transform
196
+
197
+ def initialize(src, dst)
198
+ @renderer = -> do
199
+ "union() { #{src.render} #{dst.render} };"
200
+ end
201
+ end
202
+ end
203
+
204
+ class Intersection
205
+ include Transform
206
+
207
+ def initialize(src, dst)
208
+ @renderer = -> do
209
+ "intersection() { #{src.render} #{dst.render} };"
210
+ end
211
+ end
212
+
213
+ def render
214
+ @renderer.()
215
+ end
216
+ end
217
+
218
+ class Difference
219
+ include Transform
220
+
221
+ def initialize(src, dst)
222
+ @renderer = -> do
223
+ "difference() { #{src.render} #{dst.render} };"
224
+ end
225
+ end
226
+ end
227
+
228
+ class Cube
229
+ include Transform
230
+
231
+ def initialize(x, y, z, center: false)
232
+ @renderer = -> do
233
+ "cube([#{x}, #{y}, #{z}], center=#{center});"
234
+ end
235
+ end
236
+ end
237
+
238
+ class Sphere
239
+ include Transform
240
+
241
+ def initialize(r)
242
+ @renderer = -> { "sphere(r=#{r});" }
243
+ end
244
+ end
245
+
246
+ class Cylinder
247
+ include Transform
248
+
249
+ def initialize(r1, r2 = r1, h, center: false, n: 16)
250
+ @renderer = -> do
251
+ "cylinder(r1=#{r1}, r2=#{r2}, h=#{h}, $fn = #{n}, center=#{center});"
252
+ end
253
+ end
254
+ end
255
+ end
@@ -0,0 +1,3 @@
1
+ module MiniScad
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "mini_scad/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mini_scad"
8
+ spec.version = MiniScad::VERSION
9
+ spec.authors = ["daisuko"]
10
+ spec.email = ["striker.daisuko@gmail.com"]
11
+
12
+ spec.summary = %q(MiniScad is a bridge to the OpenSCAD script.)
13
+ spec.description = %q(MiniScad is a bridge to the OpenSCAD script.)
14
+ spec.homepage = "https://github.com/daisuko/mini_scad"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ end
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.15"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mini_scad
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - daisuko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-08-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.15'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: MiniScad is a bridge to the OpenSCAD script.
42
+ email:
43
+ - striker.daisuko@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Gemfile
50
+ - LICENSE.txt
51
+ - README.md
52
+ - Rakefile
53
+ - lib/mini_scad.rb
54
+ - lib/mini_scad/version.rb
55
+ - mini_scad.gemspec
56
+ homepage: https://github.com/daisuko/mini_scad
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.6.13
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: MiniScad is a bridge to the OpenSCAD script.
80
+ test_files: []