Jak zastosować efekty 3D i cienie do kształtów
Aspose.Slides FOSS zapewnia dwa niezależne systemy efektów na każdym kształcie:
shape.effect_format(): efekty wizualne 2D: zewnętrzny cień, poświata, rozmycie, miękka krawędźshape.three_d_format(): wygląd 3D: fazowanie, perspektywa kamery, system oświetlenia, materiał, głębia
Oba systemy mogą być połączone na tym samym kształcie.
Wymagania wstępne
git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .Dodaj zewnętrzny cień
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& shape = prs.slides()[0].shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 100, 100, 300, 120);
shape.text_frame()->set_text("Shadowed Shape");
auto& ef = shape.effect_format();
ef.enable_outer_shadow_effect();
auto* shadow = ef.outer_shadow_effect();
shadow->set_blur_radius(10); // softness in points
shadow->set_direction(315); // 315 deg = upper-left
shadow->set_distance(8); // offset in points
shadow->shadow_color().set_color(
asf::Color::from_argb(128, 0, 0, 0));
prs.save("shadow.pptx", asf::SaveFormat::PPTX);
return 0;
}Wspólne direction wartości: 0=prawo, 45=dolny-prawy, 90=dół, 180=lewo, 270=góra, 315=górny-lewy.
Dodaj efekt poświaty
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& shape = prs.slides()[0].shapes().add_auto_shape(
asf::ShapeType::ELLIPSE, 150, 100, 250, 250);
auto& ef = shape.effect_format();
ef.enable_glow_effect();
auto* glow = ef.glow_effect();
glow->set_radius(20);
glow->color().set_color(asf::Color::gold);
prs.save("glow.pptx", asf::SaveFormat::PPTX);
return 0;
}Zastosuj rozmycie Gaussa
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& shape = prs.slides()[0].shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 100, 100, 350, 180);
shape.effect_format().set_blur_effect(10, true);
prs.save("blur.pptx", asf::SaveFormat::PPTX);
return 0;
}grow=true rozszerza obszar rozmycia poza granicę kształtu; grow=false przycina rozmycie wewnątrz kształtu.
Zastosuj 3D fazowanie
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& shape = prs.slides()[0].shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 150, 150, 280, 120);
shape.text_frame()->set_text("3D Button");
auto& tdf = shape.three_d_format();
tdf.bevel_top().set_bevel_type(asf::BevelPresetType::CIRCLE);
tdf.bevel_top().set_width(12);
tdf.bevel_top().set_height(6);
prs.save("bevel.pptx", asf::SaveFormat::PPTX);
return 0;
}BevelPresetType wartości: CIRCLE, RELAXED_INSET, COOL_SLANT, DIVOT, RIBLET, HARD_EDGE, SLOPE, CONVEX
3D Bevel z kamerą i zestawem oświetlenia
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& shape = prs.slides()[0].shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 150, 150, 280, 120);
shape.text_frame()->set_text("Metal Button");
auto& tdf = shape.three_d_format();
tdf.bevel_top().set_bevel_type(asf::BevelPresetType::CIRCLE);
tdf.bevel_top().set_width(10);
tdf.bevel_top().set_height(5);
tdf.camera().set_camera_type(asf::CameraPresetType::PERSPECTIVE_ABOVE);
tdf.light_rig().set_light_type(asf::LightRigPresetType::BALANCED);
tdf.light_rig().set_direction(asf::LightingDirection::TOP);
tdf.set_material(asf::MaterialPresetType::METAL);
tdf.set_depth(20);
prs.save("3d-metal.pptx", asf::SaveFormat::PPTX);
return 0;
}Połącz cień i 3D Bevel
Oba systemy efektów mogą być aktywne jednocześnie na tym samym kształcie:
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& shape = prs.slides()[0].shapes().add_auto_shape(
asf::ShapeType::ROUND_CORNER_RECTANGLE, 150, 150, 320, 130);
shape.text_frame()->set_text("Premium Card");
// Solid fill
shape.fill_format().set_fill_type(asf::FillType::SOLID);
shape.fill_format().solid_fill_color().set_color(
asf::Color::from_argb(255, 30, 80, 180));
// 3D bevel
auto& tdf = shape.three_d_format();
tdf.bevel_top().set_bevel_type(asf::BevelPresetType::CIRCLE);
tdf.bevel_top().set_width(8);
tdf.camera().set_camera_type(asf::CameraPresetType::PERSPECTIVE_ABOVE);
tdf.set_material(asf::MaterialPresetType::PLASTIC);
// Drop shadow
auto& ef = shape.effect_format();
ef.enable_outer_shadow_effect();
auto* shadow2 = ef.outer_shadow_effect();
shadow2->set_blur_radius(12);
shadow2->set_direction(270);
shadow2->set_distance(6);
shadow2->shadow_color().set_color(
asf::Color::from_argb(80, 0, 0, 0));
prs.save("premium-card.pptx", asf::SaveFormat::PPTX);
return 0;
}Sprawdź i usuń efekty
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& shape = prs.slides()[0].shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 100, 100, 200, 100);
auto& ef = shape.effect_format();
ef.enable_outer_shadow_effect();
ef.enable_glow_effect();
std::cout << "Has effects: " << !ef.is_no_effects() << "\n"; // 1
ef.disable_outer_shadow_effect();
ef.disable_glow_effect();
std::cout << "Has effects: " << !ef.is_no_effects() << "\n"; // 0
return 0;
}