Benutzerdefinierte Form
Ändern einer Form mit Bearbeitungspunkten
Betrachten Sie ein Quadrat. In PowerPoint können Sie mithilfe von Bearbeitungspunkten
- die Ecke des Quadrats hinein oder hinaus 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 bei jeder Form ausführen. Mithilfe von Bearbeitungspunkten können Sie eine Form ändern oder eine neue Form aus einer vorhandenen Form erstellen.
Tipps zur Formbearbeitung
Bevor Sie mit der Bearbeitung von PowerPoint-Formen über Bearbeitungspunkte beginnen, sollten Sie diese Punkte zu Formen beachten:
- Eine Form (oder ihr Pfad) kann entweder geschlossen oder offen sein.
- Wenn eine Form geschlossen ist, fehlt ein Start- oder Endpunkt. Wenn eine Form offen ist, hat sie einen Anfang und ein Ende.
- Alle Formen bestehen aus mindestens 2 Ankerpunkten, die durch Linien miteinander verbunden sind.
- Eine Linie ist entweder gerade oder gekrümmt. Ankerpunkte bestimmen die Art der Linie.
- Ankerpunkte bestehen als Eckpunkte, Gerade Punkte oder glatte Punkte:
- Ein Eckpunkt ist ein Punkt, an dem 2 gerade Linien in einem Winkel zusammentreffen.
- Ein glatter Punkt ist ein Punkt, an dem 2 Griffe in einer geraden Linie existieren und die Segmente der Linie sich in einer sanften Kurve verbinden. In diesem Fall sind alle Griffe gleich weit vom Ankerpunkt entfernt.
- Ein gerader Punkt ist ein Punkt, an dem 2 Griffe in einer geraden Linie existieren und die Segmente dieser Linie sich in einer sanften Kurve verbinden. In diesem Fall müssen die Griffe nicht gleich weit vom Ankerpunkt entfernt sein.
- Durch das 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, bietet Aspose.Slides die GeometryPath Klasse und das IGeometryPath Interface.
- Eine GeometryPath Instanz stellt einen Geometriepfad des IGeometryShape Objekts dar.
- 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.
- Mithilfe der Methoden IGeometryPath.setStroke und IGeometryPath.setFillMode können Sie das Aussehen eines Geometriepfades festlegen.
- Mithilfe der Methode IGeometryPath.getPathData können Sie den Geometriepfad einer
GeometryShape
als Array von Pfadsegmenten abrufen. - Um auf zusätzliche Anpassungsoptionen für die Formgeometrie zuzugreifen, können Sie GeometryPath in java.awt.Shape umwandeln.
- Verwenden Sie die Methoden geometryPathToGraphicsPath und graphicsPathToGeometryPath (aus der ShapeUtil Klasse), um GeometryPath hin und her in java.awt.Shape zu konvertieren.
Einfache Bearbeitungsoperationen
Dieser Java-Code zeigt Ihnen, wie Sie
Eine Linie an das Ende eines Pfades hinzufügen
public void lineTo(java.awt.geom.Point2D.Float point);
public void lineTo(float x, float y);
Eine Linie an einer bestimmten Position auf einem Pfad hinzufügen:
public void lineTo(java.awt.geom.Point2D.Float point, long index);
public void lineTo(float x, float y, long index);
Eine kubische Bezierkurve am Ende eines Pfades hinzufügen:
public void cubicBezierTo(java.awt.geom.Point2D.Float point1, java.awt.geom.Point2D.Float point2, java.awt.geom.Point2D.Float point3);
public 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:
public void cubicBezierTo(java.awt.geom.Point2D.Float point1, java.awt.geom.Point2D.Float point2, java.awt.geom.Point2D.Float point3, long index);
public void cubicBezierTo(float x1, float y1, float x2, float y2, float x3, float y3, long index);
Eine quadratische Bezierkurve am Ende eines Pfades hinzufügen:
public void quadraticBezierTo(java.awt.geom.Point2D.Float point1, java.awt.geom.Point2D.Float point2);
public void quadraticBezierTo(float x1, float y1, float x2, float y2);
Eine quadratische Bezierkurve an einer bestimmten Position auf einem Pfad hinzufügen:
public void quadraticBezierTo(java.awt.geom.Point2D.Float point1, java.awt.geom.Point2D.Float point2, long index);
public void quadraticBezierTo(float x1, float y1, float x2, float y2, long index);
Einen gegebenen Bogen zu einem Pfad hinzufügen:
public void arcTo(float width, float height, float startAngle, float sweepAngle);
Die aktuelle Figur eines Pfades schließen:
public void closeFigure();
Die Position für den nächsten Punkt festlegen:
public void moveTo(java.awt.geom.Point2D.Float point);
public void moveTo(float x, float y);
Das Pfadsegment an einem gegebenen Index entfernen:
public 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 Java-Code zeigt Ihnen, wie Sie benutzerdefinierte Punkte zu einer Form hinzufügen:
Presentation pres = new Presentation();
try {
GeometryShape shape = (GeometryShape) pres.getSlides().get_Item(0).
getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 200, 100);
IGeometryPath geometryPath = shape.getGeometryPaths()[0];
geometryPath.lineTo(100, 50, 1);
geometryPath.lineTo(100, 50, 4);
shape.setGeometryPath(geometryPath);
} finally {
if (pres != null) pres.dispose();
}
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 Java-Code zeigt Ihnen, wie Sie Punkte von einer Form entfernen:
Presentation pres = new Presentation();
try {
GeometryShape shape = (GeometryShape) pres.getSlides().get_Item(0).
getShapes().addAutoShape(ShapeType.Heart, 100, 100, 300, 300);
IGeometryPath path = shape.getGeometryPaths()[0];
path.removeAt(2);
shape.setGeometryPath(path);
} finally {
if (pres != null) pres.dispose();
}
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 Java-Code zeigt Ihnen, wie Sie eine benutzerdefinierte Form erstellen:
List<Point2D.Float> points = new ArrayList<Point2D.Float>();
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 Point2D.Float((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 Point2D.Float((float)x + R, (float)y + R));
}
GeometryPath starPath = new GeometryPath();
starPath.moveTo(points.get(0));
for (int i = 1; i < points.size(); i++)
{
starPath.lineTo(points.get(i));
}
starPath.closeFigure();
Presentation pres = new Presentation();
try {
GeometryShape shape = (GeometryShape) pres.getSlides().get_Item(0).
getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, R * 2, R * 2);
shape.setGeometryPath(starPath);
} finally {
if (pres != null) pres.dispose();
}
Erstellen Sie eine zusammengesetzte benutzerdefinierte Form
- Erstellen Sie eine Instanz der GeometryShape Klasse.
- Erstellen Sie die erste Instanz der GeometryPath Klasse.
- Erstellen Sie die zweite Instanz der GeometryPath Klasse.
- Wenden Sie die Pfade auf die Form an.
Dieser Java-Code zeigt Ihnen, wie Sie eine zusammengesetzte benutzerdefinierte Form erstellen:
Presentation pres = new Presentation();
try {
GeometryShape shape = (GeometryShape) pres.getSlides().get_Item(0).
getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 200, 100);
GeometryPath geometryPath0 = new GeometryPath();
geometryPath0.moveTo(0, 0);
geometryPath0.lineTo(shape.getWidth(), 0);
geometryPath0.lineTo(shape.getWidth(), shape.getHeight()/3);
geometryPath0.lineTo(0, shape.getHeight() / 3);
geometryPath0.closeFigure();
GeometryPath geometryPath1 = new GeometryPath();
geometryPath1.moveTo(0, shape.getHeight()/3 * 2);
geometryPath1.lineTo(shape.getWidth(), shape.getHeight() / 3 * 2);
geometryPath1.lineTo(shape.getWidth(), shape.getHeight());
geometryPath1.lineTo(0, shape.getHeight());
geometryPath1.closeFigure();
shape.setGeometryPaths(new GeometryPath[] { geometryPath0, geometryPath1});
} finally {
if (pres != null) pres.dispose();
}
Erstellen Sie eine benutzerdefinierte Form mit abgerundeten Ecken
Dieser Java-Code zeigt Ihnen, wie Sie eine benutzerdefinierte Form mit abgerundeten Ecken (nach innen) erstellen:
float shapeX = 20f;
float shapeY = 20f;
float shapeWidth = 300f;
float shapeHeight = 200f;
float leftTopSize = 50f;
float rightTopSize = 20f;
float rightBottomSize = 40f;
float leftBottomSize = 10f;
Presentation pres = new Presentation();
try {
IAutoShape childShape = pres.getSlides().get_Item(0).getShapes().addAutoShape(
ShapeType.Custom, shapeX, shapeY, shapeWidth, shapeHeight);
GeometryPath geometryPath = new GeometryPath();
Point2D.Float point1 = new Point2D.Float(leftTopSize, 0);
Point2D.Float point2 = new Point2D.Float(shapeWidth - rightTopSize, 0);
Point2D.Float point3 = new Point2D.Float(shapeWidth, shapeHeight - rightBottomSize);
Point2D.Float point4 = new Point2D.Float(leftBottomSize, shapeHeight);
Point2D.Float point5 = new Point2D.Float(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);
pres.save("output.pptx", SaveFormat.Pptx);
} finally {
if (pres!= null) pres.dispose();
}
Konvertieren Sie GeometryPath in java.awt.Shape
- Erstellen Sie eine Instanz der GeometryShape Klasse.
- Erstellen Sie eine Instanz der java.awt.Shape Klasse.
- Konvertieren Sie die java.awt.Shape Instanz in die GeometryPath Instanz mithilfe von ShapeUtil.
- Wenden Sie die Pfade auf die Form an.
Dieser Java-Code—eine Implementierung der oben genannten Schritte—demonstriert den Konvertierungsprozess von GeometryPath zu GraphicsPath:
Presentation pres = new Presentation();
try {
// Erstellen Sie eine neue Form
GeometryShape shape = (GeometryShape)pres.getSlides().get_Item(0).
getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 100);
// Holen Sie sich den Geometriepfad der Form
IGeometryPath originalPath = shape.getGeometryPaths()[0];
originalPath.setFillMode(PathFillModeType.None);
// Erstellen Sie einen neuen Grafikpfad mit Text
Shape graphicsPath;
Font font = new java.awt.Font("Arial", Font.PLAIN, 40);
String text = "Text in der Form";
BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = img.createGraphics();
try
{
GlyphVector glyphVector = font.createGlyphVector(g2.getFontRenderContext(), text);
graphicsPath = glyphVector.getOutline(20f, ((float) -glyphVector.getVisualBounds().getY()) + 10);
}
finally {
g2.dispose();
}
// Konvertieren Sie den Grafikpfad in den Geometriepfad
IGeometryPath textPath = ShapeUtil.graphicsPathToGeometryPath(graphicsPath);
textPath.setFillMode(PathFillModeType.Normal);
// Setzen Sie die Kombination aus neuem Geometriepfad und ursprünglichem Geometriepfad auf die Form
shape.setGeometryPaths(new IGeometryPath[] { originalPath, textPath });
} finally {
if (pres != null) pres.dispose();
}