當前位置: 首頁>>代碼示例>>Python>>正文


Python affinity.scale方法代碼示例

本文整理匯總了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) 
開發者ID:HelgeGehring,項目名稱:gdshelpers,代碼行數:26,代碼來源:pattern_import.py

示例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)) 
開發者ID:Denvi,項目名稱:FlatCAM,代碼行數:21,代碼來源:camlib.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() 
開發者ID:Denvi,項目名稱:FlatCAM,代碼行數:18,代碼來源:camlib.py

示例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) 
開發者ID:HelgeGehring,項目名稱:gdshelpers,代碼行數:36,代碼來源:logo.py

示例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) 
開發者ID:Denvi,項目名稱:FlatCAM,代碼行數:37,代碼來源:DblSidedTool.py

示例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 
開發者ID:Denvi,項目名稱:FlatCAM,代碼行數:35,代碼來源:camlib.py

示例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 
開發者ID:Denvi,項目名稱:FlatCAM,代碼行數:29,代碼來源:camlib.py

示例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,
            }
        ) 
開發者ID:c3nav,項目名稱:c3nav,代碼行數:34,代碼來源:blender.py

示例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,
    ) 
開發者ID:QwantResearch,項目名稱:idunn,代碼行數:57,代碼來源:places_list.py

示例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)) 
開發者ID:Denvi,項目名稱:FlatCAM,代碼行數:56,代碼來源:camlib.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 
開發者ID:toshi-k,項目名稱:kaggle-satellite-imagery-feature-detection,代碼行數:62,代碼來源:make_wkt.py


注:本文中的shapely.affinity.scale方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。