Glue Points and Connectors

From Apache OpenOffice Wiki
< Documentation‎ | DevGuide
Revision as of 12:42, 13 January 2013 by JZA (Talk | contribs)

Jump to: navigation, search



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).
Personal tools
In other languages