Csatlakozók kezelése prezentációkban Python segítségével

Bevezetés

A PowerPoint csatlakozó egy speciális vonal, amely két alakzatot köt össze, és a dián az alakzatok mozgatása vagy áthelyezése esetén is rögzítve marad. A csatlakozók a kapcsolódási pontokhoz (zöld pontok) rögzülnek az alakzatokon. A kapcsolódási pontok akkor jelennek meg, amikor a mutató közelíti őket. A állítási fogantyúk (sárga pontok), bizonyos csatlakozók esetén elérhetők, lehetővé teszik a csatlakozó helyének és alakjának módosítását.

Csatlakozó típusok

A PowerPointban három típusú csatlakozót használhat: egyenes, könyök (szögelt) és ívelt.

Az Aspose.Slides a következő csatlakozó típusokat támogatja:

Csatlakozó típusa Kép Állítási pontok száma
ShapeType.LINE Vonal csatlakozó 0
ShapeType.STRAIGHT_CONNECTOR1 Egyenes csatlakozó 1 0
ShapeType.BENT_CONNECTOR2 Ívelt csatlakozó 2 0
ShapeType.BENT_CONNECTOR3 Ívelt csatlakozó 3 1
ShapeType.BENT_CONNECTOR4 Ívelt csatlakozó 4 2
ShapeType.BENT_CONNECTOR5 Ívelt csatlakozó 5 3
ShapeType.CURVED_CONNECTOR2 Ívelt csatlakozó 2 0
ShapeType.CURVED_CONNECTOR3 Ívelt csatlakozó 3 1
ShapeType.CURVED_CONNECTOR4 Ívelt csatlakozó 4 2
ShapeType.CURVED_CONNECTOR5 Ívelt csatlakozó 5 3

Alakzatok összekapcsolása csatlakozókkal

Ez a szakasz bemutatja, hogyan lehet alakzatokat összekapcsolni csatlakozókkal az Aspose.Slides-ban. Hozzáad egy csatlakozót a diára, a kezdő és végpontját a cél alakzatokhoz rögzítve. A kapcsolódási pontok használata biztosítja, hogy a csatlakozó a “ragasztott” állapotban maradjon az alakzatokhoz, még ha azok mozognak vagy méreteződnek is.

  1. Hozzon létre egy példányt a Presentation osztályból.
  2. Szerezze be a dia hivatkozását az indexe alapján.
  3. Adjon hozzá két AutoShape objektumot a diához a ShapeCollection objektum által nyújtott add_auto_shape metódus segítségével.
  4. Adjon hozzá egy csatlakozót a ShapeCollection objektum által nyújtott add_connector metódus használatával, és adja meg a csatlakozó típusát.
  5. Kapcsolja össze az alakzatokat a csatlakozóval.
  6. Hívja meg a reroute metódust a legrövidebb kapcsolati útvonal alkalmazásához.
  7. Mentse a prezentációt.
import aspose.slides as slides

# Példányosítja a Presentation osztályt egy PPTX fájl létrehozásához.
with slides.Presentation() as presentation:

    # Eléri az alakzatok gyűjteményét az első dián.
    shapes = presentation.slides[0].shapes

    # Hozzáad egy ellipszis AutoShape-et.
    ellipse = shapes.add_auto_shape(slides.ShapeType.ELLIPSE, 50, 50, 100, 100)

    # Hozzáad egy téglalap AutoShape-et.
    rectangle = shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 200, 100, 100)

    # Hozzáad egy csatlakozót a diára.
    connector = shapes.add_connector(slides.ShapeType.BENT_CONNECTOR2, 0, 0, 10, 10)

    # Összekapcsolja az alakzatokat a csatlakozóval.
    connector.start_shape_connected_to = ellipse
    connector.end_shape_connected_to = rectangle

    # Meghívja a reroute metódust a legrövidebb út beállításához.
    connector.reroute()

    # Mentse a prezentációt.
    presentation.save("connected_shapes.pptx", slides.export.SaveFormat.PPTX)

Kapcsolódási pontok megadása

Ez a szakasz bemutatja, hogyan lehet egy csatlakozót egy alakzat adott kapcsolódási pontjához rögzíteni az Aspose.Slides-ban. A pontos kapcsolódási helyek megcélzása lehetővé teszi a csatlakozó útvonalának és elrendezésének vezérlését, így tiszta és előre látható diagramokat hozhat létre a prezentációiban.

  1. Hozzon létre egy példányt a Presentation osztályból.
  2. Szerezze be a dia hivatkozását az indexe alapján.
  3. Adjon hozzá két AutoShape objektumot a diához a add_auto_shape metódus segítségével a ShapeCollection objektumtól.
  4. Adjon hozzá egy csatlakozót a add_connector metódusra a ShapeCollection objektumon, és adja meg a csatlakozó típusát.
  5. Kapcsolja össze az alakzatokat a csatlakozóval.
  6. Állítsa be a kívánt kapcsolódási pontokat az alakzatokon.
  7. Mentse a prezentációt.
import aspose.slides as slides

# Példányosítja a Presentation osztályt egy PPTX fájl létrehozásához.
with slides.Presentation() as presentation:

    # Az első dia alakzatgyűjteményéhez fér hozzá.
    shapes = presentation.slides[0].shapes

    # Hozzáad egy ellipszis AutoShape-et.
    ellipse = shapes.add_auto_shape(slides.ShapeType.ELLIPSE, 50, 50, 100, 100)

    # Hozzáad egy téglalap AutoShape-et.
    rectangle = shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 200, 100, 100)

    # Hozzáad egy csatlakozót a dia alakzatgyűjteményéhez.
    connector = shapes.add_connector(slides.ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10)

    # Összekapcsolja az alakzatokat a csatlakozóval.
    connector.start_shape_connected_to = ellipse
    connector.end_shape_connected_to = rectangle

    # Beállítja a preferált kapcsolódási hely indexét az ellipszisnél.
    site_index = 6

    # Ellenőrzi, hogy a preferált index a rendelkezésre álló helyek számán belül van-e.
    if  ellipse.connection_site_count > site_index:
        # Hozzáadja a preferált kapcsolódási helyet az ellipszis AutoShape-hez.
        connector.start_shape_connection_site_index = site_index

    # Mentse a prezentációt.
    presentation.save("connection_points.pptx", slides.export.SaveFormat.PPTX)

A csatlakozó pontjainak módosítása

A csatlakozókat módosíthatja a beállítási pontjaik használatával. Csak azok a csatlakozók módosíthatók ezzel, amelyek beállítási pontokat biztosítanak. A részletekért, hogy mely csatlakozók támogatják a módosításokat, lásd a Connector Types alatti táblázatot.

Egyszerű eset

Tekintsen egy olyan esetre, ahol egy csatlakozó két alakzat (A és B) között egy harmadik alakzatot (C) metsz.

Csatlakozó akadálya

import aspose.slides as slides
import aspose.pydrawing as draw

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 300, 150, 150, 75)
    shape_from = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 500, 400, 100, 50)
    shape_to = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 70, 30)
    
    connector = slide.shapes.add_connector(slides.ShapeType.BENT_CONNECTOR5, 20, 20, 400, 300)
    
    connector.line_format.end_arrowhead_style = slides.LineArrowheadStyle.TRIANGLE
    connector.line_format.fill_format.fill_type = slides.FillType.SOLID
    connector.line_format.fill_format.solid_fill_color.color = draw.Color.black
    
    connector.start_shape_connected_to = shape_from
    connector.end_shape_connected_to = shape_to
    connector.start_shape_connection_site_index = 2

A harmadik alakzat elkerüléséhez módosítsa a csatlakozót úgy, hogy a függőleges szakaszát balra mozdítja:

Javított csatlakozó akadálya

    adjustment2 = connector.adjustments[1]
    adjustment2.raw_value += 10000

Összetett esetek

Haladóbb módosításokhoz vegye figyelembe a következőket:

  • A csatlakozó állítható pontját egy képlet szabályozza, amely meghatározza a pozícióját. Ennek a pontnak a módosítása megváltoztathatja a csatlakozó teljes alakját.
  • A csatlakozó állítási pontjai szigorúan rendezett tömbben tárolódnak, a csatlakozó kezdettől a végéig számozva.
  • Az állítási pont értékek a csatlakozó alakzat szélességének/magasságának százalékát jelentik.
    • Az alakzatot a csatlakozó kezdő és végpontjai határolják, és 1000-vel skálázódik.
    • Az első, második és harmadik állítási pont a következőt jelenti: szélesség százaléka, magasság százaléka, és újra a szélesség százaléka.
  • Az állítási pontok koordinátáinak kiszámításakor vegye figyelembe a csatlakozó forgatását és tükröződését. Megjegyzés: Az Connector Types alatt felsorolt összes csatlakozó esetén a forgatási szög 0.

Eset 1

Tekintsen egy olyan esetre, ahol két szövegkeret objektumot egy csatlakozó kapcsol össze:

Kapcsolt alakzatok

import aspose.slides as slides
import aspose.pydrawing as draw

# Példányosítja a Presentation osztályt egy PPTX fájl létrehozásához.
with slides.Presentation() as presentation:

    # Lekéri az első diát.
    slide = presentation.slides[0]

    # Lekéri az első diát.
    shape_from = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 60, 25)
    shape_from.text_frame.text = "From"
    shape_to = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 500, 100, 60, 25)
    shape_to.text_frame.text = "To"

    # Hozzáad egy csatlakozót.
    connector = slide.shapes.add_connector(slides.ShapeType.BENT_CONNECTOR4, 20, 20, 400, 300)
    # Beállítja a csatlakozó irányát.
    connector.line_format.end_arrowhead_style = slides.LineArrowheadStyle.TRIANGLE
    # Beállítja a csatlakozó színét.
    connector.line_format.fill_format.fill_type = slides.FillType.SOLID
    connector.line_format.fill_format.solid_fill_color.color = draw.Color.crimson
    # Beállítja a csatlakozó vonalvastagságát.
    connector.line_format.width = 3

    # Összekapcsolja az alakzatokat a csatlakozóval.
    connector.start_shape_connected_to = shape_from
    connector.start_shape_connection_site_index = 3
    connector.end_shape_connected_to = shape_to
    connector.end_shape_connection_site_index = 2

    # Lekéri a csatlakozó állítási pontjait.
    adjustment_0 = connector.adjustments[0]
    adjustment_1 = connector.adjustments[1]

Módosítás

Módosítsa a csatlakozó állítási pontjainak értékeit úgy, hogy a szélesség százalékát 20%-kal, a magasság százalékát pedig 200%-kal növeli:

    # Módosítsa az állítási pontok értékeit.
    adjustment_0.raw_value += 20000
    adjustment_1.raw_value += 200000

Az eredmény:

Csatlakozó módosítás 1

Egy olyan modell definiálásához, amely lehetővé teszi a csatlakozó szegmensek koordinátáinak és alakjának meghatározását, hozzon létre egy alakzatot, amely a connector.adjustments[0] függőleges komponensének felel meg:

    # Rajzolja meg a csatlakozó függőleges komponensét.
    x = connector.x + connector.width * adjustment_0.raw_value / 100000
    y = connector.y
    height = connector.height * adjustment_1.raw_value / 100000

    slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, x, y, 0, height)

Az eredmény:

Csatlakozó módosítás 2

Eset 2

Az Eset 1-ben egyszerű csatlakozó módosítást mutattunk be alapelvek használatával. Általános esetekben figyelembe kell venni a csatlakozó forgatásét és a megjelenítési beállításait (amelyeket a connector.rotation, connector.frame.flip_h és connector.frame.flip_v szabályoz). Íme, hogyan működik a folyamat.

Először adjon hozzá egy új szövegkeret objektumot (To 1) a diához (kapcsolódás céljából), és hozzon létre egy új zöld csatlakozót, amely összeköti a meglévő objektumokkal.

    # Hozzon létre egy új célobjektumot.
    shape_to_1 = sld.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 400, 60, 25)
    shape_to_1.text_frame.text = "To 1"

    # Hozzon létre egy új csatlakozót.
    connector = sld.shapes.add_connector(slides.ShapeType.BENT_CONNECTOR4, 20, 20, 400, 300)
    connector.line_format.end_arrowhead_style = slides.LineArrowheadStyle.TRIANGLE
    connector.line_format.fill_format.fill_type = slides.FillType.SOLID
    connector.line_format.fill_format.solid_fill_color.color = draw.Color.medium_aquamarine
    connector.line_format.width = 3

    # Kapcsolja össze az objektumokat az újonnan létrehozott csatlakozóval.
    connector.start_shape_connected_to = shapeFrom
    connector.start_shape_connection_site_index = 2
    connector.end_shape_connected_to = shape_to_1
    connector.end_shape_connection_site_index = 3

    # Lekéri a csatlakozó állítási pontjait.
    adjustment_0 = connector.adjustments[0]
    adjustment_1 = connector.adjustments[1]
    
    # Módosítsa az állítási pontok értékeit.
    adjustment_0.raw_value += 20000
    adjustment_1.raw_value += 200000

Az eredmény:

Csatlakozó módosítás 3

Másodszor hozzon létre egy alakzatot, amely a csatlakozó vízszintes szakaszának felel meg, amely áthalad az új csatlakozó állítási pontján, a connector.adjustments[0]-n. Használja a connector.rotation, connector.frame.flip_h, és connector.frame.flip_v értékeket, és alkalmazza a szabványos koordinátakonverziós képletet a meghatározott x0 pont körüli forgatáshoz:

X = (x — x0) * cos(alpha) — (y — y0) * sin(alpha) + x0; Y = (x — x0) * sin(alpha) + (y — y0) * cos(alpha) + y0;

A mi esetünkben az objektum forgatási szöge 90 fok, és a csatlakozó függőlegesen jelenik meg, ezért a megfelelő kód a következő:

    # Mentse el a csatlakozó koordinátáit.
    x = connector.x
    y = connector.y
    
    # Javítsa a csatlakozó koordinátáit, ha meg van fordítva.
    if connector.frame.flip_h == 1:
        x += connector.width
    if connector.frame.flip_v == 1:
        y += connector.height

    # Használja az állítási pont értékét koordinátaként.
    x += connector.width * adjValue_0.raw_value / 100000
    
    # Konvertálja a koordinátákat, mert sin(90°) = 1 és cos(90°) = 0.
    xx = connector.frame.center_x - y + connector.frame.center_y
    yy = x - connector.frame.center_x + connector.frame.center_y

    # Határozza meg a vízszintes szakasz szélességét a második állítási pont értéke alapján.
    width = connector.height * adjValue_1.raw_value / 100000
    shape = sld.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, xx, yy, width, 0)
    shape.line_format.fill_format.fill_type = slides.FillType.SOLID
    shape.line_format.fill_format.solid_fill_color.color = draw.Color.red

Az eredmény:

Csatlakozó módosítás 4

Bemutattuk az egyszerű módosítások és a komplexebb állítási pontok (amelyek figyelembe veszik a forgást) számításait. Ezzel a tudással saját modell kidolgozhat— vagy kódot írhat— egy GraphicsPath objektum előállításához vagy akár egy csatlakozó állítási pontjainak értékének beállításához meghatározott diakoordináták alapján.

A csatlakozó vonalak szögeinek meghatározása

Használja az alábbi példát a csatlakozó vonalak szögének meghatározásához egy dián az Aspose.Slides segítségével. Megtanulja, hogyan olvassa ki egy csatlakozó végpontjait, és számolja ki annak tájolását, hogy pontosan illeszthesse a nyilakat, címkéket és egyéb alakzatokat.

  1. Hozzon létre egy példányt a Presentation osztályból.
  2. Szerezze be a dia hivatkozását az index alapján.
  3. Hozzáfér a csatlakozó vonal alakzathoz.
  4. Használja a vonal szélességét és magasságát, valamint az alakzat keretének szélességét és magasságát a szög kiszámításához.
import aspose.slides as slides
import math

def get_direction(w, h, flip_h, flip_v):
    end_line_x = w * (-1 if flip_h else 1)
    end_line_y = h * (-1 if flip_v else 1)
    end_y_axis_x = 0
    end_y_axis_y = h
    angle = math.atan2(end_y_axis_y, end_y_axis_x) - math.atan2(end_line_y, end_line_x)
    if (angle < 0):
         angle += 2 * math.pi
    return angle * 180.0 / math.pi

with slides.Presentation("connector_line_angle.pptx") as presentation:
    slide = presentation.slides[0]
    for shape_index in range(len(slide.shapes)):
        direction = 0.0
        shape = slide.shapes[shape_index]
        if type(shape) is slides.AutoShape and shape.shape_type == slides.ShapeType.LINE:
            direction = get_direction(shape.width, shape.height, shape.frame.flip_h, shape.frame.flip_v)
        elif type(shape) is slides.Connector:
            direction = get_direction(shape.width, shape.height, shape.frame.flip_h, shape.frame.flip_v)
        print(direction)

GYIK

Hogyan deríthetem ki, hogy egy csatlakozó “ragasztva” tud-e maradni egy adott alakzathoz?

Ellenőrizze, hogy az alakzat connection sites elérhető-e. Ha nincs vagy a szám nulla, a ragasztás nem lehetséges; ebben az esetben használjon szabad végpontokat, és helyezze el őket manuálisan. Célszerű a helyek számát ellenőrizni a csatlakoztatás előtt.

Mi történik egy csatlakozóval, ha törlök egy kapcsolódó alakzatot?

A végpontjai leválasztódnak; a csatlakozó a dián egy szokásos vonalként marad szabad kezdő/end pontokkal. Törölheti vagy újrakötheti a kapcsolódásokat, és ha szükséges, reroute‑t hívhat.

Megmaradnak-e a csatlakozó kötései, ha egy diát másik prezentációba másolok?

Általában igen, amennyiben a cél alakzatok is másolásra kerülnek. Ha a diát egy másik fájlba illeszti be a kapcsolódó alakzatok nélkül, a végpontok szabadokká válnak, és újra kell őket csatlakoztatni.