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