Sesuaikan Bentuk Presentasi di Java
Ikhtisar
Artikel ini menjelaskan cara menyesuaikan bentuk presentasi di Aspose.Slides dengan mengedit geometri bentuk melalui titik sunting dan jalur geometri. Artikel ini menunjukkan cara bekerja dengan GeometryPath dan IGeometryPath untuk memodifikasi bentuk yang ada, melakukan operasi penyuntingan jalur dasar, menambah atau menghapus titik, dan menerapkan geometri yang diperbarui kembali ke bentuk.
Artikel ini juga mendemonstrasikan cara membuat bentuk kustom dan komposit, membangun bentuk dengan sudut melengkung, menentukan apakah geometri bentuk tertutup, dan mengonversi antara GeometryPath dan java.awt.Shape untuk skenario penyesuaian geometri tambahan.
Ubah Bentuk Menggunakan Titik Sunting
Pertimbangkan sebuah persegi. Di PowerPoint, menggunakan edit points, Anda dapat
- memindahkan sudut persegi ke dalam atau ke luar
- menentukan kelengkungan untuk sebuah sudut atau titik
- menambahkan titik baru ke persegi
- memanipulasi titik pada persegi, dll.
Pada dasarnya, Anda dapat melakukan tugas‑tugas tersebut pada bentuk apa pun. Dengan titik sunting, Anda dapat mengubah sebuah bentuk atau membuat bentuk baru dari bentuk yang ada.
Tips Penyuntingan Bentuk

Sebelum Anda mulai menyunting bentuk PowerPoint melalui titik sunting, pertimbangkan hal‑hal berikut tentang bentuk:
- Sebuah bentuk (atau jalurnya) dapat berupa tertutup atau terbuka.
- Ketika sebuah bentuk tertutup, ia tidak memiliki titik awal atau akhir. Ketika sebuah bentuk terbuka, ia memiliki titik awal dan akhir.
- Semua bentuk terdiri dari setidaknya 2 titik jangkar yang dihubungkan oleh garis
- Garis dapat lurus atau melengkung. Titik jangkar menentukan sifat garis.
- Titik jangkar hadir sebagai titik sudut, titik lurus, atau titik halus:
- Titik sudut adalah titik di mana 2 garis lurus bertemu pada sebuah sudut.
- Titik halus adalah titik di mana 2 pegangan berada pada satu garis lurus dan segmen garis bergabung dalam sebuah kurva halus. Dalam hal ini, semua pegangan dipisahkan dari titik jangkar dengan jarak yang sama.
- Titik lurus adalah titik di mana 2 pegangan berada pada satu garis lurus dan segmen‑segmen garis tersebut bergabung dalam sebuah kurva halus. Dalam hal ini, pegangan tidak harus dipisahkan dari titik jangkar dengan jarak yang sama.
- Dengan memindahkan atau menyunting titik jangkar (yang mengubah sudut garis), Anda dapat mengubah tampilan bentuk.
Untuk menyunting bentuk PowerPoint melalui titik sunting, Aspose.Slides menyediakan kelas GeometryPath dan antarmuka IGeometryPath.
- Sebuah instance GeometryPath mewakili jalur geometri dari objek IGeometryShape.
- Untuk mengambil
GeometryPathdari instanceIGeometryShape, Anda dapat menggunakan metode IGeometryShape.getGeometryPaths. - Untuk menetapkan
GeometryPathke sebuah bentuk, Anda dapat menggunakan metode: IGeometryShape.setGeometryPath untuk solid shapes dan IGeometryShape.setGeometryPaths untuk composite shapes. - Untuk menambahkan segmen, Anda dapat menggunakan metode‑metode di bawah IGeometryPath.
- Dengan menggunakan metode IGeometryPath.setStroke dan IGeometryPath.setFillMode, Anda dapat mengatur tampilan jalur geometri.
- Dengan menggunakan metode IGeometryPath.getPathData, Anda dapat mengambil jalur geometri dari sebuah
GeometryShapesebagai array segmen jalur. - Untuk mengakses opsi penyesuaian geometri bentuk tambahan, Anda dapat mengonversi GeometryPath ke java.awt.Shape.
- Gunakan metode geometryPathToGraphicsPath dan graphicsPathToGeometryPath (dari kelas ShapeUtil) untuk mengonversi GeometryPath ke java.awt.Shape bolak‑balik.
Operasi Penyuntingan Sederhana
Kode Java berikut menunjukkan cara
Menambahkan garis ke akhir jalur
public void lineTo(java.awt.geom.Point2D.Float point);
public void lineTo(float x, float y);
Menambahkan garis ke posisi tertentu pada jalur:
public void lineTo(java.awt.geom.Point2D.Float point, long index);
public void lineTo(float x, float y, long index);
Menambahkan kurva Bezier kubik di akhir jalur:
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);
Menambahkan kurva Bezier kubik ke posisi tertentu pada jalur:
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);
Menambahkan kurva Bezier kuadratik di akhir jalur:
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);
Menambahkan kurva Bezier kuadratik ke posisi tertentu pada jalur:
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);
Menambahkan lengkungan tertentu ke sebuah jalur:
public void arcTo(float width, float heigth, float startAngle, float sweepAngle);
Menutup figur saat ini pada sebuah jalur:
public void closeFigure();
Menetapkan posisi untuk titik berikutnya:
public void moveTo(java.awt.geom.Point2D.Float point);
public void moveTo(float x, float y);
Menghapus segmen jalur pada indeks tertentu:
public void removeAt(int index);
Tambahkan Titik Kustom ke Bentuk
- Buat sebuah instance kelas GeometryShape dan tetapkan tipe ShapeType.Rectangle.
- Dapatkan instance kelas GeometryPath dari bentuk.
- Tambahkan titik baru di antara dua titik atas pada jalur.
- Tambahkan titik baru di antara dua titik bawah pada jalur.
- Terapkan jalur ke bentuk.
Kode Java berikut menunjukkan cara menambahkan titik kustom ke sebuah bentuk:
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();
}

Hapus Titik dari Bentuk
- Buat sebuah instance kelas GeometryShape dan tetapkan tipe ShapeType.Heart.
- Dapatkan instance kelas GeometryPath dari bentuk.
- Hapus segmen untuk jalur.
- Terapkan jalur ke bentuk.
Kode Java berikut menunjukkan cara menghapus titik dari sebuah bentuk:
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();
}

Buat Bentuk Kustom
- Hitung titik‑titik untuk bentuk.
- Buat sebuah instance kelas GeometryPath.
- Isi jalur dengan titik‑titik tersebut.
- Buat sebuah instance kelas GeometryShape.
- Terapkan jalur ke bentuk.
Java berikut menunjukkan cara membuat bentuk kustom:
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();
}

Buat Bentuk Kustom Komposit
- Buat sebuah instance kelas GeometryShape.
- Buat instance pertama kelas GeometryPath.
- Buat instance kedua kelas GeometryPath.
- Terapkan jalur‑jalur ke bentuk.
Kode Java berikut menunjukkan cara membuat bentuk kustom komposit:
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();
}

Buat Bentuk Kustom dengan Sudut Melengkung
Kode Java berikut menunjukkan cara membuat bentuk kustom dengan sudut melengkung (ke dalam);
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();
}
Temukan Apakah Geometri Bentuk Ditutup
Sebuah bentuk tertutup didefinisikan sebagai bentuk di mana semua sisinya terhubung, membentuk satu batas tanpa celah. Bentuk semacam itu dapat berupa bentuk geometris sederhana atau outline kustom yang kompleks. Contoh kode berikut menunjukkan cara memeriksa apakah geometri bentuk tertutup:
boolean isGeometryClosed(IGeometryShape geometryShape)
{
Boolean isClosed = null;
for (IGeometryPath geometryPath : geometryShape.getGeometryPaths()) {
int dataLength = geometryPath.getPathData().length;
if (dataLength == 0)
continue;
IPathSegment lastSegment = geometryPath.getPathData()[dataLength - 1];
isClosed = lastSegment.getPathCommand() == PathCommandType.Close;
if (isClosed == false)
return false;
}
return isClosed == true;
}
Konversi GeometryPath ke java.awt.Shape
- Buat sebuah instance kelas GeometryShape.
- Buat sebuah instance kelas java.awt.Shape.
- Konversi instance java.awt.Shape ke instance GeometryPath menggunakan ShapeUtil.
- Terapkan jalur ke bentuk.
Kode Java—implementasi langkah‑langkah di atas—menunjukkan proses konversi GeometryPath ke GraphicsPath:
Presentation pres = new Presentation();
try {
// Buat bentuk baru
GeometryShape shape = (GeometryShape)pres.getSlides().get_Item(0).
getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 100);
// Dapatkan jalur geometri dari bentuk
IGeometryPath originalPath = shape.getGeometryPaths()[0];
originalPath.setFillMode(PathFillModeType.None);
// Buat jalur grafis baru dengan teks
Shape graphicsPath;
Font font = new java.awt.Font("Arial", Font.PLAIN, 40);
String text = "Text in shape";
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();
}
// Konversi jalur grafis ke jalur geometri
IGeometryPath textPath = ShapeUtil.graphicsPathToGeometryPath(graphicsPath);
textPath.setFillMode(PathFillModeType.Normal);
// Atur kombinasi jalur geometri baru dan jalur geometri asal ke bentuk
shape.setGeometryPaths(new IGeometryPath[] { originalPath, textPath });
} finally {
if (pres != null) pres.dispose();
}

FAQ
Apa yang terjadi pada isi dan garis tepi setelah mengganti geometri?
Gaya tetap melekat pada bentuk; hanya kontur yang berubah. Isi dan garis tepi secara otomatis diterapkan ke geometri baru.
Bagaimana cara memutar bentuk kustom bersama geometri secara benar?
Gunakan metode setRotation pada bentuk; geometri berputar bersama bentuk karena terikat pada sistem koordinat bentuk tersebut.
Bisakah saya mengonversi bentuk kustom menjadi gambar untuk “mengunci” hasilnya?
Ya. Ekspor area slide yang diperlukan atau shape itu sendiri ke format raster; ini menyederhanakan pekerjaan lanjutan dengan geometri yang kompleks.