code: 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);
  	}
docs: TODO: Nonlinearsegments