本文整理匯總了Python中shapely.affinity.scale方法的典型用法代碼示例。如果您正苦於以下問題:Python affinity.scale方法的具體用法?Python affinity.scale怎麽用?Python affinity.scale使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類shapely.affinity
的用法示例。
在下文中一共展示了affinity.scale方法的11個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: get_as_shapely
# 需要導入模塊: from shapely import affinity [as 別名]
# 或者: from shapely.affinity import scale [as 別名]
def get_as_shapely(self, cell, layer=None, datatype=None):
geometry = []
gdspy_cell = self.gdslib.cells[cell] if isinstance(cell, str) else cell
for polygon in gdspy_cell.polygons:
if self.layer is not None and layer != polygon.layers[0]:
continue
if self.datatype is not None and datatype != polygon.datatypes[0]:
continue
geometry.append(Polygon(polygon.polygons[0]).buffer(0)) # .buffer(0) for healing geometries
for reference in gdspy_cell.references:
sub_geometry = self.get_as_shapely(reference.ref_cell, layer, datatype)
if sub_geometry.is_empty:
continue
sub_geometry = scale(sub_geometry,
*[reference.magnification] * 2) if reference.magnification else sub_geometry
sub_geometry = scale(sub_geometry, -1) if reference.x_reflection else sub_geometry
sub_geometry = rotate(sub_geometry, reference.rotation,
origin=(0, 0)) if reference.rotation else sub_geometry
sub_geometry = translate(sub_geometry, *reference.origin)
geometry.extend(sub_geometry)
return MultiPolygon(geometry)
示例2: mirror
# 需要導入模塊: from shapely import affinity [as 別名]
# 或者: from shapely.affinity import scale [as 別名]
def mirror(self, axis, point):
"""
Mirrors the object around a specified axis passign through
the given point.
:param axis: "X" or "Y" indicates around which axis to mirror.
:type axis: str
:param point: [x, y] point belonging to the mirror axis.
:type point: list
:return: None
"""
px, py = point
xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis]
## solid_geometry ???
# It's a cascaded union of objects.
self.solid_geometry = affinity.scale(self.solid_geometry,
xscale, yscale, origin=(px, py))
示例3: scale
# 需要導入模塊: from shapely import affinity [as 別名]
# 或者: from shapely.affinity import scale [as 別名]
def scale(self, factor):
"""
Scales geometry on the XY plane in the object by a given factor.
Tool sizes, feedrates an Z-plane dimensions are untouched.
:param factor: Number by which to scale the object.
:type factor: float
:return: None
:rtype: NOne
"""
# Drills
for drill in self.drills:
drill['point'] = affinity.scale(drill['point'], factor, factor, origin=(0, 0))
self.create_geometry()
示例4: get_shapely_object
# 需要導入模塊: from shapely import affinity [as 別名]
# 或者: from shapely.affinity import scale [as 別名]
def get_shapely_object(self):
# Start with the "rays"
# noinspection PyTypeChecker
ray_angles = np.linspace(0, np.pi / 2, 8) + np.pi / 2
outer_ray_positions = (np.array([np.cos(ray_angles), np.sin(ray_angles)]) * self.height).T + (self.height, 0)
inner_ray_positions = (np.array([np.cos(ray_angles), np.sin(ray_angles)])
* self.height * self.min_radius_fraction).T + (self.height, 0)
polygons = list()
for outer, inner in zip(outer_ray_positions.reshape(-1, 2, 2), inner_ray_positions.reshape(-1, 2, 2)):
polygons.append(Polygon([outer[0], outer[1], inner[1], inner[0]]))
pass
# Draw the letters
d = self.height * 0.077
k_upper_branch = rotate(box(0, -d, sqrt(2) * self.height / 2 + sqrt(2) * d, d), 45, origin=(0, 0))
k_lower_branch = scale(k_upper_branch, yfact=-1., origin=(0, 0))
k_uncut = k_upper_branch.union(k_lower_branch)
k_unscaled = k_uncut.intersection(box(0, -self.height / 2., self.height / 2. + sqrt(2) * d, self.height / 2.))
k = scale(k_unscaled, 0.8, origin=(0, 0))
polygons.append(translate(k, self.height * 1.05, self.height / 2.))
i = box(0, 0, 2 * d, self.height)
polygons.append(translate(i, self.height * 1.6))
t_overlap = 2
t = box(-d, 0, d, self.height).union(
box(-d * (1 + t_overlap), self.height - 2 * d, d * (1 + t_overlap), self.height))
polygons.append(translate(t, self.height * 2.05))
logo = cascaded_union(polygons)
return translate(logo, *self.origin)
示例5: on_create_alignment_holes
# 需要導入模塊: from shapely import affinity [as 別名]
# 或者: from shapely.affinity import scale [as 別名]
def on_create_alignment_holes(self):
axis = self.mirror_axis.get_value()
mode = self.axis_location.get_value()
if mode == "point":
px, py = self.point.get_value()
else:
selection_index = self.box_combo.currentIndex()
model_index = self.app.collection.index(selection_index, 0, self.object_combo.rootModelIndex())
bb_obj = model_index.internalPointer().obj
xmin, ymin, xmax, ymax = bb_obj.bounds()
px = 0.5 * (xmin + xmax)
py = 0.5 * (ymin + ymax)
xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis]
dia = self.drill_dia.get_value()
tools = {"1": {"C": dia}}
# holes = self.alignment_holes.get_value()
holes = eval('[{}]'.format(self.alignment_holes.text()))
drills = []
for hole in holes:
point = Point(hole)
point_mirror = affinity.scale(point, xscale, yscale, origin=(px, py))
drills.append({"point": point, "tool": "1"})
drills.append({"point": point_mirror, "tool": "1"})
def obj_init(obj_inst, app_inst):
obj_inst.tools = tools
obj_inst.drills = drills
obj_inst.create_geometry()
self.app.new_object("excellon", "Alignment Drills", obj_init)
示例6: import_svg
# 需要導入模塊: from shapely import affinity [as 別名]
# 或者: from shapely.affinity import scale [as 別名]
def import_svg(self, filename, flip=True):
"""
Imports shapes from an SVG file into the object's geometry.
:param filename: Path to the SVG file.
:type filename: str
:return: None
"""
# Parse into list of shapely objects
svg_tree = ET.parse(filename)
svg_root = svg_tree.getroot()
# Change origin to bottom left
# h = float(svg_root.get('height'))
# w = float(svg_root.get('width'))
h = svgparselength(svg_root.get('height'))[0] # TODO: No units support yet
geos = getsvggeo(svg_root)
if flip:
geos = [translate(scale(g, 1.0, -1.0, origin=(0, 0)), yoff=h) for g in geos]
# Add to object
if self.solid_geometry is None:
self.solid_geometry = []
if type(self.solid_geometry) is list:
self.solid_geometry.append(cascaded_union(geos))
else: # It's shapely geometry
self.solid_geometry = cascaded_union([self.solid_geometry,
cascaded_union(geos)])
return
示例7: convert_units
# 需要導入模塊: from shapely import affinity [as 別名]
# 或者: from shapely.affinity import scale [as 別名]
def convert_units(self, units):
"""
Converts the units of the object to ``units`` by scaling all
the geometry appropriately. This call ``scale()``. Don't call
it again in descendents.
:param units: "IN" or "MM"
:type units: str
:return: Scaling factor resulting from unit change.
:rtype: float
"""
log.debug("Geometry.convert_units()")
if units.upper() == self.units.upper():
return 1.0
if units.upper() == "MM":
factor = 25.4
elif units.upper() == "IN":
factor = 1 / 25.4
else:
log.error("Unsupported units: %s" % str(units))
return 1.0
self.units = units
self.scale(factor)
return factor
示例8: _add_slope
# 需要導入模塊: from shapely import affinity [as 別名]
# 或者: from shapely.affinity import scale [as 別名]
def _add_slope(self, bounds, altitude1, altitude2, point1, point2, bottom=False):
altitude_diff = altitude2-altitude1
altitude_middle = (altitude1+altitude2)/2
altitude_halfdiff = altitude_diff/2
altitude_base = altitude1
line = LineString([point1, point2])
minx, miny, maxx, maxy = bounds
points_2d = [(minx-100, miny-100), (maxx+100, miny-100), (maxx+100, maxy+100), (minx-100, maxy+100)]
points_3d = []
for i, (x, y) in enumerate(points_2d):
point = Point((x, y))
pos = line.project(point)
while pos <= 0 or pos >= line.length-1:
line = scale(line, xfact=2, yfact=2, zfact=2)
altitude_diff *= 2
altitude_halfdiff *= 2
altitude_base = altitude_middle-altitude_halfdiff
pos = line.project(point)
z = ((pos/line.length)*altitude_diff)+altitude_base
points_3d.append((x, y, z/1000))
extrude = abs(altitude1-altitude2)/1000+100
if bottom:
extrude = -extrude
self._add_python(
'last_slope = add_polygon_3d(name=%(name)r, coords=%(coords)r, extrude=%(extrude)f)' % {
'name': 'tmpslope',
'coords': tuple(points_3d),
'extrude': extrude,
}
)
示例9: get_places_bbox
# 需要導入模塊: from shapely import affinity [as 別名]
# 或者: from shapely.affinity import scale [as 別名]
def get_places_bbox(
bbox: str = Query(
...,
title="Bounding box to search",
description="Format: left_lon,bottom_lat,right_lon,top_lat",
example="-4.56,48.35,-4.42,48.46",
),
category: Optional[List[str]] = Query(None),
raw_filter: Optional[List[str]] = Query(None),
source: Optional[str] = Query(None),
q: Optional[str] = Query(None, title="Query", description="Full text query"),
size: Optional[int] = Query(None),
lang: Optional[str] = Query(None),
verbosity: Optional[str] = Query(None),
extend_bbox: bool = Query(False),
) -> PlacesBboxResponse:
params = PlacesQueryParam(**locals())
source = params.source
if source is None:
if (
params.q or (params.category and all(c.get("pj_filters") for c in params.category))
) and pj_source.bbox_is_covered(params.bbox):
params.source = PoiSource.PAGESJAUNES
else:
params.source = PoiSource.OSM
places_list = await _fetch_places_list(params)
bbox_extended = False
if params.extend_bbox and len(places_list) == 0:
original_bbox = params.bbox
original_bbox_width = original_bbox[2] - original_bbox[0]
original_bbox_height = original_bbox[3] - original_bbox[1]
original_bbox_size = max(original_bbox_height, original_bbox_width)
if original_bbox_size < EXTENDED_BBOX_MAX_SIZE:
# Compute extended bbox and fetch results a second time
scale_factor = EXTENDED_BBOX_MAX_SIZE / original_bbox_size
new_box = scale(box(*original_bbox), xfact=scale_factor, yfact=scale_factor)
params.bbox = new_box.bounds
bbox_extended = True
places_list = await _fetch_places_list(params)
if len(places_list) == 0:
results_bbox = None
else:
points = MultiPoint([(p.get_coord()["lon"], p.get_coord()["lat"]) for p in places_list])
results_bbox = points.bounds
result_places = await run_in_threadpool(
lambda: [p.load_place(params.lang, params.verbosity) for p in places_list]
)
return PlacesBboxResponse(
places=result_places, source=params.source, bbox=results_bbox, bbox_extended=bbox_extended,
)
示例10: offset
# 需要導入模塊: from shapely import affinity [as 別名]
# 或者: from shapely.affinity import scale [as 別名]
def offset(self, vect):
"""
Offsets the objects' geometry on the XY plane by a given vector.
These are:
* ``buffered_paths``
* ``flash_geometry``
* ``solid_geometry``
* ``regions``
NOTE:
Does not modify the data used to create these elements. If these
are recreated, the scaling will be lost. This behavior was modified
because of the complexity reached in this class.
:param vect: (x, y) offset vector.
:type vect: tuple
:return: None
"""
dx, dy = vect
## Solid geometry
self.solid_geometry = affinity.translate(self.solid_geometry, xoff=dx, yoff=dy)
# def mirror(self, axis, point):
# """
# Mirrors the object around a specified axis passign through
# the given point. What is affected:
#
# * ``buffered_paths``
# * ``flash_geometry``
# * ``solid_geometry``
# * ``regions``
#
# NOTE:
# Does not modify the data used to create these elements. If these
# are recreated, the scaling will be lost. This behavior was modified
# because of the complexity reached in this class.
#
# :param axis: "X" or "Y" indicates around which axis to mirror.
# :type axis: str
# :param point: [x, y] point belonging to the mirror axis.
# :type point: list
# :return: None
# """
#
# px, py = point
# xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis]
#
# ## solid_geometry ???
# # It's a cascaded union of objects.
# self.solid_geometry = affinity.scale(self.solid_geometry,
# xscale, yscale, origin=(px, py))
示例11: img_to_wkt
# 需要導入模塊: from shapely import affinity [as 別名]
# 或者: from shapely.affinity import scale [as 別名]
def img_to_wkt(img, scale_rate, target_name, W, H, Xmax, Ymin, t_value, cla):
W_dash = W * W / (W + 1)
H_dash = H * H / (H + 1)
if scale_rate < 0.99:
img_tiny = rescale(img, scale_rate)
else:
img_tiny = img
bmp_image_path = '_temp/' + target_name + '.bmp'
target_json_path = '_temp/' + target_name + '.json'
with warnings.catch_warnings():
warnings.simplefilter("ignore")
imsave(bmp_image_path, img_tiny)
os.system('potrace -a 2 -t ' + str(t_value) + ' -b geojson -i ' + bmp_image_path + ' -o ' + target_json_path)
f = open(target_json_path)
data = json.load(f)
f.close()
os.remove(target_json_path)
os.remove(bmp_image_path)
# type of 'data' is feature collection
# we only need focus on features
features = data['features']
list_polygons = list()
for i in range(len(features)):
shapely_polygon = shape(geojson.loads(json.dumps(features[i]['geometry'])))
if scale_rate < 0.99:
shapely_polygon = scale(shapely_polygon, 1/scale_rate, 1/scale_rate, origin=(0, 0))
list_polygons.append(shapely_polygon.buffer(0.0))
multi = MultiPolygon(list_polygons)
multi = scale(multi, 1, -1, 1, origin=(float(W)/2, float(H)/2))
multi = scale(multi, Xmax / W_dash, Ymin / H_dash, origin=(0, 0))
if cla != 6:
multi = multi.simplify(1e-6, preserve_topology=True)
else:
multi = multi.simplify(1e-5, preserve_topology=True)
multi = multi.buffer(0)
if multi.type == 'Polygon':
multi = MultiPolygon([multi])
return multi
# tpex's evaluation code can validate topology more strictly
# https://github.com/cxz/tpex