Trabalhando com Conectores — Aspose.Slides FOSS for C++
Conectores são formas que ligam visualmente duas outras formas com uma linha. Aspose.Slides FOSS for C++ suporta conectores dobrados, retos e curvos. Os pontos de conexão em uma forma são identificados por índices inteiros connection site indexes.
Índices de Site de Conexão
Cada forma expõe quatro pontos de conexão padrão:
| Índice | Lado |
|---|---|
0 | Superior |
1 | Esquerda |
2 | Inferior |
3 | Direita |
Adicionando um Conector Curvo Entre Duas Formas
#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;
}Tipos de Formas de Conector
| ShapeType | Description |
|---|---|
ShapeType::BENT_CONNECTOR3 | Duas dobras de 90 graus (mais comum para diagramas estilo fluxograma) |
ShapeType::BENT_CONNECTOR2 | Uma dobra de 90 graus |
ShapeType::BENT_CONNECTOR4 | Três dobras de 90 graus |
ShapeType::STRAIGHT_CONNECTOR1 | Linha reta direta |
ShapeType::CURVED_CONNECTOR2 | Curva suave única |
ShapeType::CURVED_CONNECTOR3 | Curva de duas dobras |
Conexão de cima para baixo
#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;
}Fluxograma com Múltiplos Conectores
#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;
}