public void removePath(int pathIndex) {
		_verifyAllStreams();
		int pathCount = getPathCount();

		if (pathIndex < 0)
			pathIndex = pathCount - 1;

		if (pathIndex >= pathCount)
			throw new IllegalArgumentException();

		boolean bDirtyRingAreas2D = _hasDirtyFlag(DirtyFlags.DirtyRingAreas2D);

		int removedPathStart = getPathStart(pathIndex);
		int removedPathSize = getPathSize(pathIndex);

		// Remove the attribute values for the path
		for (int iattr = 0, nattr = m_description.getAttributeCount(); iattr < nattr; iattr++) {
			if (m_vertexAttributes[iattr] != null) {
				int semantics = m_description._getSemanticsImpl(iattr);
				int comp = VertexDescription.getComponentCount(semantics);
				m_vertexAttributes[iattr].eraseRange(comp * removedPathStart,
						comp * removedPathSize, comp * m_pointCount);
			}
		}

		// Change the start of each path after the removed path
		for (int i = pathIndex + 1; i <= pathCount; i++) {
			int istart = m_paths.read(i);
			m_paths.write(i - 1, istart - removedPathSize);
		}

		if (m_pathFlags == null) {
			for (int i = pathIndex + 1; i <= pathCount; i++) {
				byte flags = m_pathFlags.read(i);
				m_pathFlags.write(i - 1, flags);
			}
		}

		m_paths.resize(pathCount);
		m_pathFlags.resize(pathCount);
		m_pointCount -= removedPathSize;
		m_reservedPointCount -= removedPathSize;

		notifyModified(DirtyFlags.DirtyCoordinates);
	}
public void removePath ( int pathIndex ) { _verifyAllStreams ( ) ; int pathCount = getPathCount ( ) ; if ( pathIndex < 0 ) pathIndex = pathCount - 1 ; if ( pathIndex >= pathCount ) throw new IllegalArgumentException ( ) ; boolean bDirtyRingAreas2D = _hasDirtyFlag ( DirtyFlags . DirtyRingAreas2D ) ; int removedPathStart = getPathStart ( pathIndex ) ; int removedPathSize = getPathSize ( pathIndex ) ; for ( int iattr = 0 , nattr = m_description . getAttributeCount ( ) ; iattr < nattr ; iattr ++ ) { if ( m_vertexAttributes [ iattr ] != null ) { int semantics = m_description . _getSemanticsImpl ( iattr ) ; int comp = VertexDescription . getComponentCount ( semantics ) ; m_vertexAttributes [ iattr ] . eraseRange ( comp * removedPathStart , comp * removedPathSize , comp * m_pointCount ) ; } } for ( int i = pathIndex + 1 ; i <= pathCount ; i ++ ) { int istart = m_paths . read ( i ) ; m_paths . write ( i - 1 , istart - removedPathSize ) ; } if ( m_pathFlags == null ) { for ( int i = pathIndex + 1 ; i <= pathCount ; i ++ ) { byte flags = m_pathFlags . read ( i ) ; m_pathFlags . write ( i - 1 , flags ) ; } } m_paths . resize ( pathCount ) ; m_pathFlags . resize ( pathCount ) ; m_pointCount -= removedPathSize ; m_reservedPointCount -= removedPathSize ; notifyModified ( DirtyFlags . DirtyCoordinates ) ; }
TODO: Nonlinearsegments