Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def paths_contain(pt, paths):
cnt = 0
pt = pyclipper.scale_to_clipper([pt], SCALING_FACTOR)[0]
for path in paths:
path = pyclipper.scale_to_clipper(path, SCALING_FACTOR)
if pyclipper.PointInPolygon(pt, path):
cnt = 1 - cnt
return cnt % 2 != 0
def _prepare_clipper(self, poly):
"""Prepare 3D polygons for clipping operations.
:param poly: The clip polygon.
:returns: A Pyclipper object.
"""
if not self.is_coplanar(poly):
return False
poly1 = self.project_to_2D()
poly2 = poly.project_to_2D()
s1 = pc.scale_to_clipper(poly1.vertices_list)
s2 = pc.scale_to_clipper(poly2.vertices_list)
clipper = pc.Pyclipper()
clipper.AddPath(s1, poly_type=pc.PT_SUBJECT, closed=True)
clipper.AddPath(s2, poly_type=pc.PT_CLIP, closed=True)
return clipper
as appropriate for clipper.
"""
# Get the lines along each dimension. h, v need not
# correspond to the horizontal and vertical dimensions.
# It's shorter than writing coord0, coord1
lines = np.dstack((xedge, yedge))
nh, nv, nd = lines.shape
h_lines = [lines[i,:,:] for i in range(nh)]
v_lines = [lines[:,j,:] for j in range(nv)]
if scale:
# The scale factor could be adjusted, but by default it results in
# a range of +/- 2 ** 31 with a precision of 2 ** -31. See the docs.
h_lines = scale_to_clipper(h_lines)
v_lines = scale_to_clipper(v_lines)
return h_lines, v_lines
def offset(paths, amount):
pco = pyclipper.PyclipperOffset()
pco.ArcTolerance = SCALING_FACTOR / 40
paths = pyclipper.scale_to_clipper(paths, SCALING_FACTOR)
pco.AddPaths(paths, pyclipper.JT_SQUARE, pyclipper.ET_CLOSEDPOLYGON)
outpaths = pco.Execute(amount * SCALING_FACTOR)
outpaths = pyclipper.scale_from_clipper(outpaths, SCALING_FACTOR)
return outpaths
def orient_path(path, dir):
orient = pyclipper.Orientation(path)
path = pyclipper.scale_to_clipper(path, SCALING_FACTOR)
if orient != dir:
path = pyclipper.ReversePath(path)
path = pyclipper.scale_from_clipper(path, SCALING_FACTOR)
return path