To draw a graphic that has its own clip area, you can define your own class and its draw function as follows:
IGraphicWithClipArea::draw (IGrafPort& parent) const
{
ILinkedClipPort clipPort (&parent, fClipArea);
clipPort.draw (fPolygon);
clipPort.draw (fEllipse);
}
The graphic consists of a polygon and an ellipse.
To draw an IMDrawable that requires concatenation of multiple objects, for example, an IGrafBundle object and a model matrix, you can define your own class and its draw function as follows:
IGraphicWithBundleAndMatrix::draw (IGrafPort& parent) const
{
ILinkedMatrixPort matrixPort (&parent, fMatrix);
ILinkedBundlePort bundlePort (&matrixPort, &fBundle);
bundlePort.draw (fPolygon);
bundlePort.draw (fEllipse);
}
To create a graphic with more than one bundle (multiple linked ports that use the same parent port), you can define your own class and its draw function as follows:
IGraphicWithBundlesAndMatrix::draw (IGrafPort& parent) const
{
ILinkedMatrixPort matrixPort (&parent, fMatrix);
ILinkedBundlePort redBundlePort (&matrixPort, fRedBundle);
ILinkedBundlePort greenBundlePort (&matrixPort,
fGreenBundle);
redBundlePort.draw (fPolygon);
greenBundlePort.draw (fEllipse);
}