jenncad 1.0.0.pre.alpha1
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 +7 -0
- data/Rakefile +1 -0
- data/bin/jenncad +10 -0
- data/examples/old/cube.rb +12 -0
- data/examples/old/slot.rb +10 -0
- data/examples/old/test.rb +18 -0
- data/examples/old/test1.rb +21 -0
- data/examples/old/test2.rb +9 -0
- data/examples/old/test3.rb +15 -0
- data/examples/old/test4.rb +17 -0
- data/examples/old/test5.rb +31 -0
- data/jenncad.gemspec +27 -0
- data/lib/jenncad/commands.rb +169 -0
- data/lib/jenncad/default_profile.rb +40 -0
- data/lib/jenncad/extras/din912.rb +89 -0
- data/lib/jenncad/extras/din933.rb +64 -0
- data/lib/jenncad/extras/din934.rb +99 -0
- data/lib/jenncad/extras/hardware.rb +16 -0
- data/lib/jenncad/extras/iso7380.rb +58 -0
- data/lib/jenncad/jenncad.rb +3 -0
- data/lib/jenncad/openscad.rb +274 -0
- data/lib/jenncad/part.rb +14 -0
- data/lib/jenncad/patches/array.rb +29 -0
- data/lib/jenncad/primitives/aggregation.rb +12 -0
- data/lib/jenncad/primitives/boolean_object.rb +76 -0
- data/lib/jenncad/primitives/circle.rb +11 -0
- data/lib/jenncad/primitives/cube.rb +69 -0
- data/lib/jenncad/primitives/cylinder.rb +52 -0
- data/lib/jenncad/primitives/hull_object.rb +4 -0
- data/lib/jenncad/primitives/intersection_object.rb +4 -0
- data/lib/jenncad/primitives/linear_extrude.rb +25 -0
- data/lib/jenncad/primitives/openscad_include.rb +11 -0
- data/lib/jenncad/primitives/polygon.rb +9 -0
- data/lib/jenncad/primitives/primitive.rb +24 -0
- data/lib/jenncad/primitives/projection.rb +9 -0
- data/lib/jenncad/primitives/rotate_extrude.rb +20 -0
- data/lib/jenncad/primitives/rounded_cube.rb +77 -0
- data/lib/jenncad/primitives/slot.rb +82 -0
- data/lib/jenncad/primitives/sphere.rb +11 -0
- data/lib/jenncad/primitives/subtract_object.rb +84 -0
- data/lib/jenncad/primitives/union_object.rb +5 -0
- data/lib/jenncad/profile_loader.rb +34 -0
- data/lib/jenncad/project.rb +28 -0
- data/lib/jenncad/register.rb +31 -0
- data/lib/jenncad/shortcuts.rb +109 -0
- data/lib/jenncad/thing.rb +308 -0
- data/lib/jenncad/transformation/color.rb +8 -0
- data/lib/jenncad/transformation/mirror.rb +7 -0
- data/lib/jenncad/transformation/move.rb +7 -0
- data/lib/jenncad/transformation/multmatrix.rb +9 -0
- data/lib/jenncad/transformation/rotate.rb +7 -0
- data/lib/jenncad/transformation/scale.rb +7 -0
- data/lib/jenncad/transformation/transformation.rb +14 -0
- data/lib/jenncad/version.rb +4 -0
- data/lib/jenncad.rb +73 -0
- data/todo.txt +29 -0
- metadata +155 -0
@@ -0,0 +1,308 @@
|
|
1
|
+
module JennCad
|
2
|
+
class Thing
|
3
|
+
attr_accessor :opts
|
4
|
+
attr_accessor :parts
|
5
|
+
attr_accessor :transformations, :name
|
6
|
+
attr_accessor :x, :y, :z, :diameter
|
7
|
+
attr_accessor :calc_x, :calc_y, :calc_z, :calc_h
|
8
|
+
attr_accessor :shape
|
9
|
+
attr_accessor :angle, :cut, :fn
|
10
|
+
|
11
|
+
def initialize(args={})
|
12
|
+
@transformations = []
|
13
|
+
# calculated origin; only works for move atm
|
14
|
+
@calc_x = 0
|
15
|
+
@calc_y = 0
|
16
|
+
@calc_z = 0
|
17
|
+
@calc_h = args[:z] || 0
|
18
|
+
@opts ||= args
|
19
|
+
end
|
20
|
+
|
21
|
+
def option(key)
|
22
|
+
@opts ||= {}
|
23
|
+
@opts[key]
|
24
|
+
end
|
25
|
+
|
26
|
+
def set_option(key, val)
|
27
|
+
@opts ||= {}
|
28
|
+
@opts[key] = val
|
29
|
+
end
|
30
|
+
|
31
|
+
def rotate(args)
|
32
|
+
@transformations ||= []
|
33
|
+
@transformations << Rotate.new(args)
|
34
|
+
self
|
35
|
+
end
|
36
|
+
alias :rt :rotate
|
37
|
+
|
38
|
+
def center
|
39
|
+
return @center if @center
|
40
|
+
case shape.to_s
|
41
|
+
when "cube"
|
42
|
+
[@x/2.0,@y/2.0,@z/2.0]
|
43
|
+
when "cylinder"
|
44
|
+
[0,0,@z/2.0]
|
45
|
+
else
|
46
|
+
[0,0,0]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def flip_x
|
51
|
+
if self.kind_of?(BooleanObject)
|
52
|
+
ref = self.parts.first
|
53
|
+
else
|
54
|
+
ref = self
|
55
|
+
end
|
56
|
+
|
57
|
+
self.rotate(y:90).moveh(x: -ref.z, z: ref.x)
|
58
|
+
end
|
59
|
+
alias :fx :flip_x
|
60
|
+
|
61
|
+
def flip_y
|
62
|
+
if self.kind_of?(BooleanObject)
|
63
|
+
ref = self.parts.first
|
64
|
+
else
|
65
|
+
ref = self
|
66
|
+
end
|
67
|
+
|
68
|
+
self.rotate(x:90).moveh(y: ref.z, z: ref.y)
|
69
|
+
end
|
70
|
+
alias :fy :flip_y
|
71
|
+
|
72
|
+
def radians(a)
|
73
|
+
a.to_f/180.0*PI
|
74
|
+
end
|
75
|
+
|
76
|
+
# experiment
|
77
|
+
def calculate_center_rotation(oldcenter, args)
|
78
|
+
x,y,z = oldcenter
|
79
|
+
v = Vector.point x,y,z
|
80
|
+
rot_x = Matrix.rotation_x(radians(args[:x] || 0))
|
81
|
+
rot_y = Matrix.rotation_y(radians(args[:y] || 0))
|
82
|
+
rot_z = Matrix.rotation_z(radians(args[:z] || 0))
|
83
|
+
v = rot_x*v
|
84
|
+
v = rot_y*v
|
85
|
+
v = rot_z*v
|
86
|
+
|
87
|
+
[v.x,v.y,v.z]
|
88
|
+
end
|
89
|
+
|
90
|
+
# todo: check if that works
|
91
|
+
def rotate_around(point,args)
|
92
|
+
x,y,z= point.x, point.y, point.z
|
93
|
+
self.move(x:-x,y:-y,z:-z).rotate(args).move(x:x,y:y,z:z)
|
94
|
+
end
|
95
|
+
|
96
|
+
def move(args)
|
97
|
+
if args.kind_of? Array
|
98
|
+
x,y,z = args
|
99
|
+
return move(x:x, y:y, z:z)
|
100
|
+
end
|
101
|
+
@transformations ||= []
|
102
|
+
if args[:prepend]
|
103
|
+
@transformations.prepend(Move.new(args))
|
104
|
+
else
|
105
|
+
@transformations << Move.new(args)
|
106
|
+
end
|
107
|
+
@calc_x += args[:x].to_f
|
108
|
+
@calc_y += args[:y].to_f
|
109
|
+
@calc_z += args[:z].to_f
|
110
|
+
self
|
111
|
+
end
|
112
|
+
alias :translate :move
|
113
|
+
alias :m :move
|
114
|
+
|
115
|
+
def mx(v)
|
116
|
+
move(x:v)
|
117
|
+
end
|
118
|
+
|
119
|
+
def my(v)
|
120
|
+
move(y:v)
|
121
|
+
end
|
122
|
+
|
123
|
+
def mz(v)
|
124
|
+
move(z:v)
|
125
|
+
end
|
126
|
+
|
127
|
+
# move half
|
128
|
+
def moveh(args)
|
129
|
+
if args.kind_of? Array
|
130
|
+
x,y,z = args
|
131
|
+
args = {x: x, y: y, z: z}
|
132
|
+
end
|
133
|
+
args[:x] = args[:x] / 2.0 unless args[:x] == nil
|
134
|
+
args[:y] = args[:y] / 2.0 unless args[:y] == nil
|
135
|
+
args[:z] = args[:z] / 2.0 unless args[:z] == nil
|
136
|
+
|
137
|
+
move(args)
|
138
|
+
end
|
139
|
+
alias :mh :moveh
|
140
|
+
|
141
|
+
def mhx(v)
|
142
|
+
moveh(x:v)
|
143
|
+
end
|
144
|
+
|
145
|
+
def mhy(v)
|
146
|
+
moveh(y:v)
|
147
|
+
end
|
148
|
+
|
149
|
+
def mhz(v)
|
150
|
+
moveh(z:v)
|
151
|
+
end
|
152
|
+
|
153
|
+
def mirror(args)
|
154
|
+
@transformations ||= []
|
155
|
+
@transformations << Mirror.new(args)
|
156
|
+
self
|
157
|
+
end
|
158
|
+
alias :mi :mirror
|
159
|
+
|
160
|
+
def scale(args)
|
161
|
+
if args.kind_of? Numeric or args.kind_of? Array
|
162
|
+
args = {v:args}
|
163
|
+
end
|
164
|
+
@transformations ||= []
|
165
|
+
@transformations << Scale.new(args)
|
166
|
+
self
|
167
|
+
end
|
168
|
+
alias :sc :scale
|
169
|
+
|
170
|
+
# copies the transformation of obj to self
|
171
|
+
def transform(obj)
|
172
|
+
@transformations ||= []
|
173
|
+
@transformations += obj.transformations
|
174
|
+
self
|
175
|
+
end
|
176
|
+
|
177
|
+
def multmatrix(args)
|
178
|
+
@transformations ||= []
|
179
|
+
@transformations << Multmatrix.new(args)
|
180
|
+
self
|
181
|
+
end
|
182
|
+
|
183
|
+
def skew(args)
|
184
|
+
xy = args[:xy] || 0
|
185
|
+
x = args[:x] || 0
|
186
|
+
yx = args[:yx] || 0
|
187
|
+
y = args[:y] || 0
|
188
|
+
zx = args[:zx] || 0
|
189
|
+
zy = args[:zy] || 0
|
190
|
+
|
191
|
+
multmatrix([
|
192
|
+
[1, xy, x, 0],
|
193
|
+
[yx, 1, y, 0],
|
194
|
+
[zx, zy, 1, 0],
|
195
|
+
[0, 0, 0, 1]
|
196
|
+
])
|
197
|
+
end
|
198
|
+
|
199
|
+
def top_of(other_object)
|
200
|
+
self.move(z:other_object.z+other_object.calc_z.to_f)
|
201
|
+
end
|
202
|
+
|
203
|
+
def on_top_of(other_object)
|
204
|
+
self.top_of(other_object) + other_object
|
205
|
+
end
|
206
|
+
|
207
|
+
def children_list(stop_at=nil)
|
208
|
+
get_children(self, stop_at).flatten
|
209
|
+
end
|
210
|
+
|
211
|
+
def get_children(item, stop_at)
|
212
|
+
res = [item]
|
213
|
+
if item.respond_to?(:parts) && item.parts != nil
|
214
|
+
item.parts.each do |part|
|
215
|
+
unless stop_at != nil && part.kind_of?(stop_at)
|
216
|
+
res << get_children(part, stop_at)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
res
|
221
|
+
end
|
222
|
+
|
223
|
+
def make_openscad_compatible
|
224
|
+
make_openscad_compatible!(self)
|
225
|
+
end
|
226
|
+
|
227
|
+
def make_openscad_compatible!(item)
|
228
|
+
if item.respond_to?(:parts) && item.parts != nil
|
229
|
+
item.parts.each_with_index do |part, i|
|
230
|
+
if part.respond_to? :to_openscad
|
231
|
+
item.parts[i] = part.to_openscad
|
232
|
+
else
|
233
|
+
item.parts[i] = part.make_openscad_compatible
|
234
|
+
end
|
235
|
+
end
|
236
|
+
elsif item.respond_to? :part
|
237
|
+
item = item.part.make_openscad_compatible
|
238
|
+
end
|
239
|
+
if item.respond_to? :to_openscad
|
240
|
+
item = item.to_openscad
|
241
|
+
end
|
242
|
+
item
|
243
|
+
end
|
244
|
+
|
245
|
+
def color(args=nil)
|
246
|
+
return option(:color) if args == nil
|
247
|
+
if args == :auto
|
248
|
+
return auto_color!
|
249
|
+
elsif args == :none
|
250
|
+
set_option :no_auto_color, true
|
251
|
+
return self
|
252
|
+
end
|
253
|
+
set_option :color, args
|
254
|
+
self
|
255
|
+
end
|
256
|
+
|
257
|
+
def auto_color
|
258
|
+
if option(:color) == nil && !option(:no_auto_color)
|
259
|
+
auto_color!
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
def auto_color!
|
264
|
+
color($jenncad_profile.colors.pop)
|
265
|
+
end
|
266
|
+
|
267
|
+
def color_or_fallback
|
268
|
+
return option(:fallback_color) if option(:color) == nil
|
269
|
+
option(:color)
|
270
|
+
end
|
271
|
+
|
272
|
+
def openscad(file)
|
273
|
+
if @parts == nil
|
274
|
+
if self.respond_to? :part
|
275
|
+
@parts = [part]
|
276
|
+
else
|
277
|
+
# FIXME: -> move logic OpenScad
|
278
|
+
#puts "[Error in openscad export] Could not find @parts or part for #{self}"
|
279
|
+
#exit
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
OpenScad.new(self).save(file)
|
284
|
+
end
|
285
|
+
|
286
|
+
def referenced_z
|
287
|
+
return false if @z.to_f != 0.0
|
288
|
+
return option(:zref) if option(:zref)
|
289
|
+
return false
|
290
|
+
end
|
291
|
+
|
292
|
+
def z
|
293
|
+
ref = referenced_z
|
294
|
+
if ref
|
295
|
+
return ref.z.to_f + ref.z_margin.to_f
|
296
|
+
end
|
297
|
+
@z
|
298
|
+
end
|
299
|
+
|
300
|
+
def z_margin
|
301
|
+
if option(:margins)
|
302
|
+
return option(:margins)[:z].to_f
|
303
|
+
end
|
304
|
+
0.0
|
305
|
+
end
|
306
|
+
|
307
|
+
end
|
308
|
+
end
|
data/lib/jenncad.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
require "geo3d"
|
2
|
+
require "deep_merge"
|
3
|
+
require "fileutils"
|
4
|
+
require "observr"
|
5
|
+
require "hanami/cli"
|
6
|
+
require "active_support"
|
7
|
+
|
8
|
+
include Math
|
9
|
+
include Geo3d
|
10
|
+
|
11
|
+
require "jenncad/version"
|
12
|
+
require "jenncad/default_profile"
|
13
|
+
require "jenncad/profile_loader"
|
14
|
+
JennCad::ProfileLoader.new
|
15
|
+
|
16
|
+
|
17
|
+
require "jenncad/patches/array"
|
18
|
+
require "jenncad/thing"
|
19
|
+
require "jenncad/part"
|
20
|
+
require "jenncad/project"
|
21
|
+
require "jenncad/commands"
|
22
|
+
|
23
|
+
require "jenncad/primitives/primitive"
|
24
|
+
require "jenncad/primitives/aggregation"
|
25
|
+
require "jenncad/primitives/openscad_include"
|
26
|
+
|
27
|
+
require "jenncad/primitives/circle"
|
28
|
+
|
29
|
+
require "jenncad/primitives/cylinder"
|
30
|
+
require "jenncad/primitives/sphere"
|
31
|
+
require "jenncad/primitives/cube"
|
32
|
+
require "jenncad/primitives/rounded_cube"
|
33
|
+
require "jenncad/primitives/polygon"
|
34
|
+
require "jenncad/primitives/slot"
|
35
|
+
|
36
|
+
require "jenncad/primitives/boolean_object"
|
37
|
+
require "jenncad/primitives/union_object"
|
38
|
+
require "jenncad/primitives/subtract_object"
|
39
|
+
require "jenncad/primitives/hull_object"
|
40
|
+
require "jenncad/primitives/intersection_object"
|
41
|
+
require "jenncad/primitives/projection"
|
42
|
+
require "jenncad/primitives/linear_extrude"
|
43
|
+
require "jenncad/primitives/rotate_extrude"
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
require "jenncad/transformation/transformation"
|
50
|
+
require "jenncad/transformation/move"
|
51
|
+
require "jenncad/transformation/rotate"
|
52
|
+
require "jenncad/transformation/scale"
|
53
|
+
require "jenncad/transformation/mirror"
|
54
|
+
require "jenncad/transformation/color"
|
55
|
+
require "jenncad/transformation/multmatrix"
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
require "jenncad/extras/hardware"
|
62
|
+
require "jenncad/extras/din912"
|
63
|
+
require "jenncad/extras/din933"
|
64
|
+
require "jenncad/extras/din934"
|
65
|
+
require "jenncad/extras/iso7380"
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
require "jenncad/register"
|
71
|
+
require "jenncad/shortcuts"
|
72
|
+
require "jenncad/jenncad"
|
73
|
+
require "jenncad/openscad"
|
data/todo.txt
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
1.0 required features
|
2
|
+
===================
|
3
|
+
|
4
|
+
- cli needs to be a package manager for existing parts from a public library (i.e. bolts, motors go here), able to
|
5
|
+
-- query
|
6
|
+
-- download
|
7
|
+
-- update
|
8
|
+
(upload? -> probably git pull request for now)
|
9
|
+
- add external projects into one another (for example: make parts, show arrangement of a shelf in another project)
|
10
|
+
|
11
|
+
- slot with square ends -> rounded cube with one side = d + flat_edges does that. Should slot do that in reverse?
|
12
|
+
|
13
|
+
- de-centering a cube in one direction sucks, you have to add both center: false, center_x: true
|
14
|
+
-> decenter ?
|
15
|
+
|
16
|
+
- bolt library needs to get a rewrite,
|
17
|
+
- fetching dimensions from the imported Bolt library should be less awful
|
18
|
+
|
19
|
+
- needs a documentation and showcase
|
20
|
+
|
21
|
+
other awful things
|
22
|
+
===================
|
23
|
+
|
24
|
+
- command line interface isn't capable of adding parts to the output automatically
|
25
|
+
|
26
|
+
- user profile file should be auto generated with examples
|
27
|
+
|
28
|
+
- switching back and forth from and to openscad for preview sucks (that being said, switching from vim to something else would be awful to me)
|
29
|
+
|
metadata
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jenncad
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0.pre.alpha1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jennifer Glauche
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-06-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: geo3d
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: deep_merge
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: hanami-cli
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: activesupport
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: TBD
|
70
|
+
email:
|
71
|
+
- "=^.^=@jenncad.kittenme.ws"
|
72
|
+
executables:
|
73
|
+
- jenncad
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- Rakefile
|
78
|
+
- bin/jenncad
|
79
|
+
- examples/old/cube.rb
|
80
|
+
- examples/old/slot.rb
|
81
|
+
- examples/old/test.rb
|
82
|
+
- examples/old/test1.rb
|
83
|
+
- examples/old/test2.rb
|
84
|
+
- examples/old/test3.rb
|
85
|
+
- examples/old/test4.rb
|
86
|
+
- examples/old/test5.rb
|
87
|
+
- jenncad.gemspec
|
88
|
+
- lib/jenncad.rb
|
89
|
+
- lib/jenncad/commands.rb
|
90
|
+
- lib/jenncad/default_profile.rb
|
91
|
+
- lib/jenncad/extras/din912.rb
|
92
|
+
- lib/jenncad/extras/din933.rb
|
93
|
+
- lib/jenncad/extras/din934.rb
|
94
|
+
- lib/jenncad/extras/hardware.rb
|
95
|
+
- lib/jenncad/extras/iso7380.rb
|
96
|
+
- lib/jenncad/jenncad.rb
|
97
|
+
- lib/jenncad/openscad.rb
|
98
|
+
- lib/jenncad/part.rb
|
99
|
+
- lib/jenncad/patches/array.rb
|
100
|
+
- lib/jenncad/primitives/aggregation.rb
|
101
|
+
- lib/jenncad/primitives/boolean_object.rb
|
102
|
+
- lib/jenncad/primitives/circle.rb
|
103
|
+
- lib/jenncad/primitives/cube.rb
|
104
|
+
- lib/jenncad/primitives/cylinder.rb
|
105
|
+
- lib/jenncad/primitives/hull_object.rb
|
106
|
+
- lib/jenncad/primitives/intersection_object.rb
|
107
|
+
- lib/jenncad/primitives/linear_extrude.rb
|
108
|
+
- lib/jenncad/primitives/openscad_include.rb
|
109
|
+
- lib/jenncad/primitives/polygon.rb
|
110
|
+
- lib/jenncad/primitives/primitive.rb
|
111
|
+
- lib/jenncad/primitives/projection.rb
|
112
|
+
- lib/jenncad/primitives/rotate_extrude.rb
|
113
|
+
- lib/jenncad/primitives/rounded_cube.rb
|
114
|
+
- lib/jenncad/primitives/slot.rb
|
115
|
+
- lib/jenncad/primitives/sphere.rb
|
116
|
+
- lib/jenncad/primitives/subtract_object.rb
|
117
|
+
- lib/jenncad/primitives/union_object.rb
|
118
|
+
- lib/jenncad/profile_loader.rb
|
119
|
+
- lib/jenncad/project.rb
|
120
|
+
- lib/jenncad/register.rb
|
121
|
+
- lib/jenncad/shortcuts.rb
|
122
|
+
- lib/jenncad/thing.rb
|
123
|
+
- lib/jenncad/transformation/color.rb
|
124
|
+
- lib/jenncad/transformation/mirror.rb
|
125
|
+
- lib/jenncad/transformation/move.rb
|
126
|
+
- lib/jenncad/transformation/multmatrix.rb
|
127
|
+
- lib/jenncad/transformation/rotate.rb
|
128
|
+
- lib/jenncad/transformation/scale.rb
|
129
|
+
- lib/jenncad/transformation/transformation.rb
|
130
|
+
- lib/jenncad/version.rb
|
131
|
+
- todo.txt
|
132
|
+
homepage: ''
|
133
|
+
licenses:
|
134
|
+
- LGPL-3
|
135
|
+
metadata: {}
|
136
|
+
post_install_message:
|
137
|
+
rdoc_options: []
|
138
|
+
require_paths:
|
139
|
+
- lib
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: 2.5.0
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 1.3.1
|
150
|
+
requirements: []
|
151
|
+
rubygems_version: 3.0.3
|
152
|
+
signing_key:
|
153
|
+
specification_version: 4
|
154
|
+
summary: TBD
|
155
|
+
test_files: []
|