Glue Points and Connectors
From Apache OpenOffice Wiki
< Documentation | DevGuide
By default, there are four glue points available that are used within the properties StartGluePointIndex
and EndGluePointIndex
. If a connector connects to the top, bottom, left or right of a shape, a new glue point is not created. The four directions are declared in the following example.
The first example demonstrates how to create a com.sun.star.drawing.ConnectorShape and connect it to two other shapes using the glue point index property.
XDrawPagesSupplier xDrawPagesSupplier = (XDrawPagesSupplier)UnoRuntime.queryInterface(
XDrawPagesSupplier.class, xComponent);
XDrawPages xDrawPages = xDrawPagesSupplier.getDrawPages();
XPage xPage = (XdrawPage)UnoRuntime.queryInterface(XDrawPage.class, xDrawPages.getByIndex(0));
XShapes xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xPage);
// create two rectangles
XShape xShape1 = ShapeHelper.createShape(xDrawDoc, new Point(15000, 1000), new Size(5000, 5000),
"com.sun.star.drawing.RectangleShape");
XShape xShape2 = ShapeHelper.createShape(xDrawDoc, new Point(2000, 15000), new Size(5000, 5000),
"com.sun.star.drawing.EllipseShape");
// and a connector
XShape xConnector = ShapeHelper.createShape(xDrawDoc,
new Point(0, 0), new Size(0, 0), "com.sun.star.drawing.ConnectorShape");
xShapes.add(xShape1);
xShapes.add(xShape2);
xShapes.add(xConnector);
XPropertySet xConnectorPropSet = (XPropertySet)UnoRuntime.queryInterface(
XPropertySet.class, xConnector);
// Index value of 0 : the shape is connected at the top
// Index value of 1 : the shape is connected at the left
// Index value of 2 : the shape is connected at the bottom
// Index value of 3 : the shape is connected at the right
int nStartIndex = 3;
int nEndIndex = 1;
// the "StartPosition" or "EndPosition" property needs not to be set
// if there is a shape to connect
xConnectorPropSet.setPropertyValue("StartShape", xShape1);
xConnectorPropSet.setPropertyValue("StartGluePointIndex", new Integer(nStartIndex));
xConnectorPropSet.setPropertyValue("EndShape", xShape2);
xConnectorPropSet.setPropertyValue("EndGluePointIndex", new Integer(nEndIndex));
The next example demonstrates the usage of user defined glue points.
XGluePointsSupplier xGluePointsSupplier;
XIndexContainer xIndexContainer;
XIdentifierContainer xIdentifierContainer;
/* take care to use the structure GluePoint2 and not
GluePoint, because otherwise the XIdentifierContainer
won't accept it
*/
GluePoint2 aGluePoint = new GluePoint2();
aGluePoint.IsRelative = false;
aGluePoint.PositionAlignment = Alignment.CENTER;
aGluePoint.Escape = EscapeDirection.SMART;
aGluePoint.IsUserDefined = true;
aGluePoint.Position.X = 0;
aGluePoint.Position.Y = 0;
// create and insert a glue point at shape1
xGluePointsSupplier = (XGluePointsSupplier)UnoRuntime.queryInterface(
XGluePointsSupplier.class, xShape1);
xIndexContainer = xGluePointsSupplier.getGluePoints();
xIdentifierContainer = (XIdentifierContainer)UnoRuntime.queryInterface(
XIdentifierContainer.class, xIndexContainer);
int nIndexOfGluePoint1 = xIdentifierContainer.insert(aGluePoint);
// create and insert a glue point at shape2
xGluePointsSupplier = (XGluePointsSupplier)
UnoRuntime.queryInterface(XGluePointsSupplier.class, xShape2);
xIndexContainer = xGluePointsSupplier.getGluePoints();
xIdentifierContainer = (XIdentifierContainer)UnoRuntime.queryInterface(
XIdentifierContainer.class, xIndexContainer);
int nIndexOfGluePoint2 = xIdentifierContainer.insert(aGluePoint);
// create and add a connector
XShape xConnector2 = ShapeHelper.createShape(xDrawDoc,
new Point(0, 0), new Size(0, 0), "com.sun.star.drawing.ConnectorShape");
xShapes.add( xConnector2 );
XPropertySet xConnector2PropSet = (XPropertySet)UnoRuntime.queryInterface(
XPropertySet.class, xConnector2);
xConnector2PropSet.setPropertyValue("StartShape", xShape1);
xConnector2PropSet.setPropertyValue("StartGluePointIndex", new Integer(nIndexOfGluePoint1));
xConnector2PropSet.setPropertyValue( "EndShape", xShape2 );
xConnector2PropSet.setPropertyValue( "EndGluePointIndex", new Integer(nIndexOfGluePoint2));
Content on this page is licensed under the Public Documentation License (PDL). |