Glue Points and Connectors
From Apache OpenOffice Wiki
- Moving and Scaling
- Rotating and Shearing
- Transforming
- Ordering
- Grouping, Combining and Binding
- General Drawing Properties
- Glue Points and Connectors
- Layer Handling
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). |