Making a Renderer Persistent
There are certain situations where you might want to save a renderer. When you work in load-on-demand mode, for example, only the parameters necessary for loading the graphic objects in the layer are saved, not the objects themselves. Load-on-demand is described in
Using Load-On-Demand.
If the graphic objects are created using a specific renderer, you must save that renderer to render the objects in the same way the next time they are loaded. The class
IlvSDOLayer, for example, lets you specify a renderer that will be saved with the layer. See
IlvSDOLayer::setFeatureRenderer in the
Reference Manual.
The
ColorLineRenderer presented in the previous section derives from the
IlvFeatureRenderer abstract class. This class specifies three methods related to persistence: the
isPersistent method specifies whether the renderer is persistent, the
write method that writes the renderer in an
IlvOutputFile, and the
save method that saves the class and the renderer. To implement a persistent renderer, you then have to overwrite the
isPersistent method and the
write method.
IlvBoolean ColorLineRenderer::isPersistent() { return IlvTrue; } void ColorLineRenderer::write(IlvOutputFile& output) const { IlvWriteString(output, _attributeName); if(_colorModel->isPersistent()) { output.getStream() << 1 << IlvSpc(); _colorModel->write(output); } else { output.getStream() << 1 << IlvSpc(); IlvWarning("colormodel not saved"); } } |
You can, however, build the renderer using any other color model, which might not be persistent. In this case, the color model is not saved and the write method generates a warning.
If the color model is not saved with the renderer, a default color model is created when the renderer is read.
ColorLineRenderer::ColorLineRenderer(IlvInputFile& stream) :IlvFeatureRenderer(stream.getDisplay(), IlvTrue) { char* s = IlvReadString(stream); if(s) _attributeName = strcpy(new char[strlen(s)+1], s); IlvInt hasColorModel; stream.getStream() >> hasColorModel; if(hasColorModel) { _colorModel = (IlvMapColorModel*) IlvMapClassInfo::ReadObject(IlvMapColorModel::ClassInfo(), stream, 0); } else { _colorModel = IlvIntervalColorModel::MakeElevationColorModel(); } } |
Version 6.3
Copyright © 2018, Rogue Wave Software, Inc. All Rights Reserved.