Android'de Sunum Şekillerini Özelleştirme
Genel Bakış
Bu makale, Aspose.Slides’ta sunum şekillerini düzenleme noktaları ve geometri yolları aracılığıyla şekil geometrisini düzenleyerek nasıl özelleştireceğinizi açıklar. GeometryPath ve IGeometryPath ile mevcut şekilleri nasıl değiştireceğinizi, temel yol düzenleme işlemlerini nasıl gerçekleştireceğinizi, nokta ekleme veya kaldırma ve güncellenmiş geometrinin bir şekle nasıl uygulanacağını gösterir. Ayrıca, özel ve bileşik şekiller oluşturmayı, kavisli köşeli şekiller inşa etmeyi, bir şekil geometrisinin kapalı olup olmadığını belirlemeyi ve ek geometri özelleştirme senaryoları için GeometryPath ile java.awt.Shape arasında dönüşüm yapmayı gösterir.
Düzenleme Noktalarıyla Bir Şekli Değiştirme
Bir kareyi düşünün. PowerPoint’te düzenleme noktalarını kullanarak şunları yapabilirsiniz
- köşenin içe ya da dışa hareket ettirmek
- bir köşe veya noktanın eğriliğini belirtmek
- kareye yeni noktalar eklemek
- kare üzerindeki noktaları manipüle etmek vb.
Temelde, bu görevleri herhangi bir şekil üzerinde gerçekleştirebilirsiniz. Düzenleme noktalarını kullanarak bir şekli değiştirebilir veya mevcut bir şekilden yeni bir şekil oluşturabilirsiniz.
Şekil Düzenleme İpuçları

PowerPoint şekillerini düzenleme noktalarıyla düzenlemeye başlamadan önce, şekillerle ilgili şu noktaları göz önünde bulundurabilirsiniz:
- Bir şekil (veya yolu) kapalı ya da açık olabilir.
- Kapalı bir şeklin bir başlangıç ya da bitiş noktası yoktur. Açık bir şeklin ise bir başlangıcı ve bir sonu vardır.
- Tüm şekiller en az 2 bağlantı noktasından oluşur ve bunlar çizgilerle birbirine bağlanır
- Bir çizgi düz ya da kavisli olabilir. Bağlantı noktaları çizginin niteliğini belirler.
- Bağlantı noktaları köşe noktaları, düz noktalar veya yumuşak noktalar olarak bulunur:
- Köşe noktası, 2 düz çizginin bir açıyla birleştiği noktadır.
- Yumuşak nokta, 2 tutamağın düz bir hat üzerinde bulunduğu ve çizgi segmentlerinin sorunsuz bir eğriyle birleştiği noktadır. Bu durumda, tüm tutamaçlar bağlantı noktasından eşit mesafede bulunur.
- Düz nokta, 2 tutamağın düz bir hat üzerinde bulunduğu ancak çizgi segmentlerinin bir eğri oluşturduğu noktadır. Bu durumda, tutamaçların bağlantı noktasından eşit mesafede olması gerekmez.
- Bağlantı noktalarını hareket ettirerek ya da düzenleyerek (çizgilerin açısını değiştirir) şeklin görünümünü değiştirebilirsiniz.
PowerPoint şekillerini düzenleme noktalarıyla düzenlemek için Aspose.Slides, GeometryPath sınıfını ve IGeometryPath arabirimini sağlar.
- Bir GeometryPath örneği, IGeometryShape nesnesinin geometri yolunu temsil eder.
IGeometryShapeörneğindenGeometryPathalınıp, IGeometryShape.getGeometryPaths yöntemi kullanılarak elde edilebilir.- Bir şekil için
GeometryPathayarlamak için şu yöntemler kullanılabilir: katı şekiller için IGeometryShape.setGeometryPath ve bileşik şekiller için IGeometryShape.setGeometryPaths. - Segment eklemek için IGeometryPath altındaki yöntemleri kullanabilirsiniz.
- IGeometryPath.setStroke ve IGeometryPath.setFillMode yöntemlerini kullanarak bir geometri yolunun görünümünü ayarlayabilirsiniz.
- IGeometryPath.getPathData yöntemiyle bir
GeometryShapeın geometri yolunu yol segmentlerinin bir dizisi olarak alabilirsiniz. - Ek şekil geometri özelleştirme seçeneklerine erişmek için GeometryPath öğesini java.awt.Shape öğesine dönüştürebilirsiniz.
- geometryPathToGraphicsPath ve graphicsPathToGeometryPath yöntemlerini (ShapeUtil sınıfından) kullanarak GeometryPath ile java.awt.Shape arasında dönüşüm yapabilirsiniz.
Basit Düzenleme İşlemleri
Bu Java kodu size nasıl yapılacağını gösterir
Bir satır ekle bir yolun sonuna
public void lineTo(java.awt.geom.Point2D.Float point);
public void lineTo(float x, float y);
Bir satır ekle bir yolda belirtilen konuma:
public void lineTo(java.awt.geom.Point2D.Float point, long index);
public void lineTo(float x, float y, long index);
Kübik Bezier eğrisi ekle bir yolun sonuna:
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);
Kübik Bezier eğrisi ekle bir yolda belirtilen konuma:
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);
Karesel Bezier eğrisi ekle bir yolun sonuna:
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);
Karesel Bezier eğrisi ekle bir yolda belirtilen konuma:
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);
Verilen bir yay ekle bir yola:
public void arcTo(float width, float heigth, float startAngle, float sweepAngle);
Yolun mevcut şekilini kapat:
public void closeFigure();
Sonraki nokta için konumu ayarla:
public void moveTo(java.awt.geom.Point2D.Float point);
public void moveTo(float x, float y);
Verilen bir indeks’teki yol segmentini kaldır:
public void removeAt(int index);
Bir Şekle Özel Noktalar Ekle
- GeometryShape sınıfının bir örneğini oluşturun ve ShapeType.Rectangle tipini ayarlayın.
- Şekilden GeometryPath sınıfının bir örneğini alın.
- Yol üzerindeki iki üst nokta arasında yeni bir nokta ekleyin.
- Yol üzerindeki iki alt nokta arasında yeni bir nokta ekleyin.
- Yolu şekle uygulayın.
Bu Java kodu, bir şekle özel noktalar eklemenin nasıl yapılacağını gösterir:
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();
}

Şekilden Noktaları Kaldır
- GeometryShape sınıfının bir örneğini oluşturun ve ShapeType.Heart tipini ayarlayın.
- Şekilden GeometryPath sınıfının bir örneğini alın.
- Yolun segmentini kaldırın.
- Yolu şekle uygulayın.
Bu Java kodu, bir şekilden noktaları kaldırmanın nasıl yapılacağını gösterir:
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();
}

Özel Bir Şekil Oluşturma
- Şekil için noktaları hesaplayın.
- GeometryPath sınıfının bir örneğini oluşturun.
- Yolu noktalarla doldurun.
- GeometryShape sınıfının bir örneğini oluşturun.
- Yolu şekle uygulayın.
Bu Java kodu, özel bir şekil oluşturmanın nasıl yapılacağını gösterir:
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();
}

Bileşik Özel Şekil Oluşturma
- GeometryShape sınıfının bir örneğini oluşturun.
- İlk GeometryPath sınıf örneğini oluşturun.
- İkinci GeometryPath sınıf örneğini oluşturun.
- Yolları şekle uygulayın.
Bu Java kodu, bileşik bir özel şekil oluşturmayı gösterir:
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();
}

Kavisli Köşeli Özel Şekil Oluşturma
Bu Java kodu, içe doğru kavisli köşelere sahip bir özel şekil oluşturmanın nasıl yapılacağını gösterir;
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();
}
Bir Şekil Geometrisinin Kapalı Olup Olmadığını Öğrenin
Kapalı bir şekil, tüm kenarlarının birbirine bağlandığı ve boşluk bırakmadan tek bir sınır oluşturduğu şekil olarak tanımlanır. Böyle bir şekil basit bir geometrik form ya da karmaşık bir özel kontur olabilir. Aşağıdaki kod örneği, bir şekil geometrisinin kapalı olup olmadığını nasıl kontrol edeceğinizi gösterir:
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;
}
GeometryPath’i java.awt.Shape’e Dönüştürme
- GeometryShape sınıfının bir örneğini oluşturun.
- java.awt.Shape sınıfının bir örneğini oluşturun.
- java.awt.Shape örneğini ShapeUtil kullanarak GeometryPath örneğine dönüştürün.
- Yolları şekle uygulayın.
Bu Java kodu—yukarıdaki adımların bir uygulaması—GeometryPath‘i GraphicsPath‘e dönüştürme sürecini göstermektedir:
Presentation pres = new Presentation();
try {
// Yeni şekil oluştur
GeometryShape shape = (GeometryShape)pres.getSlides().get_Item(0).
getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 300, 100);
// Şeklin geometri yolunu al
IGeometryPath originalPath = shape.getGeometryPaths()[0];
originalPath.setFillMode(PathFillModeType.None);
// Metin ile yeni grafik yolu oluştur
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();
}
// Grafik yolunu geometri yoluna dönüştür
IGeometryPath textPath = ShapeUtil.graphicsPathToGeometryPath(graphicsPath);
textPath.setFillMode(PathFillModeType.Normal);
// Şekle yeni geometri yolu ve orijinal geometri yolunun birleşimini ayarla
shape.setGeometryPaths(new IGeometryPath[] { originalPath, textPath });
} finally {
if (pres != null) pres.dispose();
}

SSS
Geometri değiştirildikten sonra dolgu ve kontur ne olur?
Stil şekilde kalır; sadece kontur değişir. Dolgu ve kontur otomatik olarak yeni geometriye uygulanır.
Özel bir şekli geometrisiyle birlikte nasıl doğru şekilde döndürürüm?
Şeklin setRotation metodunu kullanın; geometri, şeklin kendi koordinat sistemine bağlı olduğu için şekille birlikte döner.
Sonucu “kilitlemek” için özel bir şekli görüntüye dönüştürebilir miyim?
Evet. Gerekli slaytı alanını ya da şekli raster bir formata dışa aktarın; bu, karmaşık geometrilerle çalışmayı kolaylaştırır.