Glue Points and Connectors

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.



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