使用连接器 — Aspose.Slides FOSS for C++

连接器是通过线条在视觉上链接两个其他形状的形状。Aspose.Slides FOSS for C++ 支持弯曲、直线和曲线连接器。形状上的连接点通过整数 connection site indexes 进行标识。


连接站点索引

每个形状公开四个标准连接点:

索引侧面
0顶部
1左侧
2底部
3右侧

在两个形状之间添加弯曲连接线

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

连接器形状类型

ShapeType描述
ShapeType::BENT_CONNECTOR3两个 90 度弯(流程图样式图表中最常见)
ShapeType::BENT_CONNECTOR2一个 90 度弯
ShapeType::BENT_CONNECTOR4三个 90 度弯
ShapeType::STRAIGHT_CONNECTOR1直接直线
ShapeType::CURVED_CONNECTOR2单个平滑曲线
ShapeType::CURVED_CONNECTOR3双弯曲线

从上到下的连接

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

带有多个连接器的流程图

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

另请参见

 中文