כיצד להחיל אפקטים תלת‑ממדיים וצללים על צורות

כיצד להחיל אפקטים תלת‑ממדיים וצללים על צורות

Aspose.Slides FOSS מספקת שני מערכות אפקטים עצמאיות על כל צורה:

  • shape.effect_format(): אפקטים חזותיים דו‑ממדיים: צל חיצוני, זוהר, טשטוש, קצה רך
  • shape.three_d_format(): מראה תלת‑ממדי: קצה משופע, פרספקטיבת מצלמה, מערכת תאורה, חומר, עומק

ניתן לשלב את שני המערכות על אותה הצורה.


דרישות קדם

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 .

הוסף צל נופל חיצוני

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

ערכי direction נפוצים: 0=ימין, 45=ימין-תחתון, 90=מטה, 180=שמאל, 270=למעלה, 315=שמאל-עליון.


הוסף אפקט זוהר

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

החל טשטוש גאוסי

#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 מרחיב את אזור הטשטוש מעבר לגבול הצורה; grow=false חותך את הטשטוש בתוך הצורה.


החל חיתוך תלת‑מימדי

#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 ערכים: CIRCLE, RELAXED_INSET, COOL_SLANT, DIVOT, RIBLET, HARD_EDGE, SLOPE, CONVEX


קצה משופע תלת‑ממדי עם מצלמה ומערכת תאורה

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

שילוב צל ו-3D Bevel

שתי מערכות האפקט יכולות להיות פעילות בו זמנית על אותה הצורה:

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

בדוק והסר אפקטים

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

ראה גם

 עברית