Пользовательская Форма
Изменение Форма с Использованием Точек Редактирования
Рассмотрим квадрат. В PowerPoint с помощью точек редактирования вы можете
- переместить угол квадрата внутрь или наружу
- указать кривизну для угла или точки
- добавить новые точки в квадрат
- манипулировать точками на квадрате и т.д.
По сути, вы можете выполнять описанные задачи с любой формой. Используя точки редактирования, вы можете изменить форму или создать новую форму на основе существующей.
Советы по Редактированию Форм
Прежде чем начать редактировать формы PowerPoint с помощью точек редактирования, вы можете учесть следующие моменты о формах:
- Форма (или ее контур) может быть закрытой или открытой.
- Когда форма закрыта, у нее нет начальной или конечной точки. Когда форма открыта, у нее есть начало и конец.
- Все формы состоят как минимум из 2 якорных точек, связанных друг с другом линиями.
- Линия может быть либо прямой, либо изогнутой. Якорные точки определяют характер линии.
- Якорные точки могут быть угловыми, прямыми или гладкими:
- Угловая точка — это точка, где соединяются 2 прямые линии под углом.
- Гладкая точка — это точка, где 2 ручки находятся в прямой линии, а отрезки линии соединяются в плавной кривой. В этом случае все ручки отделены от якорной точки на равное расстояние.
- Прямая точка — это точка, где 2 ручки находятся в прямой линии, и отрезки этой линии соединяются в плавной кривой. В этом случае ручки не обязательно должны быть отделены от якорной точки на равное расстояние.
- Перемещая или редактируя якорные точки (что изменяет угол линий), вы можете изменить внешний вид формы.
Чтобы редактировать формы PowerPoint с помощью точек редактирования, Aspose.Slides предоставляет класс GeometryPath и интерфейс IGeometryPath.
- Экземпляр GeometryPath представляет собой геометрический путь объекта IGeometryShape.
- Чтобы получить
GeometryPath
из экземпляраIGeometryShape
, вы можете использовать метод IGeometryShape.getGeometryPaths. - Чтобы установить
GeometryPath
для формы, вы можете использовать эти методы: IGeometryShape.setGeometryPath для сплошных форм и IGeometryShape.setGeometryPaths для составных форм. - Чтобы добавить сегменты, вы можете использовать методы из IGeometryPath.
- Используя методы IGeometryPath.setStroke и IGeometryPath.setFillMode, вы можете установить внешний вид для геометрического пути.
- Используя метод IGeometryPath.getPathData, вы можете получить геометрический путь формы
GeometryShape
в виде массива сегментов пути. - Чтобы получить доступ к дополнительным параметрам настройки геометрии формы, вы можете преобразовать GeometryPath в java.awt.Shape.
- Используйте методы geometryPathToGraphicsPath и graphicsPathToGeometryPath (из класса ShapeUtil) для двунаправленного преобразования GeometryPath и java.awt.Shape.
Простые Операции Редактирования
Этот PHP код показывает, как
Добавить линию в конец пути
Добавить линию в указанную позицию на пути:
Добавить кубическую кривую Безье в конец пути:
Добавить кубическую кривую Безье в указанную позицию на пути:
Добавить квадратичную кривую Безье в конец пути:
Добавить квадратичную кривую Безье в указанную позицию на пути:
Добавить заданный дугу к пути:
Закрыть текущую фигуру пути:
Установить позицию для следующей точки:
Удалить сегмент пути по данному индексу:
Добавление Пользовательских Точек к Фоме
- Создайте экземпляр класса GeometryShape и установите тип ShapeType::Rectangle.
- Получите экземпляр класса GeometryPath из формы.
- Добавьте новую точку между двумя верхними точками на пути.
- Добавьте новую точку между двумя нижними точками на пути.
- Примените путь к форме.
Этот 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();
}
}
Удаление Точек Из Фомы
- Создайте экземпляр класса GeometryShape и установите тип ShapeType::Heart.
- Получите экземпляр класса GeometryPath из формы.
- Удалите сегмент для пути.
- Примените путь к форме.
Этот 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();
}
}
Создание Пользовательской Формы
- Рассчитайте точки для формы.
- Создайте экземпляр класса GeometryPath.
- Заполните путь точками.
- Создайте экземпляр класса GeometryShape.
- Примените путь к форме.
Этот 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();
}
}
Создание Составной Пользовательской Формы
- Создайте экземпляр класса GeometryShape.
- Создайте первый экземпляр класса GeometryPath.
- Создайте второй экземпляр класса GeometryPath.
- Примените пути к форме.
Этот 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();
}
}
Создание Пользовательской Формы С Закруглёнными Углами
Этот 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
- Создайте экземпляр класса GeometryShape.
- Создайте экземпляр класса java.awt.Shape.
- Преобразуйте экземпляр java.awt.Shape в экземпляр GeometryPath с использованием ShapeUtil.
- Примените пути к форме.
Этот 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();
}
}