Grouping, Combining and Binding
The DrawPage
plays an important role for the handling of multiple shapes. It has three interfaces for this purpose. Its interface com.sun.star.drawing.XShapeGrouper is used to create a group shape from a ShapeCollection
and ungroup existing groups.
Methods of com.sun.star.drawing.XShapeGrouper | |
---|---|
group() | Parameter:
com.sun.star.drawing.XShapes xShapes Groups the shapes inside a collection. They must all be inserted into the same Returns a recently created |
ungroup() | Parameter:
com.sun.star.drawing.XShapeGroup Ungroups a given |
The example below creates a group using the com.sun.star.drawing.XShapeGrouper interface. For this purpose, the shapes that are to be grouped have to be added to a com.sun.star.drawing.ShapeCollection that is created by the com.sun.star.lang.XMultiServiceFactory of the global service manager. It is a container of shapes that is accessed using the interface com.sun.star.drawing.XShapes. The following example accesses the XShapes
interface of the DrawPage
to locate two shapes on the DrawPage
, and uses the XShapes
interface of the ShapeCollection
to add these shapes to the ShapeCollection
. Finally, it employs the XShapeGrouper
interface of the DrawPage
to move the shapes from the ShapeCollection
into a new GroupShape
.
/* try to group the first two objects of the drawpage */
// create a container that will receive the
// shapes that are to be grouped
Object xObj = xMultiServiceFactory.createInstance("com.sun.star.drawing.ShapeCollection");
XShapes xToGroup = (XShapes)UnoRuntime.queryInterface(XShapes.class, xObj);
// query for the shape collection of xDrawPage
XShapes xShapes = (XShapes)UnoRuntime.queryInterface(XShapes.class, xDrawPage);
// test if the shape collection of the page has at least two shapes
if (xShapes.getCount() >= 2) {
// collect shapes we want to group
xToGroup.add((XShape)UnoRuntime.queryInterface(XShape.class, xShapes.getByIndex(0)));
xToGroup.add((XShape)UnoRuntime.queryInterface(XShape.class, xShapes.getByIndex(1)));
// now group the shapes we have collected by using the XShapeGrouper
XShapeGrouper xShapeGrouper = (XShapeGrouper)UnoRuntime.queryInterface(
XShapeGrouper.class, xDrawPage);
xShapeGrouper.group(xToGroup);
}
The service com.sun.star.drawing.GroupShape includes com.sun.star.drawing.Shape and supports two additional interfaces:
- com.sun.star.drawing.XShapes is used to access the shapes in the group.
- com.sun.star.drawing.XShapeGroup handles access to the group.
The interface XShapes
inherits from com.sun.star.container.XIndexAccess, and introduces add()
and remove()
. It contains the following methods:
type getElementType()
boolean hasElements()
long getCount()
any getByIndex( [in] long Index)
void add( [in] com::sun::star::drawing::XShape xShape)
void remove( [in] com::sun::star::drawing::XShape xShape)
Methods of com.sun.star.drawing.XShapeGroup:
string getShapeType()
com::sun::star::awt::Point getPosition()
void setPosition( [in] com::sun::star::awt::Point aPosition)
com::sun::star::awt::Size getSize()
void setSize( [in] com::sun::star::awt::Size aSize)
It is also possible to create GroupShapes directly without using the XShapeGrouper
interface. The following code demonstrates the creation of a com.sun.star.drawing.GroupShape that takes up three other shapes.
// create a group shape first. The size and position does not matter, because
// it depends to the position and size of objects that will be inserted later
XShape xGroup = createShape(xComponent, 0, 0, 0, 0, "com.sun.star.drawing.GroupShape");
// before it is possible to insert shapes,
// the group shape must have been added to the page
XShapes xShapes = (XShapes)UnoRuntime.queryInterface(XShapes.class, xDrawPage);
xShapes.add(xGroup);
// query for the XShapes interface, which will take our new shapes
XShapes xShapesGroup = (XShapes)UnoRuntime.queryInterface(XShapes.class, xGroup);
// new shapes can be inserted into the shape collection directly
xShapesGroup.add( createShape(xComponent, 1000, 1000, 2000, 4000,
"com.sun.star.drawing.EllipseShape"));
xShapesGroup.add( createShape(xComponent, 8000, 8000, 2000, 2000,
"com.sun.star.drawing.EllipseShape"));
xShapesGroup.add( createShape(xComponent, 2000, 3000, 7000, 6000,
"com.sun.star.drawing.LineShape"));
The interface com.sun.star.drawing.XShapeCombiner combines shapes and is equivalent to Modify - Combine in the user interface.
Methods of com.sun.star.drawing.XShapeCombiner | |
---|---|
combine() | Parameter:
Combines shapes. The shapes inside this container are converted to Returns a recently created |
split() | Parameter:
Splits shapes. The |
The draw page interface com.sun.star.drawing.XShapeBinder draws a connection line between the ending point of a line shape (or curve) to the starting point of another line shape (or curve), merging the connected lines into a single shape object. This function corresponds to Modify - Connect in the user interface. It works for area shapes as well, but the connection line usually can not resolve them.
Methods of com.sun.star.drawing.XShapeBinder | |
---|---|
bind() | Parameter:
binds shapes together. A container with shapes that will be bound together. All shapes are converted to a Returns a recently created |
unbind() | Parameter:
breaks a shape into its line segments. The given shape will be converted to a |
Content on this page is licensed under the Public Documentation License (PDL). |