public class TLcdGXYCompositeLabelingAlgorithm extends Object implements ILcdGXYLabelingAlgorithm
ILcdGXYLabelingAlgorithm
s. It works
by assigning labeling algorithms to labels using getLabelingAlgorithmProvider()
. Labels
that have the same labeling algorithm are grouped, and then handled by this labeling algorithm.
The order in which the labeling algorithms are executed is determined by the
sortLabelingAlgorithms
method. By default it sorts
the labeling algorithms based on the priorities of the labels that are placed by
them. The highest priority of all of its labels is assigned to each labeling algorithm
(see TLcdCollectedLabelInfo.PRIORITY_KEY
).
The labeling algorithms are then sorted based on this priority. When two algorithms have the
same priority assigned, the original order in which the algorithms are given is respected.
The default labeling order can be customized by overriding the
sortLabelingAlgorithms
method.
The implementation of this labeling algorithm is thread-safe, as long as the set
ILcdGXYLabelLabelingAlgorithmProvider
is thread-safe.
Constructor and Description |
---|
TLcdGXYCompositeLabelingAlgorithm(ILcdGXYLabelLabelingAlgorithmProvider<? extends ILcdGXYLabelingAlgorithm> aAlgorithmProvider)
Creates a composite labeling algorithm that uses the given
ILcdGXYLabelLabelingAlgorithmProvider
to assign labeling algorithms to labels. |
Modifier and Type | Method and Description |
---|---|
TLcdGXYCompositeLabelingAlgorithm |
clone()
Makes
Object.clone() public. |
TLcdCollectedLabelInfoList |
collectLabelInfo(List<TLcdLabelIdentifier> aLabelsToCollect,
Graphics aGraphics,
ILcdGXYView aGXYView)
This method returns a
TLcdCollectedLabelInfoList object based
on the given list of TLcdLabelIdentifier s. |
List<TLcdLabelPlacement> |
computeLabelPlacements(TLcdCollectedLabelInfoList aLabelInfoList,
ILcdLabelConflictChecker aLabelConflictChecker,
ILcdGXYView aView)
This method computes a list of
TLcdLabelPlacement s using the given
TLcdCollectedLabelInfoList . |
ILcdGXYLabelLabelingAlgorithmProvider<? extends ILcdGXYLabelingAlgorithm> |
getLabelingAlgorithmProvider()
Returns the used labeling algorithm provider.
|
protected void |
sortLabelingAlgorithms(List<ILcdGXYLabelingAlgorithm> aLabelingAlgorithmsSFCT,
TLcdCollectedLabelInfoList aLabelInfoList)
This method sorts the given
List of labeling algorithms. |
public TLcdGXYCompositeLabelingAlgorithm(ILcdGXYLabelLabelingAlgorithmProvider<? extends ILcdGXYLabelingAlgorithm> aAlgorithmProvider)
ILcdGXYLabelLabelingAlgorithmProvider
to assign labeling algorithms to labels.aAlgorithmProvider
- a labeling algorithm provider that returns algorithms for a given label.public ILcdGXYLabelLabelingAlgorithmProvider<? extends ILcdGXYLabelingAlgorithm> getLabelingAlgorithmProvider()
protected void sortLabelingAlgorithms(List<ILcdGXYLabelingAlgorithm> aLabelingAlgorithmsSFCT, TLcdCollectedLabelInfoList aLabelInfoList)
List
of labeling algorithms. The labeling algorithms
will be used in this order to place labels. The original order of the labeling algorithms is
determined by the order of the labels in the given TLcdCollectedLabelInfoList
.
The default implementation sorts the labeling algorithms based on the priorities of the labels
that are placed by them. The highest priority of all of its labels is assigned to each labeling
algorithm (see TLcdCollectedLabelInfo.PRIORITY_KEY
).
The labeling algorithms are then sorted based on this priority. When two algorithms have the
same priority assigned, the original order in which the algorithms are given is respected.
Override this method to provide a custom label placing order.
aLabelingAlgorithmsSFCT
- the List
of labeling algorithms to be sorted.aLabelInfoList
- the label info list containing the labels to be placed the
labeling algorithms in the given List
.public TLcdGXYCompositeLabelingAlgorithm clone()
ILcdCloneable
Makes Object.clone()
public.
java.lang.Object
, it can be implemented like this:
public Object clone() {
try {
return super.clone();
} catch ( CloneNotSupportedException e ) {
// Cannot happen: extends from Object and implements Cloneable (see also Object.clone)
throw new RuntimeException( e );
}
}
clone
in interface ILcdCloneable
clone
in class Object
Object.clone()
public TLcdCollectedLabelInfoList collectLabelInfo(List<TLcdLabelIdentifier> aLabelsToCollect, Graphics aGraphics, ILcdGXYView aGXYView)
ILcdGXYLabelingAlgorithm
TLcdCollectedLabelInfoList
object based
on the given list of TLcdLabelIdentifier
s. The returned
TLcdCollectedLabelInfoList
should contain a TLcdCollectedLabelInfo
object for each label that should be placed.
Each TLcdCollectedLabelInfo
should also contain all information needed by
computeLabelPlacements
to place the labels. In order to enable
correct asynchronous label placing, all calls to the layer and the (label) painters should be
done in this method. The results should then be stored in the info objects.
It is possible that the returned TLcdCollectedLabelInfoList
doesn't contain a
TLcdCollectedLabelInfo
object for every given TLcdLabelIdentifier
.
In that case the missing labels are not placed.
collectLabelInfo
in interface ILcdGXYLabelingAlgorithm
aLabelsToCollect
- the labels for which a TLcdCollectedLabelInfoList
should
be created.aGraphics
- the graphics.aGXYView
- the view.TLcdCollectedLabelInfoList
which contains all the information needed to
place the labels.public List<TLcdLabelPlacement> computeLabelPlacements(TLcdCollectedLabelInfoList aLabelInfoList, ILcdLabelConflictChecker aLabelConflictChecker, ILcdGXYView aView)
ILcdGXYLabelingAlgorithm
TLcdLabelPlacement
s using the given
TLcdCollectedLabelInfoList
. The returned label placements
should contain a valid TLcdLabelLocation
and label bounds. They should also point
to their corresponding TLcdCollectedLabelInfo
, which in turn should point to its
corresponding TLcdCollectedLabeledObjectInfo
.
The given TLcdCollectedLabelInfoList
should always be an object created or returned
by collectLabelInfo
.
The returned List
of TLcdLabelPlacement
s contains label placements
that are either visible or invisible. When a placement is present in the list, it means that
the location should be stored. When a placement in the list is marked as visible, it means that
its location should be marked as to-be-painted.
The labels should by preference be placed in the order in which the labels are returned by
TLcdCollectedLabelInfoList.getLabels()
.
computeLabelPlacements
in interface ILcdGXYLabelingAlgorithm
aLabelInfoList
- the info object that contains all information needed to place the labels.aLabelConflictChecker
- the bounds conflict checker that can be used to detect conflicts between labels.aView
- the view.