Anpassa former i presentationer med Python

Introduktion

Tänk på en kvadrat. I PowerPoint, med Edit Points, kan du:

  • flytta en kvadrats hörn inåt eller utåt,
  • justera krökningen av ett hörn eller en punkt,
  • lägga till nya punkter på kvadraten,
  • manipulera dess punkter.

Du kan tillämpa dessa operationer på vilken form som helst. Med Edit Points kan du modifiera en form eller skapa en ny från en befintlig form.

Tips för redigering av former

“Redigera punkter”-kommando

Innan du börjar redigera PowerPoint-former med Edit Points, överväg följande anteckningar om former:

  • En form (eller dess bana) kan vara sluten eller öppen.
  • En sluten form har ingen start- eller slutpunkt; en öppen form har en början och ett slut.
  • Varje form har minst två ankarpunkter som är kopplade med linjesegment.
  • Ett segment är antingen rakt eller kurvigt; ankarpunkterna bestämmer segmentets natur.
  • Ankarpunkter kan vara corner, smooth, eller straight:
    • En corner-punkt är där två raka segment möts i en vinkel.
    • En smooth-punkt har två handtag som är kollineära, och de angränsande segmenten bildar en mjuk kurva. I detta fall är båda handtagen på samma avstånd från ankaret.
    • En straight-punkt har också två kollineära handtag, och de angränsande segmenten bildar en mjuk kurva. I detta fall behöver handtagen inte vara på samma avstånd från ankaret.
  • Genom att flytta eller redigera ankarpunkter (och därmed ändra segmentvinklar) kan du förändra formens utseende.

För att redigera PowerPoint-former tillhandahåller Aspose.Slides klassen GeometryPath .

Enkla redigeringsoperationer

Följande metoder används för enkla redigeringsoperationer.

Lägg till en linje till slutet av en bana:

line_to(point)
line_to(x, y)

Lägg till en linje på en angiven position i en bana:

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

Lägg till en kubisk Bezier-kurva till slutet av en bana:

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

Lägg till en kubisk Bezier-kurva på en angiven position i en bana:

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

Lägg till en kvadratisk Bezier-kurva till slutet av en bana:

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

Lägg till en kvadratisk Bezier-kurva på en angiven position i en bana:

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

Lägg till en båge till en bana:

arc_to(width, heigth, startAngle, sweepAngle)

Stäng den aktuella figuren i en bana:

close_figure()

Ange positionen för nästa punkt:

move_to(point)
move_to(x, y)

Ta bort bansegmentet på ett givet index:

remove_at(index)

Lägg till anpassade punkter till former

Här lär du dig hur du definierar en frihandsform genom att lägga till din egen sekvens av punkter. Genom att ange ordnade punkter och segmenttyper (raka eller kurviga) och eventuellt stänga banan kan du rita precisa anpassade grafik—polygoner, ikoner, förklaringar eller logotyper—direkt på dina bilder.

  1. Skapa en instans av klassen GeometryShape och ange dess ShapeType.RECTANGLE .
  2. Hämta en GeometryPath‑instans från formen.
  3. Infoga en ny punkt mellan de två övre punkterna på banan.
  4. Infoga en ny punkt mellan de två nedre punkterna på banan.
  5. Applicera den uppdaterade banan på formen.

Följande Python‑kod visar hur man lägger till anpassade punkter till en form:

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)

Custom points

Ta bort punkter från former

Ibland innehåller en anpassad form onödiga punkter som komplicerar dess geometri eller påverkar hur den renderas. Den här sektionen visar hur man tar bort specifika punkter från en formes bana så att du kan förenkla konturen och uppnå renare, mer precisa resultat.

  1. Skapa en instans av klassen GeometryShape och ange dess typ ShapeType.HEART .
  2. Hämta en GeometryPath‑instans från formen.
  3. Ta bort ett segment från banan.
  4. Applicera den uppdaterade banan på formen.

Följande Python‑kod visar hur man tar bort punkter från en form:

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)

Removed points

Skapa anpassade former

Skapa skräddarsydda vektorformer genom att definiera en GeometryPath och komponera den av linjer, bågar och Bézier‑kurvor. Den här sektionen visar hur du bygger en anpassad geometri från grunden och lägger till den resulterande formen på din bild.

  1. Beräkna punkterna för formen.
  2. Skapa en instans av klassen GeometryPath .
  3. Fyll banan med punkterna.
  4. Skapa en instans av klassen GeometryShape .
  5. Applicera banan på formen.

Följande Python‑kod visar hur man skapar en anpassad form:

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)

Custom shape

Skapa sammansatta anpassade former

Att skapa en sammansatt anpassad form låter dig kombinera flera geometribanor till en enda återanvändbar form på en bild. Definiera och slå ihop dessa banor för att bygga komplexa visualiseringar som går utöver standarduppsättningen av former.

  1. Skapa en instans av klassen GeometryShape .
  2. Skapa den första instansen av klassen GeometryPath .
  3. Skapa den andra instansen av klassen GeometryPath .
  4. Applicera båda banorna på formen.

Följande Python‑kod visar hur man skapar en sammansatt anpassad form:

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)

Composite shape

Skapa anpassade former med rundade hörn

Den här sektionen visar hur du ritar en anpassad form med mjukt rundade hörn med hjälp av en geometribana. Du kombinerar raka segment och cirkulära bågar för att forma konturen och lägger till den färdiga formen på din bild.

Följande Python‑kod visar hur man skapar en anpassad form med rundade hörn:

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)

Curved corners

Bestäm om en formes geometri är sluten

En sluten form definieras som en där alla sidor är sammanlänkade och bildar en enda gräns utan luckor. En sådan form kan vara en enkel geometrisk form eller en komplex anpassad kontur. Följande kodexempel visar hur man kontrollerar om en formes geometri är sluten:

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

Vad händer med fyllningen och konturen efter att geometrin har ersatts?

Stilen förblir på formen; endast konturen ändras. Fyllning och kontur appliceras automatiskt på den nya geometrin.

Hur roterar jag en anpassad form korrekt tillsammans med dess geometri?

Använd formens rotation‑egenskap; geometrin roterar med formen eftersom den är bunden till formens egna koordinatsystem.

Kan jag konvertera en anpassad form till en bild för att “låsa” resultatet?

Ja. Exportera det önskade slide‑området eller själva shape till ett rasterformat; detta förenklar vidare arbete med tunga geometrier.