示例#1
0
	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
示例#2
0
	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
示例#3
0
文件: union.py 项目: kindlychung/sk1
	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
示例#4
0
 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
示例#5
0
文件: divide.py 项目: kindlychung/sk1
	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
示例#6
0
 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