الشكل المخصص

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

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

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

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

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

overview_image

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

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

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

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

يظهر لك هذا الكود PHP كيفية

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


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


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


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


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


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


إلحاق قوس معين إلى مسار:


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


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


إزالة مقطع المسار عند فهرس معين:


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

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

يظهر لك هذا الكود PHP كيفية إضافة نقاط مخصصة إلى شكل:

  $pres = new Presentation();
  try {
    $shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 200, 100);
    $geometryPath = $shape->getGeometryPaths()[0];
    $geometryPath->lineTo(100, 50, 1);
    $geometryPath->lineTo(100, 50, 4);
    $shape->setGeometryPath($geometryPath);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

example1_image

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

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

يظهر لك هذا الكود PHP كيفية إزالة النقاط من شكل:

  $pres = new Presentation();
  try {
    $shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Heart, 100, 100, 300, 300);
    $path = $shape->getGeometryPaths()[0];
    $path->removeAt(2);
    $shape->setGeometryPath($path);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

example2_image

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

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

يظهر لك هذا الكود Java كيفية إنشاء شكل مخصص:

  $points = new Java("java.util.ArrayList");
  $R = 100;
  $r = 50;
  $step = 72;
  for($angle = -90; $angle < 270; $angle += $step) {
    $radians = $angle * java("java.lang.Math")->PI / 180.0;
    $x = $R * java("java.lang.Math")->cos($radians);
    $y = $R * java("java.lang.Math")->sin($radians);
    $points->add(new Point2DFloat($x + $R, $y + $R));
    $radians = java("java.lang.Math")->PI * $angle . $step / 2 / 180.0;
    $x = $r * java("java.lang.Math")->cos($radians);
    $y = $r * java("java.lang.Math")->sin($radians);
    $points->add(new Point2DFloat($x + $R, $y + $R));
  }
  $starPath = new GeometryPath();
  $starPath->moveTo($points->get(0));
  for($i = 1; $i < java_values($points->size()) ; $i++) {
    $starPath->lineTo($points->get($i));
  }
  $starPath->closeFigure();
  $pres = new Presentation();
  try {
    $shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, $R * 2, $R * 2);
    $shape->setGeometryPath($starPath);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

example3_image

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

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

يظهر لك هذا الكود PHP كيفية إنشاء شكل مركب مخصص:

  $pres = new Presentation();
  try {
    $shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 200, 100);
    $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();
    $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(array($geometryPath0, $geometryPath1 ));
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

example4_image

إنشاء شكل مخصص مع زوايا منحنية

يظهر لك هذا الكود PHP كيفية إنشاء شكل مخصص مع زوايا منحنية (للداخل):

  $shapeX = 20.0;
  $shapeY = 20.0;
  $shapeWidth = 300.0;
  $shapeHeight = 200.0;
  $leftTopSize = 50.0;
  $rightTopSize = 20.0;
  $rightBottomSize = 40.0;
  $leftBottomSize = 10.0;
  $pres = new Presentation();
  try {
    $childShape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Custom, $shapeX, $shapeY, $shapeWidth, $shapeHeight);
    $geometryPath = new GeometryPath();
    $point1 = new Point2DFloat($leftTopSize, 0);
    $point2 = new Point2DFloat($shapeWidth - $rightTopSize, 0);
    $point3 = new Point2DFloat($shapeWidth, $shapeHeight - $rightBottomSize);
    $point4 = new Point2DFloat($leftBottomSize, $shapeHeight);
    $point5 = new Point2DFloat(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 (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

تحويل GeometryPath إلى java.awt.Shape

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

يوضح هذا الكود PHP - والذي يمثل تنفيذ الخطوات أعلاه - عملية تحويل GeometryPath إلى GraphicsPath:

  $pres = new Presentation();
  try {
    # إنشاء شكل جديد
    $shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 300, 100);
    # الحصول على المسار الهندسي للشكل
    $originalPath = $shape->getGeometryPaths()[0];
    $originalPath->setFillMode(PathFillModeType::None);
    # إنشاء مسار رسومي جديد مع نص
    $graphicsPath;
    $font = new Font("Arial", Font->PLAIN, 40);
    $text = "نص في الشكل";
    $img = new BufferedImage(100, 100, BufferedImage->TYPE_INT_ARGB);
    $g2 = $img->createGraphics();
    try {
      $glyphVector = $font->createGlyphVector($g2->getFontRenderContext(), $text);
      $graphicsPath = $glyphVector->getOutline(20.0, -$glyphVector->getVisualBounds()->getY() + 10);
    } finally {
      $g2->dispose();
    }
    # تحويل المسار الرسومي إلى مسار هندسي
    $textPath = ShapeUtil->graphicsPathToGeometryPath($graphicsPath);
    $textPath->setFillMode(PathFillModeType::Normal);
    # تعيين مجموعة من المسار الهندسي الجديد والمسار الهندسي الأصلي إلى الشكل
    $shape->setGeometryPaths(array($originalPath, $textPath ));
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

example5_image