Ignore:
Timestamp:
2014-10-14T21:11:26+02:00 (11 years ago)
Author:
Don-vip
Message:

fix #10615 - Inner ways of multipolygon not correctly displayed (regression from r7555)

Location:
trunk/src/org/openstreetmap/josm/data/osm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r7330 r7621  
    590590    }
    591591
     592    /**
     593     * Determines if this primitive is a member of a selected relation.
     594     * @return {@code true} if this primitive is a member of a selected relation, {@code false} otherwise
     595     */
    592596    public boolean isMemberOfSelected() {
    593597        if (referrers == null)
     
    598602            if (ref instanceof Relation && ref.isSelected())
    599603                return true;
     604        }
     605        return false;
     606    }
     607
     608    /**
     609     * Determines if this primitive is an outer member of a selected multipolygon relation.
     610     * @return {@code true} if this primitive is an outer member of a selected multipolygon relation, {@code false} otherwise
     611     * @since 7621
     612     */
     613    public boolean isOuterMemberOfSelected() {
     614        if (referrers == null)
     615            return false;
     616        if (referrers instanceof OsmPrimitive) {
     617            return isOuterMemberOfMultipolygon((OsmPrimitive) referrers);
     618        }
     619        for (OsmPrimitive ref : (OsmPrimitive[]) referrers) {
     620            if (isOuterMemberOfMultipolygon(ref))
     621                return true;
     622        }
     623        return false;
     624    }
     625
     626    private boolean isOuterMemberOfMultipolygon(OsmPrimitive ref) {
     627        if (ref instanceof Relation && ref.isSelected() && ((Relation)ref).isMultipolygon()) {
     628            for (RelationMember rm : ((Relation)ref).getMembersFor(Collections.singleton(this))) {
     629                if ("outer".equals(rm.getRole())) {
     630                    return true;
     631                }
     632            }
    600633        }
    601634        return false;
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java

    r7555 r7621  
    291291    private static final int FLAG_MEMBER_OF_SELECTED = 2;
    292292    private static final int FLAG_SELECTED = 4;
     293    private static final int FLAG_OUTERMEMBER_OF_SELECTED = 8;
    293294
    294295    private static final double PHI = Math.toRadians(20);
     
    15141515            } else if (w.isSelected()) {
    15151516                add(w, FLAG_SELECTED);
     1517            } else if (w.isOuterMemberOfSelected()) {
     1518                add(w, FLAG_OUTERMEMBER_OF_SELECTED);
    15161519            } else if (w.isMemberOfSelected()) {
    15171520                add(w, FLAG_MEMBER_OF_SELECTED);
     
    15271530            } else if (r.isSelected()) {
    15281531                add(r, FLAG_SELECTED);
     1532            } else if (r.isOuterMemberOfSelected()) {
     1533                add(r, FLAG_OUTERMEMBER_OF_SELECTED);
    15291534            } else if (r.isMemberOfSelected()) {
    15301535                add(r, FLAG_MEMBER_OF_SELECTED);
     
    16541659                        StyledMapRenderer.this,
    16551660                        (r.flags & FLAG_SELECTED) != 0,
     1661                        (r.flags & FLAG_OUTERMEMBER_OF_SELECTED) != 0,
    16561662                        (r.flags & FLAG_MEMBER_OF_SELECTED) != 0
    16571663                );
Note: See TracChangeset for help on using the changeset viewer.