jenncad 1.0.0.pre.alpha1 → 1.0.0.pre.alpha2

Sign up to get free protection for your applications and to get access to all the features.
@@ -54,56 +54,47 @@ module JennCad
54
54
  UnionObject.new(*args)
55
55
  end
56
56
 
57
- def +(args)
58
- return args if self == nil
59
- if self.kind_of?(UnionObject) && self.transformations.size == 0
60
- self.add(args)
61
- return self
62
- else
63
- UnionObject.new(self,args)
64
- end
65
- end
66
-
67
57
  def subtraction(*args)
68
58
  SubtractObject.new(*args)
69
59
  end
70
60
 
71
- def -(args)
72
- if self.kind_of?(SubtractObject) && self.transformations.size == 0
73
- self.add(args)
74
- return self
75
- else
76
- SubtractObject.new(self,args)
77
- end
78
- end
79
-
80
61
  def intersection(*args)
81
62
  IntersectionObject.new(*args)
82
63
  end
83
64
 
84
- def *(args)
85
- if self.kind_of?(IntersectionObject) && self.transformations.size == 0
86
- self.add(args)
87
- return self
88
- else
89
- IntersectionObject.new(self,args)
90
- end
91
- end
92
-
93
65
  def hull(*args)
94
66
  HullObject.new(*args)
95
67
  end
96
68
 
97
- def &(args)
98
- if self.kind_of?(HullObject) && self.transformations.size == 0
99
- self.add(args)
100
- return self
101
- else
102
- HullObject.new(self,args)
103
- end
69
+ def +(part)
70
+ boolean_operation(part, UnionObject)
71
+ end
72
+
73
+ def -(part)
74
+ boolean_operation(part, SubtractObject)
75
+ end
76
+
77
+ def *(part)
78
+ boolean_operation(part, IntersectionObject)
79
+ end
80
+
81
+ def &(part)
82
+ boolean_operation(part, HullObject)
104
83
  end
105
84
 
106
85
  def assemble(partlib=nil, z_skip = false, z=0, &block)
107
86
  block.yield.assemble(partlib, z_skip, z)
108
87
  end
88
+
89
+ private
90
+ def boolean_operation(part, klass)
91
+ case self
92
+ when nil
93
+ part
94
+ when klass
95
+ add_or_new(part)
96
+ else
97
+ klass.new(self,part)
98
+ end
99
+ end
109
100
  end
data/lib/jenncad/thing.rb CHANGED
@@ -3,7 +3,7 @@ module JennCad
3
3
  attr_accessor :opts
4
4
  attr_accessor :parts
5
5
  attr_accessor :transformations, :name
6
- attr_accessor :x, :y, :z, :diameter
6
+ attr_accessor :x, :y, :diameter
7
7
  attr_accessor :calc_x, :calc_y, :calc_z, :calc_h
8
8
  attr_accessor :shape
9
9
  attr_accessor :angle, :cut, :fn
@@ -35,37 +35,41 @@ module JennCad
35
35
  end
36
36
  alias :rt :rotate
37
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
38
+ def rx(v)
39
+ rt(x:v)
48
40
  end
49
41
 
50
- def flip_x
51
- if self.kind_of?(BooleanObject)
42
+ def ry(v)
43
+ rt(y:v)
44
+ end
45
+
46
+ def rz(v)
47
+ rt(z:v)
48
+ end
49
+
50
+ def flip(direction)
51
+ case self
52
+ when BooleanObject
52
53
  ref = self.parts.first
53
54
  else
54
55
  ref = self
55
56
  end
56
57
 
57
- self.rotate(y:90).moveh(x: -ref.z, z: ref.x)
58
+ case direction
59
+ when :x
60
+ self.ry(90).mh(x: -ref.z, z: ref.x)
61
+ when :y
62
+ self.rx(90).mh(y: ref.z, z: ref.y)
63
+ end
64
+ end
65
+
66
+ def flip_x
67
+ flip(:x)
58
68
  end
59
69
  alias :fx :flip_x
60
70
 
61
71
  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)
72
+ flip(:y)
69
73
  end
70
74
  alias :fy :flip_y
71
75
 
@@ -243,14 +247,26 @@ module JennCad
243
247
  end
244
248
 
245
249
  def color(args=nil)
246
- return option(:color) if args == nil
247
- if args == :auto
250
+ case args
251
+ when nil
252
+ return option(:color)
253
+ when :auto
248
254
  return auto_color!
249
- elsif args == :none
255
+ when :none
250
256
  set_option :no_auto_color, true
251
- return self
257
+ when :random
258
+ set_option :color, Color.random
259
+ when Array
260
+ set_option :color, Color.parse(args)
261
+ when /(?<=#)(?<!^)(\h{6}|\h{3})/
262
+ set_option :color, args
263
+ when /(?<!^)(\h{6}|\h{3})/
264
+ set_option :color, "##{args}"
265
+ when String
266
+ set_option :color, args
267
+ else
268
+ puts "meow"
252
269
  end
253
- set_option :color, args
254
270
  self
255
271
  end
256
272
 
@@ -273,14 +289,10 @@ module JennCad
273
289
  if @parts == nil
274
290
  if self.respond_to? :part
275
291
  @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
292
  end
281
293
  end
282
294
 
283
- OpenScad.new(self).save(file)
295
+ JennCad::Exporters::OpenScad.new(self).save(file)
284
296
  end
285
297
 
286
298
  def referenced_z
@@ -289,19 +301,27 @@ module JennCad
289
301
  return false
290
302
  end
291
303
 
304
+ def z=(args)
305
+ set_option(:z, args)
306
+ @z = args
307
+ end
308
+
292
309
  def z
293
- ref = referenced_z
294
- if ref
295
- return ref.z.to_f + ref.z_margin.to_f
310
+ case ref = referenced_z
311
+ when nil, false
312
+ @z + z_margin
313
+ else
314
+ ref.z.to_f + ref.z_margin.to_f
296
315
  end
297
- @z
298
316
  end
299
317
 
300
318
  def z_margin
301
- if option(:margins)
302
- return option(:margins)[:z].to_f
319
+ case m = option(:margins)
320
+ when nil, {}
321
+ 0.0
322
+ else
323
+ m[:z].to_f
303
324
  end
304
- 0.0
305
325
  end
306
326
 
307
327
  end
@@ -4,5 +4,184 @@ module JennCad
4
4
  def initialize(args)
5
5
  @color = args
6
6
  end
7
+
8
+ def self.parse(a)
9
+ case a
10
+ when Array
11
+ check_color_array(a)
12
+ else
13
+ a
14
+ end
15
+ end
16
+
17
+ def self.check_color_array(a)
18
+ if a.max > 1.0
19
+ a.map{|l| l.to_f/255.0}
20
+ else
21
+ a
22
+ end
23
+ end
24
+
25
+ def self.random
26
+ named_colors.random
27
+ end
28
+
29
+ def self.named_colors
30
+ named_color_values.map{|k,v| k}
31
+ end
32
+
33
+ def self.named_color_values
34
+ {
35
+ aliceblue: [240,248,255,0],
36
+ antiquewhite: [250,235,215,0],
37
+ aqua: [0,255,255,0],
38
+ aquamarine: [127,255,212,0],
39
+ azure: [240,255,255,0],
40
+ beige: [245,245,220,0],
41
+ bisque: [255,228,196,0],
42
+ black: [0,0,0,0],
43
+ blanchedalmond: [255,235,205,0],
44
+ blue: [0,0,255,0],
45
+ blueviolet: [138,43,226,0],
46
+ brown: [165,42,42,0],
47
+ burlywood: [222,184,135,0],
48
+ cadetblue: [95,158,160,0],
49
+ chartreuse: [127,255,0,0],
50
+ chocolate: [210,105,30,0],
51
+ coral: [255,127,80,0],
52
+ cornflowerblue: [100,149,237,0],
53
+ cornsilk: [255,248,220,0],
54
+ crimson: [220,20,60,0],
55
+ cyan: [0,255,255,0],
56
+ darkblue: [0,0,139,0],
57
+ darkcyan: [0,139,139,0],
58
+ darkgoldenrod: [184,134,11,0],
59
+ darkgray: [169,169,169,0],
60
+ darkgreen: [0,100,0,0],
61
+ darkgrey: [169,169,169,0],
62
+ darkkhaki: [189,183,107,0],
63
+ darkmagenta: [139,0,139,0],
64
+ darkolivegreen: [85,107,47,0],
65
+ darkorange: [255,140,0,0],
66
+ darkorchid: [153,50,204,0],
67
+ darkred: [139,0,0,0],
68
+ darksalmon: [233,150,122,0],
69
+ darkseagreen: [143,188,143,0],
70
+ darkslateblue: [72,61,139,0],
71
+ darkslategray: [47,79,79,0],
72
+ darkslategrey: [47,79,79,0],
73
+ darkturquoise: [0,206,209,0],
74
+ darkviolet: [148,0,211,0],
75
+ deeppink: [255,20,147,0],
76
+ deepskyblue: [0,191,255,0],
77
+ dimgray: [105,105,105,0],
78
+ dimgrey: [105,105,105,0],
79
+ dodgerblue: [30,144,255,0],
80
+ firebrick: [178,34,34,0],
81
+ floralwhite: [255,250,240,0],
82
+ forestgreen: [34,139,34,0],
83
+ fuchsia: [255,0,255,0],
84
+ gainsboro: [220,220,220,0],
85
+ ghostwhite: [248,248,255,0],
86
+ gold: [255,215,0,0],
87
+ goldenrod: [218,165,32,0],
88
+ gray: [128,128,128,0],
89
+ green: [0,128,0,0],
90
+ greenyellow: [173,255,47,0],
91
+ grey: [128,128,128,0],
92
+ honeydew: [240,255,240,0],
93
+ hotpink: [255,105,180,0],
94
+ indianred: [205,92,92,0],
95
+ indigo: [75,0,130,0],
96
+ ivory: [255,255,240,0],
97
+ khaki: [240,230,140,0],
98
+ lavender: [230,230,250,0],
99
+ lavenderblush: [255,240,245,0],
100
+ lawngreen: [124,252,0,0],
101
+ lemonchiffon: [255,250,205,0],
102
+ lightblue: [173,216,230,0],
103
+ lightcoral: [240,128,128,0],
104
+ lightcyan: [224,255,255,0],
105
+ lightgoldenrodyellow: [250,250,210,0],
106
+ lightgray: [211,211,211,0],
107
+ lightgreen: [144,238,144,0],
108
+ lightgrey: [211,211,211,0],
109
+ lightpink: [255,182,193,0],
110
+ lightsalmon: [255,160,122,0],
111
+ lightseagreen: [32,178,170,0],
112
+ lightskyblue: [135,206,250,0],
113
+ lightslategray: [119,136,153,0],
114
+ lightslategrey: [119,136,153,0],
115
+ lightsteelblue: [176,196,222,0],
116
+ lightyellow: [255,255,224,0],
117
+ lime: [0,255,0,0],
118
+ limegreen: [50,205,50,0],
119
+ linen: [250,240,230,0],
120
+ magenta: [255,0,255,0],
121
+ maroon: [128,0,0,0],
122
+ mediumaquamarine: [102,205,170,0],
123
+ mediumblue: [0,0,205,0],
124
+ mediumorchid: [186,85,211,0],
125
+ mediumpurple: [147,112,219,0],
126
+ mediumseagreen: [60,179,113,0],
127
+ mediumslateblue: [123,104,238,0],
128
+ mediumspringgreen: [0,250,154,0],
129
+ mediumturquoise: [72,209,204,0],
130
+ mediumvioletred: [199,21,133,0],
131
+ midnightblue: [25,25,112,0],
132
+ mintcream: [245,255,250,0],
133
+ mistyrose: [255,228,225,0],
134
+ moccasin: [255,228,181,0],
135
+ navajowhite: [255,222,173,0],
136
+ navy: [0,0,128,0],
137
+ oldlace: [253,245,230,0],
138
+ olive: [128,128,0,0],
139
+ olivedrab: [107,142,35,0],
140
+ orange: [255,165,0,0],
141
+ orangered: [255,69,0,0],
142
+ orchid: [218,112,214,0],
143
+ palegoldenrod: [238,232,170,0],
144
+ palegreen: [152,251,152,0],
145
+ paleturquoise: [175,238,238,0],
146
+ palevioletred: [219,112,147,0],
147
+ papayawhip: [255,239,213,0],
148
+ peachpuff: [255,218,185,0],
149
+ peru: [205,133,63,0],
150
+ pink: [255,192,203,0],
151
+ plum: [221,160,221,0],
152
+ powderblue: [176,224,230,0],
153
+ purple: [128,0,128,0],
154
+ rebeccapurple: [102,51,153,0],
155
+ red: [255,0,0,0],
156
+ rosybrown: [188,143,143,0],
157
+ royalblue: [65,105,225,0],
158
+ saddlebrown: [139,69,19,0],
159
+ salmon: [250,128,114,0],
160
+ sandybrown: [244,164,96,0],
161
+ seagreen: [46,139,87,0],
162
+ seashell: [255,245,238,0],
163
+ sienna: [160,82,45,0],
164
+ silver: [192,192,192,0],
165
+ skyblue: [135,206,235,0],
166
+ slateblue: [106,90,205,0],
167
+ slategray: [112,128,144,0],
168
+ slategrey: [112,128,144,0],
169
+ snow: [255,250,250,0],
170
+ springgreen: [0,255,127,0],
171
+ steelblue: [70,130,180,0],
172
+ tan: [210,180,140,0],
173
+ teal: [0,128,128,0],
174
+ thistle: [216,191,216,0],
175
+ tomato: [255,99,71,0],
176
+ turquoise: [64,224,208,0],
177
+ violet: [238,130,238,0],
178
+ wheat: [245,222,179,0],
179
+ white: [255,255,255,0],
180
+ whitesmoke: [245,245,245,0],
181
+ yellow: [255,255,0,0],
182
+ yellowgreen: [154,205,50,0],
183
+ transparent: [0,0,0,0],
184
+ }
185
+ end
7
186
  end
8
187
  end
@@ -1,4 +1,4 @@
1
1
  module JennCad
2
- VERSION = "1.0.0-alpha1"
2
+ VERSION = "1.0.0-alpha2"
3
3
  end
4
4
 
data/lib/jenncad.rb CHANGED
@@ -20,29 +20,7 @@ require "jenncad/part"
20
20
  require "jenncad/project"
21
21
  require "jenncad/commands"
22
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
-
23
+ require "jenncad/primitives"
46
24
 
47
25
 
48
26
 
@@ -55,9 +33,7 @@ require "jenncad/transformation/color"
55
33
  require "jenncad/transformation/multmatrix"
56
34
 
57
35
 
58
-
59
-
60
-
36
+ # TODO: extras need be split from the package to external hardware lib
61
37
  require "jenncad/extras/hardware"
62
38
  require "jenncad/extras/din912"
63
39
  require "jenncad/extras/din933"
@@ -66,8 +42,7 @@ require "jenncad/extras/iso7380"
66
42
 
67
43
 
68
44
 
69
-
70
45
  require "jenncad/register"
71
46
  require "jenncad/shortcuts"
72
- require "jenncad/jenncad"
73
- require "jenncad/openscad"
47
+ require "jenncad/exporters/openscad"
48
+
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.alpha1
4
+ version: 1.0.0.pre.alpha2
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-23 00:00:00.000000000 Z
11
+ date: 2019-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: geo3d
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: observr
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: TBD
70
84
  email:
71
85
  - "=^.^=@jenncad.kittenme.ws"
@@ -88,15 +102,15 @@ files:
88
102
  - lib/jenncad.rb
89
103
  - lib/jenncad/commands.rb
90
104
  - lib/jenncad/default_profile.rb
105
+ - lib/jenncad/exporters/openscad.rb
91
106
  - lib/jenncad/extras/din912.rb
92
107
  - lib/jenncad/extras/din933.rb
93
108
  - lib/jenncad/extras/din934.rb
94
109
  - lib/jenncad/extras/hardware.rb
95
110
  - lib/jenncad/extras/iso7380.rb
96
- - lib/jenncad/jenncad.rb
97
- - lib/jenncad/openscad.rb
98
111
  - lib/jenncad/part.rb
99
112
  - lib/jenncad/patches/array.rb
113
+ - lib/jenncad/primitives.rb
100
114
  - lib/jenncad/primitives/aggregation.rb
101
115
  - lib/jenncad/primitives/boolean_object.rb
102
116
  - lib/jenncad/primitives/circle.rb
@@ -141,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
155
  requirements:
142
156
  - - ">="
143
157
  - !ruby/object:Gem::Version
144
- version: 2.5.0
158
+ version: 2.6.0
145
159
  required_rubygems_version: !ruby/object:Gem::Requirement
146
160
  requirements:
147
161
  - - ">"
@@ -1,3 +0,0 @@
1
- module JennCad
2
- include Primitives
3
- end