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

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 .
- Un’istanza di GeometryPath rappresenta il percorso geometrico di un oggetto GeometryShape .
- Per recuperare il GeometryPath da un’istanza di GeometryShape , usa il metodo GeometryShape.get_geometry_paths .
- Per impostare il GeometryPath per una forma, usa GeometryShape.set_geometry_path per forme solide e GeometryShape.set_geometry_paths per forme composite .
- Per aggiungere segmenti, usa i metodi di GeometryPath .
- Usa le proprietà GeometryPath.stroke e GeometryPath.fill_mode per controllare l’aspetto di un percorso geometrico.
- Usa la proprietà GeometryPath.path_data per recuperare il percorso geometrico di una forma come un array di segmenti di percorso.
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.
- Crea un’istanza della classe GeometryShape e imposta il suo ShapeType.RECTANGLE .
- Ottieni un’istanza di GeometryPath dalla forma.
- Inserisci un nuovo punto tra i due punti superiori del percorso.
- Inserisci un nuovo punto tra i due punti inferiori del percorso.
- 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)

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.
- Crea un’istanza della classe GeometryShape e imposta il suo tipo ShapeType.HEART .
- Ottieni un’istanza di GeometryPath dalla forma.
- Rimuovi un segmento dal percorso.
- 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)

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.
- Calcola i punti per la forma.
- Crea un’istanza della classe GeometryPath .
- Popola il percorso con i punti.
- Crea un’istanza della classe GeometryShape .
- 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)

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.
- Crea un’istanza della classe GeometryShape .
- Crea la prima istanza della classe GeometryPath .
- Crea la seconda istanza della classe GeometryPath .
- 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)

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)

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.