class Circuitdata::Summary

Public Class Methods

new(product) click to toggle source
# File lib/circuitdata/summary.rb, line 5
def initialize(product)
  @product = product
end

Public Instance Methods

base_materials() click to toggle source
# File lib/circuitdata/summary.rb, line 22
def base_materials
  dielectrics = layers_with_function("dielectric")
  return nil if dielectrics.length == 0

  flexes = dielectrics.map { |d| d.dig(:flexible) }.compact.uniq
  return "Flexible" if flexes == [true]
  return "Rigid" if flexes == [false]
  return "Rigid Flex" if flexes.length == 2
  return "Unknown" # dielectric is present, but does not have flex info.
end
board_area() click to toggle source
# File lib/circuitdata/summary.rb, line 13
def board_area
  sizes = @product.sections.map { |section| section[:mm2] }
  sizes.compact.sum
end
board_outline() click to toggle source
# File lib/circuitdata/summary.rb, line 45
def board_outline
  array = @product.metrics.fetch(:board, {})
  size_x = array[:size_x]
  size_y = array[:size_y]
  return size_x.to_s + " x " + size_y.to_s + " mm" if size_x && size_y
end
conductive_layers() click to toggle source
# File lib/circuitdata/summary.rb, line 9
def conductive_layers
  layers_with_function("conductive")
end
final_thickness() click to toggle source
# File lib/circuitdata/summary.rb, line 52
def final_thickness
  @product.metrics.dig(:board, :thickness)
end
layers_with_function(func) click to toggle source
# File lib/circuitdata/summary.rb, line 18
def layers_with_function(func)
  @product.layers.select { |layer| layer[:function] == func }
end
max_aspect_ratio() click to toggle source
# File lib/circuitdata/summary.rb, line 61
def max_aspect_ratio
  if final_thickness && min_through_hole_size
    th = BigDecimal(min_through_hole_size.to_s) / 1000.0
    ft = BigDecimal(final_thickness.to_s)
    return (ft / th).truncate(2).to_s.to_f
  end
end
min_through_hole_size() click to toggle source
# File lib/circuitdata/summary.rb, line 56
def min_through_hole_size
  @product.processes.select { |process| process.dig(:function_attributes, :hole_type) == "through" }
    .map { |process| process.dig(:function_attributes, :finished_size) }.compact.min
end
minimum_spacing() click to toggle source
# File lib/circuitdata/summary.rb, line 41
def minimum_spacing
  conductive_layers.map { |layer| layer.dig(:layer_attributes, :minimum_spacing_width) }.compact.min
end
minimum_track() click to toggle source
# File lib/circuitdata/summary.rb, line 37
def minimum_track
  conductive_layers.map { |layer| layer.dig(:layer_attributes, :minimum_track_width) }.compact.min
end
number_of_conductive_layers() click to toggle source
# File lib/circuitdata/summary.rb, line 33
def number_of_conductive_layers
  conductive_layers.length
end