jenncad 1.0.0.pre.alpha20 → 1.0.0.pre.alpha21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/jenncad/commands.rb +8 -1
- data/lib/jenncad/features.rb +0 -3
- data/lib/jenncad/primitives/circle.rb +2 -58
- data/lib/jenncad/primitives/linear_extrude.rb +4 -0
- data/lib/jenncad/primitives/slot.rb +46 -9
- data/lib/jenncad/primitives/square.rb +2 -0
- data/lib/jenncad/project.rb +9 -1
- data/lib/jenncad/shared/circle_ish.rb +65 -0
- data/lib/jenncad/shared/cube_ish.rb +3 -0
- data/lib/jenncad/shared.rb +3 -0
- data/lib/jenncad/shortcuts.rb +9 -0
- data/lib/jenncad/version.rb +1 -1
- data/lib/jenncad.rb +1 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf38a53bfb5d20ab5af97d24c948792ae3e5d577d63806f4a9d7008b5429f507
|
4
|
+
data.tar.gz: aae023c68738b1aee605fff567b3d0792f98753252858e1ee2569a18dd470daf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe8765bc981516be5fe1e94212e946a32d14baf295e0995be9820589dbe31b1be430a1792c1c8bd57ceaeab132ae495668ba8852fa7dbd16676b3345d3c4c8e8
|
7
|
+
data.tar.gz: 5667ae97532fa9094125d65603f8542a2cef77621c082ff2c097eebc3865ae5ca683ac16cc5cc9b2a3a09042ca6bd678cadd351f0fa468698e94fc56cf3bedfc
|
data/lib/jenncad/commands.rb
CHANGED
@@ -46,6 +46,7 @@ module JennCad
|
|
46
46
|
|
47
47
|
class Build < Run
|
48
48
|
option :binary, type: :boolean, default: false, desc: "run through admesh to create a binary stl"
|
49
|
+
option :only_print, type: :boolean, default: true, desc: "If a part has a print orientation set, only build that orientation as STL"
|
49
50
|
|
50
51
|
def build(options)
|
51
52
|
if options[:binary]
|
@@ -55,7 +56,13 @@ module JennCad
|
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
58
|
-
Dir.glob("output/**/*.scad")
|
59
|
+
files = Dir.glob("output/**/*.scad")
|
60
|
+
if options[:only_print]
|
61
|
+
# Remove non _print.scad files from the list of files to build if we have a print orientation (and the only_print flag set)
|
62
|
+
files -= Dir.glob("output/**/*_print.scad").map{|x| x.gsub("_print.scad",".scad")}
|
63
|
+
end
|
64
|
+
|
65
|
+
files.each do |file|
|
59
66
|
stl = file.gsub(".scad",".stl")
|
60
67
|
build_stl(file, stl)
|
61
68
|
convert_to_binary(stl) if options[:binary] && admesh_installed
|
data/lib/jenncad/features.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module JennCad::Primitives
|
2
2
|
class Circle < Primitive
|
3
|
+
include CircleIsh
|
4
|
+
|
3
5
|
attr_accessor :d, :r, :fn
|
4
6
|
def initialize(args)
|
5
7
|
if args.kind_of?(Array) && args[0].kind_of?(Hash)
|
@@ -38,21 +40,6 @@ module JennCad::Primitives
|
|
38
40
|
set_anchors_2d
|
39
41
|
end
|
40
42
|
|
41
|
-
def set_anchors_2d
|
42
|
-
@anchors = {} # reset anchors
|
43
|
-
if @opts[:d]
|
44
|
-
rad = @opts[:d] / 2.0
|
45
|
-
else
|
46
|
-
rad = @opts[:r]
|
47
|
-
end
|
48
|
-
|
49
|
-
# Similar to cube
|
50
|
-
set_anchor :left, x: -rad
|
51
|
-
set_anchor :right, x: rad
|
52
|
-
set_anchor :top, y: rad
|
53
|
-
set_anchor :bottom, y: -rad
|
54
|
-
end
|
55
|
-
|
56
43
|
def openscad_params
|
57
44
|
res = {}
|
58
45
|
[:d, :fn].each do |n|
|
@@ -61,49 +48,6 @@ module JennCad::Primitives
|
|
61
48
|
res
|
62
49
|
end
|
63
50
|
|
64
|
-
def handle_fn
|
65
|
-
case @opts[:fn]
|
66
|
-
when nil, 0
|
67
|
-
$fn = auto_dn!
|
68
|
-
else
|
69
|
-
@fn = @opts[:fn]
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def auto_dn!
|
74
|
-
case @d
|
75
|
-
when (16..)
|
76
|
-
@fn = (@d*4).ceil
|
77
|
-
else
|
78
|
-
@fn = 64
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def handle_radius_diameter
|
83
|
-
case @opts[:d]
|
84
|
-
when 0, nil
|
85
|
-
@r = @opts[:r].to_d + @opts[:margins][:r].to_d
|
86
|
-
@d = @r * 2.0
|
87
|
-
else
|
88
|
-
@d = @opts[:d].to_d + @opts[:margins][:d].to_d
|
89
|
-
@r = @d / 2.0
|
90
|
-
end
|
91
|
-
|
92
|
-
case @opts[:d1]
|
93
|
-
when 0, nil
|
94
|
-
else
|
95
|
-
@d1 = @opts[:d1].to_d + @opts[:margins][:d].to_d
|
96
|
-
@d2 = @opts[:d2].to_d + @opts[:margins][:d].to_d
|
97
|
-
end
|
98
|
-
|
99
|
-
case @opts[:r1]
|
100
|
-
when 0, nil
|
101
|
-
else
|
102
|
-
@d1 = 2 * @opts[:r1].to_d + @opts[:margins][:d].to_d
|
103
|
-
@d2 = 2 * @opts[:r2].to_d + @opts[:margins][:d].to_d
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
51
|
|
108
52
|
end
|
109
53
|
end
|
@@ -4,6 +4,10 @@ module JennCad::Primitives
|
|
4
4
|
def initialize(part, args={})
|
5
5
|
@transformations = []
|
6
6
|
@parts = [part]
|
7
|
+
if args.kind_of? Numeric
|
8
|
+
args = {h: args}
|
9
|
+
end
|
10
|
+
|
7
11
|
@z = args[:h] || args[:height] || args[:z]
|
8
12
|
@center_bool = args[:center]
|
9
13
|
@convexity = args[:convexity]
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module JennCad::Primitives
|
2
2
|
class Slot < Primitive
|
3
|
+
include CircleIsh
|
3
4
|
attr_accessor :d, :r, :h, :fn, :len_x, :len_y
|
4
5
|
|
5
6
|
def initialize(args)
|
@@ -28,7 +29,11 @@ module JennCad::Primitives
|
|
28
29
|
x: 0,
|
29
30
|
y: 0,
|
30
31
|
z: nil,
|
32
|
+
d1: nil,
|
33
|
+
d2: nil,
|
34
|
+
mode: :auto,
|
31
35
|
cz: false,
|
36
|
+
az: false,
|
32
37
|
margins: {
|
33
38
|
r: 0,
|
34
39
|
d: 0,
|
@@ -61,8 +66,6 @@ module JennCad::Primitives
|
|
61
66
|
@len_y = ty - @d
|
62
67
|
end
|
63
68
|
|
64
|
-
# TODO: this needs anchors like cube
|
65
|
-
# TODO: color on this needs to apply to hull, not on the cylinders.
|
66
69
|
set_anchors
|
67
70
|
end
|
68
71
|
|
@@ -76,11 +79,7 @@ module JennCad::Primitives
|
|
76
79
|
|
77
80
|
def set_anchors
|
78
81
|
@anchors = {} # reset anchors
|
79
|
-
|
80
|
-
rad = @opts[:d] / 2.0
|
81
|
-
else
|
82
|
-
rad = @opts[:r]
|
83
|
-
end
|
82
|
+
rad = radius
|
84
83
|
|
85
84
|
if @x > 0
|
86
85
|
set_anchor :left, x: - rad
|
@@ -120,9 +119,39 @@ module JennCad::Primitives
|
|
120
119
|
end
|
121
120
|
end
|
122
121
|
|
122
|
+
def get_mode
|
123
|
+
if @opts[:d1] && @opts[:d2]
|
124
|
+
case @opts[:mode]
|
125
|
+
when nil, :auto
|
126
|
+
:dia1
|
127
|
+
when :cyl
|
128
|
+
:cyl
|
129
|
+
else
|
130
|
+
:dia1
|
131
|
+
end
|
132
|
+
else
|
133
|
+
:default
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
123
137
|
def to_openscad
|
124
|
-
|
125
|
-
|
138
|
+
mode = get_mode
|
139
|
+
|
140
|
+
opts = @opts.clone
|
141
|
+
opts.delete(:color)
|
142
|
+
|
143
|
+
case mode
|
144
|
+
when :default
|
145
|
+
c1 = ci(opts)
|
146
|
+
c2 = ci(opts)
|
147
|
+
when :dia1 # new default mode; d1 start dia, d2 end dia
|
148
|
+
c1 = ci(opts.merge(d: @opts[:d1]))
|
149
|
+
c2 = ci(opts.merge(d: @opts[:d2]))
|
150
|
+
when :cyl # old mode; use cylinders
|
151
|
+
c1 = cy(opts)
|
152
|
+
c2 = cy(opts)
|
153
|
+
end
|
154
|
+
|
126
155
|
if @len_x
|
127
156
|
c2.move(x:@len_x)
|
128
157
|
end
|
@@ -130,6 +159,14 @@ module JennCad::Primitives
|
|
130
159
|
c2.move(y:@len_y)
|
131
160
|
end
|
132
161
|
res = c1 & c2
|
162
|
+
if mode != :cyl && @z.to_d > 0
|
163
|
+
res = res.e(@z)
|
164
|
+
elsif @opts[:az] == true
|
165
|
+
# TODO: this needs testing, may not work
|
166
|
+
res = res.auto_extrude
|
167
|
+
end
|
168
|
+
res.inherit_color(self)
|
169
|
+
|
133
170
|
if @a != 0.0
|
134
171
|
res = res.rotate(z:@a)
|
135
172
|
end
|
@@ -42,6 +42,8 @@ module JennCad::Primitives
|
|
42
42
|
|
43
43
|
def set_anchors_2d
|
44
44
|
@anchors = {} # this resets anchors
|
45
|
+
@corners = [:top_right, :top_left, :bottom_right, :bottom_left]
|
46
|
+
@sides = [:left, :right, :top, :bottom]
|
45
47
|
|
46
48
|
if @opts[:center] || @opts[:center_x]
|
47
49
|
left = -@opts[:x] / 2.0
|
data/lib/jenncad/project.rb
CHANGED
@@ -17,10 +17,18 @@ module JennCad
|
|
17
17
|
run_exports
|
18
18
|
end
|
19
19
|
|
20
|
+
def run_export!(part, file)
|
21
|
+
part.openscad([output_dir,file].join("/"))
|
22
|
+
end
|
23
|
+
|
20
24
|
def run_exports
|
21
25
|
outputs.each do |name|
|
22
26
|
part = self.send(name)
|
23
|
-
part
|
27
|
+
run_export!(part, "#{name}.scad")
|
28
|
+
if part.respond_to? :print
|
29
|
+
part = self.send(name).print
|
30
|
+
run_export!(part, "#{name}_print.scad")
|
31
|
+
end
|
24
32
|
end
|
25
33
|
end
|
26
34
|
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module CircleIsh
|
2
|
+
|
3
|
+
def radius
|
4
|
+
if @opts[:d]
|
5
|
+
@opts[:d].to_d / 2.0
|
6
|
+
else
|
7
|
+
@opts[:r].to_d
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def set_anchors_2d
|
12
|
+
@anchors = {} # reset anchors
|
13
|
+
rad = radius
|
14
|
+
# Similar to cube
|
15
|
+
set_anchor :left, x: -rad
|
16
|
+
set_anchor :right, x: rad
|
17
|
+
set_anchor :top, y: rad
|
18
|
+
set_anchor :bottom, y: -rad
|
19
|
+
end
|
20
|
+
|
21
|
+
def handle_fn
|
22
|
+
case @opts[:fn]
|
23
|
+
when nil, 0
|
24
|
+
$fn = auto_dn!
|
25
|
+
else
|
26
|
+
@fn = @opts[:fn]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def auto_dn!
|
31
|
+
case @d
|
32
|
+
when (16..)
|
33
|
+
@fn = (@d*4).ceil
|
34
|
+
else
|
35
|
+
@fn = 64
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def handle_radius_diameter
|
40
|
+
case @opts[:d]
|
41
|
+
when 0, nil
|
42
|
+
@r = @opts[:r].to_d + @opts[:margins][:r].to_d
|
43
|
+
@d = @r * 2.0
|
44
|
+
else
|
45
|
+
@d = @opts[:d].to_d + @opts[:margins][:d].to_d
|
46
|
+
@r = @d / 2.0
|
47
|
+
end
|
48
|
+
|
49
|
+
case @opts[:d1]
|
50
|
+
when 0, nil
|
51
|
+
else
|
52
|
+
@d1 = @opts[:d1].to_d + @opts[:margins][:d].to_d
|
53
|
+
@d2 = @opts[:d2].to_d + @opts[:margins][:d].to_d
|
54
|
+
end
|
55
|
+
|
56
|
+
case @opts[:r1]
|
57
|
+
when 0, nil
|
58
|
+
else
|
59
|
+
@d1 = 2 * @opts[:r1].to_d + @opts[:margins][:d].to_d
|
60
|
+
@d2 = 2 * @opts[:r2].to_d + @opts[:margins][:d].to_d
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
end
|
data/lib/jenncad/shortcuts.rb
CHANGED
@@ -2,6 +2,7 @@ module JennCad
|
|
2
2
|
def circle(args)
|
3
3
|
Circle.new(args).set_parent(self)
|
4
4
|
end
|
5
|
+
alias :ci :circle
|
5
6
|
|
6
7
|
def square(args)
|
7
8
|
Square.new(args).set_parent(self)
|
@@ -22,14 +23,17 @@ module JennCad
|
|
22
23
|
def polygon(args)
|
23
24
|
Polygon.new(args).set_parent(self)
|
24
25
|
end
|
26
|
+
alias :pg :polygon
|
25
27
|
|
26
28
|
def polyhedron(args)
|
27
29
|
Polyhedron.new(args).set_parent(self)
|
28
30
|
end
|
31
|
+
alias :phd :polyhedron
|
29
32
|
|
30
33
|
def slot(*args)
|
31
34
|
Slot.new(args).set_parent(self)
|
32
35
|
end
|
36
|
+
alias :sl :slot
|
33
37
|
|
34
38
|
def cube(*args)
|
35
39
|
Cube.new(args).set_parent(self)
|
@@ -55,14 +59,19 @@ module JennCad
|
|
55
59
|
def extrude(args={})
|
56
60
|
LinearExtrude.new(self, args)
|
57
61
|
end
|
62
|
+
alias :e :extrude
|
63
|
+
alias :ex :extrude
|
58
64
|
|
59
65
|
def rotate_extrude(args={})
|
60
66
|
RotateExtrude.new(self, args)
|
61
67
|
end
|
68
|
+
alias :re :rotate_extrude
|
69
|
+
alias :rex :rotate_extrude
|
62
70
|
|
63
71
|
def to_2d(args={})
|
64
72
|
Projection.new(self, args)
|
65
73
|
end
|
74
|
+
alias :as_2d :to_2d
|
66
75
|
|
67
76
|
def union(*args)
|
68
77
|
UnionObject.new(*args)
|
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.alpha21
|
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-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: geo3d
|
@@ -150,6 +150,9 @@ files:
|
|
150
150
|
- lib/jenncad/profile_loader.rb
|
151
151
|
- lib/jenncad/project.rb
|
152
152
|
- lib/jenncad/register.rb
|
153
|
+
- lib/jenncad/shared.rb
|
154
|
+
- lib/jenncad/shared/circle_ish.rb
|
155
|
+
- lib/jenncad/shared/cube_ish.rb
|
153
156
|
- lib/jenncad/shortcuts.rb
|
154
157
|
- lib/jenncad/thing.rb
|
155
158
|
- lib/jenncad/transformation/color.rb
|