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

overview_image

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.

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

  1. Erstellen Sie eine Instanz der GeometryShape Klasse und setzen Sie den ShapeType.Rectangle Typ.
  2. Holen Sie sich eine Instanz der GeometryPath Klasse von der Form.
  3. Fügen Sie einen neuen Punkt zwischen den beiden oberen Punkten auf dem Pfad hinzu.
  4. Fügen Sie einen neuen Punkt zwischen den beiden unteren Punkten auf dem Pfad hinzu.
  5. 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();
}

example1_image

Punkte von der Form entfernen

  1. Erstellen Sie eine Instanz der GeometryShape Klasse und setzen Sie den ShapeType.Heart Typ.
  2. Holen Sie sich eine Instanz der GeometryPath Klasse von der Form.
  3. Entfernen Sie das Segment für den Pfad.
  4. 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();
}

example2_image

Benutzerdefinierte Form erstellen

  1. Berechnen Sie die Punkte für die Form.
  2. Erstellen Sie eine Instanz der GeometryPath Klasse.
  3. Füllen Sie den Pfad mit den Punkten.
  4. Erstellen Sie eine Instanz der GeometryShape Klasse.
  5. 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();
}

example3_image

Erstellen Sie eine zusammengesetzte benutzerdefinierte Form

  1. Erstellen Sie eine Instanz der GeometryShape Klasse.
  2. Erstellen Sie die erste Instanz der GeometryPath Klasse.
  3. Erstellen Sie die zweite Instanz der GeometryPath Klasse.
  4. 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();
}

example4_image

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

  1. Erstellen Sie eine Instanz der GeometryShape Klasse.
  2. Erstellen Sie eine Instanz der java.awt.Shape Klasse.
  3. Konvertieren Sie die java.awt.Shape Instanz in die GeometryPath Instanz mithilfe von ShapeUtil.
  4. 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();
}

example5_image