Travailler avec les connecteurs — Aspose.Slides FOSS pour C++

Les connecteurs sont des formes qui relient visuellement deux autres formes par une ligne. Aspose.Slides FOSS pour C++ prend en charge les connecteurs coudés, droits et courbes. Les points de connexion sur une forme sont identifiés par un entier index des sites de connexion.


Index d’emplacements de connexion

Chaque forme expose quatre emplacements de connexion standard :

IndexCôté
0Haut
1Gauche
2Bas
3Droite

Ajout d’un connecteur coudé entre deux formes

#include <Aspose/Slides/Foss/auto_shape.h>
#include <Aspose/Slides/Foss/connector.h>
#include <Aspose/Slides/Foss/export/save_format.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>
#include <Aspose/Slides/Foss/text_frame.h>

using namespace Aspose::Slides::Foss;

int main() {
    Presentation pres;
    auto& slide = pres.slides()[0];

    // Create two shapes to connect
    auto& box1 = slide.shapes().add_auto_shape(ShapeType::RECTANGLE, 50, 150, 150, 60);
    box1.text_frame()->set_text("Start");

    auto& box2 = slide.shapes().add_auto_shape(ShapeType::RECTANGLE, 400, 150, 150, 60);
    box2.text_frame()->set_text("End");

    // Add a bent connector (position/size are ignored once connected)
    auto& conn = slide.shapes().add_connector(ShapeType::BENT_CONNECTOR3, 0, 0, 10, 10);

    // Connect right side of box1 -> left side of box2
    conn.set_start_shape_connected_to(&box1);
    conn.set_start_shape_connection_site_index(3);   // right
    conn.set_end_shape_connected_to(&box2);
    conn.set_end_shape_connection_site_index(1);     // left

    pres.save("connector.pptx", SaveFormat::PPTX);
    return 0;
}

Types de formes de connecteur

ShapeTypeDescription
ShapeType::BENT_CONNECTOR3Deux coudes de 90 degrés (les plus courants pour les diagrammes de type organigramme)
ShapeType::BENT_CONNECTOR2Un coude de 90 degrés
ShapeType::BENT_CONNECTOR4Trois coudes à 90 degrés
ShapeType::STRAIGHT_CONNECTOR1Ligne droite directe
ShapeType::CURVED_CONNECTOR2Courbe lisse unique
ShapeType::CURVED_CONNECTOR3Courbe à double coude

Connexion de haut en bas

#include <Aspose/Slides/Foss/auto_shape.h>
#include <Aspose/Slides/Foss/connector.h>
#include <Aspose/Slides/Foss/export/save_format.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>
#include <Aspose/Slides/Foss/text_frame.h>

using namespace Aspose::Slides::Foss;

int main() {
    Presentation pres;
    auto& slide = pres.slides()[0];

    auto& top = slide.shapes().add_auto_shape(ShapeType::RECTANGLE, 250, 80, 200, 60);
    top.text_frame()->set_text("Decision");

    auto& bottom = slide.shapes().add_auto_shape(ShapeType::RECTANGLE, 250, 300, 200, 60);
    bottom.text_frame()->set_text("Action");

    auto& conn = slide.shapes().add_connector(ShapeType::BENT_CONNECTOR3, 0, 0, 10, 10);
    conn.set_start_shape_connected_to(&top);
    conn.set_start_shape_connection_site_index(2);    // bottom of top box
    conn.set_end_shape_connected_to(&bottom);
    conn.set_end_shape_connection_site_index(0);      // top of bottom box

    pres.save("vertical-connector.pptx", SaveFormat::PPTX);
    return 0;
}

Organigramme avec plusieurs connecteurs

#include <Aspose/Slides/Foss/auto_shape.h>
#include <Aspose/Slides/Foss/connector.h>
#include <Aspose/Slides/Foss/export/save_format.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>
#include <Aspose/Slides/Foss/text_frame.h>

#include <string>

using namespace Aspose::Slides::Foss;

AutoShape& add_box(Slide& slide, const std::string& text, double x, double y,
                   double w = 160, double h = 50) {
    auto& s = slide.shapes().add_auto_shape(ShapeType::RECTANGLE, x, y, w, h);
    s.text_frame()->set_text(text);
    return s;
}

void connect(Slide& slide, Shape& s1, int site1, Shape& s2, int site2) {
    auto& conn = slide.shapes().add_connector(ShapeType::BENT_CONNECTOR3, 0, 0, 10, 10);
    conn.set_start_shape_connected_to(&s1);
    conn.set_start_shape_connection_site_index(site1);
    conn.set_end_shape_connected_to(&s2);
    conn.set_end_shape_connection_site_index(site2);
}

int main() {
    Presentation pres;
    auto& slide = pres.slides()[0];

    auto& start = add_box(slide, "Start", 260, 60);
    auto& process = add_box(slide, "Process Data", 260, 180);
    auto& end = add_box(slide, "End", 260, 300);

    connect(slide, start, 2, process, 0);    // start -> process (bottom to top)
    connect(slide, process, 2, end, 0);      // process -> end (bottom to top)

    pres.save("flowchart.pptx", SaveFormat::PPTX);
    return 0;
}

Voir aussi

 Français