3D Презентация

Общий обзор

Начиная с версии Aspose.Slides 20.9, стало возможным создавать и изменять 3D модели PowerPoint. Это можно сделать, добавив к 2D формам набор 3D эффектов. Создавая вид камеры на форме, вы можете поворачивать её по оси. Создайте экструдирование или глубину на форме, что преобразует форму из 2D в 3D модель. Установка светового эффекта на 3D форме или изменение материалов может сделать её более живой. Изменение цветов 3D моделей на градиент 3D, модификация контура форм, добавление фаски придаёт 3D модели большую объемность. Все 3D эффекты могут быть применены как к 3D моделям PowerPoint, так и к текстам.

Давайте рассмотрим первый пример создания 3D моделей, который включает все вышеупомянутые функции:

{
    using namespace Aspose::Slides;

    auto pres = System::MakeObject<Presentation>();
    auto slide = pres->get_Slide(0);
    auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 200.0f, 150.0f, 200.0f, 200.0f);
    shape->get_TextFrame()->set_Text(u"3D");
    shape->get_TextFrame()->get_Paragraphs()->idx_get(0)->get_ParagraphFormat()->get_DefaultPortionFormat()->set_FontHeight(64.0f);

    shape->get_ThreeDFormat()->get_Camera()->set_CameraType(CameraPresetType::OrthographicFront);
    shape->get_ThreeDFormat()->get_Camera()->SetRotation(20.0f, 30.0f, 40.0f);
    shape->get_ThreeDFormat()->get_LightRig()->set_LightType(LightRigPresetType::ThreePt);
    shape->get_ThreeDFormat()->get_LightRig()->set_Direction(LightingDirection::Top);
    shape->get_ThreeDFormat()->set_Material(MaterialPresetType::Matte);
    shape->get_ThreeDFormat()->set_ExtrusionHeight(100);
    shape->get_ThreeDFormat()->get_ExtrusionColor()->set_Color(System::Drawing::Color::get_Blue());

    slide->GetImage(2.0f, 2.0f)->Save(u"sample_3d.png");
    pres->Save(u"sandbox_3d.pptx", Export::SaveFormat::Pptx);
}

Полученная 3D модель PowerPoint:

todo:image_alt_text

3D Поворот

В PowerPoint вращение формы доступно через:

todo:image_alt_text

Чтобы повернуть 3D модели PowerPoint, необходимо создать вид камеры на форме. Это делается с помощью метода IThreeDFormat.get_Camera(). Метод вращения вызывается из класса камеры, как если бы вы вращали камеру. На самом деле, когда вы вращаете камеру относительно формы, вы вращаете форму на 3D плоскости.

{
    using namespace Aspose::Slides;

    auto slide = pres->get_Slide(0);
    auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 200.0f, 150.0f, 200.0f, 200.0f);
    shape->get_ThreeDFormat()->get_Camera()->SetRotation(20.0f, 30.0f, 40.0f);
    // ... установите другие параметры 3D сцены
    slide->GetImage(2, 2)->Save(u"sample_3d.png");
}

3D Глубина и Экструдирование

Чтобы добавить глубину и экструдирование для 3D модели PowerPoint, используйте метод IThreeDFormat.set_ExtrusionHeight(). Для изменения цвета экструдирования используйте метод IThreeDFormat.get_ExtrusionColor():

{
    using namespace Aspose::Slides;

    auto slide = pres->get_Slide(0);
    auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 200.0f, 150.0f, 200.0f, 200.0f);
    shape->get_ThreeDFormat()->get_Camera()->SetRotation(20.0f, 30.0f, 40.0f);
    shape->get_ThreeDFormat()->set_ExtrusionHeight(100.0);
    shape->get_ThreeDFormat()->get_ExtrusionColor()->set_Color(System::Drawing::Color::get_Purple());
    // ... установите другие параметры 3D сцены
    slide->GetImage(2, 2)->Save(u"sample_3d.png");
}

Меню глубины в PowerPoint:

todo:image_alt_text

3D Градиент

Рисование 3D градиента на 3D модели PowerPoint можно выполнить через Shape.get_FillFormat().get_GradientFormat() метод:

{
    using namespace Aspose::Slides;

    auto slide = pres->get_Slide(0);
    auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 200.0f, 150.0f, 250.0f, 250.0f);
    shape->get_TextFrame()->set_Text(u"3D Gradient");
    shape->get_TextFrame()->get_Paragraph(0)->get_ParagraphFormat()->get_DefaultPortionFormat()->set_FontHeight(64.0f);

    shape->get_FillFormat()->set_FillType(FillType::Gradient);
    shape->get_FillFormat()->get_GradientFormat()->get_GradientStops()->Add(0, System::Drawing::Color::get_Blue());
    shape->get_FillFormat()->get_GradientFormat()->get_GradientStops()->Add(100.0f, System::Drawing::Color::get_Orange());

    shape->get_ThreeDFormat()->get_Camera()->set_CameraType(CameraPresetType::OrthographicFront);
    shape->get_ThreeDFormat()->get_Camera()->SetRotation(10.0f, 20.0f, 30.0f);
    shape->get_ThreeDFormat()->get_LightRig()->set_LightType(LightRigPresetType::Flat);
    shape->get_ThreeDFormat()->get_LightRig()->set_Direction(LightingDirection::Top);
    shape->get_ThreeDFormat()->set_ExtrusionHeight(150.0);
    shape->get_ThreeDFormat()->get_ExtrusionColor()->set_Color(System::Drawing::Color::get_DarkOrange());

    slide->GetImage(2, 2)->Save(u"sample_3d.png");
}

3D модель с 3D градиентом:

todo:image_alt_text

Чтобы создать градиент изображения, используйте Shape.get_FillFormat().get_PictureFillFormat() метод:

{
    using namespace Aspose::Slides;

    shape->get_FillFormat()->set_FillType(FillType::Picture);
    shape->get_FillFormat()->get_PictureFillFormat()->get_Picture()->set_Image(pres->get_Images()->AddImage(System::IO::File::ReadAllBytes(u"image.jpg")));
    shape->get_FillFormat()->get_PictureFillFormat()->set_PictureFillMode(PictureFillMode::Stretch);
    // .. настройка 3D: Камера, LightRig, Экструдирование
    pres->get_Slide(0)->GetImage(2, 2)->Save(u"sample_3d.png");
}
    

3D модель с градиентом изображения:

todo:image_alt_text

3D Текст (WordArt)

Чтобы применить вращение, экструзию, свет, градиент к тексту и сделать его 3D текстом (WordArt), вам необходимо получить доступ к методу IAutoShape.get_TextFrame().get_TextFrameFormat().get_ThreeDFormat():

{
    using namespace Aspose::Slides;
    using namespace Aspose::Slides::Export;

    auto slide = pres->get_Slide(0);
    auto shape = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 200.0f, 150.0f, 250.0f, 250.0f);

    shape->get_FillFormat()->set_FillType(FillType::NoFill);
    shape->get_LineFormat()->get_FillFormat()->set_FillType(FillType::NoFill);
    shape->get_TextFrame()->set_Text(u"3D Text");

    auto portion = shape->get_TextFrame()->get_Paragraph(0)->get_Portion(0);
    portion->get_PortionFormat()->get_FillFormat()->set_FillType(FillType::Pattern);
    portion->get_PortionFormat()->get_FillFormat()->get_PatternFormat()->get_ForeColor()->set_Color(System::Drawing::Color::get_DarkOrange());
    portion->get_PortionFormat()->get_FillFormat()->get_PatternFormat()->get_BackColor()->set_Color(System::Drawing::Color::get_White());
    portion->get_PortionFormat()->get_FillFormat()->get_PatternFormat()->set_PatternStyle(PatternStyle::LargeGrid);

    shape->get_TextFrame()->get_Paragraph(0)->get_ParagraphFormat()->get_DefaultPortionFormat()->set_FontHeight(128.0f);

    auto textFrame = shape->get_TextFrame();
    // настройка эффекта "Арка вверх" WordArt
    textFrame->get_TextFrameFormat()->set_Transform(TextShapeType::ArchUp);

    textFrame->get_TextFrameFormat()->get_ThreeDFormat()->set_ExtrusionHeight(3.5);
    textFrame->get_TextFrameFormat()->get_ThreeDFormat()->set_Depth(3.0);
    textFrame->get_TextFrameFormat()->get_ThreeDFormat()->set_Material(MaterialPresetType::Plastic);
    textFrame->get_TextFrameFormat()->get_ThreeDFormat()->get_LightRig()->set_Direction(LightingDirection::Top);
    textFrame->get_TextFrameFormat()->get_ThreeDFormat()->get_LightRig()->set_LightType(LightRigPresetType::Balanced);
    textFrame->get_TextFrameFormat()->get_ThreeDFormat()->get_LightRig()->SetRotation(0.0f, 0.0f, 40.0f);

    textFrame->get_TextFrameFormat()->get_ThreeDFormat()->get_Camera()->set_CameraType(CameraPresetType::PerspectiveContrastingRightFacing);

    pres->get_Slide(0)->GetImage(2, 2)->Save(u"text3d.png");
    pres->Save(u"text3d.pptx", SaveFormat::Pptx);
}

Пример 3D текста (WordArt):

todo:image_alt_text

Не поддерживается - Скоро

Следующие функции 3D PowerPoint еще не поддерживаются:

  • Фаска
  • Материал
  • Контур
  • Освещение

Мы продолжаем улучшать наш 3D движок, и эти функции являются предметом дальнейшей реализации.