Jak połączyć kształty za pomocą łączników w Javie

Jak połączyć kształty za pomocą łączników w Javie

Łączniki w Aspose.Slides FOSS to kształty linii, które przyczepiają się do punktów połączeń na innych kształtach. Gdy przesuwasz połączony kształt, punkt końcowy łącznika przemieszcza się wraz z nim. Najbardziej powszechnym typem łącznika jest BENT_CONNECTOR3, który omija przeszkody za pomocą jednego zgięcia łokciowego.


Wymagania wstępne

<dependency>
  <groupId>org.aspose.slides.foss</groupId>
  <artifactId>aspose-slides-foss</artifactId>
  <version>1.0.0</version>
</dependency>

Indeksy miejsc połączeń

Każdy kształt ma cztery ponumerowane miejsca połączeń:

IndexPozycja
0Górny środek
1Lewy środek
2Dolny środek
3Prawy środek

Połącz dwa kształty

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IShape;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ILineFormat;
import org.aspose.slides.foss.Connector;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);

    // Add two rectangles
    IAutoShape box1 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 200, 200, 100
    );
    IAutoShape box2 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 450, 200, 200, 100
    );

    box1.addTextFrame("Start");
    box2.addTextFrame("End");

    // Add a bent connector (initial bounds are overwritten by the connection)
    IConnector conn = slide.getShapes().addConnector(
        ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
    );

    // Connect right side of box1 (site 3) to left side of box2 (site 1)
    conn.setStartShapeConnectedTo(box1);
    conn.setStartShapeConnectionSiteIndex(3);
    conn.setEndShapeConnectedTo(box2);
    conn.setEndShapeConnectionSiteIndex(1);

    prs.save("connected.pptx", SaveFormat.PPTX);
}

Granice placeholdera (0, 0, 10, 10) przekazane do addConnector są ignorowane po ustawieniu punktów końcowych połączenia; PowerPoint przekierowuje łącznik do dołączonych kształtów.


Typy złączy

import org.aspose.slides.foss.ShapeType;

// Straight line
ShapeType.STRAIGHT_CONNECTOR1

// Single elbow (L-shape)
ShapeType.BENT_CONNECTOR2

// Double elbow (Z-shape): most common
ShapeType.BENT_CONNECTOR3

// Curved connector
ShapeType.CURVED_CONNECTOR3

Stylizuj linię łącznika

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IShape;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ILineFormat;
import org.aspose.slides.foss.Connector;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);

    IAutoShape box1 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 150, 180, 80
    );
    IAutoShape box2 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 500, 300, 180, 80
    );

    IConnector conn = slide.getShapes().addConnector(
        ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
    );
    conn.setStartShapeConnectedTo(box1);
    conn.setStartShapeConnectionSiteIndex(2);   // bottom of box1
    conn.setEndShapeConnectedTo(box2);
    conn.setEndShapeConnectionSiteIndex(0);     // top of box2

    // Style: 2 pt width, blue color
    ILineFormat lf = conn.getLineFormat();
    lf.setWidth(2.0);
    lf.getFillFormat().getSolidFillColor().setColor(
        Color.fromArgb(255, 0, 0, 255)
    );

    prs.save("styled-connector.pptx", SaveFormat.PPTX);
}

Diagram przepływu z wieloma łącznikami

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IShape;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ILineFormat;
import org.aspose.slides.foss.Connector;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);

    // Three-step flowchart
    IAutoShape step1 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 350, 50, 200, 70
    );
    IAutoShape step2 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 350, 220, 200, 70
    );
    IAutoShape step3 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 350, 390, 200, 70
    );

    step1.addTextFrame("Step 1");
    step2.addTextFrame("Step 2");
    step3.addTextFrame("Step 3");

    // Connect step1 -> step2
    IConnector conn1 = slide.getShapes().addConnector(
        ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
    );
    conn1.setStartShapeConnectedTo(step1);
    conn1.setStartShapeConnectionSiteIndex(2);   // bottom
    conn1.setEndShapeConnectedTo(step2);
    conn1.setEndShapeConnectionSiteIndex(0);     // top

    // Connect step2 -> step3
    IConnector conn2 = slide.getShapes().addConnector(
        ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
    );
    conn2.setStartShapeConnectedTo(step2);
    conn2.setStartShapeConnectionSiteIndex(2);
    conn2.setEndShapeConnectedTo(step3);
    conn2.setEndShapeConnectionSiteIndex(0);

    prs.save("flowchart.pptx", SaveFormat.PPTX);
}

Odczytaj właściwości łącznika

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IShape;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ILineFormat;
import org.aspose.slides.foss.Connector;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

try (Presentation prs = new Presentation("connected.pptx")) {
    for (IShape shape : prs.getSlides().get(0).getShapes()) {
        if (shape instanceof Connector) {
            IConnector conn = (IConnector) shape;
            IShape start = conn.getStartShapeConnectedTo();
            IShape end = conn.getEndShapeConnectedTo();
            System.out.println("Connector: "
                + (start != null ? start.getName() : "?")
                + " -> "
                + (end != null ? end.getName() : "?"));
        }
    }
}

Zobacz także

 Polski