@Pure
	public int computeCrossings(
			int crossings,
			double x0, double y0, double z0,
			double x1, double y1, double z1) {

        if (this.bounds == null) {
            return crossings;
        }

		int numCrosses =
				Segment3afp.computeCrossingsFromRect(crossings,
						this.bounds.getMinX(),
						this.bounds.getMinY(),
						this.bounds.getMinZ(),
						this.bounds.getMaxX(),
						this.bounds.getMaxY(),
						this.bounds.getMaxZ(),
						x0, y0, z0,
						x1, y1, z1);

        if (numCrosses == GeomConstants.SHAPE_INTERSECTS) {
			// The segment is intersecting the bounds of the shadow path.
			// We must consider the shape of shadow path now.
			final PathShadowData data = new PathShadowData(
					this.bounds.getMaxX(),
					this.bounds.getMinY(),
					this.bounds.getMaxY());

			computeCrossings1(
					this.path,
					x0, y0, z0, x1, y1, z1,
					false,
					this.path.getWindingRule(),
					this.path.getGeomFactory(),
					data);
			numCrosses = data.getCrossings();

            final int mask = this.path.getWindingRule() == PathWindingRule.NON_ZERO ? -1 : 2;
            if (numCrosses == GeomConstants.SHAPE_INTERSECTS || (numCrosses & mask) != 0) {
				// The given line is intersecting the path shape
				return GeomConstants.SHAPE_INTERSECTS;
			}

			// There is no intersection with the shadow path's shape.
			int inc = 0;
            if (data.hasX4ymin()) {
				++inc;
			}
            if (data.hasX4ymax()) {
				++inc;
			}

            if (y0 < y1) {
                numCrosses += inc;
            } else {
                numCrosses -= inc;
            }

			// Apply the previously computed crossings
			numCrosses += crossings;
		}

		return numCrosses;
	}
@ Pure public int computeCrossings ( int crossings , double x0 , double y0 , double z0 , double x1 , double y1 , double z1 ) { if ( this . bounds == null ) { return crossings ; } int numCrosses = Segment3afp . computeCrossingsFromRect ( crossings , this . bounds . getMinX ( ) , this . bounds . getMinY ( ) , this . bounds . getMinZ ( ) , this . bounds . getMaxX ( ) , this . bounds . getMaxY ( ) , this . bounds . getMaxZ ( ) , x0 , y0 , z0 , x1 , y1 , z1 ) ; if ( numCrosses == GeomConstants . SHAPE_INTERSECTS ) { final PathShadowData data = new PathShadowData ( this . bounds . getMaxX ( ) , this . bounds . getMinY ( ) , this . bounds . getMaxY ( ) ) ; computeCrossings1 ( this . path , x0 , y0 , z0 , x1 , y1 , z1 , false , this . path . getWindingRule ( ) , this . path . getGeomFactory ( ) , data ) ; numCrosses = data . getCrossings ( ) ; final int mask = this . path . getWindingRule ( ) == PathWindingRule . NON_ZERO ? - 1 : 2 ; if ( numCrosses == GeomConstants . SHAPE_INTERSECTS || ( numCrosses & mask ) != 0 ) { return GeomConstants . SHAPE_INTERSECTS ; } int inc = 0 ; if ( data . hasX4ymin ( ) ) { ++ inc ; } if ( data . hasX4ymax ( ) ) { ++ inc ; } if ( y0 < y1 ) { numCrosses += inc ; } else { numCrosses -= inc ; } numCrosses += crossings ; } return numCrosses ; }
Compute the crossings between this shadow and
the given segment.

@param crossings is the initial value of the crossings.
@param x0 is the first point of the segment.
@param y0 is the first point of the segment.
@param z0 is the first point of the segment.
@param x1 is the second point of the segment.
@param y1 is the second point of the segment.
@param z1 is the second point of the segment.
@return the crossings or {@link MathConstants#SHAPE_INTERSECTS}.