jenncad 1.0.0.pre.alpha13 → 1.0.0.pre.alpha14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/jenncad/default_profile.rb +12 -0
- data/lib/jenncad/exporters/openscad.rb +16 -10
- data/lib/jenncad/extras/din912.rb +1 -1
- data/lib/jenncad/extras/din933.rb +1 -1
- data/lib/jenncad/extras/iso7380.rb +1 -1
- data/lib/jenncad/features/climb.rb +3 -3
- data/lib/jenncad/features/cuttable.rb +2 -2
- data/lib/jenncad/patches/array.rb +1 -1
- data/lib/jenncad/primitives/boolean_object.rb +5 -5
- data/lib/jenncad/primitives/cylinder.rb +8 -8
- data/lib/jenncad/primitives/primitive.rb +5 -5
- data/lib/jenncad/primitives/slot.rb +5 -5
- data/lib/jenncad/primitives/subtract_object.rb +3 -3
- data/lib/jenncad/thing.rb +52 -20
- data/lib/jenncad/transformation/color.rb +1 -1
- data/lib/jenncad/version.rb +1 -1
- data/lib/jenncad.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: beb1887d6ae1d3fc87da9c816de1cd2cb54ea5fb3ce7f1277ca6af8bcfc4e687
|
4
|
+
data.tar.gz: 5cc6fd0fc52de9b8b9087dfadd0387122014b157c9573b091aa7c4570a5f2c6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f86a697557b258219756ba02c0bb0e478d1c240c05fd53ecb1221749caedd4e7bf7c3395c439f9c0d426e33366d104e71c20a89bca894ee8e0c843733a0446d
|
7
|
+
data.tar.gz: 4ee555b106f36751024a876ece4880b3cea9138e606c541457a809828645f399f3a417cc0f40256e7363bf20f2b212a20f27166429337062a297caddb21931e1
|
@@ -16,6 +16,18 @@ module JennCad
|
|
16
16
|
)
|
17
17
|
end
|
18
18
|
|
19
|
+
# By default, jenncad will add coordinates of subsequent moves in the output
|
20
|
+
# i.e.
|
21
|
+
# .move(x: 10, y: 20).move(x: 10) would result depending on the value of this option:
|
22
|
+
#
|
23
|
+
# true = translate([10,20, 0])translate([10, 0, 0])
|
24
|
+
# false = translate([20, 20, 0])
|
25
|
+
#
|
26
|
+
# defaults to false
|
27
|
+
def chain_moves
|
28
|
+
false
|
29
|
+
end
|
30
|
+
|
19
31
|
def colors
|
20
32
|
case @colors
|
21
33
|
when nil, []
|
@@ -45,11 +45,11 @@ module JennCad::Exporters
|
|
45
45
|
def handle_command(i=1)
|
46
46
|
case @children.size
|
47
47
|
when 0
|
48
|
-
"#{@modifier}#{@command}(#{handle_args});"
|
48
|
+
"#{@modifier}#{@command}(#{handle_args(@args)});"
|
49
49
|
when 1
|
50
|
-
"#{@modifier}#{@command}(#{handle_args})#{@children.first.handle_command(i+1)}"
|
50
|
+
"#{@modifier}#{@command}(#{handle_args(@args)})#{@children.first.handle_command(i+1)}"
|
51
51
|
when (1..)
|
52
|
-
res = "#{@modifier}#{@command}(#{handle_args}){"
|
52
|
+
res = "#{@modifier}#{@command}(#{handle_args(@args)}){"
|
53
53
|
res += nl
|
54
54
|
inner = @children.map do |c|
|
55
55
|
next if c == nil
|
@@ -68,17 +68,19 @@ module JennCad::Exporters
|
|
68
68
|
}.join(nl)
|
69
69
|
end
|
70
70
|
|
71
|
-
def handle_args
|
72
|
-
case
|
71
|
+
def handle_args(args)
|
72
|
+
case args
|
73
73
|
when String, Symbol
|
74
|
-
return "\"#{
|
74
|
+
return "\"#{args}\""
|
75
75
|
when Array
|
76
|
-
return
|
76
|
+
return args.map do |l|
|
77
77
|
if l == nil
|
78
78
|
0
|
79
79
|
elsif l.kind_of? Array
|
80
80
|
l # skipping check of 2-dmin Arrays for now (used in multmatrix)
|
81
|
-
elsif l
|
81
|
+
elsif l == 0
|
82
|
+
0
|
83
|
+
elsif l == l.to_i
|
82
84
|
l.to_i
|
83
85
|
else
|
84
86
|
l.to_f
|
@@ -86,15 +88,19 @@ module JennCad::Exporters
|
|
86
88
|
end
|
87
89
|
when Hash
|
88
90
|
res = []
|
89
|
-
|
91
|
+
args.each do |k,v|
|
90
92
|
if k.to_s == "fn"
|
91
93
|
k = "$fn"
|
92
94
|
end
|
93
95
|
if v == nil
|
94
96
|
next
|
95
97
|
end
|
96
|
-
if
|
98
|
+
if v.kind_of?(Array)
|
99
|
+
v = handle_args(v)
|
100
|
+
elsif !v.kind_of?(TrueClass) && !v.kind_of?(FalseClass) && v == v.to_i
|
97
101
|
v = v.to_i
|
102
|
+
elsif v.kind_of? BigDecimal
|
103
|
+
v = v.to_f
|
98
104
|
end
|
99
105
|
if v.kind_of? String
|
100
106
|
q = "\""
|
@@ -64,7 +64,7 @@ module JennCad::Extras
|
|
64
64
|
if show
|
65
65
|
res.color("Gainsboro")
|
66
66
|
thread_length=Data[@size][:thread_length]
|
67
|
-
if total_length.
|
67
|
+
if total_length.to_d <= thread_length
|
68
68
|
res+= cylinder(d:@size+addtional_diameter, h:total_length).color("DarkGray")
|
69
69
|
else
|
70
70
|
res+= cylinder(d:@size+addtional_diameter, h:total_length-thread_length)
|
@@ -48,7 +48,7 @@ module JennCad::Extras
|
|
48
48
|
14=> {head_side_to_side:22,head_length:9},
|
49
49
|
16=> {head_side_to_side:24,head_length:10},
|
50
50
|
}
|
51
|
-
head_dia = chart[@size][:head_side_to_side].
|
51
|
+
head_dia = chart[@size][:head_side_to_side].to_d + head_margin.to_d
|
52
52
|
res = cylinder(d:(head_dia/Math.sqrt(3))*2,fn:6,h:chart[@size][:head_length]).move(z:-chart[@size][:head_length])
|
53
53
|
total_length = @length + additional_length
|
54
54
|
res+= cylinder(d:@size+addtional_diameter, h:total_length)
|
@@ -36,7 +36,7 @@ module JennCad::Extras
|
|
36
36
|
|
37
37
|
# ISO 7380
|
38
38
|
def bolt_7380(additional_length=0, addtional_diameter=0, head_margin=0)
|
39
|
-
if head_margin.
|
39
|
+
if head_margin.to_d != 0
|
40
40
|
puts "[warning] :head_margin is not implemented for 7380 bolts"
|
41
41
|
end
|
42
42
|
chart_iso7380 = {
|
@@ -31,7 +31,7 @@ module JennCad::Features
|
|
31
31
|
steps = @opts[:steps]
|
32
32
|
(z / steps).floor
|
33
33
|
else
|
34
|
-
step.
|
34
|
+
step.to_d
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
@@ -62,8 +62,8 @@ module JennCad::Features
|
|
62
62
|
|
63
63
|
offset = get_offset(ref_z)
|
64
64
|
|
65
|
-
lo = (ref_z-offset*2).
|
66
|
-
unless lo.
|
65
|
+
lo = (ref_z-offset*2).to_d % step.to_d
|
66
|
+
unless lo.to_d == 0.0
|
67
67
|
puts "[Warning]: climb has leftover offset #{lo}"
|
68
68
|
end
|
69
69
|
|
@@ -16,12 +16,12 @@ module JennCad::Features
|
|
16
16
|
|
17
17
|
def prepare_cut(l, r, &block)
|
18
18
|
part = block.call
|
19
|
-
if part.z.
|
19
|
+
if part.z.to_d > 0.0
|
20
20
|
part.opts[:margins][:z] = 0.2
|
21
21
|
if l == 0.0
|
22
22
|
part.mz(r+0.1)
|
23
23
|
else
|
24
|
-
part.mz(l+part.z.
|
24
|
+
part.mz(l+part.z.to_d-0.2)
|
25
25
|
end
|
26
26
|
else
|
27
27
|
part.opts[:margins][:z] = 0.2
|
@@ -44,25 +44,25 @@ module JennCad::Primitives
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def inherit_z
|
47
|
-
heights = @parts.map{|l| l.calc_z.
|
47
|
+
heights = @parts.map{|l| l.calc_z.to_d}.uniq
|
48
48
|
if heights.size > 1
|
49
49
|
total_heights = []
|
50
50
|
@parts.each do |p|
|
51
|
-
total_heights << p.z.
|
51
|
+
total_heights << p.z.to_d + p.calc_z.to_d
|
52
52
|
end
|
53
53
|
@z = total_heights.max
|
54
54
|
@calc_z = heights.min
|
55
55
|
else
|
56
|
-
@calc_z = heights.first.
|
56
|
+
@calc_z = heights.first.to_d
|
57
57
|
@z = @parts.map(&:z).compact.max
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
61
|
def inherit_zref
|
62
62
|
return if @parts.first == nil
|
63
|
-
#return if @parts.first.z.
|
63
|
+
#return if @parts.first.z.to_d == 0.0
|
64
64
|
get_primitives(@parts[1..-1]).flatten.each do |part|
|
65
|
-
if part.z.
|
65
|
+
if part.z.to_d == 0.0
|
66
66
|
part.set_option :zref, @parts.first
|
67
67
|
end
|
68
68
|
end
|
@@ -67,13 +67,13 @@ module JennCad::Primitives
|
|
67
67
|
def handle_fn
|
68
68
|
case @opts[:fn]
|
69
69
|
when nil, 0
|
70
|
-
$fn =
|
70
|
+
$fn = auto_dn!
|
71
71
|
else
|
72
72
|
@fn = @opts[:fn]
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
-
def
|
76
|
+
def auto_dn!
|
77
77
|
case @d
|
78
78
|
when (16..)
|
79
79
|
@fn = (@d*4).ceil
|
@@ -85,25 +85,25 @@ module JennCad::Primitives
|
|
85
85
|
def handle_radius_diameter
|
86
86
|
case @opts[:d]
|
87
87
|
when 0, nil
|
88
|
-
@r = @opts[:r].
|
88
|
+
@r = @opts[:r].to_d + @opts[:margins][:r].to_d
|
89
89
|
@d = @r * 2.0
|
90
90
|
else
|
91
|
-
@d = @opts[:d].
|
91
|
+
@d = @opts[:d].to_d + @opts[:margins][:d].to_d
|
92
92
|
@r = @d / 2.0
|
93
93
|
end
|
94
94
|
|
95
95
|
case @opts[:d1]
|
96
96
|
when 0, nil
|
97
97
|
else
|
98
|
-
@d1 = @opts[:d1].
|
99
|
-
@d2 = @opts[:d2].
|
98
|
+
@d1 = @opts[:d1].to_d + @opts[:margins][:d].to_d
|
99
|
+
@d2 = @opts[:d2].to_d + @opts[:margins][:d].to_d
|
100
100
|
end
|
101
101
|
|
102
102
|
case @opts[:r1]
|
103
103
|
when 0, nil
|
104
104
|
else
|
105
|
-
@d1 = 2 * @opts[:r1].
|
106
|
-
@d2 = 2 * @opts[:r2].
|
105
|
+
@d1 = 2 * @opts[:r1].to_d + @opts[:margins][:d].to_d
|
106
|
+
@d2 = 2 * @opts[:r2].to_d + @opts[:margins][:d].to_d
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
@@ -5,14 +5,14 @@ module JennCad::Primitives
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def handle_margins
|
8
|
-
@x = @opts[:x] + @opts[:margins][:x]
|
9
|
-
@y = @opts[:y] + @opts[:margins][:y]
|
10
|
-
@z = @opts[:z] + @opts[:margins][:z]
|
8
|
+
@x = @opts[:x].to_d + @opts[:margins][:x].to_d
|
9
|
+
@y = @opts[:y].to_d + @opts[:margins][:y].to_d
|
10
|
+
@z = @opts[:z].to_d + @opts[:margins][:z].to_d
|
11
11
|
end
|
12
12
|
|
13
13
|
def handle_diameter
|
14
|
-
@d = opts[:d]
|
15
|
-
@r = opts[:r]
|
14
|
+
@d = opts[:d].to_d
|
15
|
+
@r = opts[:r].to_d
|
16
16
|
if @d
|
17
17
|
@r = @d/2.0
|
18
18
|
elsif @r
|
@@ -79,16 +79,16 @@ module JennCad::Primitives
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def end_vector
|
82
|
-
if @a.
|
82
|
+
if @a.to_d == 0.0
|
83
83
|
return [@len_x, 0] if @len_x
|
84
84
|
return [0, @len_y] if @len_y
|
85
85
|
end
|
86
86
|
if @len_x
|
87
|
-
x = cos(PI*@a/180.0)*@len_x.
|
88
|
-
y = sin(PI*@a/180.0)*@len_x.
|
87
|
+
x = cos(PI*@a/180.0)*@len_x.to_d
|
88
|
+
y = sin(PI*@a/180.0)*@len_x.to_d
|
89
89
|
else
|
90
|
-
x = -1* sin(PI*@a/180.0)*@len_y.
|
91
|
-
y = cos(PI*@a/180.0)*@len_y.
|
90
|
+
x = -1* sin(PI*@a/180.0)*@len_y.to_d
|
91
|
+
y = cos(PI*@a/180.0)*@len_y.to_d
|
92
92
|
end
|
93
93
|
[x,y]
|
94
94
|
end
|
@@ -2,13 +2,13 @@ module JennCad::Primitives
|
|
2
2
|
class SubtractObject < BooleanObject
|
3
3
|
def inherit_z
|
4
4
|
@z = 0
|
5
|
-
@calc_z = parts.first.calc_z.
|
5
|
+
@calc_z = parts.first.calc_z.to_d
|
6
6
|
|
7
7
|
only_additives_of(@parts).each do |p|
|
8
8
|
if option(:debug)
|
9
9
|
$log.debug "inherit_z checks for: #{p}"
|
10
10
|
end
|
11
|
-
z = p.z.
|
11
|
+
z = p.z.to_d
|
12
12
|
@z = z if z > @z
|
13
13
|
end
|
14
14
|
$log.debug "inherit_z called, biggest z found: #{@z}" if option(:debug)
|
@@ -80,7 +80,7 @@ module JennCad::Primitives
|
|
80
80
|
part.opts[:margins][:z] += 0.004
|
81
81
|
# part.z+=0.004
|
82
82
|
part.mz(-0.002)
|
83
|
-
elsif part.calc_z.
|
83
|
+
elsif part.calc_z.to_d+part.calc_h.to_d == compare_h
|
84
84
|
# puts "z fighting at top: #{compare_h}"
|
85
85
|
#part.z+=0.004
|
86
86
|
part.opts[:margins][:z] += 0.004
|
data/lib/jenncad/thing.rb
CHANGED
@@ -93,7 +93,7 @@ module JennCad
|
|
93
93
|
case self
|
94
94
|
when UnionObject
|
95
95
|
ref = self.parts.first
|
96
|
-
rz = self.z.
|
96
|
+
rz = self.z.to_d + self.calc_h.to_d
|
97
97
|
when BooleanObject
|
98
98
|
ref = self.parts.first
|
99
99
|
rz = ref.calc_z + ref.calc_h
|
@@ -121,7 +121,7 @@ module JennCad
|
|
121
121
|
alias :fy :flip_y
|
122
122
|
|
123
123
|
def radians(a)
|
124
|
-
a.
|
124
|
+
a.to_d/180.0*PI
|
125
125
|
end
|
126
126
|
|
127
127
|
# experiment
|
@@ -181,21 +181,41 @@ module JennCad
|
|
181
181
|
end
|
182
182
|
|
183
183
|
def move(args={})
|
184
|
+
return self if args.nil? or args.empty?
|
185
|
+
|
184
186
|
if args.kind_of? Array
|
185
187
|
x,y,z = args
|
186
188
|
return move(x:x, y:y, z:z)
|
187
189
|
end
|
188
190
|
args = parse_xyz_shortcuts(args)
|
189
191
|
|
192
|
+
if args[:x].to_d == 0.0 && args[:y].to_d == 0.0 && args[:z].to_d == 0.0
|
193
|
+
return self
|
194
|
+
end
|
195
|
+
|
190
196
|
@transformations ||= []
|
191
197
|
if args[:prepend]
|
192
198
|
@transformations.prepend(Move.new(args))
|
193
199
|
else
|
194
|
-
@transformations
|
200
|
+
lt = @transformations.last
|
201
|
+
|
202
|
+
chain = if args[:chain]
|
203
|
+
args[:chain]
|
204
|
+
else
|
205
|
+
$jenncad_profile.chain_moves
|
206
|
+
end
|
207
|
+
|
208
|
+
if lt && lt.class == Move && chain == false
|
209
|
+
lt.x += args[:x].to_d
|
210
|
+
lt.y += args[:y].to_d
|
211
|
+
lt.z += args[:z].to_d
|
212
|
+
else
|
213
|
+
@transformations << Move.new(args)
|
214
|
+
end
|
195
215
|
end
|
196
|
-
@calc_x += args[:x].
|
197
|
-
@calc_y += args[:y].
|
198
|
-
@calc_z += args[:z].
|
216
|
+
@calc_x += args[:x].to_d
|
217
|
+
@calc_y += args[:y].to_d
|
218
|
+
@calc_z += args[:z].to_d
|
199
219
|
self
|
200
220
|
end
|
201
221
|
alias :translate :move
|
@@ -214,7 +234,12 @@ module JennCad
|
|
214
234
|
end
|
215
235
|
|
216
236
|
# move to anchor
|
217
|
-
def movea(key, thing=nil)
|
237
|
+
def movea(key, thing=nil, args={})
|
238
|
+
if thing.kind_of? Hash # if you leave out thing, args may be interpreted as thing
|
239
|
+
args = thing
|
240
|
+
thing = nil
|
241
|
+
end
|
242
|
+
|
218
243
|
an = anchor(key, thing)
|
219
244
|
|
220
245
|
unless an
|
@@ -222,20 +247,26 @@ module JennCad
|
|
222
247
|
$log.error "Available anchors: #{@anchors}"
|
223
248
|
return self
|
224
249
|
else
|
225
|
-
|
250
|
+
m = an.dup
|
251
|
+
if args[:chain]
|
252
|
+
m[:chain] = args[:chain]
|
253
|
+
end
|
254
|
+
if args[:inverted]
|
255
|
+
self.movei(m)
|
256
|
+
else
|
257
|
+
self.move(m)
|
258
|
+
end
|
226
259
|
end
|
227
260
|
end
|
228
261
|
|
229
262
|
# move to anchor - inverted
|
230
|
-
def moveai(key, thing=nil)
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
$log.error "Available anchors: #{@anchors}"
|
235
|
-
return self
|
236
|
-
else
|
237
|
-
self.movei(an.dup)
|
263
|
+
def moveai(key, thing=nil, args={})
|
264
|
+
if thing.kind_of? Hash # if you leave out thing, args may be interpreted as thing
|
265
|
+
args = thing
|
266
|
+
thing = nil
|
238
267
|
end
|
268
|
+
args[:inverted] = true
|
269
|
+
movea(key, thing, args)
|
239
270
|
end
|
240
271
|
|
241
272
|
|
@@ -272,6 +303,7 @@ module JennCad
|
|
272
303
|
to[key] = args[key]*-1
|
273
304
|
end
|
274
305
|
end
|
306
|
+
to[:chain] = args[:chain]
|
275
307
|
move(to)
|
276
308
|
end
|
277
309
|
|
@@ -335,7 +367,7 @@ module JennCad
|
|
335
367
|
end
|
336
368
|
|
337
369
|
def top_of(other_object)
|
338
|
-
self.move(z:other_object.z+other_object.calc_z.
|
370
|
+
self.move(z:other_object.z+other_object.calc_z.to_d)
|
339
371
|
end
|
340
372
|
|
341
373
|
def on_top_of(other_object)
|
@@ -564,7 +596,7 @@ module JennCad
|
|
564
596
|
end
|
565
597
|
|
566
598
|
def referenced_z
|
567
|
-
return false if @z.
|
599
|
+
return false if @z.to_d != 0.0
|
568
600
|
return option(:zref) if option(:zref)
|
569
601
|
return false
|
570
602
|
end
|
@@ -579,7 +611,7 @@ module JennCad
|
|
579
611
|
when nil, false
|
580
612
|
@z + z_margin
|
581
613
|
else
|
582
|
-
ref.z.
|
614
|
+
ref.z.to_d + ref.z_margin.to_d
|
583
615
|
end
|
584
616
|
end
|
585
617
|
|
@@ -588,7 +620,7 @@ module JennCad
|
|
588
620
|
when nil, {}
|
589
621
|
0.0
|
590
622
|
else
|
591
|
-
m[:z].
|
623
|
+
m[:z].to_d
|
592
624
|
end
|
593
625
|
end
|
594
626
|
|
data/lib/jenncad/version.rb
CHANGED
data/lib/jenncad.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jenncad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.pre.
|
4
|
+
version: 1.0.0.pre.alpha14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jennifer Glauche
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-05-
|
11
|
+
date: 2022-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: geo3d
|