jenncad 1.0.0.pre.alpha2 → 1.0.0.pre.alpha3
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 +4 -4
- data/lib/jenncad.rb +1 -1
- data/lib/jenncad/exporters/openscad.rb +2 -0
- data/lib/jenncad/features.rb +9 -0
- data/lib/jenncad/{primitives → features}/aggregation.rb +2 -2
- data/lib/jenncad/features/climb.rb +95 -0
- data/lib/jenncad/features/cuttable.rb +35 -0
- data/lib/jenncad/features/feature.rb +4 -0
- data/lib/jenncad/{primitives → features}/openscad_include.rb +1 -1
- data/lib/jenncad/patches/array.rb +1 -2
- data/lib/jenncad/primitives.rb +0 -2
- data/lib/jenncad/primitives/cube.rb +1 -0
- data/lib/jenncad/primitives/rounded_cube.rb +2 -1
- data/lib/jenncad/thing.rb +8 -3
- data/lib/jenncad/transformation/scale.rb +2 -0
- data/lib/jenncad/version.rb +1 -1
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3b2667c6121606bece58cc0edbb2d7c0e0f2454dc175b62c3749209c1eef266
|
4
|
+
data.tar.gz: d8dbc84a707b0767374830df107ebcb098b89591664f0f7062468404b0c512e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e512b91a4c6355cfd1b516bc52e434b1670e5aae02b39d75581e423a6242a90b11257a4c4902e30db74de0d4c1693aa7608829393df45806ecf56fc3e409bce9
|
7
|
+
data.tar.gz: 26fad5ebe17ad65610283315c2c33d9d7842717b78ad8560029038238b18c88aa351667a395f24ef134cf3f9fce298fcb1528ca459c7aeebfe618d71a5186233
|
data/lib/jenncad.rb
CHANGED
@@ -20,10 +20,10 @@ require "jenncad/part"
|
|
20
20
|
require "jenncad/project"
|
21
21
|
require "jenncad/commands"
|
22
22
|
|
23
|
+
require "jenncad/features"
|
23
24
|
require "jenncad/primitives"
|
24
25
|
|
25
26
|
|
26
|
-
|
27
27
|
require "jenncad/transformation/transformation"
|
28
28
|
require "jenncad/transformation/move"
|
29
29
|
require "jenncad/transformation/rotate"
|
@@ -221,6 +221,8 @@ module JennCad::Exporters
|
|
221
221
|
OpenScadObject.new(:translate, t.coordinates, transform(part, &block))
|
222
222
|
when JennCad::Rotate, JennCad::Mirror
|
223
223
|
OpenScadObject.new(demodulize(t.class).downcase, t.coordinates, transform(part, &block))
|
224
|
+
when JennCad::Scale
|
225
|
+
OpenScadObject.new(:scale, t.scale, transform(part, &block))
|
224
226
|
when JennCad::Multmatrix
|
225
227
|
OpenScadObject.new(:multmatrix, t.m, transform(part, &block))
|
226
228
|
else
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module JennCad::Features
|
2
|
+
class Climb < Feature
|
3
|
+
def initialize(opts, block)
|
4
|
+
@opts = {
|
5
|
+
offset: :auto,
|
6
|
+
step: nil,
|
7
|
+
steps: nil,
|
8
|
+
bottom: nil,
|
9
|
+
top: nil,
|
10
|
+
z: nil,
|
11
|
+
}.deep_merge!(opts)
|
12
|
+
if @opts[:step].nil? && @opts[:steps].nil?
|
13
|
+
raise "please define at least one of :step or :steps for climb"
|
14
|
+
end
|
15
|
+
super(@opts)
|
16
|
+
@block = block
|
17
|
+
end
|
18
|
+
|
19
|
+
def z_or_referenced
|
20
|
+
case z = @opts[:z]
|
21
|
+
when nil
|
22
|
+
referenced_z.z
|
23
|
+
else
|
24
|
+
z
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_step(z)
|
29
|
+
case step = @opts[:step]
|
30
|
+
when nil, :auto, 0, 0.0
|
31
|
+
steps = @opts[:steps]
|
32
|
+
(z / steps).floor
|
33
|
+
else
|
34
|
+
step.to_f
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_offset(z)
|
39
|
+
case offset = @opts[:offset]
|
40
|
+
when :auto
|
41
|
+
step = get_step(z)
|
42
|
+
((z % step) + step) / 2.0
|
43
|
+
when nil, 0, 0.0
|
44
|
+
0.0
|
45
|
+
else
|
46
|
+
offset
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def climb_from_bottom(offset, step, n)
|
51
|
+
n.times.map{ |i| @block.yield.mz(offset+step*i) }.union
|
52
|
+
end
|
53
|
+
|
54
|
+
def climb_from_top(z, offset, step, n)
|
55
|
+
n.times.map{ |i| @block.yield.mz(z-offset-step*i) }.union
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_openscad
|
59
|
+
ref_z = z_or_referenced
|
60
|
+
step = get_step(ref_z)
|
61
|
+
steps, top, bottom = @opts.values_at(:steps, :top, :bottom)
|
62
|
+
|
63
|
+
offset = get_offset(ref_z)
|
64
|
+
|
65
|
+
lo = (ref_z-offset*2).to_f % step.to_f
|
66
|
+
unless lo.to_f == 0.0
|
67
|
+
puts "[Warning]: climb has leftover offset #{lo}"
|
68
|
+
end
|
69
|
+
|
70
|
+
if steps
|
71
|
+
top = steps
|
72
|
+
bottom = steps
|
73
|
+
end
|
74
|
+
|
75
|
+
unless top or bottom
|
76
|
+
climb_from_bottom(offset, step, ((ref_z-offset*2) / step).floor + 1 )
|
77
|
+
else
|
78
|
+
res = nil
|
79
|
+
if top
|
80
|
+
res += climb_from_top(ref_z, offset, step, top)
|
81
|
+
end
|
82
|
+
if bottom
|
83
|
+
res += climb_from_bottom(offset, step, bottom)
|
84
|
+
end
|
85
|
+
res
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
def climb(args, &block)
|
92
|
+
Climb.new(args, block)
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module JennCad::Features
|
2
|
+
module Cuttable
|
3
|
+
def cut(args, &block)
|
4
|
+
if args[:x]
|
5
|
+
l = args[:x].min * @opts[:y] / 2.0
|
6
|
+
r = args[:x].max * @opts[:y] / 2.0
|
7
|
+
prepare_cut(l, r, &block).flip_x
|
8
|
+
elsif args[:y]
|
9
|
+
l = args[:y].min * @opts[:y] / 2.0
|
10
|
+
r = args[:y].max * @opts[:y] / 2.0
|
11
|
+
prepare_cut(l, r, &block).flip_y
|
12
|
+
elsif args[:z]
|
13
|
+
raise "cut for Z is not implemented yet"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def prepare_cut(l, r, &block)
|
18
|
+
part = block.call
|
19
|
+
if part.z.to_f > 0.0
|
20
|
+
part.opts[:margins][:z] = 0.2
|
21
|
+
if l == 0.0
|
22
|
+
part.mz(r+0.1)
|
23
|
+
else
|
24
|
+
part.mz(l+part.z.to_f-0.2)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
part.opts[:margins][:z] = 0.2
|
28
|
+
part.z = l.abs + r.abs + 0.2
|
29
|
+
part.mz(-0.1)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -12,8 +12,7 @@ class Array
|
|
12
12
|
else
|
13
13
|
res = part
|
14
14
|
end
|
15
|
-
|
16
|
-
res, z = res.move(z:z), z + res.z.to_f + 0.01 unless skip_z
|
15
|
+
res, z = res.mz(z), z + res.z.to_f unless skip_z
|
17
16
|
res
|
18
17
|
end
|
19
18
|
.union
|
data/lib/jenncad/primitives.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module JennCad::Primitives
|
2
2
|
class RoundedCube < Primitive
|
3
3
|
attr_accessor :d, :r
|
4
|
+
include JennCad::Features::Cuttable
|
4
5
|
|
5
6
|
def initialize(args)
|
6
7
|
if args.kind_of?(Array) && args[0].kind_of?(Hash)
|
@@ -40,7 +41,7 @@ module JennCad::Primitives
|
|
40
41
|
# make diameter not bigger than any side
|
41
42
|
@d = [@d, @x, @y].min
|
42
43
|
res = HullObject.new(
|
43
|
-
cylinder(d:@d, h
|
44
|
+
cylinder(d:@d, h:z+z_margin).moveh(x: -@x + @d, y: @y - @d),
|
44
45
|
cylinder(d:@d).moveh(x: @x - @d, y: @y - @d),
|
45
46
|
cylinder(d:@d).moveh(x: -@x + @d, y: -@y + @d),
|
46
47
|
cylinder(d:@d).moveh(x: @x - @d, y: -@y + @d),
|
data/lib/jenncad/thing.rb
CHANGED
@@ -6,7 +6,7 @@ module JennCad
|
|
6
6
|
attr_accessor :x, :y, :diameter
|
7
7
|
attr_accessor :calc_x, :calc_y, :calc_z, :calc_h
|
8
8
|
attr_accessor :shape
|
9
|
-
attr_accessor :angle, :
|
9
|
+
attr_accessor :angle, :fn
|
10
10
|
|
11
11
|
def initialize(args={})
|
12
12
|
@transformations = []
|
@@ -49,17 +49,22 @@ module JennCad
|
|
49
49
|
|
50
50
|
def flip(direction)
|
51
51
|
case self
|
52
|
+
when UnionObject
|
53
|
+
ref = self.parts.first
|
54
|
+
rz = self.z.to_f + self.calc_h.to_f
|
52
55
|
when BooleanObject
|
53
56
|
ref = self.parts.first
|
57
|
+
rz = ref.calc_z + ref.calc_h
|
54
58
|
else
|
55
59
|
ref = self
|
60
|
+
rz = self.z + self.calc_h
|
56
61
|
end
|
57
62
|
|
58
63
|
case direction
|
59
64
|
when :x
|
60
|
-
self.ry(90).mh(x: -
|
65
|
+
self.ry(90).mh(x: -rz, z: ref.x)
|
61
66
|
when :y
|
62
|
-
self.rx(90).mh(y:
|
67
|
+
self.rx(90).mh(y: rz, z: ref.y)
|
63
68
|
end
|
64
69
|
end
|
65
70
|
|
data/lib/jenncad/version.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.alpha3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jennifer Glauche
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: geo3d
|
@@ -108,10 +108,15 @@ files:
|
|
108
108
|
- lib/jenncad/extras/din934.rb
|
109
109
|
- lib/jenncad/extras/hardware.rb
|
110
110
|
- lib/jenncad/extras/iso7380.rb
|
111
|
+
- lib/jenncad/features.rb
|
112
|
+
- lib/jenncad/features/aggregation.rb
|
113
|
+
- lib/jenncad/features/climb.rb
|
114
|
+
- lib/jenncad/features/cuttable.rb
|
115
|
+
- lib/jenncad/features/feature.rb
|
116
|
+
- lib/jenncad/features/openscad_include.rb
|
111
117
|
- lib/jenncad/part.rb
|
112
118
|
- lib/jenncad/patches/array.rb
|
113
119
|
- lib/jenncad/primitives.rb
|
114
|
-
- lib/jenncad/primitives/aggregation.rb
|
115
120
|
- lib/jenncad/primitives/boolean_object.rb
|
116
121
|
- lib/jenncad/primitives/circle.rb
|
117
122
|
- lib/jenncad/primitives/cube.rb
|
@@ -119,7 +124,6 @@ files:
|
|
119
124
|
- lib/jenncad/primitives/hull_object.rb
|
120
125
|
- lib/jenncad/primitives/intersection_object.rb
|
121
126
|
- lib/jenncad/primitives/linear_extrude.rb
|
122
|
-
- lib/jenncad/primitives/openscad_include.rb
|
123
127
|
- lib/jenncad/primitives/polygon.rb
|
124
128
|
- lib/jenncad/primitives/primitive.rb
|
125
129
|
- lib/jenncad/primitives/projection.rb
|