Alakzatok testreszabása prezentációkban Python használatával
Bevezetés
Gondolj egy négyzetre. PowerPointban a Edit Points használatával a következőket teheted:
- a négyzet sarkát befelé vagy kifelé mozdíthatod,
- a sarok vagy pont görbületét állíthatod,
- új pontokat adhatsz a négyzethez,
- kezelheted a pontjait.
Ezeket a műveleteket bármely alakzatra alkalmazhatod. A Edit Points segítségével módosíthatsz egy alakzatot, vagy új alakzatot hozhatsz létre egy meglévőből.
Alakzat szerkesztési tippek

Mielőtt elkezdenéd szerkeszteni a PowerPoint alakzatokat a Edit Points használatával, vedd figyelembe a következő megjegyzéseket az alakzatokról:
- Egy alakzat (vagy annak útvonala) lehet zárt vagy nyitott.
- Egy zárt alakzatnak nincs kezdő vagy befejező pontja; egy nyitott alakzatnak van kezdete és vége.
- Minden alakzat legalább két rögzítési ponttal rendelkezik, amelyeket vonalláncok kötnek össze.
- Egy szegmens lehet egyenes vagy íves; a rögzítési pontok határozzák meg a szegmens jellegét.
- A rögzítési pontok lehetnek sarok, simított, vagy egyenes:
- A sarok pont az, ahol két egyenes szegmens szögnél találkozik.
- A smooth (simított) pont két egymással kollineáris fogantyúval rendelkezik, és a szomszédos szegmensek sima görbét alkotnak. Ebben az esetben a két fogantyú ugyanolyan távolságra van a rögzítési ponttól.
- A straight (egyenes) pont szintén két kollineáris fogantyúval rendelkezik, és a szomszédos szegmensek sima görbét alkotnak. Ebben az esetben a fogantyúknek nem kell ugyanakkora távolságra lenniük a rögzítési ponttól.
- A rögzítési pontok mozgatásával vagy szerkesztésével (ezáltal a szegmens szögeit változtatva) megváltoztathatod az alakzat megjelenését.
A PowerPoint alakzatok szerkesztéséhez az Aspose.Slides a GeometryPath osztályt biztosítja.
- A GeometryPath példány egy GeometryShape objektum geometriai útvonalát reprezentálja.
- A GeometryPath egy GeometryShape példányból való lekéréséhez használd a GeometryShape.get_geometry_paths metódust.
- Egy alakzat GeometryPath beállításához használd a GeometryShape.set_geometry_path metódust egyszerű alakzatok esetén, és a GeometryShape.set_geometry_paths metódust összetett alakzatok esetén.
- Szegmensek hozzáadásához használd a GeometryPath metódusait.
- A GeometryPath.stroke és a GeometryPath.fill_mode tulajdonságokkal szabályozhatod egy geometriai útvonal megjelenését.
- A GeometryPath.path_data tulajdonsággal kaphatod meg egy alakzat geometriai útvonalát, útvonal szegmensek tömbjeként.
Egyszerű szerkesztési műveletek
Az alábbi módszerek egyszerű szerkesztési műveletekhez használhatók.
Vonal hozzáadása a útvonal végéhez:
line_to(point)
line_to(x, y)
Vonal hozzáadása az útvonal egy meghatározott pozíciójába:
line_to(point, index)
line_to(x, y, index)
Köbös Bézier-görbe hozzáadása a útvonal végéhez:
cubic_bezier_to(point1, point2, point3)
cubic_bezier_to(x1, y1, x2, y2, x3, y3)
Köbös Bézier-görbe hozzáadása az útvonal egy meghatározott pozíciójába:
cubic_bezier_to(point1, point2, point3, index)
cubic_bezier_to(x1, y1, x2, y2, x3, y3, index)
Kvadratikus Bézier-görbe hozzáadása a útvonal végéhez:
quadratic_bezier_to(point1, point2)
quadratic_bezier_to(x1, y1, x2, y2)
Kvadratikus Bézier-görbe hozzáadása az útvonal egy meghatározott pozíciójába:
quadratic_bezier_to(point1, point2, index)
quadratic_bezier_to(x1, y1, x2, y2, index)
Ív hozzáfűzése egy útvonalhoz:
arc_to(width, heigth, startAngle, sweepAngle)
Az aktuális alakzat lezárása egy útvonalban:
close_figure()
A következő pont pozíciójának beállítása:
move_to(point)
move_to(x, y)
Az útvonal szegmensének eltávolítása egy megadott indexnél:
remove_at(index)
Egyedi pontok hozzáadása alakzatokhoz
Ebben a részben megtanulod, hogyan definiálj egy szabadkézi alakzatot saját pontsorozatod hozzáadásával. A pontok és a szegmens típusok (egyenes vagy íves) megadásával, valamint opcionálisan az útvonal lezárásával pontos egyedi grafikákat – sokszögeket, ikonokat, felhívásokat vagy logókat – rajzolhatsz közvetlenül a diáidra.
- Hozz létre egy GeometryShape példányt, és állítsd be a ShapeType.RECTANGLE típusát.
- Szerezd meg a GeometryPath példányt az alakzatról.
- Illessz be egy új pontot a két felső pont közé az útvonalon.
- Illessz be egy új pontot a két alsó pont közé az útvonalon.
- Alkalmazd a frissített útvonalat az alakzatra.
Az alábbi Python kód bemutatja, hogyan lehet egyedi pontokat hozzáadni egy alakzathoz:
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)

Pontok eltávolítása alakzatokból
Néha egy egyedi alakzat felesleges pontokat tartalmaz, amelyek bonyolítják a geometriát vagy befolyásolják a megjelenítését. Ez a szakasz bemutatja, hogyan távolíthatsz el konkrét pontokat egy alakzat útvonaláról, hogy egyszerűsítsd a körvonalat, és tisztább, pontosabb eredményt érj el.
- Hozz létre egy GeometryShape példányt, és állítsd be a ShapeType.HEART típust.
- Szerezd meg a GeometryPath példányt az alakzatról.
- Távolíts el egy szegmenst az útvonalról.
- Alkalmazd a frissített útvonalat az alakzatra.
Az alábbi Python kód bemutatja, hogyan lehet pontokat eltávolítani egy alakzatból:
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)

Egyedi alakzatok létrehozása
Alakíts egyedi vektor alakzatokat egy GeometryPath meghatározásával, és sorokból, ívekből, valamint Bézier-görbékből állítva össze. Ez a szakasz bemutatja, hogyan építs egy egyedi geometriát a semmiből, és hogyan add hozzá az eredményül kapott alakzatot a diádhoz.
- Számold ki az alakzat pontjait.
- Hozz létre egy GeometryPath példányt.
- Töltsd fel az útvonalat a pontokkal.
- Hozz létre egy GeometryShape példányt.
- Alkalmazd az útvonalat az alakzatra.
Az alábbi Python kód bemutatja, hogyan hozhatsz létre egy egyedi alakzatot:
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)

Összetett egyedi alakzatok létrehozása
Összetett egyedi alakzat létrehozásával több geometriai útvonalat egyetlen, újrahasznosítható alakzattá egyesíthetsz a dián. Definiáld és egyesítsd ezeket az útvonalakat, hogy komplex vizuálokat építs, amelyek túllépnek a standard alakzatkészleten.
- Hozz létre egy GeometryShape példányt.
- Hozd létre az első GeometryPath példányt.
- Hozd létre a második GeometryPath példányt.
- Alkalmazd mindkét útvonalat az alakzatra.
Az alábbi Python kód bemutatja, hogyan hozhatsz létre egy összetett egyedi alakzatot:
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)

Egyedi alakzatok görbe sarkokkal
Ez a szakasz bemutatja, hogyan rajzolj egy egyedi alakzatot simán ívelt sarkokkal geometriai útvonal segítségével. Egyenes szegmenseket és köríveket kombinálva alkotod meg a körvonalat, majd hozzáadod a kész alakzatot a diádhoz.
Az alábbi Python kód bemutatja, hogyan hozhatsz létre egy egyedi alakzatot ívelt sarkokkal:
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)

Ellenőrizd, hogy egy alakzat geometriája zárt-e
Egy zárt alakzat olyan, amelynek minden oldala összekapcsolódik, egyetlen szegélyt alkotva részak nélkül. Egy ilyen alakzat lehet egyszerű geometriai forma vagy összetett egyedi körvonal. Az alábbi kódrészlet bemutatja, hogyan ellenőrizheted, hogy egy alakzat geometriája zárt-e:
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
GYIK
Mi történik a kitöltéssel és a körvonallal a geometria cseréje után?
A stílus az alakzaton marad; csak a kontúr változik. A kitöltés és a körvonal automatikusan alkalmazásra kerül az új geometriára.
Hogyan forgatom helyesen egy egyedi alakzatot a geometriájával együtt?
Használd az alakzat rotation tulajdonságát; a geometria az alakzattal együtt forog, mivel az alakzat saját koordináta‑rendszeréhez van kötve.
Átalakíthatok egy egyedi alakzatot képpé a végeredmény “lezárásához”?
Igen. Exportáld a szükséges slide területet vagy közvetlenül a shape objektumot raszteres formátumba; ez egyszerűsíti a további munkát nehéz geometriákkal.