使用连接器 — 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;
}