jenncad 1.0.0.pre.alpha12 → 1.0.0.pre.alpha13

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ceeccb1511db4a12b24c38116c2daa1835f9a64f3c62fe8446feea6712c9f200
4
- data.tar.gz: 5b25c737ac0ba61039f7a54d8810a6fd94f2057ca2c482027683105adc767e54
3
+ metadata.gz: c4383fe5f1fe2d17d69eccd66bd28db4678281fd542bd13434064d4051044727
4
+ data.tar.gz: 0eb4435e845c47ec9b75d113c04b7beae9ce762a2dfa57b598412a243ded0163
5
5
  SHA512:
6
- metadata.gz: e509d98347b1a96093fb62ccea12c3e71733f3af4e946694286783e54958245b99373c9721b338bc4da17ddac531a7b215b8394364b4af31aa82c3be8a183cc0
7
- data.tar.gz: 14ecaa2c0698e5fad95d311f373f2399f98eaa5b1e0220dce807053ce7ea0b505f879dce042006232cac8b6d25dd6e9c08eb1a713f78a09aba9c47c1e9bbdf08
6
+ metadata.gz: 35001c199911e59f66a2ef3ce3b8c6193e5654ebc5463f52add3cb11a5aa3c1684c51dbaad7a3edaf4c0042cf2b2d35410ea01bfdce45e5adc72a96f30ec002b
7
+ data.tar.gz: 163e8e50aa1dd6ba930fd41e93075aca9f8bed93c6650f3a9984fbc86ddb34f0ae4a499d7fc981a38dfe9bdb1f56a0667a4cec018a530b701f4707141d79233c
@@ -245,7 +245,8 @@ module JennCad::Exporters
245
245
 
246
246
  def handle_aggregation(part, tabindex=0)
247
247
  register_module(part) unless @modules[part.name]
248
- transform(part) do
248
+ $log.debug "aggregation #{part.name} transformations: #{part.transformations.inspect}" if part && part.option(:debug)
249
+ transform(part.clone) do
249
250
  new_obj(part, part.name, nil)
250
251
  end
251
252
  end
@@ -5,7 +5,7 @@ module JennCad::Features
5
5
  def initialize(name=nil, part=nil)
6
6
  super({})
7
7
  @name = name.gsub(".","_")
8
- @parts = [part] # NOTE: single length arrayto make checking children easier
8
+ @parts = [part]
9
9
  end
10
10
 
11
11
  def z
data/lib/jenncad/part.rb CHANGED
@@ -3,9 +3,13 @@ module JennCad
3
3
  class Part < Thing
4
4
 
5
5
  def to_openscad
6
- a = Aggregation.new(self.class.to_s, self.part)
6
+ a = Aggregation.new(self.class.to_s, self.get_contents)
7
7
  a.transformations = @transformations
8
- a.color(:auto)
8
+ if self.has_explicit_color?
9
+ a.color(self.color)
10
+ else
11
+ a.color(:auto)
12
+ end
9
13
  a
10
14
  end
11
15
 
@@ -7,7 +7,9 @@ module JennCad::Primitives
7
7
  else
8
8
  @parts = parts
9
9
  end
10
+
10
11
  @parent = @parts.first.parent
12
+
11
13
  after_add
12
14
  end
13
15
 
@@ -22,6 +24,7 @@ module JennCad::Primitives
22
24
  end
23
25
 
24
26
  def add(part)
27
+ return if part.nil?
25
28
  @parts << part
26
29
  after_add
27
30
  end
@@ -36,10 +36,25 @@ module JennCad::Primitives
36
36
  @d = @opts[:d]
37
37
  @a = @opts[:a]
38
38
  @h = @opts[:h]
39
- @r = @opts[:r]
39
+ @r = @opts[:r] || nil
40
+ if @r
41
+ @d = @r * 2
42
+ end
40
43
  @fn = @opts[:fn]
41
44
  @len_x = @opts[:x]
42
45
  @len_y = @opts[:y]
46
+ tx = @opts[:tx] || @opts[:total_x] || nil
47
+ ty = @opts[:ty] || @opts[:total_y] || nil
48
+ if tx
49
+ @len_x = tx - @d
50
+ end
51
+ if ty
52
+ @len_y = ty - @d
53
+ end
54
+
55
+ # TODO: this needs anchors like cube
56
+ # TODO: color on this needs to apply to hull, not on the cylinders.
57
+
43
58
  end
44
59
 
45
60
  def to_openscad
@@ -92,6 +92,11 @@ module JennCad
92
92
 
93
93
  private
94
94
  def boolean_operation(part, klass)
95
+ if part.respond_to? :transformations
96
+ # Since ruby doesn't provide a way to make a deep clone, this seems to be the simplest solution that will effectively do that:
97
+ part = Marshal.load(Marshal.dump(part))
98
+ end
99
+
95
100
  case self
96
101
  when nil
97
102
  part
data/lib/jenncad/thing.rb CHANGED
@@ -20,6 +20,7 @@ module JennCad
20
20
  @anchors = {}
21
21
  @parent = args[:parent]
22
22
  @opts ||= args
23
+ @cache = nil
23
24
  end
24
25
 
25
26
  def option(key)
@@ -39,13 +40,19 @@ module JennCad
39
40
 
40
41
  def anchor(name, thing=nil)
41
42
  if thing
42
- return thing.anchor(name)
43
+ res = thing.anchor(name)
44
+ return res unless res.nil?
43
45
  end
44
46
  @anchors ||= {}
45
47
  if anch = @anchors[name]
46
48
  return anch
47
49
  elsif @parent
48
50
  return @parent.anchor(name)
51
+ elsif self.respond_to? :get_contents
52
+ con = get_contents
53
+ if con.respond_to? :anchor
54
+ con.anchor(name)
55
+ end
49
56
  end
50
57
  end
51
58
  alias :a :anchor
@@ -209,6 +216,7 @@ module JennCad
209
216
  # move to anchor
210
217
  def movea(key, thing=nil)
211
218
  an = anchor(key, thing)
219
+
212
220
  unless an
213
221
  $log.error "Error: Anchor #{key} not found"
214
222
  $log.error "Available anchors: #{@anchors}"
@@ -341,36 +349,14 @@ module JennCad
341
349
  def get_children(item, stop_at)
342
350
  res = [item]
343
351
  if item.respond_to?(:parts) && item.parts != nil
344
- item.parts.each do |part|
345
- unless stop_at != nil && part.kind_of?(stop_at)
346
- res << get_children(part, stop_at)
352
+ item.parts.each do |pa|
353
+ unless stop_at != nil && pa.kind_of?(stop_at)
354
+ res << get_children(pa, stop_at)
347
355
  end
348
356
  end
349
357
  end
350
358
  res
351
359
  end
352
- =begin def make_openscad_compatible
353
- make_openscad_compatible!(self)
354
- end
355
-
356
- def make_openscad_compatible!(item)
357
- if item.respond_to?(:parts) && item.parts != nil
358
- item.parts.each_with_index do |part, i|
359
- if part.respond_to? :to_openscad
360
- item.parts[i] = part.to_openscad
361
- else
362
- item.parts[i] = part.make_openscad_compatible
363
- end
364
- end
365
- elsif item.respond_to? :part
366
- item = item.part.make_openscad_compatible
367
- end
368
- if item.respond_to? :to_openscad
369
- item = item.to_openscad
370
- end
371
- item
372
- end
373
- =end
374
360
 
375
361
  def inherit_color(other)
376
362
  self.set_option(:color, other.option(:color))
@@ -386,11 +372,14 @@ module JennCad
386
372
 
387
373
  def only_color?(parts, lvl=0)
388
374
  return true if parts == nil
375
+ unless parts.kind_of? Array
376
+ parts = [parts]
377
+ end
389
378
 
390
379
  parts.each do |part|
391
- # puts " " * lvl + "[only_color?] #{part}"
380
+ #puts " " * lvl + "[only_color?] #{part}"
392
381
  if part.has_explicit_color?
393
- # puts " " * lvl + "found explicit color here"
382
+ #puts " " * lvl + "found explicit color here: #{part.color}"
394
383
  return false
395
384
  end
396
385
  if !only_color?(part.parts, lvl+1)
@@ -406,14 +395,14 @@ module JennCad
406
395
  parts.each do |part|
407
396
  unless part.has_explicit_color?
408
397
  if only_color?(part.parts, lvl+1)
409
- # puts " " * lvl + "children have no explicit color, setting it here"
398
+ #puts " " * lvl + "children have no explicit color, setting it here"
410
399
  part.set_auto_color(col)
411
400
  else
412
- # puts " " * lvl + "[set_auto_color_for_children] #{part}"
401
+ #puts " " * lvl + "[set_auto_color_for_children] #{part}"
413
402
  set_auto_color_for_children(col, part.parts, lvl+1)
414
403
  end
415
404
  else
416
- # puts " " * lvl + "[set_auto_color_for_children] this part has a color, ignoring their children"
405
+ #puts " " * lvl + "[set_auto_color_for_children] this part has a color #{part.color}, ignoring their children"
417
406
  end
418
407
 
419
408
  end
@@ -489,8 +478,15 @@ module JennCad
489
478
 
490
479
  def get_contents
491
480
  return @parts unless @parts.nil?
481
+
482
+ if @cache
483
+ return @cache
484
+ end
485
+
492
486
  if self.respond_to? :part
493
- return [part]
487
+ # cache things to prevent calling the code in #part multiple times
488
+ @cache = part
489
+ return @cache
494
490
  end
495
491
  end
496
492
 
@@ -503,6 +499,9 @@ module JennCad
503
499
 
504
500
  def find_calculated_h(parts)
505
501
  return if parts == nil
502
+ unless parts.kind_of? Array
503
+ parts = [parts]
504
+ end
506
505
  parts.each do |part|
507
506
  if z = calculated_h
508
507
  return z
@@ -513,6 +512,10 @@ module JennCad
513
512
 
514
513
  def set_heights_for_auto_extrude(parts, parent=nil)
515
514
  return if parts.nil?
515
+ unless parts.kind_of? Array
516
+ parts = [parts]
517
+ end
518
+
516
519
  parts.each do |part|
517
520
  if part.option(:auto_extrude)
518
521
  part.z = parent.calculated_h
@@ -1,4 +1,3 @@
1
1
  module JennCad
2
- VERSION = "1.0.0-alpha12"
2
+ VERSION = "1.0.0-alpha13"
3
3
  end
4
-
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.alpha12
4
+ version: 1.0.0.pre.alpha13
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-04-30 00:00:00.000000000 Z
11
+ date: 2022-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: geo3d