Personalizuj kształty w prezentacjach za pomocą Pythona

Wprowadzenie

Rozważ kwadrat. W programie PowerPoint, używając Edit Points, możesz:

  • przesunąć róg kwadratu w środku lub na zewnątrz,
  • dostosować krzywiznę rogu lub punktu,
  • dodać nowe punkty do kwadratu,
  • manipulować jego punktami.

Możesz zastosować te operacje do dowolnego kształtu. Dzięki Edit Points możesz modyfikować kształt lub utworzyć nowy na podstawie istniejącego kształtu.

Wskazówki dotyczące edycji kształtów

“Edit Points” - polecenie

Zanim rozpoczniesz edycję kształtów w PowerPoint przy użyciu Edit Points, rozważ następujące uwagi dotyczące kształtów:

  • Kształt (lub jego ścieżka) może być zamknięty lub otwarty.
  • Zamknięty kształt nie ma punktu początkowego ani końcowego; otwarty kształt ma początek i koniec.
  • Każdy kształt posiada co najmniej dwa punkty kotwiczące połączone odcinkami linii.
  • Odcinek jest prosty lub zakrzywiony; punkty kotwiczące określają charakter odcinka.
  • Punkty kotwiczące mogą być corner, smooth lub straight:
    • Punkt corner to miejsce, w którym dwa proste odcinki spotykają się pod kątem.
    • Punkt smooth posiada dwa uchwyty leżące na jednej linii, a przylegające odcinki tworzą płynnie zakrzywioną krzywą. W tym przypadku oba uchwyty są w tej samej odległości od punktu kotwiczącego.
    • Punkt straight również ma dwa kolinearne uchwyty, a przylegające odcinki tworzą gładką krzywą. W tym przypadku uchwyty nie muszą znajdować się w takiej samej odległości od punktu kotwiczącego.
  • Przesuwając lub edytując punkty kotwiczące (co zmienia kąty odcinków), możesz zmienić wygląd kształtu.

Aby edytować kształty w PowerPoint, Aspose.Slides udostępnia klasę GeometryPath.

Proste operacje edycji

Poniższe metody służą do prostych operacji edycji.

Dodaj linię na końcu ścieżki:

line_to(point)
line_to(x, y)

Dodaj linię w określonej pozycji w ścieżce:

line_to(point, index)
line_to(x, y, index)

Dodaj krzywą Beziera stopnia sześciennego na końcu ścieżki:

cubic_bezier_to(point1, point2, point3)
cubic_bezier_to(x1, y1, x2, y2, x3, y3)

Dodaj krzywą Beziera stopnia sześciennego w określonej pozycji w ścieżce:

cubic_bezier_to(point1, point2, point3, index)
cubic_bezier_to(x1, y1, x2, y2, x3, y3, index)

Dodaj krzywą Beziera stopnia kwadratowego na końcu ścieżki:

quadratic_bezier_to(point1, point2)
quadratic_bezier_to(x1, y1, x2, y2)

Dodaj krzywą Beziera stopnia kwadratowego w określonej pozycji w ścieżce:

quadratic_bezier_to(point1, point2, index)
quadratic_bezier_to(x1, y1, x2, y2, index)

Dodaj łuk do ścieżki:

arc_to(width, heigth, startAngle, sweepAngle)

Zamknij bieżącą figurę w ścieżce:

close_figure()

Ustaw pozycję następnego punktu:

move_to(point)
move_to(x, y)

Usuń segment ścieżki o podanym indeksie:

remove_at(index)

Dodaj własne punkty do kształtów

Tutaj dowiesz się, jak zdefiniować kształt wolnej formy, dodając własną sekwencję punktów. Określając uporządkowane punkty i typy segmentów (proste lub zakrzywione) oraz opcjonalnie zamykając ścieżkę, możesz rysować precyzyjne grafiki niestandardowe — wielokąty, ikony, dymki lub loga — bezpośrednio na slajdach.

  1. Utwórz instancję klasy GeometryShape i ustaw jej ShapeType.RECTANGLE.
  2. Pobierz instancję GeometryPath z kształtu.
  3. Wstaw nowy punkt pomiędzy dwa górne punkty w ścieżce.
  4. Wstaw nowy punkt pomiędzy dwa dolne punkty w ścieżce.
  5. Zastosuj zaktualizowaną ścieżkę do kształtu.
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 200, 100)

    geometry_path = shape.get_geometry_paths()[0]
    geometry_path.line_to(100, 50, 1)
    geometry_path.line_to(100, 50, 4)

    shape.set_geometry_path(geometry_path)

    presentation.save("custom_points.pptx", slides.export.SaveFormat.PPTX)

Własne punkty

Usuń punkty z kształtów

Czasami własny kształt zawiera niepotrzebne punkty, które komplikują jego geometrię lub wpływają na renderowanie. Ten rozdział pokazuje, jak usunąć konkretne punkty ze ścieżki kształtu, aby uprościć obrys i uzyskać czystsze, bardziej precyzyjne rezultaty.

  1. Utwórz instancję klasy GeometryShape i ustaw jej typ ShapeType.HEART.
  2. Pobierz instancję GeometryPath z kształtu.
  3. Usuń segment ze ścieżki.
  4. Zastosuj zaktualizowaną ścieżkę do kształtu.
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.HEART, 100, 100, 300, 300)

    path = shape.get_geometry_paths()[0]
    path.remove_at(2)

    shape.set_geometry_path(path)

    presentation.save("removed_points.pptx", slides.export.SaveFormat.PPTX)

Usunięte punkty

Utwórz własne kształty

Utwórz dedykowane kształty wektorowe, definiując GeometryPath i komponując go z linii, łuków oraz krzywych Béziera. Ten rozdział pokazuje, jak zbudować własną geometrię od podstaw i dodać powstały kształt do slajdu.

  1. Oblicz punkty dla kształtu.
  2. Utwórz instancję klasy GeometryPath.
  3. Napełnij ścieżkę punktami.
  4. Utwórz instancję klasy GeometryShape.
  5. Zastosuj ścieżkę do kształtu.
import aspose.slides as slides
import aspose.pydrawing as draw
import math

points = []

R = 100
r = 50
step = 72

for angle in range(-90, 270, step):
    radians = angle * (math.pi / 180)
    x = R * math.cos(radians)
    y = R * math.sin(radians)
    points.append(draw.PointF(x + R, y + R))

    radians = math.pi * (angle + step / 2) / 180.0
    x = r * math.cos(radians)
    y = r * math.sin(radians)
    points.append(draw.PointF(x + R, y + R))

star_path = slides.GeometryPath()
star_path.move_to(points[0])

for i in range(len(points)):
    star_path.line_to(points[i])

star_path.close_figure()

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, R * 2, R * 2)
    shape.set_geometry_path(star_path)

    presentation.save("custom_shape.pptx", slides.export.SaveFormat.PPTX)

Własny kształt

Utwórz złożone własne kształty

Tworzenie złożonego własnego kształtu pozwala połączyć wiele ścieżek geometrycznych w jeden, wielokrotnego użytku kształt na slajdzie. Zdefiniuj i scal te ścieżki, aby zbudować złożone wizualizacje wykraczające poza standardowy zestaw kształtów.

  1. Utwórz instancję klasy GeometryShape.
  2. Utwórz pierwszą instancję klasy GeometryPath.
  3. Utwórz drugą instancję klasy GeometryPath.
  4. Zastosuj obie ścieżki do kształtu.
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 200, 100)

    geometry_path_0 = slides.GeometryPath()
    geometry_path_0.move_to(0, 0)
    geometry_path_0.line_to(shape.width, 0)
    geometry_path_0.line_to(shape.width, shape.height/3)
    geometry_path_0.line_to(0, shape.height / 3)
    geometry_path_0.close_figure()

    geometry_path_1 = slides.GeometryPath()
    geometry_path_1.move_to(0, shape.height/3 * 2)
    geometry_path_1.line_to(shape.width, shape.height / 3 * 2)
    geometry_path_1.line_to(shape.width, shape.height)
    geometry_path_1.line_to(0, shape.height)
    geometry_path_1.close_figure()

    shape.set_geometry_paths([ geometry_path_0, geometry_path_1])

    presentation.save("composite_shape.pptx", slides.export.SaveFormat.PPTX)

Kształt złożony

Utwórz własne kształty z zaokrąglonymi rogami

Ten rozdział pokazuje, jak narysować własny kształt z płynnie zakrzywionymi rogami przy użyciu ścieżki geometrycznej. Połączysz odcinki proste i łuki kołowe, aby utworzyć obrys i dodać gotowy kształt do slajdu.

import aspose.slides as slides
import aspose.pydrawing as draw

shape_x = 20
shape_y = 20
shape_width = 300
shape_height = 200

left_top_size = 50
right_top_size = 20
right_bottom_size = 40
left_bottom_size = 10

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(
        slides.ShapeType.CUSTOM, shape_x, shape_y, shape_width, shape_height)

    point1 = draw.PointF(left_top_size, 0)
    point2 = draw.PointF(shape_width - right_top_size, 0)
    point3 = draw.PointF(shape_width, shape_height - right_bottom_size)
    point4 = draw.PointF(left_bottom_size, shape_height)
    point5 = draw.PointF(0, left_top_size)

    geometry_path = slides.GeometryPath()
    geometry_path.move_to(point1)
    geometry_path.line_to(point2)
    geometry_path.arc_to(right_top_size, right_top_size, 180, -90)
    geometry_path.line_to(point3)
    geometry_path.arc_to(right_bottom_size, right_bottom_size, -90, -90)
    geometry_path.line_to(point4)
    geometry_path.arc_to(left_bottom_size, left_bottom_size, 0, -90)
    geometry_path.line_to(point5)
    geometry_path.arc_to(left_top_size, left_top_size, 90, -90)
    geometry_path.close_figure()

    shape.set_geometry_path(geometry_path)

    presentation.save("curved_corners.pptx", slides.export.SaveFormat.PPTX)

Zaokrąglone rogi

Określ, czy geometria kształtu jest zamknięta

Zamknięty kształt definiowany jest jako taki, w którym wszystkie jego boki łączą się, tworząc jednolitą granicę bez przerw. Taki kształt może być prostą formą geometryczną lub złożonym własnym obrysem. Poniższy przykład kodu pokazuje, jak sprawdzić, czy geometria kształtu jest zamknięta:

def is_geometry_closed(geometry_shape):
    is_closed = None

    for geometry_path in geometry_shape.get_geometry_paths():
        data_length = len(geometry_path.path_data)
        if data_length == 0:
            continue

        last_segment = geometry_path.path_data[data_length - 1]
        is_closed = last_segment.path_command == PathCommandType.CLOSE

        if not is_closed:
            return False

    return is_closed

FAQ

Jakie będą skutki dla wypełnienia i obrysu po zastąpieniu geometrii?

Styl pozostaje przypisany do kształtu; zmienia się jedynie kontur. Wypełnienie i obrys są automatycznie stosowane do nowej geometrii.

Jak prawidłowo obrócić własny kształt wraz z jego geometrią?

Użyj właściwości rotation kształtu; geometria obraca się razem z kształtem, ponieważ jest związana z jego własnym układem współrzędnych.

Czy mogę skonwertować własny kształt na obraz, aby „zablokować” wynik?

Tak. Wyeksportuj wybrany slide lub sam shape do formatu rastrowego; upraszcza to dalszą pracę z rozbudowanymi geometriami.