Changeset 15069 in josm for trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
- Timestamp:
- 2019-05-11T11:15:49+02:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
r15068 r15069 5 5 6 6 import java.text.MessageFormat; 7 import java.util.ArrayList; 7 8 import java.util.Collection; 8 9 import java.util.Collections; … … 313 314 314 315 private class ContainsFinder extends AbstractFinder { 316 protected List<IPrimitive> toCheck; 317 315 318 protected ContainsFinder(Environment e) { 316 319 super(e); … … 319 322 320 323 @Override 321 public void visit(INode n) { 322 if (left.matches(new Environment(n).withParent(e.osm)) 323 && ((e.osm instanceof IWay && Geometry.nodeInsidePolygon(n, ((IWay<?>) e.osm).getNodes())) 324 || (e.osm instanceof Relation && ( 325 (Relation) e.osm).isMultipolygon() && Geometry.isNodeInsideMultiPolygon(n, (Relation) e.osm, null)))) { 326 addToChildren(e, n); 327 } 328 } 329 330 @Override 331 public void visit(IWay<?> w) { 332 if (left.matches(new Environment(w).withParent(e.osm)) 333 && ((e.osm instanceof IWay && Geometry.PolygonIntersection.FIRST_INSIDE_SECOND.equals( 334 Geometry.polygonIntersection(w.getNodes(), ((IWay<?>) e.osm).getNodes()))) 335 || (e.osm instanceof Relation && ( 336 (Relation) e.osm).isMultipolygon() 337 && Geometry.isPolygonInsideMultiPolygon(w.getNodes(), (Relation) e.osm, null)))) { 338 addToChildren(e, w); 324 public void visit(Collection<? extends IPrimitive> primitives) { 325 for (IPrimitive p : primitives) { 326 if (p != e.osm && isPrimitiveUsable(p) && left.matches(new Environment(p).withParent(e.osm))) { 327 if (toCheck == null) { 328 toCheck = new ArrayList<>(); 329 } 330 toCheck.add(p); 331 } 332 } 333 } 334 335 void execGeometryTests() { 336 if (toCheck == null || toCheck.isEmpty()) 337 return; 338 339 if (e.osm instanceof IWay) { 340 for (IPrimitive p : Geometry.filterInsidePolygon(toCheck, (IWay<?>) e.osm)) { 341 addToChildren(e, p); 342 } 343 } else if (e.osm instanceof Relation) { 344 for (IPrimitive p : Geometry.filterInsideMultipolygon(toCheck, (Relation) e.osm)) { 345 addToChildren(e, p); 346 } 339 347 } 340 348 } … … 364 372 containsFinder.visit(e.osm.getDataSet().searchWays(e.osm.getBBox())); 365 373 } 374 if (((OptimizedGeneralSelector) left).matchesBase(OsmPrimitiveType.RELATION)) { 375 containsFinder.visit(e.osm.getDataSet().searchRelations(e.osm.getBBox())); 376 } 366 377 } else { 367 378 // use slow test 368 379 containsFinder.visit(e.osm.getDataSet().allPrimitives()); 369 380 } 370 381 containsFinder.execGeometryTests(); 371 382 return e.children != null; 372 383
Note:
See TracChangeset
for help on using the changeset viewer.