Διαχείριση Συνδέσμων σε Παρουσιάσεις Java
Επισκόπηση
Ένας σύνδεσμος είναι μια γραμμή που μπορεί να παραμείνει συνδεδεμένη με δύο σχήματα όταν μετακινείται οποιοδήποτε από τα σχήματα. Τα άκρα του συνδέονται με σημεία σύνδεσης, που παριστώνται από πράσινα σημεία στο PowerPoint. Ορισμένοι καμπυλωτοί και λυγισμένοι σύνδεσμοι εμφανίζουν επίσης σημεία ρύθμισης, που παριστώνται από πορτοκαλί σημεία, και ελέγχουν τη θέση των μεμονωμένων τμημάτων του συνδέσμου.
Το Aspose.Slides αναπαριστά τους συνδέσμους μέσω της διεπαφής IConnector . Μπορείτε να τους δημιουργήσετε, να συνδέσετε τα άκρα τους σε σχήματα, να επιλέξετε σημεία σύνδεσης, να επαναδρομολογήσετε τα και να τροποποιήσετε τη γεωμετρία των συνδέσμων που έχουν σημεία ρύθμισης.
Τύποι Συνδέσμων
Η κλάση ShapeType περιλαμβάνει προεπιλογές ευθύ, λυγιστού και καμπυλωτού συνδέσμου. Ο παρακάτω πίνακας εμφανίζει τις διαθέσιμες γεωμετρίες συνδέσμων και τον αριθμό των σημείων ρύθμισης που ορίζονται από κάθε προεπιλογή.
| Σύνδεσμος | Εικόνα | Αριθμός σημείων ρύθμισης |
|---|---|---|
ShapeType.Line |
![]() |
0 |
ShapeType.StraightConnector1 |
![]() |
0 |
ShapeType.BentConnector2 |
![]() |
0 |
ShapeType.BentConnector3 |
![]() |
1 |
ShapeType.BentConnector4 |
![]() |
2 |
ShapeType.BentConnector5 |
![]() |
3 |
ShapeType.CurvedConnector2 |
![]() |
0 |
ShapeType.CurvedConnector3 |
![]() |
1 |
ShapeType.CurvedConnector4 |
![]() |
2 |
ShapeType.CurvedConnector5 |
![]() |
3 |
Ο αριθμός και το νόημα των σημείων ρύθμισης αποτελούν μέρος της επιλεγμένης προεπιλογής συνδέσμου. Μην υποθέτετε ότι δύο διαφορετικοί τύποι συνδέσμων εμφανίζουν την ίδια διάταξη συλλογής.
Σύνδεση Δύο Σχημάτων
Χρησιμοποιήστε το IShapeCollection.addConnector για να προσθέσετε έναν σύνδεσμο και χρησιμοποιήστε τις μεθόδους IConnector.setStartShapeConnectedTo και IConnector.setEndShapeConnectedTo για να συνδέσετε τα άκρα του. Αφού συνδεθούν και τα δύο άκρα, η μέθοδος IConnector.reroute επιλέγει μια σύντομη διαδρομή μεταξύ των σχημάτων.
Το παρακάτω παράδειγμα συνδέει μια έλλειψη και ένα ορθογώνιο με έναν λυγιστό σύνδεσμο:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape ellipse = slide.getShapes().addAutoShape(ShapeType.Ellipse, 40, 80, 120, 80);
IAutoShape rectangle = slide.getShapes().addAutoShape(ShapeType.Rectangle, 320, 240, 140, 80);
IConnector connector = slide.getShapes().addConnector(ShapeType.BentConnector2, 0, 0, 10, 10);
connector.setStartShapeConnectedTo(ellipse);
connector.setEndShapeConnectedTo(rectangle);
connector.reroute();
presentation.save("connected-shapes.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Προειδοποίηση
Η κλήση τηςreroute μπορεί να αλλάξει τις τιμές των setStartShapeConnectionSiteIndex και setEndShapeConnectionSiteIndex. Εκχωρήστε συγκεκριμένα σημεία σύνδεσης μετά την επαναδρομολόγηση εάν αυτά τα σημεία πρέπει να παραμείνουν σταθερά.
Επιλογή Σημείου Σύνδεσης
Κάθε σχήμα που μπορεί να συνδεθεί αναφέρει τον αριθμό των σημείων του μέσω της μεθόδου IShape.getConnectionSiteCount. Επικυρώστε έναν προτιμώμενο δείκτη σημείου με βάση το μηδέν πριν το εκχωρήσετε σε άκρο συνδέσμου· οι μετρήσεις των σημείων διαφέρουν ανάλογα με τη γεωμετρία του σχήματος.
Αυτό το παράδειγμα συνδέει τον σύνδεσμο με ένα συγκεκριμένο σημείο στην έλλειψη όταν αυτό το σημείο υπάρχει:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape ellipse = slide.getShapes().addAutoShape(ShapeType.Ellipse, 40, 80, 120, 80);
IAutoShape rectangle = slide.getShapes().addAutoShape(ShapeType.Rectangle, 320, 240, 140, 80);
IConnector connector = slide.getShapes().addConnector(ShapeType.BentConnector3, 0, 0, 10, 10);
connector.setStartShapeConnectedTo(ellipse);
connector.setEndShapeConnectedTo(rectangle);
long preferredSiteIndex = 2;
if (preferredSiteIndex < ellipse.getConnectionSiteCount()) {
connector.setStartShapeConnectionSiteIndex(preferredSiteIndex);
} else {
System.out.println("The ellipse has only " + ellipse.getConnectionSiteCount() + " connection sites.");
}
presentation.save("specific-connection-site.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ρύθμιση Σημείου Συνδέσμου
Οι σύνδεσμοι με σημεία ρύθμισης τα εκθέτουν μέσω της μεθόδου IGeometryShape.getAdjustments. Εξετάστε κάθε IAdjustValue και ελέγξτε την τιμή του getType πριν το αλλάξετε με τη setRawValue. Οι γενικοί κανόνες για την αναγνώριση προεπιλεγμένων ρυθμίσεων σχήματος περιγράφονται στη σελίδα Shape Manipulation.
Ο αριθμός, η σειρά, το νόημα και το έγκυρο εύρος τιμών των ρυθμίσεων του συνδέσμου εξαρτώνται από την προεπιλογή του συνδέσμου. Ο τύπος ρύθμισης είναι μόνο για ανάγνωση, ενώ η τιμή ρύθμισης είναι εγγράψιμη. Η μέθοδος μόνο για ανάγνωση getName παρέχει πρόσθετη ταυτοποίηση όταν ένας σύνδεσμος περιέχει περισσότερες από μία ρυθμίσεις του ίδιου σημασιολογικού τύπου.
Δρομολόγηση γύρω από Εμπόδιο
Στην παρακάτω διάταξη, ένας σύνδεσμος BentConnector5 μεταξύ δύο σχημάτων περνάει από ένα τρίτο σχήμα:

Αυτός ο κώδικας δημιουργεί τον εμποδισμένο σύνδεσμο:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
slide.getShapes().addAutoShape(ShapeType.Rectangle, 300, 150, 150, 75);
IAutoShape sourceShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 500, 400, 100, 50);
IAutoShape targetShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 70, 30);
IConnector connector = slide.getShapes().addConnector(ShapeType.BentConnector5, 20, 20, 400, 300);
connector.getLineFormat().setEndArrowheadStyle(LineArrowheadStyle.Triangle);
connector.getLineFormat().getFillFormat().setFillType(FillType.Solid);
connector.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
connector.setStartShapeConnectedTo(sourceShape);
connector.setEndShapeConnectedTo(targetShape);
connector.setStartShapeConnectionSiteIndex(2);
presentation.save("connector-obstruction.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Η μετακίνηση του κάθετου λυγίσματος αλλάζει τη διαδρομή ώστε ο σύνδεσμος να παρακάμπτει το εμπόδιο:

Αντί να υποθέτετε ότι ο δείκτης συλλογής 1 αντιπροσωπεύει πάντα το κάθετο λυγισμό, αυτό το παράδειγμα αναζητά το ConnectorBendPositionY και το αλλάζει μόνο όταν υπάρχει ο αναμενόμενος σημασιολογικός τύπος:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
slide.getShapes().addAutoShape(ShapeType.Rectangle, 300, 150, 150, 75);
IAutoShape sourceShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 500, 400, 100, 50);
IAutoShape targetShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 70, 30);
IConnector connector = slide.getShapes().addConnector(ShapeType.BentConnector5, 20, 20, 400, 300);
connector.getLineFormat().setEndArrowheadStyle(LineArrowheadStyle.Triangle);
connector.getLineFormat().getFillFormat().setFillType(FillType.Solid);
connector.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
connector.setStartShapeConnectedTo(sourceShape);
connector.setEndShapeConnectedTo(targetShape);
connector.setStartShapeConnectionSiteIndex(2);
IAdjustValue verticalBend = null;
for (int adjustmentIndex = 0; adjustmentIndex < connector.getAdjustments().size(); adjustmentIndex++) {
IAdjustValue adjustment = connector.getAdjustments().get_Item(adjustmentIndex);
System.out.println(adjustment.getName() + ": " + adjustment.getType() + ", raw value = " + adjustment.getRawValue());
if (adjustment.getType() == ShapeAdjustmentType.ConnectorBendPositionY) {
verticalBend = adjustment;
break;
}
}
if (verticalBend == null) {
System.out.println("The connector does not expose a vertical bend adjustment.");
} else {
verticalBend.setRawValue(60000);
presentation.save("connector-obstruction-fixed.pptx", SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
Ένας BentConnector5 έχει δύο ρυθμίσεις ConnectorBendPositionX και μία ρύθμιση ConnectorBendPositionY. Εάν ο τύπος που χρειάζεστε εμφανίζεται περισσότερες από μία φορές, ελέγξτε το getName και τη γνωστή γεωμετρία της προεπιλογής προτού επιλέξετε ένα. Εάν μια ρύθμιση αναφέρει ShapeAdjustmentType.Custom, θεωρήστε το νόημα και το εύρος της ως ειδικά για την προεπιλογή και μην το αλλάξετε μέχρι να είναι γνωστή η σύμβαση.
Συσχέτιση Τιμών Ρύθμισης με Γεωμετρία Συνδέσμου
Για λυγιστούς συνδέσμους, οι τιμές ρύθμισης μπορούν να χρησιμοποιηθούν για την εκτίμηση των θέσεων των μεμονωμένων τμημάτων. Αυτοί οι υπολογισμοί είναι συγκεκριμένοι για την προεπιλογή του συνδέσμου:
BentConnector4συνήθως εκθέτει μία ρύθμισηConnectorBendPositionXκαι μία ρύθμισηConnectorBendPositionY.- Για αυτές τις θέσεις λυγίσματος, η διαίρεση της τιμής που επιστρέφεται από το
getRawValueμε100000fπαράγει το κλάσμα του πλάτους ή του ύψους του πλαισίου του συνδέσμου που χρησιμοποιείται στα παρακάτω παραδείγματα. - Ένα πλαίσιο συνδέσμου μπορεί να περιστραφεί ή να αντιστραφεί, έτσι οι συντεταγμένες του πλαισίου πρέπει να μετατραπούν πριν συγκριθούν με τις συντεταγμένες της διαφάνειας.
Τα παρακάτω παραδείγματα χρησιμοποιούν το getType για να προσδιορίσουν πρώτα τις ρυθμίσεις. Δεν θεωρούν τους δείκτες συλλογής ως φορητές ταυτοποιήσεις.
Σύνδεσμος χωρίς Περιστροφή
Η αρχική διάταξη περιέχει δύο σχήματα κειμένου συνδεδεμένα με έναν BentConnector4:

Αυτό το παράδειγμα εξετάζει τον σύνδεσμο και παίρνει τις οριζόντιες και κατακόρυφες ρυθμίσεις λυγίσματος:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape sourceShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 60, 25);
sourceShape.getTextFrame().setText("From");
IAutoShape targetShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 500, 100, 60, 25);
targetShape.getTextFrame().setText("To");
IConnector connector = slide.getShapes().addConnector(ShapeType.BentConnector4, 20, 20, 400, 300);
connector.getLineFormat().setEndArrowheadStyle(LineArrowheadStyle.Triangle);
connector.getLineFormat().getFillFormat().setFillType(FillType.Solid);
connector.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.RED);
connector.getLineFormat().setWidth(3);
connector.setStartShapeConnectedTo(sourceShape);
connector.setStartShapeConnectionSiteIndex(3);
connector.setEndShapeConnectedTo(targetShape);
connector.setEndShapeConnectionSiteIndex(2);
for (int adjustmentIndex = 0; adjustmentIndex < connector.getAdjustments().size(); adjustmentIndex++) {
IAdjustValue adjustment = connector.getAdjustments().get_Item(adjustmentIndex);
System.out.println(adjustment.getName() + ": " + adjustment.getType() + ", raw value = " + adjustment.getRawValue());
}
} finally {
presentation.dispose();
}
Για να αλλάξετε και τα δύο λυγίσματα, εντοπίστε κάθε αναμενόμενο τύπο και τροποποιήστε τις τιμές μόνο αφού τα βρείτε και τα δύο:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape sourceShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 60, 25);
IAutoShape targetShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 500, 100, 60, 25);
IConnector connector = slide.getShapes().addConnector(ShapeType.BentConnector4, 20, 20, 400, 300);
connector.setStartShapeConnectedTo(sourceShape);
connector.setStartShapeConnectionSiteIndex(3);
connector.setEndShapeConnectedTo(targetShape);
connector.setEndShapeConnectionSiteIndex(2);
IAdjustValue horizontalBend = null;
IAdjustValue verticalBend = null;
for (int adjustmentIndex = 0; adjustmentIndex < connector.getAdjustments().size(); adjustmentIndex++) {
IAdjustValue adjustment = connector.getAdjustments().get_Item(adjustmentIndex);
if (adjustment.getType() == ShapeAdjustmentType.ConnectorBendPositionX) {
horizontalBend = adjustment;
} else if (adjustment.getType() == ShapeAdjustmentType.ConnectorBendPositionY) {
verticalBend = adjustment;
}
}
if (horizontalBend == null || verticalBend == null) {
System.out.println("The connector does not expose the expected bend adjustments.");
} else {
horizontalBend.setRawValue(horizontalBend.getRawValue() + 20000);
verticalBend.setRawValue(verticalBend.getRawValue() + 200000);
presentation.save("connector-adjusted.pptx", SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
Το αποτέλεσμα είναι ένας σύνδεσμος των οποίων τα οριζόντια και κατακόρυφα τμήματα έχουν μετακινηθεί:

Αφού οι σημασιολογικοί τύποι γίνουν γνωστοί, οι τιμές τους μπορούν να μετατραπούν σε συντεταγμένες πλαισίου συνδέσμου. Αυτό το παράδειγμα σχεδιάζει ένα λεπτό ορθογώνιο πάνω από το κάθετο τμήμα που ελέγχεται από τις δύο ρυθμίσεις λυγίσματος:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape sourceShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 60, 25);
IAutoShape targetShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 500, 100, 60, 25);
IConnector connector = slide.getShapes().addConnector(ShapeType.BentConnector4, 20, 20, 400, 300);
connector.setStartShapeConnectedTo(sourceShape);
connector.setStartShapeConnectionSiteIndex(3);
connector.setEndShapeConnectedTo(targetShape);
connector.setEndShapeConnectionSiteIndex(2);
IAdjustValue horizontalBend = null;
IAdjustValue verticalBend = null;
for (int adjustmentIndex = 0; adjustmentIndex < connector.getAdjustments().size(); adjustmentIndex++) {
IAdjustValue adjustment = connector.getAdjustments().get_Item(adjustmentIndex);
if (adjustment.getType() == ShapeAdjustmentType.ConnectorBendPositionX) {
horizontalBend = adjustment;
} else if (adjustment.getType() == ShapeAdjustmentType.ConnectorBendPositionY) {
verticalBend = adjustment;
}
}
if (horizontalBend == null || verticalBend == null) {
System.out.println("The connector does not expose the expected bend adjustments.");
} else {
float x = connector.getX() + connector.getWidth() * horizontalBend.getRawValue() / 100000f;
float y = connector.getY();
float height = connector.getHeight() * verticalBend.getRawValue() / 100000f;
slide.getShapes().addAutoShape(ShapeType.Rectangle, x, y, 1, height);
presentation.save("connector-segment-guide.pptx", SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
Το σχήμα οδηγού δείχνει το υπολογισμένο τμήμα:

Σύνδεσμος με Περιστροφή ή Αντιστροφή
Όταν η ίδια γεωμετρία συνδέσμου είναι προσανατολισμένη κάθετα, οι τιμές του IShape.getFrame, του ShapeFrame.getFlipH, και του ShapeFrame.getFlipV επηρεάζουν τη μετατροπή από τις συντεταγμένες πλαισίου συνδέσμου σε συντεταγμένες διαφάνειας.
Αυτό το παράδειγμα δημιουργεί και ρυθμίζει τον κάθετα προσανατολισμένο σύνδεσμο:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape sourceShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 60, 25);
sourceShape.getTextFrame().setText("From");
IAutoShape targetShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 400, 60, 25);
targetShape.getTextFrame().setText("To 1");
IConnector connector = slide.getShapes().addConnector(ShapeType.BentConnector4, 20, 20, 400, 300);
connector.getLineFormat().setEndArrowheadStyle(LineArrowheadStyle.Triangle);
connector.getLineFormat().getFillFormat().setFillType(FillType.Solid);
connector.getLineFormat().getFillFormat().getSolidFillColor().setColor(new Color(102, 205, 170));
connector.getLineFormat().setWidth(3);
connector.setStartShapeConnectedTo(sourceShape);
connector.setStartShapeConnectionSiteIndex(2);
connector.setEndShapeConnectedTo(targetShape);
connector.setEndShapeConnectionSiteIndex(3);
for (int adjustmentIndex = 0; adjustmentIndex < connector.getAdjustments().size(); adjustmentIndex++) {
IAdjustValue adjustment = connector.getAdjustments().get_Item(adjustmentIndex);
if (adjustment.getType() == ShapeAdjustmentType.ConnectorBendPositionX) {
adjustment.setRawValue(adjustment.getRawValue() + 20000);
} else if (adjustment.getType() == ShapeAdjustmentType.ConnectorBendPositionY) {
adjustment.setRawValue(adjustment.getRawValue() + 200000);
}
}
presentation.save("vertical-connector-adjusted.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ο ρυθμισμένος σύνδεσμος εμφανίζεται κάθετα μεταξύ των σχημάτων:

Για μια αυθαίρετη γωνία περιστροφής alpha, περιστρέψτε ένα σημείο πλαισίου συνδέσμου (x, y) γύρω από το κέντρο του πλαισίου (x0, y0):
X = (x - x0) * cos(alpha) - (y - y0) * sin(alpha) + x0
Y = (x - x0) * sin(alpha) + (y - y0) * cos(alpha) + y0
Ο παρακάτω κώδικας διαχειρίζεται τον προσανατολισμό 90 μοιρών που χρησιμοποιείται σε αυτό το παράδειγμα και σχεδιάζει έναν κόκκινο οδηγό πάνω από το αντίστοιχο τμήμα του συνδέσμου:
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape sourceShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 60, 25);
IAutoShape targetShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 400, 60, 25);
IConnector connector = slide.getShapes().addConnector(ShapeType.BentConnector4, 20, 20, 400, 300);
connector.setStartShapeConnectedTo(sourceShape);
connector.setStartShapeConnectionSiteIndex(2);
connector.setEndShapeConnectedTo(targetShape);
connector.setEndShapeConnectionSiteIndex(3);
IAdjustValue horizontalBend = null;
IAdjustValue verticalBend = null;
for (int adjustmentIndex = 0; adjustmentIndex < connector.getAdjustments().size(); adjustmentIndex++) {
IAdjustValue adjustment = connector.getAdjustments().get_Item(adjustmentIndex);
if (adjustment.getType() == ShapeAdjustmentType.ConnectorBendPositionX) {
horizontalBend = adjustment;
} else if (adjustment.getType() == ShapeAdjustmentType.ConnectorBendPositionY) {
verticalBend = adjustment;
}
}
if (horizontalBend == null || verticalBend == null) {
System.out.println("The connector does not expose the expected bend adjustments.");
} else {
horizontalBend.setRawValue(horizontalBend.getRawValue() + 20000);
verticalBend.setRawValue(verticalBend.getRawValue() + 200000);
float x = connector.getX();
float y = connector.getY();
if (connector.getFrame().getFlipH() == NullableBool.True) {
x += connector.getWidth();
}
if (connector.getFrame().getFlipV() == NullableBool.True) {
y += connector.getHeight();
}
x += connector.getWidth() * horizontalBend.getRawValue() / 100000f;
float rotatedX = connector.getFrame().getCenterX() - y + connector.getFrame().getCenterY();
float rotatedY = x - connector.getFrame().getCenterX() + connector.getFrame().getCenterY();
float segmentWidth = connector.getHeight() * verticalBend.getRawValue() / 100000f;
IAutoShape guide = slide.getShapes().addAutoShape(ShapeType.Rectangle, rotatedX, rotatedY, segmentWidth, 1);
guide.getLineFormat().getFillFormat().setFillType(FillType.Solid);
guide.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.RED);
presentation.save("rotated-connector-segment-guide.pptx", SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
Ο κόκκινος οδηγός δείχνει το υπολογισμένο τμήμα μετά τη μετατροπή των συντεταγμένων:

Αυτές οι εξισώσεις περιγράφουν τις προεπιλογές που χρησιμοποιούνται στα παραδείγματα, όχι ένα καθολικό μοντέλο συνδέσμου. Επικυρώστε τους τύπους ρύθμισης, τον προσανατολισμό του πλαισίου και τα εύρη τιμών πριν εφαρμόσετε τον ίδιο υπολογισμό σε διαφορετική προεπιλογή.
Εύρεση Γωνίας Κατεύθυνσης Συνδέσμου
Η κατεύθυνση ενός ευθύ συνδέσμου μπορεί να υπολογιστεί από το πλάτος και το ύψος του, με εφαρμοσμένες τις οριζόντιες και κατακόρυφες αντιστροφές. Το παρακάτω παράδειγμα αναφέρει τη φορά των δεικτών της ώρας από τον θετικό οριζόντιο άξονα σε συντεταγμένες διαφάνειας:
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IConnector connector = slide.getShapes().addConnector(ShapeType.StraightConnector1, 100, 100, 200, 100);
boolean flipH = connector.getFrame().getFlipH() == NullableBool.True;
boolean flipV = connector.getFrame().getFlipV() == NullableBool.True;
float deltaX = connector.getWidth() * (flipH ? -1 : 1);
float deltaY = connector.getHeight() * (flipV ? -1 : 1);
double angle = Math.atan2(deltaY, deltaX) * 180.0 / Math.PI;
if (angle < 0) {
angle += 360;
}
System.out.printf("Connector direction: %.2f degrees%n", angle);
} finally {
presentation.dispose();
}
FAQ
Πώς μπορώ να καταλάβω αν ένας σύνδεσμος μπορεί να συνδεθεί με ένα σχήμα;
Ελέγξτε την τιμή του getConnectionSiteCount του σχήματος. Ένας θετικός αριθμός σημαίνει ότι το σχήμα εκθέτει σημεία σύνδεσης. Επικυρώστε τον επιλεγμένο δείκτη σημείου πριν τον εκχωρήσετε σε οποιοδήποτε άκρο συνδέσμου.
Μπορώ να αναγνωρίσω μια ρύθμιση συνδέσμου με βάση τον δείκτη της συλλογής;
Ένας δείκτης είναι συμφραζόμενος μόνο για μια γνωστή προεπιλογή συνδέσμου και τη διάταξη της συλλογής. Ελέγξτε το IAdjustValue.getType πριν τροποποιήσετε μια τιμή και χρησιμοποιήστε το IAdjustValue.getName ως πρόσθετη πληροφορία όταν ο ίδιος σημασιολογικός τύπος εμφανίζεται περισσότερες από μία φορές.
Τι συμβαίνει όταν διαγραφεί ένα συνδεδεμένο σχήμα;
Το αντίστοιχο άκρο του συνδέσμου αποσυνδέεται. Ο σύνδεσμος παραμένει στη διαφάνεια και μπορεί να διαγραφεί, να τοποθετηθεί ως ελεύθερη γραμμή ή να συνδεθεί με άλλο σχήμα.
Διατηρούνται οι συνδέσεις του συνδέσμου όταν αντιγράφεται μια διαφάνεια;
Οι συνδέσεις συνήθως διατηρούνται όταν τα συνδεδεμένα σχήματα αντιγράφονται μαζί με τη διαφάνεια. Εάν αντιγραφεί ένας σύνδεσμος χωρίς κάποιο από τα στόχοσχήματα του, το επηρεασμένο άκρο πρέπει να συνδεθεί ξανά.









