Bezier Shapes
From Apache OpenOffice Wiki
Draw supports three different kinds of Bezier curves: OpenBezierShape
, ClosedBezierShape
and PolyPolygonBezierShape
. They are all controlled by com.sun.star.drawing.PolyPolygonBezierDescriptor which is made up of the following properties:
Properties of com.sun.star.drawing.PolyPolygonBezierDescriptor | |
---|---|
PolygonKind | [readonly] com.sun.star.drawing.PolygonKind. Type of the polygon. Possible values are:
|
PolyPolygonBezier | struct [IDL:com.sun.star.drawing.PolyPolygonBezierCoords]. These are the bezier points of the polygon. The struct members are Coordinates and Flags , which are both sequences of sequences. The Coordinates sequence contains [IDL:com.sun.star.awt.Point] structs and the Flags sequence contains com::[IDL:com.sun.star.drawing.PolygonFlags] enums. Point members are X and Y. Possible PolygonFlags values are:
|
Geometry | com.sun.star.drawing.PolyPolygonBezierCoords. These are the untransformed bezier coordinates of the polygon. The property has the same type as PolyPolygonBezier .
|
The next Java example will demonstrate how to create a ClosedBezierShape
that looks like the following picture.
[[Image:ClosedBezierShapeArt.png|none|thumb|300px|Closed bezier shape]] XShape xPolyPolygonBezier = createShape( xComponent, 0, 0, 0, 0, "com.sun.star.drawing.ClosedBezierShape"); // take care of the fact that the shape must have been added // to the page before it is possible to apply changes XShapes xShapes = (XShapes)UnoRuntime.queryInterface( XShapes.class, xDrawPage); xShapes.add(xPolyPolygonBezier); // now it is possible to edit the PropertySet XPropertySet xShapeProperties = (XPropertySet)UnoRuntime.queryInterface( XPropertySet.class, xPolyPolygonBezier); // The following values are exemplary and provokes that a PolyPolygon of // sixteen single polygons containing four points each is created. The // PolyPolygon total point count will be 64. // If control points are used they are allowed to appear as pair only, // before and after such pair has to be a normal point. // A bezier point sequence may look like // this (n=normal, c=control) : n c c n c c n n c c n int nPolygonCount = 16; int nPointCount = 4; int nWidth = 10000; int nHeight = 10000; PolyPolygonBezierCoords aCoords = new PolyPolygonBezierCoords(); // allocating the outer sequence aCoords.Coordinates = new Point[nPolygonCount][]; aCoords.Flags = new PolygonFlags[nPolygonCount][]; int i, n, nY; // fill the inner point sequence now for (nY = 0, i = 0; i < nPolygonCount; i++, nY += nHeight / nPolygonCount) { // create a polygon using two normal and two control points // allocating the inner sequence Point[] pPolyPoints = new Point[nPointCount]; PolygonFlags[]pPolyFlags = new PolygonFlags[nPointCount]; for (n = 0; n < nPointCount; n++) pPolyPoints[n] = new Point(); pPolyPoints[0].X = 0; pPolyPoints[0].Y = nY; pPolyFlags [0] = PolygonFlags.NORMAL; pPolyPoints[1].X = nWidth / 2; pPolyPoints[1].Y = nHeight; pPolyFlags[1] = PolygonFlags.CONTROL; pPolyPoints[2].X = nWidth / 2; pPolyPoints[2].Y = nHeight; pPolyFlags [2] = PolygonFlags.CONTROL; pPolyPoints[3].X = nWidth; pPolyPoints[3].Y = nY; pPolyFlags [3] = PolygonFlags.NORMAL; aCoords.Coordinates[i] = pPolyPoints; aCoords.Flags[i] = pPolyFlags; } try { xShapeProperties.setPropertyValue("PolyPolygonBezier", aCoords); } catch (Exception ex) { }
Content on this page is licensed under the Public Documentation License (PDL). |