شكل مخصص

تغيير شكل باستخدام نقاط تحرير

اعتبر مربعًا. في PowerPoint، باستخدام نقاط التحرير، يمكنك

  • تحريك زاوية المربع إلى الداخل أو الخارج
  • تحديد الانحناء لزاوية أو نقطة
  • إضافة نقاط جديدة إلى المربع
  • التلاعب بالنقاط على المربع، إلخ.

بشكل أساسي، يمكنك إجراء المهام الموضحة على أي شكل. باستخدام نقاط التحرير، يمكنك تغيير شكل أو إنشاء شكل جديد من شكل موجود.

نصائح تحرير الشكل

overview_image

قبل أن تبدأ في تحرير أشكال PowerPoint من خلال نقاط التحرير، قد ترغب في مراعاة هذه النقاط حول الأشكال:

  • يمكن أن يكون الشكل (أو مساره) مغلقًا أو مفتوحًا.
  • عندما يكون الشكل مغلقًا، فإنه يفتقر إلى نقطة بداية أو نهاية. عندما يكون الشكل مفتوحًا، فإنه يحتوي على بداية ونهاية.
  • تتكون جميع الأشكال من 2 نقطة تثبيت على الأقل مرتبطة ببعضها بخطوط.
  • الخط إما مستقيم أو منحني. تحدد نقاط التثبيت طبيعة الخط.
  • توجد نقاط التثبيت كنقاط زاوية، نقاط مستقيمة، أو نقاط سلسة:
    • نقطة الزاوية هي نقطة تلتقي فيها خطان مستقيمان بزاوية.
    • النقطة السلسة هي نقطة حيث توجد مقبضان في خط مستقيم وتلتقي مقاطع الخط في منحنى سلس. في هذه الحالة، تكون جميع المقابض متباعدة عن نقطة التثبيت بنفس المسافة.
    • النقطة المستقيمة هي نقطة حيث توجد مقبضان في خط مستقيم وتلتقي مقاطع ذلك الخط في منحنى سلس. في هذه الحالة، لا تحتاج المقابض إلى أن تكون متباعدة عن نقطة التثبيت بنفس المسافة.
  • من خلال تحريك أو تحرير نقاط التثبيت (التي تغير زاوية الخطوط)، يمكنك تغيير مظهر الشكل.

لتحرير أشكال PowerPoint من خلال نقاط التحرير، توفر Aspose.Slides فئة GeometryPath وواجهة IGeometryPath.

  • تمثل مثيل GeometryPath مسار الهندسة لكائن IGeometryShape.
  • لاسترداد GeometryPath من مثيل IGeometryShape، يمكنك استخدام طريقة IGeometryShape.GetGeometryPaths.
  • لتعيين GeometryPath لشكل ما، يمكنك استخدام هذه الطرق: IGeometryShape.SetGeometryPath لأشكال صلبة و IGeometryShape.SetGeometryPaths لأشكال تركيبية.
  • لإضافة مقاطع، يمكنك استخدام الطرق الموجودة تحت IGeometryPath.
  • باستخدام الخاصيتين IGeometryPath.Stroke و IGeometryPath.FillMode ، يمكنك تعيين مظهر لمسار الهندسة.
  • باستخدام خاصية IGeometryPath.PathData، يمكنك استرداد مسار الهندسة لشكل GeometryShape كمصفوفة من مقاطع المسار.
  • للوصول إلى خيارات تخصيص هندسة الشكل الإضافية، يمكنك تحويل GeometryPath إلى GraphicsPath.
  • استخدم طريقتي GeometryPathToGraphicsPath و GraphicsPathToGeometryPath (من فئة ShapeUtil) لتحويل GeometryPath إلى GraphicsPath والعكس.

عمليات تحرير بسيطة

هذا الكود بلغة البايثون يوضح لك كيفية

إضافة خط إلى نهاية مسار:

line_to(point)
line_to(x, y)

إضافة خط إلى موضع محدد على مسار:

line_to(point, index)
line_to(x, y, index)

إضافة منحنى بيزيه مكعب في نهاية مسار:

cubic_bezier_to(point1, point2, point3)
cubic_bezier_to(x1, y1, x2, y2, x3, y3)

إضافة منحنى بيزيه مكعب إلى الموضع المحدد على مسار:

cubic_bezier_to(point1, point2, point3, index)
cubic_bezier_to(x1, y1, x2, y2, x3, y3, index)

إضافة منحنى بيزيه رباعي في نهاية مسار:

quadratic_bezier_to(point1, point2)
quadratic_bezier_to(x1, y1, x2, y2)

إضافة منحنى بيزيه رباعي إلى موضع محدد على مسار:

quadratic_bezier_to(point1, point2, index)
quadratic_bezier_to(x1, y1, x2, y2, index)

إضافة قوس محدد إلى مسار:

arc_to(width, heigth, startAngle, sweepAngle)

إغلاق الشكل الحالي لمسار:

close_figure()

تعيين الموضع للنقطة التالية:

move_to(point)
move_to(x, y)

إزالة مقطع المسار عند مؤشر معين:

remove_at(index)

إضافة نقاط مخصصة إلى الشكل

  1. أنشئ مثيلًا من فئة GeometryShape واضبط ShapeType.Rectangle
  2. احصل على مثيل من فئة GeometryPath من الشكل.
  3. أضف نقطة جديدة بين نقطتين علويتين على المسار.
  4. أضف نقطة جديدة بين نقطتين سفليتين على المسار.
  5. طبق المسار على الشكل.

هذا الكود بلغة البايثون يوضح لك كيفية إضافة نقاط مخصصة إلى شكل:

import aspose.slides as slides

with slides.Presentation() as pres:
    shape = pres.slides[0].shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 200, 100)
    geometryPath = shape.get_geometry_paths()[0]

    geometryPath.line_to(100, 50, 1)
    geometryPath.line_to(100, 50, 4)
    shape.set_geometry_path(geometryPath)

example1_image

إزالة نقاط من الشكل

  1. أنشئ مثيلًا من فئة GeometryShape واضبط نوع ShapeType.Heart.
  2. احصل على مثيل من فئة GeometryPath من الشكل.
  3. قم بإزالة المقطع من المسار.
  4. طبق المسار على الشكل.

هذا الكود بلغة البايثون يوضح لك كيفية إزالة نقاط من شكل:

import aspose.slides as slides

with slides.Presentation() as pres:
	shape = pres.slides[0].shapes.add_auto_shape(slides.ShapeType.HEART, 100, 100, 300, 300)

	path = shape.get_geometry_paths()[0]
	path.remove_at(2)
	shape.set_geometry_path(path)

example2_image

إنشاء شكل مخصص

  1. احسب النقاط للشكل.
  2. أنشئ مثيلًا من فئة GeometryPath.
  3. قم بملء المسار بالنقاط.
  4. أنشئ مثيلًا من فئة GeometryShape.
  5. طبق المسار على الشكل.

هذا الكود بلغة البايثون يوضح لك كيفية إنشاء شكل مخصص:

import aspose.slides as slides
import aspose.pydrawing as draw
import math

points = []

R = 100
r = 50
step = 72

for angle in range(-90, 270, step):
    radians = angle * (math.pi / 180)
    x = R * math.cos(radians)
    y = R * math.sin(radians)
    points.append(draw.PointF(x + R, y + R))

    radians = math.pi * (angle + step / 2) / 180.0
    x = r * math.cos(radians)
    y = r * math.sin(radians)
    points.append(draw.PointF(x + R, y + R))

starPath = slides.GeometryPath()
starPath.move_to(points[0])

for i in range(len(points)):
    starPath.line_to(points[i])

starPath.close_figure()

with slides.Presentation() as pres:
    shape = pres.slides[0].shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, R * 2, R * 2)
    shape.set_geometry_path(starPath)

example3_image

إنشاء شكل مخصص مركب

  1. أنشئ مثيلًا من فئة GeometryShape .
  2. أنشئ مثيلًا أول من فئة GeometryPath .
  3. أنشئ مثيلًا ثاني من فئة GeometryPath .
  4. طبق المسارات على الشكل.

هذا الكود بلغة البايثون يوضح لك كيفية إنشاء شكل مخصص مركب:

import aspose.slides as slides
import aspose.pydrawing as draw

with slides.Presentation() as pres:
    shape = pres.slides[0].shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 200, 100)

    geometryPath0 = slides.GeometryPath()
    geometryPath0.move_to(0, 0)
    geometryPath0.line_to(shape.width, 0)
    geometryPath0.line_to(shape.width, shape.height/3)
    geometryPath0.line_to(0, shape.height / 3)
    geometryPath0.close_figure()

    geometryPath1 = slides.GeometryPath()
    geometryPath1.move_to(0, shape.height/3 * 2)
    geometryPath1.line_to(shape.width, shape.height / 3 * 2)
    geometryPath1.line_to(shape.width, shape.height)
    geometryPath1.line_to(0, shape.height)
    geometryPath1.close_figure()

    shape.set_geometry_paths([ geometryPath0, geometryPath1])

example4_image

إنشاء شكل مخصص بأركان منحنيه

هذا الكود بلغة البايثون يوضح لك كيفية إنشاء شكل مخصص بأركان منحنيه (داخلية):

import aspose.slides as slides
import aspose.pydrawing as draw

shapeX = 20
shapeY = 20
shapeWidth = 300
shapeHeight = 200

leftTopSize = 50
rightTopSize = 20
rightBottomSize = 40
leftBottomSize = 10

with slides.Presentation() as presentation:
    childShape = presentation.slides[0].shapes.add_auto_shape(
        slides.ShapeType.CUSTOM, shapeX, shapeY, shapeWidth, shapeHeight)

    geometryPath = slides.GeometryPath()

    point1 = draw.PointF(leftTopSize, 0)
    point2 = draw.PointF(shapeWidth - rightTopSize, 0)
    point3 = draw.PointF(shapeWidth, shapeHeight - rightBottomSize)
    point4 = draw.PointF(leftBottomSize, shapeHeight)
    point5 = draw.PointF(0, leftTopSize)

    geometryPath.move_to(point1)
    geometryPath.line_to(point2)
    geometryPath.arc_to(rightTopSize, rightTopSize, 180, -90)
    geometryPath.line_to(point3)
    geometryPath.arc_to(rightBottomSize, rightBottomSize, -90, -90)
    geometryPath.line_to(point4)
    geometryPath.arc_to(leftBottomSize, leftBottomSize, 0, -90)
    geometryPath.line_to(point5)
    geometryPath.arc_to(leftTopSize, leftTopSize, 90, -90)

    geometryPath.close_figure()

    childShape.set_geometry_path(geometryPath)

    presentation.save("output.pptx", slides.export.SaveFormat.PPTX)

تحويل GeometryPath إلى GraphicsPath (System.Drawing.Drawing2D)

  1. أنشئ مثيلًا من فئة GeometryShape .
  2. أنشئ مثيلًا من فئة GrpahicsPath من مساحة الاسم System.Drawing.Drawing2D.
  3. قم بتحويل مثيل GraphicsPath إلى مثيل GeometryPath باستخدام ShapeUtil.
  4. طبق المسارات على الشكل.

هذا الكود بلغة البايثون — وهو تطبيق للخطوات أعلاه — يوضح عملية تحويل GeometryPath إلى GraphicsPath:

import aspose.slides as slides
import aspose.pydrawing as draw

with slides.Presentation() as pres:
    shape = pres.slides[0].shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 300, 100)

    originalPath = shape.get_geometry_paths()[0]
    originalPath.fill_mode = slides.PathFillModeType.NONE

    gPath = draw.drawing2d.GraphicsPath()

    gPath.add_string("النص في الشكل", draw.FontFamily("Arial"), 1, 40, draw.PointF(10, 10), draw.StringFormat.generic_default)

    textPath = slides.util.ShapeUtil.graphics_path_to_geometry_path(gPath)
    textPath.fill_mode = slides.PathFillModeType.NORMAL

    shape.set_geometry_paths([originalPath, textPath])

example5_image