Benutzerdefinierte Form
Ändern einer Form mit Bearbeitungspunkten
Betrachten Sie ein Quadrat. In PowerPoint können Sie mit Bearbeitungspunkten
- die Ecke des Quadrats nach innen oder außen bewegen
- die Krümmung für eine Ecke oder einen Punkt festlegen
- neue Punkte zum Quadrat hinzufügen
- Punkte auf dem Quadrat manipulieren usw.
Im Wesentlichen können Sie die beschriebenen Aufgaben an jeder Form ausführen. Mit Bearbeitungspunkten können Sie eine Form ändern oder eine neue Form aus einer vorhandenen Form erstellen.
Tipps zum Bearbeiten von Formen
Bevor Sie beginnen, PowerPoint-Formen über Bearbeitungspunkte zu bearbeiten, sollten Sie diese Punkte zu Formen in Betracht ziehen:
- Eine Form (oder ihr Pfad) kann entweder geschlossen oder offen sein.
- Alle Formen bestehen aus mindestens 2 Ankerpunkten, die durch Linien miteinander verbunden sind.
- Eine Linie ist entweder gerade oder gekrümmt. Ankerpunkte bestimmen die Natur der Linie.
- Ankerpunkte gibt es als Eckenpunkte, gerade Punkte oder glatte Punkte:
- Ein Eckpunkt ist ein Punkt, an dem sich 2 gerade Linien in einem Winkel treffen.
- Ein glatter Punkt ist ein Punkt, an dem 2 Griffe in einer geraden Linie vorhanden sind und die Liniensegmente in einer glatten Kurve zusammenlaufen. In diesem Fall sind alle Griffe von dem Ankerpunkt durch einen gleichen Abstand getrennt.
- Ein gerader Punkt ist ein Punkt, an dem 2 Griffe in einer geraden Linie vorhanden sind und die Liniensegmente dieser Linie in einer glatten Kurve zusammenlaufen. In diesem Fall müssen die Griffe nicht durch einen gleichen Abstand vom Ankerpunkt getrennt sein.
- Durch Verschieben oder Bearbeiten von Ankerpunkten (was den Winkel der Linien ändert) können Sie das Aussehen einer Form ändern.
Um PowerPoint-Formen über Bearbeitungspunkte zu bearbeiten, stellt Aspose.Slides die GeometryPath Klasse und das IGeometryPath Interface bereit.
- Eine GeometryPath Instanz repräsentiert einen Geometriep path des IGeometryShape Objekts.
- Um den
GeometryPath
von derIGeometryShape
Instanz abzurufen, können Sie die IGeometryShape.GetGeometryPaths Methode verwenden. - Um den
GeometryPath
für eine Form festzulegen, können Sie diese Methoden verwenden: IGeometryShape.SetGeometryPath für feste Formen und IGeometryShape.SetGeometryPaths für komplexe Formen. - Um Segmente hinzuzufügen, können Sie die Methoden unter IGeometryPath verwenden.
- Mit den IGeometryPath.Stroke und IGeometryPath.FillMode Eigenschaften können Sie das Aussehen für einen Geometriep path festlegen.
- Mit der IGeometryPath.PathData Eigenschaft können Sie den Geometriep path einer
GeometryShape
als Array von P 测段en abrufen. - Um auf zusätzliche Anpassungsoptionen für die Formgeometrie zuzugreifen, können Sie GeometryPath in GraphicsPath umwandeln.
- Verwenden Sie die Methoden GeometryPathToGraphicsPath und GraphicsPathToGeometryPath (aus der ShapeUtil Klasse), um GeometryPath in GraphicsPath und umgekehrt umzuwandeln.
Einfache Bearbeitungsoperationen
Dieser C# Code zeigt Ihnen, wie man
Eine Linie an das Ende eines Pfades hinzufügen kann
void LineTo(PointF point);
void LineTo(float x, float y);
Eine Linie an einer bestimmten Position auf einem Pfad hinzufügen:
void LineTo(PointF point, uint index);
void LineTo(float x, float y, uint index);
Eine kubische Bezierkurve am Ende eines Pfades hinzufügen:
void CubicBezierTo(PointF point1, PointF point2, PointF point3);
void CubicBezierTo(float x1, float y1, float x2, float y2, float x3, float y3);
Eine kubische Bezierkurve an der angegebenen Position auf einem Pfad hinzufügen:
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);
Eine quadratische Bezierkurve am Ende eines Pfades hinzufügen:
void QuadraticBezierTo(PointF point1, PointF point2);
void QuadraticBezierTo(float x1, float y1, float x2, float y2);
Eine quadratische Bezierkurve an einer bestimmten Position auf einem Pfad hinzufügen:
void QuadraticBezierTo(PointF point1, PointF point2, uint index);
void QuadraticBezierTo(float x1, float y1, float x2, float y2, uint index);
Einen bestimmten Bogen zu einem Pfad hinzufügen:
void ArcTo(float width, float heigth, float startAngle, float sweepAngle);
Die aktuelle Figur eines Pfades schließen:
void CloseFigure();
Die Position für den nächsten Punkt festlegen:
void MoveTo(PointF point);
void MoveTo(float x, float y);
Das Pfadsegment an einem bestimmten Index entfernen:
void RemoveAt(int index);
Benutzerdefinierte Punkte zur Form hinzufügen
- Erstellen Sie eine Instanz der GeometryShape Klasse und setzen Sie den ShapeType.Rectangle Typ.
- Holen Sie sich eine Instanz der GeometryPath Klasse von der Form.
- Fügen Sie einen neuen Punkt zwischen den beiden oberen Punkten auf dem Pfad hinzu.
- Fügen Sie einen neuen Punkt zwischen den beiden unteren Punkten auf dem Pfad hinzu.
- Wenden Sie den Pfad auf die Form an.
Dieser C# Code zeigt Ihnen, wie Sie benutzerdefinierte Punkte zu einer Form hinzufügen können:
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);
}
Punkte von der Form entfernen
- Erstellen Sie eine Instanz der GeometryShape Klasse und setzen Sie den ShapeType.Heart Typ.
- Holen Sie sich eine Instanz der GeometryPath Klasse von der Form.
- Entfernen Sie das Segment für den Pfad.
- Wenden Sie den Pfad auf die Form an.
Dieser C# Code zeigt Ihnen, wie Sie Punkte von einer Form entfernen können:
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);
}
Benutzerdefinierte Form erstellen
- Berechnen Sie die Punkte für die Form.
- Erstellen Sie eine Instanz der GeometryPath Klasse.
- Füllen Sie den Pfad mit den Punkten.
- Erstellen Sie eine Instanz der GeometryShape Klasse.
- Wenden Sie den Pfad auf die Form an.
Dieser C# zeigt Ihnen, wie Sie eine benutzerdefinierte Form erstellen können:
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);
}
Erstellen Sie eine komplexe benutzerdefinierte Form
- Erstellen Sie eine Instanz der GeometryShape Klasse.
- Erstellen Sie eine erste Instanz der GeometryPath Klasse.
- Erstellen Sie eine zweite Instanz der GeometryPath Klasse.
- Wenden Sie die Pfade auf die Form an.
Dieser C# Code zeigt Ihnen, wie Sie eine komplexe benutzerdefinierte Form erstellen:
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});
}
Erstellen Sie eine benutzerdefinierte Form mit abgerundeten Ecken
Dieser C# Code zeigt Ihnen, wie Sie eine benutzerdefinierte Form mit abgerundeten Ecken (nach innen) erstellen können:
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);
}
Feststellen, ob die Geometrie einer Form geschlossen ist
Zu überprüfen, ob eine Form in einer PowerPoint-Präsentation geschlossen ist, kann entscheidend für die korrekte Anzeige und Bearbeitung von Objekten in Folien sein. Eine geschlossene Form ist definiert als eine, bei der alle ihre Seiten verbunden sind, um eine einzelne Grenze ohne Lücken zu bilden. Eine solche Form kann eine einfache geometrische Form oder eine komplexe benutzerdefinierte Kontur sein.
Die Geschlossenheit einer Form ist wichtig für das Ausführen verschiedener Operationen, wie das Füllen mit Farbe oder Verlauf, das Anwenden von Effekten und Transformationen sowie das Sicherstellen der ordnungsgemäßen Interaktion mit anderen Folienelementen.
Um zu überprüfen, ob die Geometrie einer Form geschlossen ist, müssen Sie Folgendes tun:
- Zugriff auf die Geometrie der Form erhalten.
- Die Geometriep paths in der Form auflisten.
2.1. Holen Sie sich das letzte Segment des nächsten Pfades.
2.2. Überprüfen, ob das letzte Segment der
CLOSE
Befehl ist.
Das folgende Codebeispiel zeigt, wie dies geht:
if (shape is GeometryShape geometryShape)
{
for (int i = 0; i < geometryShape.GetGeometryPaths().Length; i++)
{
IGeometryPath path = geometryShape.GetGeometryPaths()[i];
if (path.PathData.Length == 0) continue;
IPathSegment lastSegment = path.PathData[path.PathData.Length - 1];
bool isClosed = lastSegment.PathCommand == PathCommandType.Close;
Console.WriteLine($"Pfad {i} ist geschlossen: {isClosed}");
}
}
GeometryPath in GraphicsPath (System.Drawing.Drawing2D) umwandeln
- Erstellen Sie eine Instanz der GeometryShape Klasse.
- Erstellen Sie eine Instanz der GraphicsPath Klasse des System.Drawing.Drawing2D Namensraums.
- Wandeln Sie die Instanz von GraphicsPath in die Instanz von GeometryPath unter Verwendung von ShapeUtil um.
- Wenden Sie die Pfade auf die Form an.
Dieser C# Code—eine Implementierung der oben beschriebenen Schritte—zeigt den GeometryPath zu GraphicsPath Umwandlungsprozess:
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}) ;
}