Kaip C++ programoje sujungti figūras su jungtukais
Jungikliai „Aspose.Slides FOSS“ yra linijinės figūros, kurios prisijungia prie connection sites kitų figūrų. Kai perkate sujungtą figūrą, jungiklio galutinis taškas juda kartu su ja. Dažniausiai naudojamas jungiklio tipas yra BENT_CONNECTOR3, kuris aplengia kliūtis vienu alkūnės posūkiu.
Būtinosios sąlygos
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 .Prisijungimo vietų indeksai
Kiekviena figūra turi keturis numeruotus jungimo taškus:
| Indeksas | Pozicija |
|---|---|
0 | Viršuje centre |
1 | Kairėje centre |
2 | Apačioje centre |
3 | Dešinėje centre |
Sujunkite dvi formas
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
// Add two rectangles
auto& box1 = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 200, 200, 100);
auto& box2 = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 450, 200, 200, 100);
box1.text_frame()->set_text("Start");
box2.text_frame()->set_text("End");
// Add a bent connector (initial bounds are overwritten by the connection)
auto& conn = slide.shapes().add_connector(
asf::ShapeType::BENT_CONNECTOR3, 0, 0, 10, 10);
// Connect right side of box1 (site 3) to left side of box2 (site 1)
conn.set_start_shape_connected_to(&box1);
conn.set_start_shape_connection_site_index(3);
conn.set_end_shape_connected_to(&box2);
conn.set_end_shape_connection_site_index(1);
prs.save("connected.pptx", asf::SaveFormat::PPTX);
return 0;
}Vietos žymeklio ribos (0, 0, 10, 10), perduotos add_connector, yra ignoruojamos, kai nustatomi ryšio galiniai taškai; PowerPoint peradresuoja jungiklį į prijungtus objektus.
Jungčių tipai
namespace asf = Aspose::Slides::Foss;
// Straight line
asf::ShapeType::STRAIGHT_CONNECTOR1;
// Single elbow (L-shape)
asf::ShapeType::BENT_CONNECTOR2;
// Double elbow (Z-shape): most common
asf::ShapeType::BENT_CONNECTOR3;
// Curved connector
asf::ShapeType::CURVED_CONNECTOR3;Stilizuoti jungties liniją
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
auto& box1 = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 50, 150, 180, 80);
auto& box2 = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 500, 300, 180, 80);
auto& conn = slide.shapes().add_connector(
asf::ShapeType::BENT_CONNECTOR3, 0, 0, 10, 10);
conn.set_start_shape_connected_to(&box1);
conn.set_start_shape_connection_site_index(2); // bottom of box1
conn.set_end_shape_connected_to(&box2);
conn.set_end_shape_connection_site_index(0); // top of box2
// Style: dashed blue line, 2 pt width
auto& lf = conn.line_format();
lf.set_width(2.0);
lf.fill_format().solid_fill_color().set_color(asf::Color::blue);
lf.set_dash_style(asf::LineDashStyle::DASH);
prs.save("styled-connector.pptx", asf::SaveFormat::PPTX);
return 0;
}Srauto diagrama su keliais jungikliais
#include <Aspose/Slides/Foss/presentation.h>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
// Three-step flowchart
auto& step1 = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 350, 50, 200, 70);
auto& step2 = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 350, 220, 200, 70);
auto& step3 = slide.shapes().add_auto_shape(
asf::ShapeType::RECTANGLE, 350, 390, 200, 70);
step1.text_frame()->set_text("Step 1");
step2.text_frame()->set_text("Step 2");
step3.text_frame()->set_text("Step 3");
auto connect_vertical = [&](auto& top_shape, auto& bottom_shape) {
auto& c = slide.shapes().add_connector(
asf::ShapeType::BENT_CONNECTOR3, 0, 0, 10, 10);
c.set_start_shape_connected_to(&top_shape);
c.set_start_shape_connection_site_index(2); // bottom
c.set_end_shape_connected_to(&bottom_shape);
c.set_end_shape_connection_site_index(0); // top
};
connect_vertical(step1, step2);
connect_vertical(step2, step3);
prs.save("flowchart.pptx", asf::SaveFormat::PPTX);
return 0;
}Skaityti jungiklio savybes
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("connected.pptx");
for (size_t i = 0; i < prs.slides()[0].shapes().size(); ++i) {
auto& shape = prs.slides()[0].shapes()[i];
if (shape.is_connector()) {
auto& connector = static_cast<asf::Connector&>(shape);
std::cout << "Connector found\n";
}
}
return 0;
}