Aangepaste presentatievormen in .NET
Overzicht
Dit artikel legt uit hoe u presentatievormen in Aspose.Slides kunt aanpassen door de vormgeometrie te bewerken via bewerkingspunten en geometrie‑paden. Het laat zien hoe u met GeometryPath en IGeometryPath kunt werken om bestaande vormen te wijzigen, basisbewerkingsbewerkingen op paden uit te voeren, punten toe te voegen of te verwijderen, en de bijgewerkte geometrie terug toe te passen op een vorm.
Daarnaast wordt getoond hoe u aangepaste en samengestelde vormen kunt maken, vormen met gebogen hoeken kunt opbouwen, kunt bepalen of een vormgeometrie gesloten is, en hoe u tussen GeometryPath en GraphicsPath kunt converteren voor extra scenario’s voor geometrie‑aanpassing.
Een vorm aanpassen met bewerkingspunten
Beschouw een vierkant. In PowerPoint kunt u met bewerkingspunten
- de hoek van het vierkant naar binnen of naar buiten verplaatsen
- de kromming van een hoek of punt specificeren
- nieuwe punten aan het vierkant toevoegen
- punten op het vierkant manipuleren, enzovoort.
In feite kunt u de beschreven taken uitvoeren op elke vorm. Met bewerkingspunten kunt u een vorm wijzigen of een nieuwe vorm maken op basis van een bestaande vorm.
Tips voor vormbewerking

Voordat u begint met het bewerken van PowerPoint‑vormen via bewerkingspunten, kunt u rekening houden met de volgende punten over vormen:
- Een vorm (of het pad ervan) kan gesloten of open zijn.
- Alle vormen bestaan uit minimaal 2 ankerpunten die met elkaar verbonden zijn door lijnen.
- Een lijn is recht of gebogen. Ankerpunten bepalen de aard van de lijn.
- Ankerpunten bestaan als hoekpunten, rechte punten of vloeiende punten:
- Een hoekpunt is een punt waar 2 rechte lijnen onder een hoek samenkomen.
- Een vloeiend punt is een punt waar 2 handvatten in een rechte lijn liggen en de segmenten van de lijn in een vloeiende curve samenkomen. In dit geval staan alle handvatten op gelijke afstand van het ankerpunt.
- Een recht punt is een punt waar 2 handvatten in een rechte lijn liggen en de segmenten van die lijn in een vloeiende curve samenkomen. In dit geval hoeven de handvatten niet op gelijke afstand van het ankerpunt te staan.
- Door ankerpunten te verplaatsen of te bewerken (wat de hoek van de lijnen verandert), kunt u de vorm van de vorm wijzigen.
Om PowerPoint‑vormen via bewerkingspunten te bewerken, biedt Aspose.Slides de GeometryPath‑klasse en de IGeometryPath‑interface.
- Een GeometryPath‑instantie stelt een geometriepad van het IGeometryShape‑object voor.
- Om de
GeometryPathvan deIGeometryShape‑instantie op te halen, kunt u de IGeometryShape.GetGeometryPaths‑methode gebruiken. - Om de
GeometryPathvoor een vorm in te stellen, kunt u deze methoden gebruiken: IGeometryShape.SetGeometryPath voor solide vormen en IGeometryShape.SetGeometryPaths voor samengestelde vormen. - Om segmenten toe te voegen, kunt u de methoden onder IGeometryPath gebruiken.
- Met de IGeometryPath.Stroke‑ en IGeometryPath.FillMode‑eigenschappen kunt u het uiterlijk van een geometriepad instellen.
- Met de IGeometryPath.PathData‑eigenschap kunt u het geometriepad van een
GeometryShapeals een array van pad‑segmenten ophalen. - Voor extra opties voor geometrie‑aanpassing van vormen kunt u GeometryPath converteren naar GraphicsPath.
- Gebruik de methoden GeometryPathToGraphicsPath en GraphicsPathToGeometryPath (van de ShapeUtil‑klasse) om GeometryPath en GraphicsPath heen en terug te converteren.
Eenvoudige bewerkingsbewerkingen
Deze C#‑code laat zien hoe u
Een lijn toevoegen aan het einde van een pad
void LineTo(PointF point);
void LineTo(float x, float y);
Een lijn toevoegen op een gespecificeerde positie in een pad:
void LineTo(PointF point, uint index);
void LineTo(float x, float y, uint index);
Een kubieke Bézier‑curve toevoegen aan het einde van een pad:
void CubicBezierTo(PointF point1, PointF point2, PointF point3);
void CubicBezierTo(float x1, float y1, float x2, float y2, float x3, float y3);
Een kubieke Bézier‑curve toevoegen op een gespecificeerde positie in een pad:
void CubicBezierTo(PointF point1, PointF point2, PointF point3, uint index);
void CubicBezierTo(float x1, float y1, float x2, float y2, float x3, float y3, uint index);
Een kwadratische Bézier‑curve toevoegen aan het einde van een pad:
void QuadraticBezierTo(PointF point1, PointF point2);
void QuadraticBezierTo(float x1, float y1, float x2, float y2);
Een kwadratische Bézier‑curve toevoegen op een gespecificeerde positie in een pad:
void QuadraticBezierTo(PointF point1, PointF point2, uint index);
void QuadraticBezierTo(float x1, float y1, float x2, float y2, uint index);
Een opgegeven boog toevoegen aan een pad:
void ArcTo(float width, float heigth, float startAngle, float sweepAngle);
De huidige figuur sluiten van een pad:
void CloseFigure();
De positie voor het volgende punt instellen:
void MoveTo(PointF point);
void MoveTo(float x, float y);
Het pad‑segment verwijderen op een opgegeven index:
void RemoveAt(int index);
Aangepaste punten aan een vorm toevoegen
- Maak een instantie van de GeometryShape‑klasse en stel het type ShapeType.Rectangle in.
- Haal een instantie van de GeometryPath‑klasse op uit de vorm.
- Voeg een nieuw punt toe tussen de twee bovenste punten op het pad.
- Voeg een nieuw punt toe tussen de twee onderste punten op het pad.
- Pas het pad toe op de vorm.
Deze C#‑code laat zien hoe u aangepaste punten aan een vorm toevoegt:
using (Presentation pres = new Presentation())
{
GeometryShape shape = pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 200, 100) as GeometryShape;
IGeometryPath geometryPath = shape.GetGeometryPaths()[0];
geometryPath.LineTo(100, 50, 1);
geometryPath.LineTo(100, 50, 4);
shape.SetGeometryPath(geometryPath);
}

Punten uit een vorm verwijderen
- Maak een instantie van de GeometryShape‑klasse en stel het type ShapeType.Heart in.
- Haal een instantie van de GeometryPath‑klasse op uit de vorm.
- Verwijder het segment van het pad.
- Pas het pad toe op de vorm.
Deze C#‑code laat zien hoe u punten uit een vorm verwijdert:
using (Presentation pres = new Presentation())
{
GeometryShape shape = pres.Slides[0].Shapes.AddAutoShape(ShapeType.Heart, 100, 100, 300, 300) as GeometryShape;
IGeometryPath path = shape.GetGeometryPaths()[0];
path.RemoveAt(2);
shape.SetGeometryPath(path);
}

Een aangepaste vorm maken
- Bereken de punten voor de vorm.
- Maak een instantie van de GeometryPath‑klasse.
- Vul het pad met de punten.
- Maak een instantie van de GeometryShape‑klasse.
- Pas het pad toe op de vorm.
Deze C#‑code laat zien hoe u een aangepaste vorm maakt:
List<PointF> points = new List<PointF>();
float R = 100, r = 50;
int step = 72;
for (int angle = -90; angle < 270; angle += step)
{
double radians = angle * (Math.PI / 180f);
double x = R * Math.Cos(radians);
double y = R * Math.Sin(radians);
points.Add(new PointF((float)x + R, (float)y + R));
radians = Math.PI * (angle + step / 2) / 180.0;
x = r * Math.Cos(radians);
y = r * Math.Sin(radians);
points.Add(new PointF((float)x + R, (float)y + R));
}
GeometryPath starPath = new GeometryPath();
starPath.MoveTo(points[0]);
for (int i = 1; i < points.Count; i++)
{
starPath.LineTo(points[i]);
}
starPath.CloseFigure();
using (Presentation pres = new Presentation())
{
GeometryShape shape = pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, R * 2, R * 2) as GeometryShape;
shape.SetGeometryPath(starPath);
}

Een samengestelde aangepaste vorm maken
- Maak een instantie van de GeometryShape‑klasse.
- Maak een eerste instantie van de GeometryPath‑klasse.
- Maak een tweede instantie van de GeometryPath‑klasse.
- Pas de paden toe op de vorm.
Deze C#‑code laat zien hoe u een samengestelde aangepaste vorm maakt:
using (Presentation pres = new Presentation())
{
GeometryShape shape = pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 200, 100) as GeometryShape;
GeometryPath geometryPath0 = new GeometryPath();
geometryPath0.MoveTo(0, 0);
geometryPath0.LineTo(shape.Width, 0);
geometryPath0.LineTo(shape.Width, shape.Height/3);
geometryPath0.LineTo(0, shape.Height / 3);
geometryPath0.CloseFigure();
GeometryPath geometryPath1 = new GeometryPath();
geometryPath1.MoveTo(0, shape.Height/3 * 2);
geometryPath1.LineTo(shape.Width, shape.Height / 3 * 2);
geometryPath1.LineTo(shape.Width, shape.Height);
geometryPath1.LineTo(0, shape.Height);
geometryPath1.CloseFigure();
shape.SetGeometryPaths(new GeometryPath[] { geometryPath0, geometryPath1});
}

Een aangepaste vorm met gebogen hoeken maken
Deze C#‑code laat zien hoe u een aangepaste vorm met gebogen hoeken (naar binnen) maakt:
var shapeX = 20f;
var shapeY = 20f;
var shapeWidth = 300f;
var shapeHeight = 200f;
var leftTopSize = 50f;
var rightTopSize = 20f;
var rightBottomSize = 40f;
var leftBottomSize = 10f;
using (var presentation = new Presentation())
{
var childShape = presentation.Slides[0].Shapes.AddAutoShape(
ShapeType.Custom, shapeX, shapeY, shapeWidth, shapeHeight);
var geometryPath = new GeometryPath();
var point1 = new PointF(leftTopSize, 0);
var point2 = new PointF(shapeWidth - rightTopSize, 0);
var point3 = new PointF(shapeWidth, shapeHeight - rightBottomSize);
var point4 = new PointF(leftBottomSize, shapeHeight);
var point5 = new PointF(0, leftTopSize);
geometryPath.MoveTo(point1);
geometryPath.LineTo(point2);
geometryPath.ArcTo(rightTopSize, rightTopSize, 180, -90);
geometryPath.LineTo(point3);
geometryPath.ArcTo(rightBottomSize, rightBottomSize, -90, -90);
geometryPath.LineTo(point4);
geometryPath.ArcTo(leftBottomSize, leftBottomSize, 0, -90);
geometryPath.LineTo(point5);
geometryPath.ArcTo(leftTopSize, leftTopSize, 90, -90);
geometryPath.CloseFigure();
childShape.SetGeometryPath(geometryPath);
presentation.Save("output.pptx", SaveFormat.Pptx);
}
Nagaan of een vormgeometrie gesloten is
Een gesloten vorm wordt gedefinieerd als een vorm waarvan alle zijden met elkaar verbonden zijn, waardoor één enkele rand ontstaat zonder gaten. Zo’n vorm kan een eenvoudige geometrische vorm of een complexe aangepaste omtrek zijn. De volgende code‑voorbeeld laat zien hoe u controleert of een vormgeometrie gesloten is:
bool IsGeometryClosed(IGeometryShape geometryShape)
{
bool? isClosed = null;
foreach (var geometryPath in geometryShape.GetGeometryPaths())
{
var dataLength = geometryPath.PathData.Length;
if (dataLength == 0)
continue;
var lastSegment = geometryPath.PathData[dataLength - 1];
isClosed = lastSegment.PathCommand == PathCommandType.Close;
if (isClosed == false)
return false;
}
return isClosed == true;
}
GeometryPath naar GraphicsPath (System.Drawing.Drawing2D) converteren
- Maak een instantie van de GeometryShape‑klasse.
- Maak een instantie van de GraphicsPath‑klasse van de System.Drawing.Drawing2D‑namespace.
- Converteer de GraphicsPath‑instantie naar de GeometryPath‑instantie met behulp van ShapeUtil.
- Pas de paden toe op de vorm.
Deze C#‑code—een implementatie van de bovenstaande stappen—demonstrereert het conversie‑proces van GeometryPath naar GraphicsPath:
using (Presentation pres = new Presentation())
{
GeometryShape shape = pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle, 100, 100, 300, 100) as GeometryShape;
IGeometryPath originalPath = shape.GetGeometryPaths()[0];
originalPath.FillMode = PathFillModeType.None;
GraphicsPath gPath = new GraphicsPath();
gPath.AddString("Text in shape", new FontFamily("Arial"), 1, 40, new PointF(10, 10), StringFormat.GenericDefault);
IGeometryPath textPath = ShapeUtil.GraphicsPathToGeometryPath(gPath);
textPath.FillMode = PathFillModeType.Normal;
shape.SetGeometryPaths(new[] {originalPath, textPath}) ;
}

FAQ
Wat gebeurt er met de vulling en de contour nadat de geometrie is vervangen?
De stijl blijft bij de vorm; alleen de contour verandert. De vulling en de contour worden automatisch op de nieuwe geometrie toegepast.
Hoe roteer ik een aangepaste vorm correct samen met de geometrie?
Gebruik de rotation‑eigenschap van de vorm; de geometrie draait mee omdat deze is gekoppeld aan het eigen coördinatensysteem van de vorm.
Kan ik een aangepaste vorm omzetten naar een afbeelding om het resultaat te “vergrendelen”?
Ja. Exporteer het gewenste slide‑gebied of de shape zelf naar een rasterformaat; dit vereenvoudigt verder werk met complexe geometrieën.