Class TLcdGXYCurvedPathLabelingAlgorithm
- All Implemented Interfaces:
ILcdCloneable,ILcdGXYLabelingAlgorithm,Cloneable
TLcdGXYCurvedPathLabelPainter.
This labeling algorithm does not use the labelBoundsSFCT() method of the
given TLcdGXYCurvedPathLabelPainter to calculate the label bounds. Instead it
retrieves the settings of this label painter (halo enabled/thickness, used font, ...) to
calculate the bounds itself.
This labeling algorithm depends on TLcdGXYCurvedPathLabelLocation in order to work.
Only 3 fields of the label location are actually set :
- TLcdGXYCurvedPathLabelLocation.getLocationIndex() (to -1)
- TLcdGXYCurvedPathLabelLocation.getSubPathIndex()
- TLcdGXYCurvedPathLabelLocation.getAWTPathParameter()
This labeling algorithm will only work when a TLcdGXYCurvedPathLabelPainter is
used to actually paint the labels. This label painter also works with
TLcdGXYCurvedPathLabelLocations, and uses the 'sub path index' and
'awt path parameter' fields.
The implementation of this labeling algorithm is thread-safe, as long as the
ILcdGXYLabelingPathProvider set in the given
TLcdGXYCurvedPathLabelPainter is
thread-safe.
- Since:
- 11.0
-
Constructor Summary
ConstructorsConstructorDescriptionTLcdGXYCurvedPathLabelingAlgorithm(ILcdGXYLabelPainterProvider aGXYCurvedPathLabelPainterProvider) Creates a newTLcdGXYCurvedPathLabelingAlgorithmwhich uses the givenILcdGXYLabelPainterProviderto retrieve aTLcdGXYCurvedPathLabelPainter. -
Method Summary
Modifier and TypeMethodDescriptionclone()MakesObject.clone()public.collectLabelInfo(List<TLcdLabelIdentifier> aLabelsToCollect, Graphics aGraphics, ILcdGXYView aGXYView) This method returns aTLcdCollectedLabelInfoListobject based on the given list ofTLcdLabelIdentifiers.protected Iterator<TLcdCollectedLabelInfo> createLabelIterator(TLcdCollectedLabelInfoList aLabelInfoList, ILcdLabelConflictChecker aBoundsConflictChecker, ILcdGXYView aView) Creates a newIteratorthat iterates over theTLcdCollectedLabelInfos.protected ILcdLabelPlacementEvaluatorcreateLabelPlacementEvaluator(TLcdCollectedLabelInfoList aLabelInfoList, ILcdLabelConflictChecker aBoundsConflictChecker, ILcdGXYView aView) Creates a newILcdLabelPlacementEvaluatorusing the given parameters.protected Iterator<TLcdLabelPlacement> createLabelPlacementIterator(TLcdCollectedLabelInfo aLabel, TLcdCollectedLabelInfoList aLabelInfoList, ILcdLabelConflictChecker aBoundsConflictChecker, ILcdGXYView aView) Creates a newIteratorthat iterates over theTLcdLabelPlacements for the given label.Returns the label placing priority provider.doubleReturns the minimum gap between two labels on the same path.booleanReturns if the algorithm tries to reuse the previous label location.voidsetLabelPriorityProvider(ILcdGXYMultiLabelPriorityProvider aLabelPriorityProvider) Sets the label placing priority provider, specifying the priority for individual labels.voidsetMinimumGap(double aMinimumGap) Sets the minimum gap between two labels on the same path.voidsetReusePreviousLocations(boolean aReusePreviousLocations) Sets if the algorithm tries to reuse the previous label location.Methods inherited from class com.luciad.view.gxy.labeling.algorithm.discrete.ALcdGXYDiscretePlacementsLabelingAlgorithm
computeLabelPlacements
-
Constructor Details
-
TLcdGXYCurvedPathLabelingAlgorithm
public TLcdGXYCurvedPathLabelingAlgorithm(ILcdGXYLabelPainterProvider aGXYCurvedPathLabelPainterProvider) Creates a newTLcdGXYCurvedPathLabelingAlgorithmwhich uses the givenILcdGXYLabelPainterProviderto retrieve aTLcdGXYCurvedPathLabelPainter. This label painter can then be used to retrieve the bounds of a label.- Parameters:
aGXYCurvedPathLabelPainterProvider- a label painter provider which should returnTLcdGXYCurvedPathLabelPainters.
-
-
Method Details
-
getMinimumGap
public double getMinimumGap()Returns the minimum gap between two labels on the same path.- Returns:
- the minimum gap between two labels on the same path.
- Since:
- 2021.1
- See Also:
-
setMinimumGap
public void setMinimumGap(double aMinimumGap) Sets the minimum gap between two labels on the same path. This distance is expressed in pixels and should be positive.The default value is 100 pixels.
- Parameters:
aMinimumGap- the minimal gap between two labels on the same path.- Since:
- 2021.1
-
isReusePreviousLocations
public boolean isReusePreviousLocations()Returns if the algorithm tries to reuse the previous label location.- Returns:
- if the algorithm tries to reuse the previous label location.
- See Also:
-
setReusePreviousLocations
public void setReusePreviousLocations(boolean aReusePreviousLocations) Sets if the algorithm tries to reuse the previous label location.- Parameters:
aReusePreviousLocations-trueif the algorithm should reuse the previous label location, andfalseotherwise.- See Also:
-
clone
Description copied from interface:ILcdCloneableMakes
When for example extending fromObject.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 ); } }- Specified by:
clonein interfaceILcdCloneable- See Also:
-
collectLabelInfo
public TLcdCollectedLabelInfoList collectLabelInfo(List<TLcdLabelIdentifier> aLabelsToCollect, Graphics aGraphics, ILcdGXYView aGXYView) Description copied from interface:ILcdGXYLabelingAlgorithmThis method returns aTLcdCollectedLabelInfoListobject based on the given list ofTLcdLabelIdentifiers. The returnedTLcdCollectedLabelInfoListshould contain aTLcdCollectedLabelInfoobject for each label that should be placed.Each
TLcdCollectedLabelInfoshould also contain all information needed bycomputeLabelPlacementsto 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
TLcdCollectedLabelInfoListdoesn't contain aTLcdCollectedLabelInfoobject for every givenTLcdLabelIdentifier. In that case the missing labels are not placed.- Specified by:
collectLabelInfoin interfaceILcdGXYLabelingAlgorithm- Parameters:
aLabelsToCollect- the labels for which aTLcdCollectedLabelInfoListshould be created.aGraphics- the graphics.aGXYView- the view.- Returns:
- a
TLcdCollectedLabelInfoListwhich contains all the information needed to place the labels.
-
createLabelIterator
protected Iterator<TLcdCollectedLabelInfo> createLabelIterator(TLcdCollectedLabelInfoList aLabelInfoList, ILcdLabelConflictChecker aBoundsConflictChecker, ILcdGXYView aView) Description copied from class:ALcdGXYDiscretePlacementsLabelingAlgorithmCreates a newIteratorthat iterates over theTLcdCollectedLabelInfos. The abstract labeling algorithm will continue iterating overTLcdCollectedLabelInfos as long asIterator.hasNext()returnstrue. When it returnsfalse, no more labels will be tried, andcomputeLabelPlacementsreturns.Iterator.hasNext()should always be called before callingIterator.next(), and if it returnstrue,Iterator.next()should never returnnull.The implementation of this method should be as independent as possible. It should not rely on
createLabelPlacementIteratororcreateLabelPlacementEvaluator. Not respecting this might result in unexpected behaviour when wrapping or extending this class.The returned
TLcdCollectedLabelInfoshould be correctly initialized, i.e. it should contain all information needed to create validTLcdLabelPlacements usingcreateLabelPlacementIterator. It should also always point to its correspondingTLcdCollectedLabeledObjectInfo.Override this method to provide a custom implementation.
- Specified by:
createLabelIteratorin classALcdGXYDiscretePlacementsLabelingAlgorithm- Parameters:
aLabelInfoList- the label infos object that contains all information needed to place the labels.aBoundsConflictChecker- the bounds conflict checker to be used when evaluating label placements.aView- the view.- Returns:
- a new
Iteratorthat iterates overTLcdCollectedLabelInfos.
-
createLabelPlacementIterator
protected Iterator<TLcdLabelPlacement> createLabelPlacementIterator(TLcdCollectedLabelInfo aLabel, TLcdCollectedLabelInfoList aLabelInfoList, ILcdLabelConflictChecker aBoundsConflictChecker, ILcdGXYView aView) Description copied from class:ALcdGXYDiscretePlacementsLabelingAlgorithmCreates a newIteratorthat iterates over theTLcdLabelPlacements for the given label. The abstract labeling algorithm will continue iterating overTLcdLabelPlacements as long asIterator.hasNext()returnstrue. When it returnsfalse, a new label will be tried.Iterator.hasNext()should always be called before callingIterator.next(), and if it returnstrue,Iterator.next()should never returnnull.The implementation of this method should be as independent as possible. It should not rely on
createLabelIteratororcreateLabelPlacementEvaluator. Not respecting this might result in unexpected behaviour when wrapping or extending this class.The returned
TLcdLabelPlacementshould be correctly initialized, i.e. it should at least be able to return a valid label location, bounds rectangle and bounds rotation. It should also reference its correspondingTLcdCollectedLabelInfo.Override this method to provide a custom implementation.
- Specified by:
createLabelPlacementIteratorin classALcdGXYDiscretePlacementsLabelingAlgorithm- Parameters:
aLabel- the label for which an iterator should be created.aLabelInfoList- the info object that contains all information needed to place the labels.aBoundsConflictChecker- the bounds conflict checker to be used when evaluating label placements.aView- the view.- Returns:
- a new
Iteratorthat iterates overTLcdLabelPlacements.
-
createLabelPlacementEvaluator
protected ILcdLabelPlacementEvaluator createLabelPlacementEvaluator(TLcdCollectedLabelInfoList aLabelInfoList, ILcdLabelConflictChecker aBoundsConflictChecker, ILcdGXYView aView) Description copied from class:ALcdGXYDiscretePlacementsLabelingAlgorithmCreates a newILcdLabelPlacementEvaluatorusing the given parameters. It evaluates the placements returned bycreateLabelPlacementIterator, and returns aPlacementResultto denote if the placement should be used for its label or not.The following actions are undertaken for the following placement results :
PlacementResult.SUCCESS: the given label placement will be used for its label, it will be added to the list of placed labels, and it will be added to the givenILcdLabelConflictChecker. After that,ILcdLabelPlacementEvaluator.placementAppliedwill be called and no more placements are tried for the label.PlacementResult.FALLBACK: the abstract algorithm will try to find an other placements which returnsPlacementResult.SUCCESS. When no such placement is found, this placement will be added to the list of placed labels, and it will be added to the givenILcdLabelConflictChecker. After that,ILcdLabelPlacementEvaluator.placementAppliedwill be called.PlacementResult.TRY_NEW_PLACEMENT: the abstract algorithm will try to find an other placement which returnsPlacementResult.SUCCESSorPlacementResult.FALLBACK. When no such placement is found,ILcdLabelPlacementEvaluator.noPlacementAppliedis called.PlacementResult.FAILED: the abstract algorithm will immediately callILcdLabelPlacementEvaluator.noPlacementAppliedand will not try to find other placements for the label.
Override this method to provide a custom implementation.
- Specified by:
createLabelPlacementEvaluatorin classALcdGXYDiscretePlacementsLabelingAlgorithm- Parameters:
aLabelInfoList- the info object that contains all information needed to place the labels.aBoundsConflictChecker- the bounds conflict checker to be used when evaluating label placements.aView- the view- Returns:
- a new LabelPlacementEvaluator
- See Also:
-
getLabelPriorityProvider
Returns the label placing priority provider.- Returns:
- the label placing priority provider.
- See Also:
-
setLabelPriorityProvider
Sets the label placing priority provider, specifying the priority for individual labels. This priority provider specifies the order in which labels are placed. In the event labels overlap, those with higher priority are painted on top of labels with lower priority. So lower priority labels are the first candidates if labels need to be obscured.When no label priority provider is set, no label priorities are set.
The priority provider is used to sort the list of labels before their placements are computed.
- Parameters:
aLabelPriorityProvider- The priority provider to set.
-