def minus(self, objects): assert len(objects) == 2 new_paths, untouched_paths = base.intersect_objects(objects) buffer = [] for i, paths in new_paths: if i == 0: container = objects[1] condition = 0 else: container = objects[0] condition = 1 for cp1, path, cp2 in paths: if base.contained(path, container) == condition: buffer.append((cp1, path, cp2)) paths = base.join(buffer) for i, path in untouched_paths: if i == 0: container = objects[1] condition = 0 else: container = objects[0] condition = 1 if base.contained(path, container) == condition: paths.append(path) object = objects[0].Duplicate() object.SetPaths(paths) return object
def intersect(self, objects): assert len(objects) == 2 buffer = [] new_paths, untouched_paths = base.intersect_objects(objects) if not new_paths: return None for i, paths in new_paths: if i == 0: container = objects[1] else: container = objects[0] for cp1, path, cp2 in paths: if base.contained(path, container): buffer.append((cp1, path, cp2)) object = objects[0].Duplicate() object.SetPaths(base.join(buffer)) return object
def union(self,objects): assert len(objects) == 2 buffer = [] new_paths, untouched_paths = base.intersect_objects(objects) for i, paths in new_paths: if i == 0: container = objects[1] else: container = objects[0] for cp1, path, cp2 in paths: if not base.contained(path, container): buffer.append((cp1, path, cp2)) paths = base.join(buffer) for i, path in untouched_paths: paths.append(path) object = objects[0].Duplicate() object.SetPaths(paths) return object
def union(self, objects): assert len(objects) == 2 buffer = [] new_paths, untouched_paths = base.intersect_objects(objects) for i, paths in new_paths: if i == 0: container = objects[1] else: container = objects[0] for cp1, path, cp2 in paths: if not base.contained(path, container): buffer.append((cp1, path, cp2)) paths = base.join(buffer) for i, path in untouched_paths: paths.append(path) object = objects[0].Duplicate() object.SetPaths(paths) return object
def divide(self, object1, object2): buffer = [] new_paths, untouched_paths = base.intersect_objects([object1, object2]) if new_paths: common = [] parts = ([], []) for i, paths in new_paths: if i == 0: container = object2 parts2, parts1 = parts else: container = object1 parts1, parts2 = parts for cp1, path, cp2 in paths: if base.contained(path, container): common.append((cp1, path, cp2)) parts2.append((cp1, path, cp2)) else: parts1.append((cp1, path, cp2)) for path in base.join(parts1): object = object1.Duplicate() object.SetPaths([path]) buffer.append(object) for path in base.join(parts2): object = object2.Duplicate() object.SetPaths([path]) buffer.append(object) for path in base.join(common): object = object2.Duplicate() object.SetPaths([path]) buffer.append(object) for i, path in untouched_paths: if i == 0: object = object1.Duplicate() else: object = object2.Duplicate() object.SetPaths([path]) buffer.append(object) else: buffer.append(object1.Duplicate()) buffer.append(object2.Duplicate()) return buffer