Ignore:
Timestamp:
2018-05-21T20:42:27+02:00 (6 years ago)
Author:
Don-vip
Message:

support rendering of IPrimitive

Location:
trunk/src/org/openstreetmap/josm/data/osm/visitor/paint
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java

    r13673 r13810  
    1010
    1111import org.openstreetmap.josm.data.osm.BBox;
    12 import org.openstreetmap.josm.data.osm.DataSet;
    1312import org.openstreetmap.josm.data.osm.INode;
    14 import org.openstreetmap.josm.data.osm.Node;
    15 import org.openstreetmap.josm.data.osm.Way;
     13import org.openstreetmap.josm.data.osm.IWay;
     14import org.openstreetmap.josm.data.osm.OsmData;
    1615import org.openstreetmap.josm.data.osm.WaySegment;
    1716import org.openstreetmap.josm.gui.MapViewState;
     
    127126     * @param data The data set being rendered.
    128127     * @param bbox The bounding box being displayed.
    129      */
    130     public void drawVirtualNodes(DataSet data, BBox bbox) {
     128     * @since 13810 (signature)
     129     */
     130    public void drawVirtualNodes(OsmData<?, ?, ?, ?> data, BBox bbox) {
    131131        if (virtualNodeSize == 0 || data == null || bbox == null || data.isLocked())
    132132            return;
    133133        // print normal virtual nodes
    134134        GeneralPath path = new GeneralPath();
    135         for (Way osm : data.searchWays(bbox)) {
     135        for (IWay<?> osm : data.searchWays(bbox)) {
    136136            if (osm.isUsable() && !osm.isDisabledAndHidden() && !osm.isDisabled()) {
    137137                visitVirtual(path, osm);
     
    222222     * @param w The ways to draw node for.
    223223     * @since 10827
    224      */
    225     public void visitVirtual(Path2D path, Way w) {
    226         Iterator<Node> it = w.getNodes().iterator();
     224     * @since 13810 (signature)
     225     */
     226    public void visitVirtual(Path2D path, IWay<?> w) {
     227        Iterator<? extends INode> it = w.getNodes().iterator();
    227228        MapViewPoint lastP = null;
    228229        while (it.hasNext()) {
    229             Node n = it.next();
     230            INode n = it.next();
    230231            if (n.isLatLonKnown()) {
    231232                MapViewPoint p = mapState.getPointFor(n);
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/ComputeStyleListWorker.java

    r12964 r13810  
    88import java.util.concurrent.RecursiveTask;
    99
    10 import org.openstreetmap.josm.data.osm.Node;
    11 import org.openstreetmap.josm.data.osm.OsmPrimitive;
    12 import org.openstreetmap.josm.data.osm.Relation;
    13 import org.openstreetmap.josm.data.osm.Way;
    14 import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
     10import org.openstreetmap.josm.data.osm.INode;
     11import org.openstreetmap.josm.data.osm.IPrimitive;
     12import org.openstreetmap.josm.data.osm.IRelation;
     13import org.openstreetmap.josm.data.osm.IWay;
     14import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
    1515import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer.StyleRecord;
    1616import org.openstreetmap.josm.gui.NavigatableComponent;
     
    3232 * @since 11914 (extracted from StyledMapRenderer)
    3333 */
    34 public class ComputeStyleListWorker extends RecursiveTask<List<StyleRecord>> implements OsmPrimitiveVisitor {
    35     private final transient List<? extends OsmPrimitive> input;
     34public class ComputeStyleListWorker extends RecursiveTask<List<StyleRecord>> implements PrimitiveVisitor {
     35    private final transient List<? extends IPrimitive> input;
    3636    private final transient List<StyleRecord> output;
    3737
     
    5252     * @param output the list of styles to which styles will be added
    5353     * @param directExecutionTaskSize the threshold deciding whether to subdivide the tasks
     54     * @since 13810 (signature)
    5455     */
    5556    ComputeStyleListWorker(double circum, NavigatableComponent nc,
    56             final List<? extends OsmPrimitive> input, List<StyleRecord> output, int directExecutionTaskSize) {
     57            final List<? extends IPrimitive> input, List<StyleRecord> output, int directExecutionTaskSize) {
    5758        this(circum, nc, input, output, directExecutionTaskSize, MapPaintStyles.getStyles());
    5859    }
     
    6768     * @param styles the {@link ElemStyles} instance used to generate primitive {@link StyleElement}s.
    6869     * @since 12964
     70     * @since 13810 (signature)
    6971     */
    7072    ComputeStyleListWorker(double circum, NavigatableComponent nc,
    71             final List<? extends OsmPrimitive> input, List<StyleRecord> output, int directExecutionTaskSize,
     73            final List<? extends IPrimitive> input, List<StyleRecord> output, int directExecutionTaskSize,
    7274            ElemStyles styles) {
    7375        this.circum = circum;
     
    108110        MapCSSStyleSource.STYLE_SOURCE_LOCK.readLock().lock();
    109111        try {
    110             for (final OsmPrimitive osm : input) {
     112            for (final IPrimitive osm : input) {
    111113                acceptDrawable(osm);
    112114            }
     
    119121    }
    120122
    121     private void acceptDrawable(final OsmPrimitive osm) {
     123    private void acceptDrawable(final IPrimitive osm) {
    122124        try {
    123125            if (osm.isDrawable()) {
     
    130132
    131133    @Override
    132     public void visit(Node n) {
     134    public void visit(INode n) {
    133135        add(n, StyledMapRenderer.computeFlags(n, false));
    134136    }
    135137
    136138    @Override
    137     public void visit(Way w) {
     139    public void visit(IWay<?> w) {
    138140        add(w, StyledMapRenderer.computeFlags(w, true));
    139141    }
    140142
    141143    @Override
    142     public void visit(Relation r) {
     144    public void visit(IRelation<?> r) {
    143145        add(r, StyledMapRenderer.computeFlags(r, true));
    144146    }
     
    148150     * @param osm node
    149151     * @param flags flags
     152     * @since 13810 (signature)
    150153     */
    151     public void add(Node osm, int flags) {
     154    public void add(INode osm, int flags) {
    152155        StyleElementList sl = styles.get(osm, circum, nc);
    153156        for (StyleElement s : sl) {
     
    160163     * @param osm way
    161164     * @param flags flags
     165     * @since 13810 (signature)
    162166     */
    163     public void add(Way osm, int flags) {
     167    public void add(IWay<?> osm, int flags) {
    164168        StyleElementList sl = styles.get(osm, circum, nc);
    165169        for (StyleElement s : sl) {
     
    174178     * @param osm relation
    175179     * @param flags flags
     180     * @since 13810 (signature)
    176181     */
    177     public void add(Relation osm, int flags) {
     182    public void add(IRelation<?> osm, int flags) {
    178183        StyleElementList sl = styles.get(osm, circum, nc);
    179184        for (StyleElement s : sl) {
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/Rendering.java

    r10600 r13810  
    33
    44import org.openstreetmap.josm.data.Bounds;
    5 import org.openstreetmap.josm.data.osm.DataSet;
     5import org.openstreetmap.josm.data.osm.OsmData;
    66
    77/**
    8  * <p>An object which can render data provided by a {@link DataSet}.</p>
     8 * <p>An object which can render data provided by a {@link OsmData}.</p>
    99 * @since  4087 (creation)
    1010 * @since 10600 (functional interface)
     
    1919     * @param bbox the bounding box for the data to be rendered. Only objects within or intersecting
    2020     * with {@code bbox} are rendered
     21     * @since 13810 (signature)
    2122     */
    22     void render(DataSet data, boolean renderVirtualNodes, Bounds bbox);
     23    void render(OsmData<?, ?, ?, ?> data, boolean renderVirtualNodes, Bounds bbox);
    2324}
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java

    r13676 r13810  
    4646import org.openstreetmap.josm.data.coor.EastNorth;
    4747import org.openstreetmap.josm.data.osm.BBox;
    48 import org.openstreetmap.josm.data.osm.DataSet;
    4948import org.openstreetmap.josm.data.osm.INode;
    5049import org.openstreetmap.josm.data.osm.IPrimitive;
     50import org.openstreetmap.josm.data.osm.IRelation;
     51import org.openstreetmap.josm.data.osm.IWay;
    5152import org.openstreetmap.josm.data.osm.Node;
     53import org.openstreetmap.josm.data.osm.OsmData;
    5254import org.openstreetmap.josm.data.osm.OsmPrimitive;
    5355import org.openstreetmap.josm.data.osm.OsmUtils;
     
    113115    public static class StyleRecord implements Comparable<StyleRecord> {
    114116        private final StyleElement style;
    115         private final OsmPrimitive osm;
     117        private final IPrimitive osm;
    116118        private final int flags;
    117119        private final long order;
    118120
    119         StyleRecord(StyleElement style, OsmPrimitive osm, int flags) {
     121        StyleRecord(StyleElement style, IPrimitive osm, int flags) {
    120122            this.style = style;
    121123            this.osm = osm;
     
    15871589
    15881590    @Override
    1589     public void render(final DataSet data, boolean renderVirtualNodes, Bounds bounds) {
     1591    public void render(final OsmData<?, ?, ?, ?> data, boolean renderVirtualNodes, Bounds bounds) {
    15901592        RenderBenchmarkCollector benchmark = benchmarkFactory.get();
    15911593        BBox bbox = bounds.toBBox();
     
    16071609    }
    16081610
    1609     private void paintWithLock(final DataSet data, boolean renderVirtualNodes, RenderBenchmarkCollector benchmark,
     1611    private void paintWithLock(final OsmData<?, ?, ?, ?> data, boolean renderVirtualNodes, RenderBenchmarkCollector benchmark,
    16101612            BBox bbox) {
    16111613        try {
     
    16141616            benchmark.renderStart(circum);
    16151617
    1616             List<Node> nodes = data.searchNodes(bbox);
    1617             List<Way> ways = data.searchWays(bbox);
    1618             List<Relation> relations = data.searchRelations(bbox);
     1618            List<? extends INode> nodes = data.searchNodes(bbox);
     1619            List<? extends IWay<?>> ways = data.searchWays(bbox);
     1620            List<? extends IRelation<?>> relations = data.searchRelations(bbox);
    16191621
    16201622            final List<StyleRecord> allStyleElems = new ArrayList<>(nodes.size()+ways.size()+relations.size());
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/WireframeMapRenderer.java

    r13673 r13810  
    1818import org.openstreetmap.josm.data.Bounds;
    1919import org.openstreetmap.josm.data.osm.BBox;
    20 import org.openstreetmap.josm.data.osm.DataSet;
    2120import org.openstreetmap.josm.data.osm.INode;
    22 import org.openstreetmap.josm.data.osm.Node;
    23 import org.openstreetmap.josm.data.osm.OsmPrimitive;
    24 import org.openstreetmap.josm.data.osm.Relation;
    25 import org.openstreetmap.josm.data.osm.RelationMember;
    26 import org.openstreetmap.josm.data.osm.Way;
     21import org.openstreetmap.josm.data.osm.IPrimitive;
     22import org.openstreetmap.josm.data.osm.IRelation;
     23import org.openstreetmap.josm.data.osm.IRelationMember;
     24import org.openstreetmap.josm.data.osm.IWay;
     25import org.openstreetmap.josm.data.osm.OsmData;
    2726import org.openstreetmap.josm.data.osm.WaySegment;
    28 import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
     27import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
    2928import org.openstreetmap.josm.gui.MapViewState.MapViewPoint;
    3029import org.openstreetmap.josm.gui.MapViewState.MapViewRectangle;
     
    3938 * @since 23
    4039 */
    41 public class WireframeMapRenderer extends AbstractMapRenderer implements OsmPrimitiveVisitor {
     40public class WireframeMapRenderer extends AbstractMapRenderer implements PrimitiveVisitor {
    4241
    4342    /** Color Preference for ways not matching any other group */
     
    8483    /** Path store to draw subsequent segments of same color as one <code>Path</code>. */
    8584    protected MapPath2D currentPath = new MapPath2D();
    86     /**
    87       * <code>DataSet</code> passed to the @{link render} function to overcome the argument
    88       * limitations of @{link Visitor} interface. Only valid until end of rendering call.
    89       */
    90     private DataSet ds;
    9185
    9286    /** Helper variable for {@link #drawSegment} */
    9387    private static final ArrowPaintHelper ARROW_PAINT_HELPER = new ArrowPaintHelper(Utils.toRadians(20), 10);
    9488
    95     /** Helper variable for {@link #visit(Relation)} */
     89    /** Helper variable for {@link #visit(IRelation)} */
    9690    private final Stroke relatedWayStroke = new BasicStroke(
    9791            4, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL);
     
    153147
    154148    @Override
    155     public void render(DataSet data, boolean virtual, Bounds bounds) {
     149    public void render(OsmData<?, ?, ?, ?> data, boolean virtual, Bounds bounds) {
    156150        BBox bbox = bounds.toBBox();
    157         this.ds = data;
    158151        Rectangle clip = g.getClipBounds();
    159152        clip.grow(50, 50);
     
    161154        getSettings(virtual);
    162155
    163         for (final Relation rel : data.searchRelations(bbox)) {
    164             if (rel.isDrawable() && !ds.isSelected(rel) && !rel.isDisabledAndHidden()) {
     156        for (final IRelation<?> rel : data.searchRelations(bbox)) {
     157            if (rel.isDrawable() && !rel.isSelected() && !rel.isDisabledAndHidden()) {
    165158                rel.accept(this);
    166159            }
     
    168161
    169162        // draw tagged ways first, then untagged ways, then highlighted ways
    170         List<Way> highlightedWays = new ArrayList<>();
    171         List<Way> untaggedWays = new ArrayList<>();
    172 
    173         for (final Way way : data.searchWays(bbox)) {
    174             if (way.isDrawable() && !ds.isSelected(way) && !way.isDisabledAndHidden()) {
     163        List<IWay<?>> highlightedWays = new ArrayList<>();
     164        List<IWay<?>> untaggedWays = new ArrayList<>();
     165
     166        for (final IWay<?> way : data.searchWays(bbox)) {
     167            if (way.isDrawable() && !way.isSelected() && !way.isDisabledAndHidden()) {
    175168                if (way.isHighlighted()) {
    176169                    highlightedWays.add(way);
     
    185178
    186179        // Display highlighted ways after the other ones (fix #8276)
    187         List<Way> specialWays = new ArrayList<>(untaggedWays);
     180        List<IWay<?>> specialWays = new ArrayList<>(untaggedWays);
    188181        specialWays.addAll(highlightedWays);
    189         for (final Way way : specialWays) {
     182        for (final IWay<?> way : specialWays) {
    190183            way.accept(this);
    191184        }
     
    193186        displaySegments();
    194187
    195         for (final OsmPrimitive osm : data.getSelected()) {
     188        for (final IPrimitive osm : data.getSelected()) {
    196189            if (osm.isDrawable()) {
    197190                osm.accept(this);
     
    200193        displaySegments();
    201194
    202         for (final OsmPrimitive osm: data.searchNodes(bbox)) {
    203             if (osm.isDrawable() && !ds.isSelected(osm) && !osm.isDisabledAndHidden()) {
     195        for (final INode osm: data.searchNodes(bbox)) {
     196            if (osm.isDrawable() && !osm.isSelected() && !osm.isDisabledAndHidden()) {
    204197                osm.accept(this);
    205198            }
     
    237230     */
    238231    @Override
    239     public void visit(Node n) {
     232    public void visit(INode n) {
    240233        if (n.isIncomplete()) return;
    241234
     
    265258            }
    266259
    267             final int size = max(ds.isSelected(n) ? selectedNodeSize : 0,
     260            final int size = max(n.isSelected() ? selectedNodeSize : 0,
    268261                    isNodeTagged(n) ? taggedNodeSize : 0,
    269262                    n.isConnectionNode() ? connectionNodeSize : 0,
    270263                    unselectedNodeSize);
    271264
    272             final boolean fill = (ds.isSelected(n) && fillSelectedNode) ||
     265            final boolean fill = (n.isSelected() && fillSelectedNode) ||
    273266            (isNodeTagged(n) && fillTaggedNode) ||
    274267            (n.isConnectionNode() && fillConnectionNode) ||
     
    279272    }
    280273
    281     private static boolean isNodeTagged(Node n) {
     274    private static boolean isNodeTagged(INode n) {
    282275        return n.isTagged() || n.isAnnotated();
    283276    }
     
    288281     */
    289282    @Override
    290     public void visit(Way w) {
     283    public void visit(IWay<?> w) {
    291284        if (w.isIncomplete() || w.getNodesCount() < 2)
    292285            return;
     
    295288           (even if the tag is negated as in oneway=false) or the way is selected */
    296289
    297         boolean showThisDirectionArrow = ds.isSelected(w) || showDirectionArrow;
     290        boolean showThisDirectionArrow = w.isSelected() || showDirectionArrow;
    298291        /* head only takes over control if the option is true,
    299292           the direction should be shown at all and not only because it's selected */
    300         boolean showOnlyHeadArrowOnly = showThisDirectionArrow && showHeadArrowOnly && !ds.isSelected(w);
     293        boolean showOnlyHeadArrowOnly = showThisDirectionArrow && showHeadArrowOnly && !w.isSelected();
    301294        Color wayColor;
    302295
     
    315308        }
    316309
    317         Iterator<Node> it = w.getNodes().iterator();
     310        Iterator<? extends INode> it = w.getNodes().iterator();
    318311        if (it.hasNext()) {
    319312            MapViewPoint lastP = mapState.getPointFor(it.next());
     
    340333     */
    341334    @Override
    342     public void visit(Relation r) {
     335    public void visit(IRelation<?> r) {
    343336        if (r.isIncomplete()) return;
    344337
     
    355348        g.setColor(col);
    356349
    357         for (RelationMember m : r.getMembers()) {
     350        for (IRelationMember<?> m : r.getMembers()) {
    358351            if (m.getMember().isIncomplete() || !m.getMember().isDrawable()) {
    359352                continue;
     
    361354
    362355            if (m.isNode()) {
    363                 MapViewPoint p = mapState.getPointFor(m.getNode());
     356                MapViewPoint p = mapState.getPointFor((INode) m.getMember());
    364357                if (p.isInView()) {
    365358                    g.draw(new Ellipse2D.Double(p.getInViewX()-4, p.getInViewY()-4, 9, 9));
     
    370363
    371364                boolean first = true;
    372                 for (Node n : m.getWay().getNodes()) {
     365                for (INode n : ((IWay<?>) m.getMember()).getNodes()) {
    373366                    if (!n.isDrawable()) {
    374367                        continue;
Note: See TracChangeset for help on using the changeset viewer.