Difference between revisions of "Documentation/DevGuide/Drawings/Grouping, Combining and Binding"
(Initial author Sun Microsystems, Inc.) |
m (1 revision(s)) |
(No difference)
|
Revision as of 12:37, 15 February 2008
- Moving and Scaling
- Rotating and Shearing
- Transforming
- Ordering
- Grouping, Combining and Binding
- General Drawing Properties
- Glue Points and Connectors
- Layer Handling
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 [IDL: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 [IDL: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). |