Wie man 3D‑Effekte und Schatten auf Formen anwendet

Wie man 3D‑Effekte und Schatten auf Formen anwendet

Aspose.Slides FOSS bietet für jede Form zwei unabhängige Effekt‑Systeme:

  • shape.effect_format(): 2D-Visuelle Effekte: äußerer Schatten, Leuchten, Unschärfe, weiche Kante
  • shape.three_d_format(): 3D-Darstellung: Abschrägung, Kameraperspektive, Lichtanlage, Material, Tiefe

Beide Systeme können auf derselben Form kombiniert werden.


Voraussetzungen

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 .

Äußeren Schlagschatten hinzufügen

#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;
}

Gemeinsame direction Werte: 0=rechts, 45=unten-rechts, 90=unten, 180=links, 270=oben, 315=oben-links.


Füge einen Glow‑Effekt hinzu

#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;
}

Gaussian‑Blur anwenden

#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 erweitert den Unschärfebereich über die Formgrenze hinaus; grow=false schneidet die Unschärfe innerhalb der Form ab.


3D‑Fase anwenden

#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 Werte: CIRCLE, RELAXED_INSET, COOL_SLANT, DIVOT, RIBLET, HARD_EDGE, SLOPE, CONVEX


3D-Fase mit Kamera- und Lichtanlage

#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;
}

Schatten und 3D-Bevel kombinieren

Beide Effekt‑Systeme können gleichzeitig auf derselben Form aktiv sein:

#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;
}

Überprüfen und Effekte entfernen

#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;
}

Siehe auch

 Deutsch