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

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.
@@ -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