Esempio n. 1
0
def determineFitOffset(components, full, shelled):
    '''
  This function will take a list of components and an object body,
  and will then determine how far components must be set back from the surface
  to prevent intersection with it.
  '''
    # figure out how far back we need to set each component to make it
    # not intersect the body of the object.
    for comp in components:
        if comp['type'] in Component.no_offset():
            continue
        loc = comp['coords']
        normal = comp['threed_normal']
        ct = 0
        print 'original:', loc
        while True:
            mod_comp = dict(comp)
            mod_comp['coords'] = [c_i - n_i for c_i, n_i in zip(loc, normal)]
            writeOpenSCAD(CHECK_INTERSECT_SCRIPT, [mod_comp],
                          object_body=shelled)
            empty = createsEmptySTL(CHECK_INTERSECT_SCRIPT, SCRATCH)
            ct += 1
            if empty:
                break
            if ct > Component.max_offset(mod_comp['type']):
                raise Exception(''.join(
                    ["can't fit component",
                     str(mod_comp), "into body"]))
            loc = mod_comp['coords']
        comp['coords'] = loc
        comp[
            'offset'] = ct  # note that this is in units of mm, for button caps
        print 'new:', loc
    return components
Esempio n. 2
0
def determineFitOffset(components, full, shelled):
  '''
  This function will take a list of components and an object body,
  and will then determine how far components must be set back from the surface
  to prevent intersection with it.
  '''
  # figure out how far back we need to set each component to make it
  # not intersect the body of the object.
  for comp in components:
    if comp['type'] in Component.no_offset():
      continue
    loc = comp['coords']
    normal = comp['threed_normal']
    ct = 0
    print 'original:', loc
    while True:
      mod_comp = dict(comp)
      mod_comp['coords'] = [c_i - n_i for c_i, n_i in zip(loc, normal)]
      writeOpenSCAD(CHECK_INTERSECT_SCRIPT, [mod_comp], object_body=shelled)
      empty = createsEmptySTL(CHECK_INTERSECT_SCRIPT, SCRATCH)
      ct += 1
      if empty:
        break
      if ct > Component.max_offset(mod_comp['type']):
        raise Exception(''.join(["can't fit component",str(mod_comp),"into body"]))
      loc = mod_comp['coords']
    comp['coords'] = loc
    comp['offset'] = ct # note that this is in units of mm, for button caps
    print 'new:', loc
  return components