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

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.
- Instancja GeometryPath reprezentuje ścieżkę geometryczną obiektu GeometryShape.
- Aby pobrać GeometryPath z instancji GeometryShape, użyj metody GeometryShape.get_geometry_paths.
- Aby ustawić GeometryPath dla kształtu, użyj GeometryShape.set_geometry_path dla solid shapes oraz GeometryShape.set_geometry_paths dla composite shapes.
- Aby dodać odcinki, użyj metod klasy GeometryPath.
- Użyj właściwości GeometryPath.stroke i GeometryPath.fill_mode aby kontrolować wygląd ścieżki geometrycznej.
- Użyj właściwości GeometryPath.path_data aby pobrać ścieżkę geometryczną kształtu jako tablicę segmentów ścieżki.
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.
- Utwórz instancję klasy GeometryShape i ustaw jej ShapeType.RECTANGLE.
- Pobierz instancję GeometryPath z kształtu.
- Wstaw nowy punkt pomiędzy dwa górne punkty w ścieżce.
- Wstaw nowy punkt pomiędzy dwa dolne punkty w ścieżce.
- 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)

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.
- Utwórz instancję klasy GeometryShape i ustaw jej typ ShapeType.HEART.
- Pobierz instancję GeometryPath z kształtu.
- Usuń segment ze ścieżki.
- 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)

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.
- Oblicz punkty dla kształtu.
- Utwórz instancję klasy GeometryPath.
- Napełnij ścieżkę punktami.
- Utwórz instancję klasy GeometryShape.
- 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)

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.
- Utwórz instancję klasy GeometryShape.
- Utwórz pierwszą instancję klasy GeometryPath.
- Utwórz drugą instancję klasy GeometryPath.
- 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)

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)

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.