XPS OM Geometry Objects
This topic provides an example of using the geometry-related interfaces in an XPS OM.
Create a rectangular geometry
The following code example creates a geometry object that describes a closed rectangular shape.
HRESULT hr = S_OK;
IXpsOMVisualCollection *canvasVisuals = NULL;
IXpsOMPath *pathSidebar = NULL;
IXpsOMGeometry *xpsGeometry = NULL;
IXpsOMGeometryFigure *xpsFigure = NULL;
IXpsOMGeometryFigureCollection *xpsFigureCollection = NULL;
IXpsOMSolidColorBrush *sidebarBrush = NULL;
XPS_POINT startPoint;
XPS_RECT shape;
// define the rectangle
shape.x = 10.0f;
shape.y = 10.0f;
shape.height = 100.0f;
shape.width = 200.0f;
// set the start point
startPoint.x = shape.x;
startPoint.y = shape.y;
// define the segment types to be straight lines
XPS_SEGMENT_TYPE sidebarSegmentTypes[3] = {
XPS_SEGMENT_TYPE_LINE,
XPS_SEGMENT_TYPE_LINE,
XPS_SEGMENT_TYPE_LINE
};
// define the points of the rectangular shape
// other than the start point
FLOAT sidebarSegmentData[6] = {
shape.x, shape.y + shape.height,
shape.x + shape.width, shape.y + shape.height,
shape.x + shape.width, shape.y
};
// set the lines to be solid (not stroked)
BOOL sidebarSegmentStrokes[3] = {
FALSE, FALSE, FALSE
};
// create the geometry figure interface
hr = xpsFactory->CreateGeometryFigure( &startPoint, &xpsFigure );
// close the figure so that the last segment point is
// connected to the start point
hr = xpsFigure->SetIsClosed( TRUE );
// set the shape to be filled by the fill brush
hr = xpsFigure->SetIsFilled( TRUE );
// set the segments using the information defined above
hr = xpsFigure->SetSegments(
3,
6,
sidebarSegmentTypes,
sidebarSegmentData,
sidebarSegmentStrokes);
// create a geometry using the figure just created
hr = xpsFactory->CreateGeometry(&xpsGeometry);
// get a pointer to the figure collection
hr = xpsGeometry->GetFigures(&xpsFigureCollection);
// and add the figure of the rectangle to the geometry
hr = xpsFigureCollection->Append(xpsFigure);
For more information about adding segments to a geometry figure, see the code examples in the IXpsOMGeometryFigure::GetSegmentData Method and IXpsOMGeometryFigure::SetSegments Method reference topics.
Related topics
IXpsOMGeometryFigure Interface
IXpsOMGeometryFigure::GetSegmentData Method