Ignore:
Timestamp:
2009-01-15T19:54:02+01:00 (16 years ago)
Author:
stoecker
Message:

fixed som quirks in multipolygon handling

File:
1 edited

Legend:

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

    r1263 r1267  
    117117
    118118        profilerVisibleNodes++;
    119        
     119
    120120        IconElemStyle nodeStyle = (IconElemStyle)getPrimitiveStyle(n);
    121121
    122122        if(profilerOmitDraw)
    123123            return;
    124            
     124
    125125        if (nodeStyle != null && isZoomOk(nodeStyle))
    126126            drawNode(n, nodeStyle.icon, nodeStyle.annotate, n.selected);
     
    161161
    162162        w.mappaintVisibleCode = 0;
     163        if(fillAreas)
     164            w.clearErrors();
    163165
    164166        if(wayStyle==null)
     
    185187                    profilerVisibleAreas++;
    186188                    drawArea(polygon, w.selected ? selectedColor : ((AreaElemStyle)wayStyle).color);
     189                    if(!w.isClosed())
     190                        w.putError(tr("Area style way is not closed."), true);
    187191                }
    188192                drawWay(w, ((AreaElemStyle)wayStyle).line, ((AreaElemStyle)wayStyle).color, w.selected);
     
    421425
    422426    public void visit(Relation r) {
    423    
     427
    424428        r.mappaintVisibleCode = 0;
    425429        /* TODO implement visible handling for relations too */
     
    512516        {
    513517            Boolean zoomok = isZoomOk(wayStyle);
     518            Boolean visible = false;
    514519            Collection<Way> join = new LinkedList<Way>();
    515520
     
    541546                r.putError(tr("No outer way for multipolygon ''{0}''.",
    542547                r.getName()), true);
    543             }
    544             else if(zoomok)
     548                visible = true; /* prevent killing remaining ways */
     549            }
     550            else if(zoomok)
    545551            {
    546552                class PolyData {
     
    638644                for (PolyData pd : poly)
    639645                {
    640                     drawArea(pd.get(), (pd.way.selected || r.selected) ? selectedColor
    641                     : ((AreaElemStyle)wayStyle).color);
    642                 }
     646                    if(isPolygonVisible(pd.get()))
     647                    {
     648                        drawArea(pd.get(), (pd.way.selected || r.selected) ? selectedColor
     649                        : ((AreaElemStyle)wayStyle).color);
     650                        visible = true;
     651                    }
     652                }
     653            }
     654            if(!visible) /* nothing visible, so disable relation and all its ways */
     655            {
     656                r.mappaintVisibleCode = viewid;
     657                for (Way wInner : inner)
     658                    wInner.mappaintVisibleCode = viewid;
     659                for (Way wOuter : outer)
     660                    wOuter.mappaintVisibleCode = viewid;
     661                return;
    643662            }
    644663            for (Way wInner : inner)
     
    647666                if(innerStyle == null)
    648667                {
    649                     if(zoomok)
     668                    if(zoomok && (wInner.mappaintDrawnCode != paintid
     669                    || outer.size() == 0))
    650670                    {
    651671                        drawWay(wInner, ((AreaElemStyle)wayStyle).line,
Note: See TracChangeset for help on using the changeset viewer.