Personalizza le forme nelle presentazioni con Python

Introduzione

Considera un quadrato. In PowerPoint, usando Modifica punti, puoi:

  • spostare l’angolo di un quadrato verso l’interno o verso l’esterno,
  • regolare la curvatura di un angolo o di un punto,
  • aggiungere nuovi punti al quadrato,
  • manipolare i suoi punti.

Puoi applicare queste operazioni a qualsiasi forma. Con Modifica punti, puoi modificare una forma o crearne una nuova a partire da una forma esistente.

Suggerimenti per la modifica delle forme

“Comando Modifica punti”

Prima di iniziare a modificare le forme di PowerPoint usando Modifica punti, considera queste note sulle forme:

  • Una forma (o il suo percorso) può essere chiusa o aperta.
  • Una forma chiusa non ha punto di inizio o di fine; una forma aperta ha un inizio e una fine.
  • Ogni forma ha almeno due punti di ancoraggio collegati da segmenti di linea.
  • Un segmento è dritto o curvo; i punti di ancoraggio determinano la natura del segmento.
  • I punti di ancoraggio possono essere angolo, liscio, o dritto:
    • Un punto angolo è dove due segmenti dritti si incontrano formando un angolo.
    • Un punto liscio ha due maniglie collineari e i segmenti adiacenti formano una curva fluida. In questo caso, entrambe le maniglie sono alla stessa distanza dal punto di ancoraggio.
    • Un punto dritto ha anche due maniglie collineari, e i segmenti adiacenti formano una curva fluida. In questo caso, le maniglie non devono essere alla stessa distanza dal punto di ancoraggio.
  • Spostando o modificando i punti di ancoraggio (cambiando così gli angoli dei segmenti), puoi modificare l’aspetto della forma.

Per modificare le forme di PowerPoint, Aspose.Slides fornisce la classe GeometryPath .

Operazioni di modifica semplici

I seguenti metodi sono usati per operazioni di modifica semplici.

Aggiungi una linea alla fine di un percorso:

line_to(point)
line_to(x, y)

Aggiungi una linea in una posizione specificata in un percorso:

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

Aggiungi una curva cubica di Bézier alla fine di un percorso:

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

Aggiungi una curva cubica di Bézier in una posizione specificata in un percorso:

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

Aggiungi una curva quadratica di Bézier alla fine di un percorso:

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

Aggiungi una curva quadratica di Bézier in una posizione specificata in un percorso:

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

Aggiungi un arco a un percorso:

arc_to(width, heigth, startAngle, sweepAngle)

Chiudi la figura corrente in un percorso:

close_figure()

Imposta la posizione per il punto successivo:

move_to(point)
move_to(x, y)

Rimuovi il segmento del percorso a un indice dato:

remove_at(index)

Aggiungere punti personalizzati alle forme

Qui imparerai a definire una forma libera aggiungendo la tua sequenza di punti. Specificando punti ordinati e tipi di segmento (dritto o curvo) e chiudendo opzionalmente il percorso, puoi disegnare grafiche personalizzate precise — poligoni, icone, didascalie o loghi — direttamente nelle tue diapositive.

  1. Crea un’istanza della classe GeometryShape e imposta il suo ShapeType.RECTANGLE .
  2. Ottieni un’istanza di GeometryPath dalla forma.
  3. Inserisci un nuovo punto tra i due punti superiori del percorso.
  4. Inserisci un nuovo punto tra i due punti inferiori del percorso.
  5. Applica il percorso aggiornato alla forma.

Il seguente codice Python mostra come aggiungere punti personalizzati a una forma:

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)

Punti personalizzati

Rimuovere i punti dalle forme

A volte una forma personalizzata contiene punti non necessari che complicano la sua geometria o influenzano il rendering. Questa sezione mostra come rimuovere punti specifici dal percorso di una forma così da semplificare il contorno e ottenere risultati più puliti e precisi.

  1. Crea un’istanza della classe GeometryShape e imposta il suo tipo ShapeType.HEART .
  2. Ottieni un’istanza di GeometryPath dalla forma.
  3. Rimuovi un segmento dal percorso.
  4. Applica il percorso aggiornato alla forma.

Il seguente codice Python mostra come rimuovere i punti da una forma:

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)

Punti rimossi

Creare forme personalizzate

Crea forme vettoriali su misura definendo un GeometryPath e componendolo da linee, archi e curve Bézier. Questa sezione mostra come costruire una geometria personalizzata da zero e aggiungere la forma risultante alla tua diapositiva.

  1. Calcola i punti per la forma.
  2. Crea un’istanza della classe GeometryPath .
  3. Popola il percorso con i punti.
  4. Crea un’istanza della classe GeometryShape .
  5. Applica il percorso alla forma.

Il seguente codice Python mostra come creare una forma personalizzata:

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)

Forma personalizzata

Creare forme personalizzate composite

Creare una forma personalizzata composita ti consente di combinare più percorsi geometrici in un’unica forma riutilizzabile nella diapositiva. Definisci e unisci questi percorsi per costruire visualizzazioni complesse che vanno oltre il set di forme standard.

  1. Crea un’istanza della classe GeometryShape .
  2. Crea la prima istanza della classe GeometryPath .
  3. Crea la seconda istanza della classe GeometryPath .
  4. Applica entrambi i percorsi alla forma.

Il seguente codice Python mostra come creare una forma personalizzata composita:

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)

Forma composita

Creare forme personalizzate con angoli curvi

Questa sezione mostra come disegnare una forma personalizzata con angoli curvi lisci usando un percorso geometrico. Combinerai segmenti dritti e archi circolari per formare il contorno e aggiungere la forma finita alla tua diapositiva.

Il seguente codice Python mostra come creare una forma personalizzata con angoli curvi:

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)

Angoli curvi

Determinare se la geometria di una forma è chiusa

Una forma chiusa è definita come quella in cui tutti i suoi lati sono collegati, formando un unico contorno senza spazi. Tale forma può essere una semplice figura geometrica o un contorno personalizzato complesso. Il seguente esempio di codice mostra come verificare se la geometria di una forma è chiusa:

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

Cosa succederà al riempimento e al contorno dopo la sostituzione della geometria?

Lo stile rimane sulla forma; solo il contorno cambia. Il riempimento e il contorno vengono applicati automaticamente alla nuova geometria.

Come ruoto correttamente una forma personalizzata insieme alla sua geometria?

Usa la proprietà rotation della forma; la geometria ruota con la forma perché è vincolata al sistema di coordinate della forma.

Posso convertire una forma personalizzata in un’immagine per “bloccare” il risultato?

Sì. Esporta l’area della slide richiesta o la forma stessa in un formato raster; questo semplifica ulteriori lavori con geometrie complesse.