def reflect(shape, position, _angle, keep_original): """Mirrors and copies the geometry across an invisible axis.""" if shape is None: return None new_shape = shape.cloneAndClear() for contour in shape.contours: c = Contour() for point in contour.points: d = distance(point.x, point.y, position.x, position.y) a = angle(point.x, point.y, position.x, position.y) x, y = coordinates(position.x, position.y, d * cos(radians(a - _angle)), 180 + _angle) d = distance(point.x, point.y, x, y) a = angle(point.x, point.y, x, y) px, py = coordinates(point.x, point.y, d * 2, a) c.addPoint(Point(px, py, point.type)) if contour.closed: c.close() new_shape.add(c) if keep_original: g = Geometry() g.add(shape) g.add(new_shape) return g return new_shape
def reflect(shape, position, _angle, keep_original): """Mirrors and copies the geometry across an invisible axis.""" if shape is None: return None new_shape = shape.cloneAndClear() for contour in shape.contours: c = Contour() for point in contour.points: d = distance(point.x, point.y, position.x, position.y) a = angle(point.x, point.y, position.x, position.y) x, y = coordinates(position.x, position.y, d * cos(radians(a - _angle)), 180 + _angle) d = distance(point.x, point.y, x, y) a = angle(point.x, point.y, x, y) px, py = coordinates(point.x, point.y, d * 2, a) c.addPoint(Point(px, py, point.type)) if contour.closed: c.close() new_shape.add(c) if keep_original: g = Geometry() g.add(shape) g.add(new_shape) return g return new_shape
def delete_points(path, bounding, delete_selected=True): if path is None or bounding is None: return None new_path = Path(path, False) # cloneContours = False for old_contour in path.contours: new_contour = Contour() for point in old_contour.points: if bounding.contains(point) == delete_selected: new_contour.addPoint(Point(point.x, point.y, point.type)) new_contour.closed = old_contour.closed new_path.add(new_contour) return new_path
def snap(shape, distance, strength, position=Point.ZERO): """Snap geometry to a grid.""" def _snap(v, offset=0.0, distance=10.0, strength=1.0): return (v * (1.0-strength)) + (strength * round(v / distance) * distance) if shape is None: return None new_shape = shape.cloneAndClear() strength /= 100.0 for contour in shape.contours: c = Contour() for pt in contour.points: x = _snap(pt.x + position.x, position.x, distance, strength) - position.x y = _snap(pt.y + position.y, position.y, distance, strength) - position.y c.addPoint(Point(x, y, pt.type)) c.closed = contour.closed new_shape.add(c) return new_shape