@Override public List<CurveSegment> getCurveSegments() { return baseCurve.getCurveSegments(); }
@Override public synchronized List<CurveSegment> getCurveSegments() { if ( segments.isEmpty() ) { for ( final Curve curve : members ) { segments.addAll( curve.getCurveSegments() ); } } return segments; }
@Override public List<CurveSegment> getCurveSegments() { List<CurveSegment> allSegments = new LinkedList<CurveSegment>(); for ( Curve member : memberCurves ) { allSegments.addAll( member.getCurveSegments() ); } return allSegments; }
@Override public List<CurveSegment> getCurveSegments() { return getReferencedObject().getCurveSegments(); }
void render( PointStyling styling, Curve curve ) { if ( curve.getCurveSegments().size() != 1 || !( curve.getCurveSegments().get( 0 ) instanceof LineStringSegment ) ) { // TODO handle non-linear and multiple curve segments throw new IllegalArgumentException(); } LineStringSegment segment = ( (LineStringSegment) curve.getCurveSegments().get( 0 ) ); // coordinate representation is still subject to change... for ( Point point : segment.getControlPoints() ) { point.setCoordinateSystem( curve.getCoordinateSystem() ); renderer.render( styling, point ); } }
/** * Returns a JTS geometry for the given {@link Curve} (which is linearized first). * * @param curve * {@link Curve} that consists of {@link LineStringSegment} and {@link Arc} segments only * @return linear JTS curve geometry * @throws IllegalArgumentException * if the given input ring contains other segment types than {@link LineStringSegment}, {@link Arc} and * {@link Circle} */ private LineString getJTSLineString( Curve curve ) { Curve linearizedCurve = linearizer.linearize( curve, crit ); List<Coordinate> coordinates = new LinkedList<Coordinate>(); for ( CurveSegment segment : linearizedCurve.getCurveSegments() ) { for ( Point point : ( (LineStringSegment) segment ).getControlPoints() ) { coordinates.add( new Coordinate( point.get0(), point.get1() ) ); } } return jtsFactory.createLineString( coordinates.toArray( new Coordinate[coordinates.size()] ) ); }
/** * Returns a JTS geometry for the given {@link Ring} (which is linearized first). * * @param ring * {@link Ring} that consists of {@link LineStringSegment}, {@link Arc} and {@link Circle} segments only * @return linear JTS ring geometry, null if no * @throws IllegalArgumentException * if the given input ring contains other segment types than {@link LineStringSegment}, {@link Arc} and * {@link Circle} */ private LinearRing getJTSRing( Ring ring ) { Ring linearizedRing = (Ring) linearizer.linearize( ring, crit ); List<Coordinate> coordinates = new LinkedList<Coordinate>(); for ( Curve member : linearizedRing.getMembers() ) { for ( CurveSegment segment : member.getCurveSegments() ) { for ( Point point : ( (LineStringSegment) segment ).getControlPoints() ) { coordinates.add( new Coordinate( point.get0(), point.get1() ) ); } } } return jtsFactory.createLinearRing( coordinates.toArray( new Coordinate[coordinates.size()] ) ); }
List<CurveSegment> segments = curve.getCurveSegments(); CurveSegment[] linearSegments = new CurveSegment[segments.size()]; for ( int i = 0; i < linearSegments.length; i++ ) {
for ( CurveSegment curveSeg : curve.getCurveSegments() ) { exportCurveSegment( curveSeg );
LOG.debug( "Curve geometry. Testing for duplication of successive control points." ); int segmentIdx = 0; for ( CurveSegment segment : curve.getCurveSegments() ) { if ( segment.getSegmentType() == CurveSegmentType.LINE_STRING_SEGMENT ) { LineStringSegment lineStringSegment = (LineStringSegment) segment; Point lastSegmentEndPoint = null; segmentIdx = 0; for ( CurveSegment segment : curve.getCurveSegments() ) { Point startPoint = segment.getStartPoint(); if ( lastSegmentEndPoint != null ) {
case OrientableCurve: case Curve: { CurveSegment[] curveSegments = new CurveSegment[curve.getCurveSegments().size()]; int i = 0; for ( CurveSegment segment : curve.getCurveSegments() ) { curveSegments[i++] = transform( segment, trans );
private void traverseCurve( Curve c ) { CurveType ct = c.getCurveType(); switch ( ct ) { case CompositeCurve: for ( Curve member : ( (CompositeCurve) c ) ) { traverse( member ); } break; case Curve: case Ring: for ( CurveSegment segment : c.getCurveSegments() ) { traverseSegment( segment ); } break; case LineString: traversePoints( ( (LineString) c ).getControlPoints() ); break; case OrientableCurve: traverse( ( (OrientableCurve) c ).getBaseCurve() ); break; } }
List<CurveSegment> fixedSegments = new ArrayList<CurveSegment>( curve.getCurveSegments().size() ); for ( CurveSegment segment : curve.getCurveSegments() ) { fixedSegments.add( invertOrientation( segment ) );
switch ( curve.getCurveType() ) { case Curve: { List<CurveSegment> fixedSegments = new ArrayList<CurveSegment>( curve.getCurveSegments() ); CurveSegment lastSegment = fixedSegments.get( fixedSegments.size() - 1 ); if ( lastSegment.getSegmentType() == CurveSegmentType.LINE_STRING_SEGMENT ) {
public static Ring forceOrientation( Ring ring, boolean ccw ) { double shoelaceSum = 0; final List<Curve> curves = ring.getMembers(); for ( final Curve curve : curves ) { final List<CurveSegment> curveSegments = curve.getCurveSegments(); for ( final CurveSegment curveSegment : curveSegments ) { final CurveSegmentType segmentType = curveSegment.getSegmentType(); Points points; switch ( segmentType ) { case ARC_STRING: points = ( (ArcString) curveSegment ).getControlPoints(); case LINE_STRING_SEGMENT: points = ( (LineStringSegment) curveSegment ).getControlPoints(); for ( int i = 0; i < points.size(); i++ ) { final Point first = points.get( i ); final Point second = points.get( ( i + 1 ) % points.size() ); shoelaceSum += ( second.get0() - first.get0() ) * ( second.get1() + first.get1() ); } continue; default: LOG.warn( "Calculating orientation of " + segmentType.name() + " segments is not implemented yet. Ring orientation remains unchanged." ); return ring; } } } return shoelaceSum > 0 == ccw ? invertOrientation( ring ) : ring; }
List<CurveSegment> g = geometry.getCurveSegments(); int counter = 0; for ( CurveSegment c : g ) {