One thing I did was to create an array of features that I put into an in-memory feature class to be used in the Clip function.
pClippedFClass = Clip(CreateInMemoryFeatures(SubsetArray, "tempComparisonAOI", pFClass), pAnalysisExtentFClass, "in_memory\tempClip")
The array is built using this code
pFCursor = pFClass.Search(pQFilter, False)
pFeature = pFCursor.NextFeature
Counter = 0
ReDim SubsetArray(pFClass.FeatureCount(pQFilter) - 1)
Do Until pFeature Is Nothing
SubsetArray(Counter) = pFeature
Counter += 1
pFeature = pFCursor.NextFeature
Loop
These are the utility functions I used to build the in-memory feature class
Public Function CreateInMemoryFeatures(ByVal FeatureArray() As ESRI.ArcGIS.Geodatabase.IFeature, ByVal Name As String, ByVal pFeatureClass As ESRI.ArcGIS.Geodatabase.IFeatureClass) As ESRI.ArcGIS.Geodatabase.IFeatureClass
Dim pFClass As ESRI.ArcGIS.Geodatabase.IFeatureClass
Dim pBuffer As ESRI.ArcGIS.Geodatabase.IFeatureBuffer
Dim pFCursor As ESRI.ArcGIS.Geodatabase.IFeatureCursor
Try
pFClass = CreateInMemoryFeatureClass(Name, pFeatureClass)
If pFClass Is Nothing Then Return Nothing
pBuffer = pFClass.CreateFeatureBuffer
pFCursor = pFClass.Insert(True)
For Each pFeature As ESRI.ArcGIS.Geodatabase.IFeature In FeatureArray
For i As Integer = 0 To pFeature.Fields.FieldCount - 1
If pBuffer.Fields.Field(i).Type <> ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeOID Then pBuffer.Value(i) = pFeature.Value(i)
Next
pFCursor.InsertFeature(pBuffer)
Next
pFCursor.Flush()
Catch ex As Exception
System.Windows.Forms.MessageBox.Show(ex.ToString, "Create InMemory Feature error")
Finally
Release(pFCursor)
End Try
Return pFClass
End Function
Private Function CreateInMemoryFeatureClass(ByVal Name As String, ByVal pTemplateFClass As ESRI.ArcGIS.Geodatabase.IFeatureClass) As ESRI.ArcGIS.Geodatabase.IFeatureClass
Dim CreateFC As New ESRI.ArcGIS.DataManagementTools.CreateFeatureclass
Dim ShapeType As String
Dim dataset As ESRI.ArcGIS.Geodatabase.IDataset
Dim Result As ESRI.ArcGIS.Geoprocessing.IGeoProcessorResult2
Dim Path As String
Try
Using releaser As New ESRI.ArcGIS.ADF.ComReleaser
releaser.ManageLifetime(CreateFC)
Select Case pTemplateFClass.ShapeType
Case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint
ShapeType = "Point"
Case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline
ShapeType = "Line"
Case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon
ShapeType = "Polygon"
Case Else
Return Nothing
End Select
dataset = pTemplateFClass
Path = dataset.Workspace.PathName & "\" & dataset.Name
If dataset.Workspace.WorkspaceFactory.WorkspaceType = ESRI.ArcGIS.Geodatabase.esriWorkspaceType.esriFileSystemWorkspace Then
If TypeOf dataset.Workspace.WorkspaceFactory Is ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactory Then
Path = Path & ".shp"
End If
End If
If InStr(Path, "InMemory") <> 0 Then Path = Nothing
Dim pSR As ESRI.ArcGIS.Geometry.ISpatialReference3 = GetSpatialReferenceFromDataset(pTemplateFClass)
CreateFC.out_path = "in_memory"
CreateFC.out_name = Name
CreateFC.geometry_type = ShapeType
CreateFC.template = Path
CreateFC.spatial_reference = GetSpatialReferenceFromDataset(pTemplateFClass)
Result = RunTool(CreateFC, Nothing)
If Result Is Nothing Then
System.Windows.Forms.MessageBox.Show("Could not create InMemory dataset")
Return Nothing
End If
Return ReturnObjectfromResult(Result, "Feature Class")
End Using
Catch ex As Exception
System.Windows.Forms.MessageBox.Show(ex.ToString, "Create InMemory Featureclass error")
Return Nothing
End Try
End Function